• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
NoSQL数据库类型的介绍
发布日期:2016-4-25 13:4:48

  本文将向您介绍四大NoSQL数据库类型。

  有四大NoSQL类型:键值存储(key-value store),文件存储(document store),列导向的数据库(Column-Oriented Database)以及图形数据库(graph database)。每种类型都解决了传统关系数据库无法解决的问题。实际的实现往往是这些组合的组合。例如,结合NoSQL类型,Orientdb是一个多模式的数据库。Orientdb是图形数据库,每个节点都是一个文档。

  在进入不同的NoSQL数据库之前,让我们看看与关系数据库之间的比较。传统关系数据库正在努力的走向规范化:确保每一个数据都只存储一次。正规化标志着他们的结构设置。举个例子来说,如果你想把一个人和他的爱好存储为数据,那么你就可以建两个表:一个表存储为人,一个表存储他们的爱好。如下图所示,一个附加的表是必要的,因为他们存在着很多关系:一个人可以有多个爱好,然而一个爱好也可以有很多人喜欢。

  

  一个全面的关系数据库可以由许多实体和联系表。现在让我们看看NoSQL不同的类型的数据库之间的比较。

  KEY-VALUE STORES 键值存储

  键值存储是最复杂的NoSQL数据库。顾名思义,键值对的集合,如下图所示,这种简单性使得他们成为最可伸缩的NoSQL数据库类型,能够存储大量的数据。

  

  键值存储的值可以是任何东西:一个字符串,一个数字,而且也是一个新的键值对封装在一个对象。如下图显示了一个稍微复杂键值结构。关键值存储的例子有Redis、Voldemort、Riak和Amazon’s Dynamo。

  

  Column databases store列存储数据库

  行数据库实际上就是传统的关系数据库,每一行有一行id,并在一个表中存储的行中的每个字段。假设,关于爱好,没有额外的表来存储并且你只有一个表来描述人,如下图所示。注意,在这种情况下,你有轻微的反规范化,因为爱好是可以重复的。如果爱好这个信息是一个额外的信息,但是在你使用时并不是必不可少的,添加它作为一个列表内的爱好列是可以接受的方法。但是如果这些信息对一个单独的表来说是不够的,它应该被存储在所有的?

  

  每次你在行存据库中寻找某个数据,进行每行扫描,不管你需要哪列。假设你只需要生日在9月的列表。数据库将在表中从上到下和从左到右扫描所有数据,如下图所示,最终返回生日列表。

  

  索引数据在某些列可以显著提高查询速度,但是索引每一列带来额外的开销和数据库仍然是扫描所有列。

  Column databases store分别存储每一列,允许更快的扫描时,只涉及一小部分列。如下图所示:

  

  这个布局看起来很像一个以行为导向的数据库,每一列都有一个索引。一个数据库索引是一种数据结构,允许在存储空间上快速查找数据和额外的写(索引更新)。索引映射到数据的行数,而一个列数据库将数据映射到行数,这样计算变得更快,所以就很容易看到有多少人喜欢射箭。例如,单独存储的列也可以优化压缩,因为只有一个数据类型的表。

  那么,什么时候该使用Row-Oriented Database与Column-Oriented Database呢?在Column-Oriented Database中,很容易添加另一个列,因为不受它的影响。但是添加整个完整记录需要调整所有的表。这使得Row-Oriented Database更好于Column-Oriented Database在联机事务处理(OLTP)方面,因为他可以不断地添加或者更改记录。

  Column-Oriented Database在执行分析和报告时的表现: 求和值和计算条目。Row-Oriented Database通常是实际交易的操作数据库(如销售)。夜间批处理作业将用于数据库更新,支持客户快速查找和聚合使用MapReduce算法报告。例如column-family stores are Apache HBase、Facebook的Cassandra、Hypertable和the grandfather of wide-column stores、谷歌的 BigTable。

  DOCUMENT STORES 文档存储

  文档存储是键值存储的复杂性的一个步骤:一个文档存储库确实假定一个特定的文档结构,可以用一个模式来指定。文档存储出现最自然的NoSQL数据库类型中,因为它们用于存储日常文档,并且他们允许复杂的查询和计算,这往往已经成为了聚合形式的数据。在关系数据库中存储的方式是从一个正常化的角度来看,所有的一切都应该存储一次,并且通过外键连接。文件存储的关心小的正常化,只要数据是在一个结构是有意义的。关系数据模型并不总是适合某些业务案例。

  报纸或杂志,例如,包含文章。要把这些存储在关系数据库中,首先要把它们切碎:这篇文章正文在一个表中,作者和作者所有的信息,以及在一个网站上发表的文章的评论。如下图所示,报纸上一篇文章也可以存储为一个单一的实体,这就降低了对于习惯看到文章内容所消耗的时间。文档存储以MongoDB和CouchDB为例子。

  

  GRAPH DATABASES 图数据库

  最后一个大的NoSQL数据库类型是最复杂的一个,为了高效地存储实体之间的关系。数据是高度互联的,比如社会网络,科学论文引用,或资本资产集群,图形数据库的答案。图或者网络数据主要有2个组成部分:

  节点:实体本身。在社交网络中,这可能是人。

  边:实体间的关系。这种关系用一条线来表示,并且有它自己的特性。边可以有一个方向,例如,如果箭头表示谁是谁的老板。

  图可以变的非常复杂来给定足够的关系和实体类型。图8已经表明了复杂性,只有有限数量的实体。图数据库像Neo4j还声称坚持ACID,而文档存储和键值存储坚持BASE。

  

  这个可能性是无限的,因为世界正变得越来越互联,Graph databases可能会赢过其他类型的数据库,包括如今仍然占主导地位的关系数据库。