《NoSQL数据库类型》要点:
本文介绍了NoSQL数据库类型,希望对您有用。如果有疑问,可以联系我们。
本文摘自 Introducing Data Science,我们将向您介绍四大NoSQL数据库类型.
有四大NoSQL类型:键值存储(key-value store),文件存储(document store),列导向的数据库(Column-Oriented Database)和图形数据库(graph database).每种类型都办理了传统关系数据库无法办理的问题.实际的实现往往是这些组合的组合.例如,结合NoSQL类型,Orientdb是一个多模式的数据库.Orientdb是图形数据库,每个节点都是一个文档.
在进入不同的NoSQL数据库之前,让我们看看与关系数据库之间的比较.传统关系数据库正在努力的走向规范化:确保每一个数据都只存储一次.正规化标志着他们的结构设置.举个例子来说,如果你想把一个人和他的喜好存储为数据,那么你就可以建两个表:一个表存储为人,一个表存储他们的喜好.如图1所示,一个附加的表是必要的,因为他们存在着很多关系:一个人可以有多个喜好,然而一个喜好也可以有很多人喜欢.
图1
一个全面的关系数据库可以由许多实体和联系表.现在让我们看看NoSQL不同的类型的数据库之间的比拟.
行数据库实际上就是传统的关系数据库,每一行有一行id,并在一个表中存储的行中的每个字段.假设,关于喜好,没有额外的表来存储并且你只有一个表来描述人,如图2所示.注意,在这种情况下,你有轻微的反规范化,因为喜好是可以重复的.如果喜好这个信息是一个额外的信息,但在你使用时并不是必不可少的,添加它作为一个列表内的喜好列是可以接受的方法.但是如果这些信息对一个单独的表来说是不够的,它应该被存储在所有的?
图2
每次你在行存据库中寻找某个数据,进行每行扫描,不管你必要哪列.假设你只必要生日在9月的列表.数据库将在表中从上到下和从左到右扫描所有数据,如图3所示,最终返回生日列表.
图3
索引数据在某些列可以显著提高查询速度,但索引每一列带来额外的开销和数据库仍然是扫描所有列.
Column databases store分别存储每一列,允许更快的扫描时,只涉及一小部分列.见图4.
图4
这个布局看起来很像一个以行为导向的数据库,每一列都有一个索引.一个数据库索引是一种数据结构,允许在存储空间上快速查找数据和额外的写(索引更新).索引映射到数据的行数,而一个列数据库将数据映射到行数,这样计算变得更快,所以很容易看到有多少人喜欢射箭.例如,单独存储的列也可以优化压缩,因为只有一个数据类型的表.
那么,何时该使用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.
键值存储是最复杂的NoSQL数据库.顾名思义,键值对的集合,如图5所示,这种简单性使得他们成为最可伸缩的NoSQL数据库类型,能够存储大量的数据.
图5
键值存储的值可以是任何东西:一个字符串,一个数字,而且也是一个新的键值对封装在一个对象.如图6显示了一个稍微复杂键值结构.关键值存储的例子有Redis、Voldemort、Riak和Amazon’s Dynamo.
{"internal data":[{"entities":[ {"customer":[ {"id:1,"name":"Freddy"}, {"id:2,"name":"Fritz"} }], {"legal entities":[ {"id":1,"company":"Maiton"} ]}]},{"Products":[ {"furniture":[ {"id" :1,"name":"Octopus Table","stock":1} ]}]}]}
图6
文档存储是键值存储的复杂性的一个步骤:一个文档存储库确实假定一个特定的文档结构,可以用一个模式来指定.文档存储出现最自然的NoSQL数据库类型中,因为它们用于存储日常文档,并且他们允许复杂的查询和计算,这往往已经成为聚合形式的数据.在关系数据库中存储的方式是从一个正常化的角度来看,所有的一切都应该存储一次,并通过外键连接.文件存储的关心小的正常化,只要数据是在一个结构是有意义的.关系数据模型并不总是适合某些业务案例.
报纸或杂志,例如,包含文章.要把这些存储在关系数据库中,首先要把它们切碎:这篇文章正文在一个表中,作者和作者所有的信息,以及在一个网站上颁发的文章的评论.如图7所示,报纸上一篇文章也可以存储为一个单一的实体,这降低了对于习惯看到文章内容所消耗的时间.文档存储以MongoDB和CouchDB为例子.
图7
最后一个大的NoSQL数据库类型是最复杂的一个,为了高效地存储实体之间的关系.数据是高度互联的,如社会网络,科学论文引用,或资本资产集群,图形数据库的答案.图或网络数据主要有2个组成部分:
节点:实体自己.在社交网络中,这可能是人.
边:实体间的关系.这种关系用一条线来表示,并且有它本身的特性.边可以有一个方向,例如,如果箭头表示谁是谁的老板.
图可以变的非常复杂来给定足够的关系和实体类型.图8已经表明了复杂性,只有有限数量的实体.图数据库像Neo4j还声称保持ACID,而文档存储和键值存储保持BASE.
图8
这个可能性是无限的,因为世界正变得越来越互联,Graph databases可能会赢过其他类型的数据库,包含如今仍然占主导地位的关系数据库.排名最受欢迎的数据库和他们是如何进展可以点击:最新数据库排名
翻译:CSDN编纂孙思,关注数据库,欢迎加入CSDN 数据库讨论QQ群:123038767.寻求报道或投稿,请联系sunsi@csdn.net.
2016年3月18日-19日,由CSDN重磅打造的数据库核心技术与实战应用峰会、互联网应用架构实战峰会将在上海举行.这两场峰会将邀请业内顶尖的架构师和技术专家,共同探讨高可用/高并发系统架构设计、新技术应用、移动应用架构、微服务、智能硬件架构、云数据库实战、新一代数据库平台、产品选型、性能调优、大数据应用实战等领域的热点话题与技术.(报名参会)
维易PHP培训学院每天发布《NoSQL数据库类型》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/9332.html