NoSQL常见的4种数据模型的特点
小结
- 键值对存储模式
特点:Key-Value模式。在这种数据结构中,数据表中的每一个实际行只具有行键(Key)和数值(Value)两个基本内容。值可以看做一个单独的存储区域,可能是任何类型,甚至是数组。
在实际的软件实现中,每个值可能都有不同的列名,不同键所对应的值,可能是完全不同的内容(完全不同的列)。因此,表的结构(表中包含的列、其值域等)无法提前设计好,也就是说这种键值模式的表是无结构的。在应用时,相同的行键的行会被看做属于同一个逻辑上的行(类似于元组的概念)。
适合按照键对数据进行快速定位,还可通过对键进行排序和分区,以实现数据定位。但如果要实现对值的内容进行查找,则需要对全表进行遍历,在大数据场景下效率较低。
现实中,键值模式的NoSql数据库通常不会支持对值建立索引,因为值对应的列不确定。
比较的levelDB和Redi等。
2.文档式存储模式
特点:与键值存储模式有相似性,但其值一般是半结构化内容,需要通过某种半结构化标记语言进行描述。
和键值模式相比,文档式存储模式强调可以通过关键词查找查询文档内部的结构,而非只通过键来进行检索。
文档允许嵌套,因此可以将传统关系型数据库中需要Join查询的字段整合为一个文档,这种做法理论上会增加存储开销,但是会提高查询效率。在分布式系统中,Join查询的开销较大,文档式嵌套存储的优势更加明显。
有名的文档式数据库MongoBD和CouchDB等,这些数据库可以在分布式集群上实现文档式数据存储和管理。
文档式存储模式通常会采用JSON或类似的方式描述数据。一些基于列族模式的NoSql也会利用JSON描述应用层数据。
JSON是一种轻量级数据交换语言,对数据的组织方法和XML类似,独立于语言,具有自我描述性,以“:”间隔,前面是键后面是值,键需要用双引号包括。
3.列存储模式
特点:可以称为面向列的存储模式,以区别于关系型数据中面向行的存储模式,这种存储模式主要用在OLAP,数据仓库等场合。
面向行的存储模式中,数据以行(或记录)的方式整合到一起,数据行中的每一个字段都在一起存储。但在面向列的存储模式中,属于不同列或列族的数据在不同的文件中,这些文件能分布在不同的位置上,甚至是不同的节点上。
在执行某些查询时,列存储模式更加有效,例如,查询某个列的前1000行数据,此时数据库需要读取相应列的存储文件即可,不相关的列则不需要检索。如果采用关系型数据库,则相关行所有的字段都要被扫描或装载到内存中。上述处理方式对于检索行列数超大(如10亿条数据以上或儿千个列以上)的稀疏宽表非常有效。但如果数据量较小,则并不具备明显优势。
在面向行的模式中,数据表中的每行,所涉及的列或字段都是相同且不可分的。但在面向列的存储中,每行所涉及的列都可以是不同的。
例如在一一个n行m列的二维表中,每一行只在其中的一列有值,其他的列大多为空值,即这个表是稀疏的,必然出现大量的空值。在面向行的关系数据库中,如果出现空值,则数据库通常会预留空间以便后续有值写入,但这对于稀疏的宽表(列很多的表)则会造成存储的低效率。在面向列的存储中,如果出现空值,则数据库不会为其预留空间。如果执行INSERT或UPDATE操作,行存储则更加容易做修改和插入,因为会预先留存储空间,列存储则一般通过数据追加( Append)的方式实现。此外,利用列存储还可以通过数据字典的方式实现数据压缩。例如将某个列或某些列的值空间做成数据字典(表),在存储列值时,只需要存储数据字典中的值序号即可。
列存储模式般仍是不预先定义结构的,这一点和键值存储类似。 值得注意的是,列存储模式可能会通过“列族( column family )”的概念来组织数据,列族是若F列的集合,其数量和名称都是随意的。
比较有名的列存储数据库有谷歌的Big Table和Dremal,斯通●布拉克( M. Stonebraker )提出的C-Store等。此外,一些基 于文档和键值存储的数据库如Cassandra和HBase也同时运用了列存储的模式。
4.图存储模式
特点:图存储模式来源于图论中的拓扑学。图存储模式是一种专门存储 节点和边以及节点之间的连线关系的拓扑存储方法。节点和边都存在描述参数,边是矢量,即有方向的,可能是单向或双向的。例如,“李明的老师是张老师”,这个信息,可以将“李明”和“张老师”理解为节点,这两个节点存在一一个单向的关系“x 是y的老师”。这种拓扑关系类似于E-R图,但在图存储模式中,“关系”和节点本身就是数据,而在关系型数据库中,“关系”和E-R图描述的是数据结构。
拓扑图中般需要记录如下内容:节点(或称顶点)的ID和属性,节点之间的连线(或称边、关系),边的ID、方向和属性(例如转移函数等)。常见的点线拓扑关系有网页之间的链接关系,社交网络中的关注与转发关系等。
在图存 储模式中,每个节点都需要有指向其所有相连对象的指针,以实现快速的路由。因此图存储模式比传统维表模式更容 易实现路径的检索和处理。此外,由于图数据库中的节点都是相互连接的,因此对数据进行分片和分布式部署较为困难。
图存储可以 用在搜索引擎排序、社交网络分析和推荐系统等领域。常见的图存储数据库(或者图结构分析引擎)有Neo4J以及Apache Spark的GraphX模块等。
相关文章