常见非关系型数据库
ElasticSearch
- 面向文档存储
- 文档可序列化成JSON,支持嵌套
- 存在index,index=文档的集合
- 存储和构建索引能力依赖Lucene引擎
- 实现了大量搜索数据结构&算法
- 支持Restful API,也支持弱SQL交互
mongoDB
- 面向文档存储
- 文档可序列化成JSON/BSON,支持嵌套
- 存在collection, collection=文档的集合
- 存储和构建索引能力依赖wiredTiger引擎
- 4.0后开始支持事务(多文档、跨分片多文档等)
- 常用client/SDK交互,可通过插件转译支持弱SQL
Redis
- 数据结构丰富(hash表、set、zset、list)
- C语言实现,性能超高
- 主要基于内存,但支持AOF/RDB持久化
- 常用redis-cli/多语言SDK交互
vs关系型数据库
-
优势:
- 可扩展性:非关系型数据库在处理大规模数据时通常更容易扩展。它们能够处理分布式环境下的海量数据,而无需对现有架构进行大幅改动。
- 高性能:非关系型数据库的设计通常针对特定的用例,能够提供更高的性能。它们经常采用更简单的数据模型,避免了复杂的关系代数运算和连接操作。
- 灵活的数据模型:非关系型数据库支持各种不同的数据模型,如键值对、文档、列族和图形等。这种灵活性使得非关系型数据库适用于不同类型的数据,而无需事先定义固定的表结构。
- 大数据处理:非关系型数据库通常更适合处理半结构化和非结构化数据,如日志文件、传感器数据和社交媒体数据等。它们能够处理复杂的数据类型和数据模式,而无需严格的数据模式定义。
-
劣势:
- 缺乏事务支持:一些非关系型数据库在设计上牺牲了ACID(原子性、一致性、隔离性和持久性)事务的支持。这意味着在某些情况下,非关系型数据库可能会在数据一致性和完整性方面受到限制。
- 缺乏标准化:与关系型数据库相比,非关系型数据库的标准化程度较低。由于缺乏统一的查询语言和数据模型,开发人员可能需要针对每种不同的非关系型数据库使用特定的API和查询语言。
- 较少的成熟工具和支持:相对于关系型数据库,非关系型数据库的生态系统可能较小。这意味着在开发、监控和管理方面,可能缺乏成熟的工具和广泛的支持。
- 数据一致性的挑战:在某些非关系型数据库中,保持数据的一致性可能是一个挑战。由于数据的复制和分布性,一些非关系型数据库在面对网络分区和故障恢复时可能无法提供强一致性。