6.5- NoSQL数据库 - 特点、分类、体系框架
总结:
一、特点
1. 易扩展性(Scalability)
NoSQL支持 水平扩展,通过添加服务器提升容量和性能,而非依赖单一服务器。其 分布式架构 能在多个节点间分散存储和计算,适合大规模数据处理。
示例:Cassandra (一个分布式列式数据库)在社交平台上存储用户帖子,随着用户增长,自动将数据分布到多个服务器,确保快速访问。
2. 高性能(High Performance)
NoSQL数据库通过简化模型和去除复杂的关系操作,通常在大数据场景下提供更高的读写性能。例如,Redis基于内存工作,读写速度极快,适合缓存和实时处理任务。
举例:Redis 是一个基于内存的键值对存储数据库,在线游戏中,Redis可以用来存储玩家的排行榜数据,由于其高性能,排行榜的更新和查询可以在毫秒级完成,确保玩家实时看到排名变化。
3. 灵活的数据模型
无固定表结构:数据结构不固定,可以灵活变化,且可以随意添加修改字段,适合处理快速变化的业务需求。
4. 高可用性和容错性
NoSQL通过 自动分片和数据复制 实现高可用性,即使某个节点故障,数据可从其他节点恢复,确保系统持续运行。其 分布式架构 提供了强大的容灾恢复能力,特别是跨数据中心的多副本策略。
示例:Couchbase支持数据复制和自动故障恢复。当节点故障时,它会自动切换到其他节点,确保广告系统等应用不中断。
二、分类
根据数据存储结构的不同,NoSQL数据库大致可以分为以下四类
NoSQL类型 | 数据结构 | 特点 | 示例产品 |
列式存储数据库 | 列(列族)存储 | 数据按列存储,适合海量分布式数据,支持快速查询和大规模数据分析 | Cassandra, HBase, Scylla |
键值存储数据库 | 键-值对 | 使用哈希表存储,读写速度快,适合简单数据存储;不擅长复杂查询 | Redis, DynamoDB, Riak, Voldemort |
文档型数据库 | JSON/BSON等文档格式 | 存储半结构化数据,支持嵌套结构,适合处理复杂的数据,如网页和内容管理系统 | MongoDB, CouchDB, SequoiaDB |
图数据库 | 节点-边模型 | 通过图结构存储和管理数据,擅长处理数据关系,适合社交网络、推荐系统等场景 | Neo4j, ArangoDB, JanusGraph |
1、列式存储数据库
- 特点:数据按列存储,而不是按行存储。适合处理海量分布式数据。键指向多个列,列由列家族组织。
- 应用场景:高效处理大规模数据的查询,特别是在分布式环境下。
- 代表产品:Cassandra、HBase、Riak。
用户ID 列: 1, 2, 3, 4
姓名 列: Alice, Bob, Charlie, Diana
年龄 列: 25, 30, 22, 28
2、键值对存储数据库
- 特点:通过哈希表存储键值对,键指向一个特定数据。结构简单,易于部署,但在只对部分值查询时效率较低。
- 应用场景:缓存、会话管理、用户偏好存储等场景。
- 代表产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB。
"session1": {"user": "Alice", "cart": ["book", "pen"], "total": 35.0}
"session2": {"user": "Bob", "cart": ["laptop", "mouse"], "total": 950.0}
3、文档型数据库
- 特点:基于键值存储,但允许存储更复杂的嵌套数据,如JSON。适合处理半结构化数据。
- 应用场景:复杂数据查询与管理,如网页内容存储、内容管理系统等。
- 代表产品:CouchDB、MongoDB、SequoiaDB。
{"user_id": "1","name": "Alice",
},
{"user_id": "2","address": {"city": "San Francisco"}
}
4、图数据库
- 特点:采用图结构存储数据,能够有效处理节点及其之间的复杂关系。通常用于建模社交网络、生物信息网络等需要复杂关系表示的数据。
- 应用场景:社交网络、推荐系统、路径优化等。
- 代表产品:Neo4J、InfoGrid、Infinite Graph。
三、体系框架
-
数据持久层:定义数据的存储方式,有基于内存、硬盘、内存+硬盘结合、可插拔存储形式。
- 基于内存:速度最快,但易丢失数据。
- 基于硬盘:保存久但速度较慢。
- 内存+硬盘结合:兼具速度和数据安全。
- 可插拔:提供灵活的存取机制。
-
数据分布层:定义数据的分布方式,主要支持:
- CAP模型:实现水平扩展。
- 多数据中心:支持跨数据中心的平稳运行。
- 动态部署:可在运行时动态添加或删除节点。
-
数据逻辑层:描述数据的逻辑表现形式,抽象数据模型。
-
接口层:为应用提供多种接口,支持Rest、Thrift、Map/Reduce、Get/Put、特定语言API等,使数据调用更加灵活方便。
这种分层架构提供了极大的灵活性,不同NoSQL数据库可以在各层面支持多种特性。