技术开发 频道

NoSQL数据库中“四大天王”简介及分析

  【IT168 评论】NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。

  目前大家基本认同将NoSQL数据库分为四大类:键值存储数据库,文档型数据库,列存储数据库和图形数据库,其中每一种类型的数据库都能够解决关系型数据不能解决的问题。在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体,例如OrientDB就是兼具文档数据库的灵活性和图形数据库管理链接能力的文档-图形数据库管理系统,它是图形数据库,但其中每个节点又都是文档。

  在正式介绍NoSQL数据库之前,我们先来看看关系型数据库,关系型数据库正努力向规范化看齐,确保每个数据块只存储一次,例如你要存储一个人的信息和他的兴趣爱好,这时你需要建立两个表来分别存储基本信息和兴趣爱好。从下图我们可以看出,除了这两个表之外,还需另外建立一个表把这两个表关联起来,

  信息表和爱好表之间的关系是多对多,一个人可以有多个兴趣爱好,一个兴趣爱好也可以有多个人来练习。

NoSQL数据库中“四大天王”简介及分析

  列存储数据库

  传统的关系数据库是行存储的,每行具有一个行id,并且行中的每个字段存储在表中。 比方说,如果你要查询一个人的兴趣爱好时,这时你需要将信息表和爱好表关联起来,如下图所示,请注意在这种情况下你有轻微的反规范化,因为爱好可以重复。 如果爱好信息只是一个额外的信息,并不是你的用例的必要条件,那么把它作为一列添加到表中也未尝不可。但如果某个信息的重要性不足以单独建立一个表,那么它还应该建表存储吗?

NoSQL数据库中“四大天王”简介及分析

  在基于行存储的数据库中查询时,无论你需要哪一列都需要将每一行扫描完。假设你想要在下图中的生日列表中查询9月份生日,数据库将会从上到下和从左到右扫描表,最终返回生日为9月的列表。

NoSQL数据库中“四大天王”简介及分析

  如果给某些特定列建索引,那么可以显着提高查找速度,但是索引会带来额外的开销,数据库仍在扫描所有列。

  而基于列存储的数据库可以分别存储每个列,从而可以在列数较少的情况下更快速地进行扫描; 

NoSQL数据库中“四大天王”简介及分析

  上图的布局看起来和行存储的数据库很相似,每一列都有一个索引。数据库索引是一种数据结构,允许以存储空间和额外写入(索引更新)为代价快速查找数据。 索引将行号映射到数据,列数据库将数据映射到行号,采用这种方式计数变得更快,很容易就可以查询到某个项目的爱好人数,并且每个表都只有一种数据类型,所以单独存储列也利于优化压缩。

  那么什么时候适合使用行存储数据库,什么时候有适合使用列存储数据库呢?列存储数据库能够在其他列不受影响的情况下,轻松添加一列。 在面向列的数据库中,很容易添加另一列,但是如果要添加一条记录时那么就需要访问所有表。所以行存储数据库要比列存储数据库适合联机事务处理过程(OLTP),因为OLTP要频繁的进行记录的添加或修改。

  列存储数据库更适合执行分析操作,如进行汇总或计数。实际交易的事务如销售类的通常会选择行存储数据库,列存储数据库采用高级查询执行技术以简化的方法处理列块(称为“批处理”),从而减少CPU使用率,支持MapReduce算法。

  键值存储数据库

  键值存储数据库是NoSQL数据库中最简单的,顾名思义,它是一个键值对的集合,能够存储大量数据,它的这种简单性也让它成为NoSQL中最具扩展性的数据库类型。

NoSQL数据库中“四大天王”简介及分析
▲键值存储将所有内容存储为键和值。

  键值存储中的值可以是任何值,字符串、数字,甚至还可以是封装在对象中的新的键值对,下图是较为复杂的键值结构:

NoSQL数据库中“四大天王”简介及分析
▲键值嵌套结构。

  文档型数据库

  文档存储是键值存储的复杂性的一个步骤:文档存储库可以使用模式来指定某个文档结构。文档存储是NoSQL数据库类型中出现的最自然的类型,因为它们是按照日常文档的存储来设计的,并且允许对这些数据进行复杂的查询和计算。从关系数据库存储方式的角度来看,每一个事物都应该存储一次,并且通过外键连接。而文件存储不关心规范化,只要数据存储在一个有意义的结构中就可以,所以文件存储数据库有自己的适用范围。

NoSQL数据库中“四大天王”简介及分析

  如果我们要将报纸或杂志中的文章存储到关系型数据库中,首先我们要对存储的信息进行分类,文章放在一个表中,作者和相关信息放在一个表中,文章评论放在一个表中,读者信息放在一个表中,然后将这四个表连接起来进行查询。但是文档存储可以将文章存储为单个实体,这样就降低了用户对文章数据的认知负担。

  图形数据库

  图形数据库是NoSQL数据库类型中最复杂的一个,旨在以高效的方式存储实体来之间的关系。图形数据库适用于高度互连的数据,尤其是社交网络,科学论文引用或是资本资产集群。

  图形或网络数据有两个主要组成部分:

  节点:实体本身,如果是在社交网络中,那么代表的就是人。

  边:两个实体之间的关系,这种关系用线来表示,并具有自己的属性。另外边还可以有方向,如果箭头指向谁,谁就是老板。

  如果给定的实体类型和关系很多,那么图就有可能变得非常复杂。下图的实体数量已经很少了,但是我们看到它已经比较复杂了。图形数据库如Neo4j支持ACID,而文档存储和键值存储支持BASE。

NoSQL数据库中“四大天王”简介及分析

  DB-Engines 最近发布了 2016年12月份的数据库排名,我们可以看到排名前十的数据库关系型数据库占据了7位,Oracle虽然一直占据首位,但是我们可以看到,与去年同期相比,它的得分下降了93.15,而非关系型数据库的得分与去年同期相比都有不同程度的提高,所以我们有理由相信NoSQL数据库的未来是大有可为的。

NoSQL数据库中“四大天王”简介及分析


2
相关文章