引
本章关键字:
- 关系数据库,文档数据库,图形数据库等数据模型,讨论各类数据模型描述一对多、多对多关系的能力以及如何通过抽象来隐藏复杂度。
- 查询语言, 讨论如何基于数据模型做各种操作(例:添加新列,添加索引,结合查询,模拟其他数据模型等)以及执行操作的效率与难易度。
SQL与RDBMS
在关系模型中,数据被组织成关系(SQL中称作表),其中每个关系是元组(SQL中称作行)的无序集合。
NoSQL
NoSQL意味不仅是SQL(Not Only SQL)。它并非任何特定的技术,而泛指非关系型的数据模型。包括但不限:
- 列族数据库,按列存储数据。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩等批量数据处理,对针对某一列或者某几列的查询有非常大的IO优势。如HBase, BigTable等。
- 文档数据库,将诸如JSON,XML等半结构化数据存储为文档。与传统关系数据库不同的是,每个 NoSQL 文档的架构是不同的(不限定数据模式),更加灵活地整理和存储应用程序数据并减少可选值所需的存储。如MongoDB,CouchDB等。
- 键值数据库,可以简单看作哈希表,数据仅可能通过主键访问,不能对Value进行索引和查询。适用于缓存等存在大量写入操作的场景。如Redis,Memcached等。
- 图数据库,描述节点和关系的抽象。主要应用于社交关系,知识图谱等关联分析的应用场景。如Neo4J等。
采用NoSQL数据库的背后有几个驱动因素,其中包括:
- 需要比关系数据库更好的可伸缩性,包括非常大的数据集或非常高的写入吞吐量。
- 相比商业数据库产品,免费和开源软件更受偏爱。
- 关系模型不能很好地支持一些特殊的查询操作。
- 受挫于关系模型的限制性,渴望一种更具多动态性与表现力的数据模型。