logo
Database Design

NoSQL database

NoSQL 类型与特性

NoSQL 是键-值 database文档型 database列型 database图 database的统称。database 是非规范化的,表联结大多在应用程序代码中完成。大多数 NoSQL 无法实现真正符合 ACID 的事务,支持最终一致

BASE 通常被用于描述 NoSQL database 的特性。相比 CAP 理论,BASE 强调 availability 超过 consistency。

  • 基本可用 - 系统保证 availability。
  • 软状态 - 即使没有输入,系统状态也可能随着时间变化。
  • 最终 consistency - 经过一段时间之后,系统最终会变一致,因为系统在此期间没有收到任何输入。

除了在 SQL 还是 NoSQL 之间做选择,了解哪种类型的 NoSQL database 最适合你的用例也是非常有帮助的。我们将在下一节中快速了解下 键-值存储文档型存储列型存储图存储database。

键-值存储

抽象模型:哈希表

键-值存储通常可以实现 O(1) 时间读写,用内存或 SSD 存储数据。数据存储可以按字典顺序维护键,从而实现键的高效检索。键-值存储可以用于存储元数据。

键-值存储 performance 很高,通常用于存储简单数据模型或频繁修改的数据,如存放在内存中的 cache。键-值存储提供的操作有限,如果需要更多操作,复杂度将转嫁到应用程序层面。

键-值存储是如文档存储,在某些情况下,甚至是图存储等更复杂的存储系统的基础。

来源及延伸阅读

文档类型存储

抽象模型:将文档作为值的键-值存储

文档类型存储以文档(XML、JSON、二进制文件等)为中心,文档存储了指定对象的全部信息。文档存储根据文档自身的内部结构提供 API 或查询语句来实现查询。请注意,许多键-值存储 database 有用值存储元数据的特性,这也模糊了这两种存储类型的界限。

基于底层实现,文档可以根据集合、标签、元数据或者文件夹组织。尽管不同文档可以被组织在一起或者分成一组,但相互之间可能具有完全不同的字段。

MongoDB 和 CouchDB 等一些文档类型存储还提供了类似 SQL 语言的查询语句来实现复杂查询。DynamoDB 同时支持键-值存储和文档类型存储。

文档类型存储具备高度的灵活性,常用于处理偶尔变化的数据。

来源及延伸阅读:文档类型存储

列型存储


资料来源: SQL 和 NoSQL,一个简短的历史

抽象模型:嵌套的 ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>> 映射

类型存储的基本数据单元是列(名/值对)。列可以在列族(类似于 SQL 的数据表)中被分组。超级列族再分组普通列族。你可以使用行键独立访问每一列,具有相同行键值的列组成一行。每个值都包含版本的时间戳用于解决版本冲突。

Google 发布了第一个列型存储 database Bigtable,它影响了 Hadoop 生态系统中活跃的开源 database HBase 和 Facebook 的 Cassandra。像 BigTable,HBase 和 Cassandra 这样的存储系统将键以字母顺序存储,可以高效地读取键列。

列型存储具备高 availability 和高 scalability。通常被用于大数据相关存储。

来源及延伸阅读:列型存储

图 database


资料来源:图database

抽象模型: 图

在图 database 中,一个节点对应一条记录,一个弧对应两个节点之间的关系。图 database 被优化用于表示外键繁多的复杂关系或多对多关系。

图 database 为存储复杂关系的数据模型,如社交网络,提供了很高的 performance。它们相对较新,尚未广泛应用,查找开发工具或者资源相对较难。许多图只能通过 REST API 访问。

相关资源和延伸阅读:图

来源及延伸阅读:NoSQL

相关练习题

NoSQL database

暂无相关练习题