NoSQL技术研究汇总

NoSQL技术研究汇总
NoSQL技术研究汇总

NoSQL技术研究汇总

仅供个人研究,版权属于原作者

颜开

v0.2

2010.2

1.序

2.思想篇

1.CAP

2.最终一致性

1.变体

3.BASE

4.其他

1.I/O的五分钟法则

2.不要删除数据

3.RAM是硬盘,硬盘是磁带

4.Amdahl定律和Gustafson定律

5.万兆以太网

3.手段篇

1.一致性哈希

1.亚马逊的现状

2.算法的选择

2.Quorum NRW

3.Vector clock

4.Virtual node

5.gossip

1.Gossip(State Transfer Model)

2.Gossip(Operation Transfer Model)

6.Merkle tree

7.Paxos

1.背景

8.DHT

9.Map Reduce Execution

10.Handling Deletes

11.存储实现

12.节点变化

13.列存

1.描述

2.特点

4.软件篇

1.亚数据库

1.MemCached

1.特点

2.内存分配

3.缓存策略

4.缓存数据库查询

5.数据冗余与故障预防

6.Memcached客户端(mc)

7.缓存式的Web应用程序架构

8.性能测试

2.dbcached

1.Memcached和dbcached在功能上一样吗?

2.列存系列

1.Hadoop之Hbase

2.耶鲁大学之HadoopDB

3.GreenPlum

4.FaceBook之Cassandra

1.Cassandra特点

2.Keyspace

3.Column family(CF)

4.Key

5.Column

6.Super column

7.Sorting

8.存储

9.API

5.Google之BigTable

6.Yahoo之PNUTS

1.特点

2.PNUTS实现

1.Record-level mastering记录级别主节点

2.PNUTS的结构

3.Tablets寻址与切分

4.Write调用示意图

3.PNUTS感悟

7.微软之SQL数据服务

3.非云服务竞争者

4.文档存储

1.CouchDB

1.特性

2.Riak

3.MongoDB

4.Terrastore

5.ThruDB

5.Key Value/Tuple存储

1.Amazon之SimpleDB

2.Chordless

3.Redis

4.Scalaris

5.Tokyo cabinet/Tyrant

6.CT.M

7.Scalien

8.Berkley DB

9.MemcacheDB

10.Mnesia

11.LightCloud

12.HamsterDB

13.Flare

6.最终一致性Key Value存储

1.Amazon之Dynamo

1.功能特色

2.架构特色

2.BeansDB

1.简介

2.更新

3.特性

4.性能

3.Nuclear

1.两个设计上的Tips

4.Voldemort

5.Dynomite

6.Kai

7.未分类

1.Skynet

2.Drizzle

8.比较

1.可扩展性

2.数据和查询模型

3.持久化设计

5.应用篇

1.eBay架构经验

2.淘宝架构经验

3.Flickr架构经验

4.Twitter运维经验

1.运维经验

1.Metrics

2.配置管理

3.Darkmode

4.进程管理

5.硬件

2.代码协同经验

1.Review制度

2.部署管理

3.团队沟通

3.Cache

5.云计算架构

6.反模式

1.单点失败(Single Point of Failure)

2.同步调用

3.不具备回滚能力

4.不记录日志

5.无切分的数据库

6.无切分的应用

7.将伸缩性依赖于第三方厂商

7.OLAP

1.OLAP报表产品最大的难点在哪里?8.NOSQL们背后的共有原则

1.假设失效是必然发生的

2.对数据进行分区

3.保存同一数据的多个副本

4.动态伸缩

5.查询支持

6.使用Map/Reduce处理汇聚

7.基于磁盘的和内存中的实现

8.仅仅是炒作?

6.附

1.感谢

2.版本志

3.引用

日前国内没有一套比较完整的NoSQL数据库资料,有很多先驱整理发表了很多,但不是很系统。不材尝试着将各家的资料整合一下,并书写了一些自己的见解。

本书写了一些目前的NoSql的一些主要技术,算法和思想。同时列举了大量的现有的数据库实例。读完全篇,相信读者会对NoSQL数据库了解个大概。

另外我还准备开发一个开源内存数据库galaxydb.本书也是为这个数据库提供一些架构资料。

思想篇

CAP,BASE和最终一致性是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储了理论依据。这个是一切的源头。

CAP

?C:C onsistency一致性

?A:A vailability可用性(指的是快速获取数据)

?P:Tolerance of network P artition分区容忍性(分布式)

10年前,Eric Brewer教授指出了著名的CAP理论,后来Seth Gilbert和Nancy lynch两人证明了CAP理论的正确性。CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。

熊掌与鱼不可兼得也。关注的是一致性,那么您就需要处理因为系统不可用而导致的写操作失败的情况,而如果您关注的是可用性,那么您应该知道系统的read操作可能不能精确的读取到write操作写入的最新值。因此系统的关注点不同,相应的采用的策略也是不一样的,只有真正的理解了系统的需求,才有可能利用好CAP理论。

作为架构师,一般有两个方向来利用CAP理论

1.key-value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。

2.领域模型+分布式缓存+存储(Qi4j和NoSql运动),可根据CAP三原则结合自己项目定制灵活的分布式

方案,难度高。

我准备提供第三种方案:实现可以配置CAP的数据库,动态调配CAP。

?CA:传统关系数据库

?AP:key-value数据库

而对大型网站,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着A、P的方向设计,然后通过其它手段保证对于一致性的商务需求。架构设计师不要精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。不同数据对于一致性的要求是不同的。举例来讲,用户评论对不一致是不敏感的,可以容忍相对较长时间的不一致,这种不一致并不会影响交易和用户体验。而产品价格数据则是非常敏感的,通常不能容忍超过10秒的价格不一致。

CAP理论的证明:Brewer's CAP Theorem

最终一致性

一言以蔽之:过程松,结果紧,最终结果必须保持一致性

为了更好的描述客户端一致性,我们通过以下的场景来进行,这个场景中包括三个组成部分:

?存储系统

存储系统可以理解为一个黑盒子,它为我们提供了可用性和持久性的保证。

?Process A

ProcessA主要实现从存储系统write和read操作

?Process B和ProcessC

ProcessB和C是独立于A,并且B和C也相互独立的,它们同时也实现对存储系统的write和read操作。

下面以上面的场景来描述下不同程度的一致性:

?强一致性

强一致性(即时一致性)假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值?弱一致性

假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,B,C读取到最新值这一段时间。

?最终一致性

最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,B,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。

变体

?Causal consistency(因果一致性)

如果Process A通知Process B它已经更新了数据,那么Process B的后续读取操作则读取A写入的最新值,而与A 没有因果关系的C则可以最终一致性。

?Read-your-writes consistency

如果Process A写入了最新的值,那么Process A的后续操作都会读取到最新值。但是其它用户可能要过一会才可以看到。

?Session consistency

此种一致性要求客户端和存储系统交互的整个会话阶段保证Read-your-writes consistency.Hibernate的session 提供的一致性保证就属于此种一致性。

?Monotonic read consistency

此种一致性要求如果Process A已经读取了对象的某个值,那么后续操作将不会读取到更早的值。

?Monotonic write consistency

此种一致性保证系统会序列化执行一个Process中的所有写操作。

BASE

说起来很有趣,BASE的英文意义是碱,而ACID是酸。真的是水火不容啊。

?Basically Availble--基本可用

?Soft-state--软状态/柔性事务

"Soft state"可以理解为"无连接"的,而"Hard state"是"面向连接"的

?Eventual Consistency--最终一致性

最终一致性,也是是ACID的最终目的。

BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:Basically Available基本可用。支持分区失败(e.g.sharding碎片划分数据库)Soft state软状态状态可以有一段时间不同步,异步。Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一致。

BASE思想的主要实现有

1.按功能划分数据库

2.sharding碎片

BASE思想主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。

其他

I/O的五分钟法则

在1987年,Jim Gray与Gianfranco Putzolu发表了这个"五分钟法则"的观点,简而言之,如果一条记录频繁被访问,就应该放到内存里,否则的话就应该待在硬盘上按需要再访问。这个临界点就是五分钟。看上去像一条经验性的法则,实际上五分钟的评估标准是根据投入成本判断的,根据当时的硬件发展水准,在内存中保持1KB的数据成本相当于硬盘中存据400秒的开销(接近五分钟)。这个法则在1997年左右的时候进行过一次回顾,证实了五分钟法则依

然有效(硬盘、内存实际上没有质的飞跃),而这次的回顾则是针对SSD这个"新的旧硬件"可能带来的影响。

随着闪存时代的来临,五分钟法则一分为二:是把SSD当成较慢的内存(extended buffer pool)使用还是当成较快的硬盘(extended disk)使用。小内存页在内存和闪存之间的移动对比大内存页在闪存和磁盘之间的移动。在这个法则首次提出的20年之后,在闪存时代,5分钟法则依然有效,只不过适合更大的内存页(适合64KB的页,这个页大小的变化恰恰体现了计算机硬件工艺的发展,以及带宽、延时)。

不要删除数据

Oren Eini(又名Ayende Rahien)建议开发者尽量避免数据库的软删除操作,读者可能因此认为硬删除是合理的选择。作为对Ayende文章的回应,Udi Dahan强烈建议完全避免数据删除。

所谓软删除主张在表中增加一个IsDeleted列以保持数据完整。如果某一行设置了IsDeleted标志列,那么这一行就被认为是已删除的。Ayende觉得这种方法“简单、容易理解、容易实现、容易沟通”,但“往往是错的”。问题在于:

删除一行或一个实体几乎总不是简单的事件。它不仅影响模型中的数据,还会影响模型的外观。所以我们才要有外键去确保不会出现“订单行”没有对应的父“订单”的情况。而这个例子只能算是最简单的情况。……

当采用软删除的时候,不管我们是否情愿,都很容易出现数据受损,比如谁都不在意的一个小调整,就可能使“客户”的“最新订单”指向一条已经软删除的订单。

如果开发者接到的要求就是从数据库中删除数据,要是不建议用软删除,那就只能硬删除了。为了保证数据一致性,开发者除了删除直接有关的数据行,还应该级联地删除相关数据。可Udi Dahan提醒读者注意,真实的世界并不是级联的:

假设市场部决定从商品目录中删除一样商品,那是不是说所有包含了该商品的旧订单都要一并消失?再级联下去,这些订单对应的所有发票是不是也该删除?这么一步步删下去,我们公司的损益报表是不是应该重做了?

没天理了。

问题似乎出在对“删除”这词的解读上。Dahan给出了这样的例子:

我说的“删除”其实是指这产品“停售”了。我们以后不再卖这种产品,清掉库存以后不再进货。以后顾客搜索商品或者翻阅

目录的时候不会再看见这种商品,但管仓库的人暂时还得继续管理它们。“删除”是个贪方便的说法。

他接着举了一些站在用户角度的正确解读:

订单不是被删除的,是被“取消”的。订单取消得太晚,还会产生花费。

员工不是被删除的,是被“解雇”的(也可能是退休了)。还有相应的补偿金要处理。

职位不是被删除的,是被“填补”的(或者招聘申请被撤回)。

在上面这些例子中,我们的着眼点应该放在用户希望完成的任务上,而非发生在某个

实体身上的技术动作。几乎在所有的情况下,需要考虑的实体总不止一个。

为了代替IsDeleted标志,Dahan建议用一个代表相关数据状态的字段:有效、停用、取消、弃置等等。用户可以借助这样一个状态字段回顾过去的数据,作为决策的依据。

删除数据除了破坏数据一致性,还有其它负面的后果。Dahan建议把所有数据都留在数据库里:“别删除。就是别

删除。”

RAM是硬盘,硬盘是磁带

Jim Gray在过去40年中对技术发展有过巨大的贡献,“内存是新的硬盘,硬盘是新的磁带”是他的名言。“实时”Web应用不断涌现,达到海量规模的系统越来越多,这种后浪推前浪的发展模式对软硬件又有何影响?

Tim Bray早在网格计算成为热门话题之前,就讨论过以RAM和网络为中心的硬件结构的优势,可以用这种硬件建立比磁盘集群速度更快的RAM集群。

对于数据的随机访问,内存的速度比硬盘高几个数量级(即使是最高端的磁盘存储系统也只是勉强达到1,000次寻道/秒)。其次,随着数据中心的网络速度提高,访问内存的成本更进一步降低。通过网络访问另一台机器的内存比访问磁盘成本更低。就在我写下这段话的时候,Sun的Infiniband产品线中有一款具备9个全互联非阻塞端口交换机,每个端口的速度可以达到30Gbit/sec!Voltaire产品的端口甚至更多;简直不敢想象。(如果你想了解这类超高性能网络的最新进展,请关注Andreas Bechtolsheim在Standford开设的课程。)

各种操作的时间,以2001年夏季,典型配置的1GHz个人计算机为标准:

执行单一指令1纳秒

从L1高速缓存取一个字2纳秒

从内存取一个字10纳秒

从磁盘取连续存放的一个字200纳秒

磁盘寻址并取字8毫秒

以太网2GB/s

Tim还指出Jim Gray的

名言中后半句所阐述的真理:“对于随机访问,硬盘慢得不可忍受;但如果你把硬盘当成磁带来用,它吞吐连续数据的速率令人震惊;它天生适合用来给以RAM为主的应用做日志(logging and journaling)。”

时间闪到几年之后的今天,我们发现硬件的发展趋势在RAM和网络领域势头不减,而在硬盘领域则止步不前。Bill McColl

Dare Obsanjo指出如果不把这句真言当回事,会带来什么样的恶劣后果——也就是Twitter正面临的麻烦。论及Twitter的内容管理,Obsanjo说,“如果一个设计只是简单地反映了问题描述,你去实现它就会落入磁盘I/O的地狱。不管你用Ruby on Rails、Cobol on Cogs、C++还是手写汇编都一样,读写负载照样会害死你。”换言之,应该把随机操作推给RAM,只给硬盘留下顺序操作。

Tom White是Hadoop Core项目的提交者,也是Hadoop项目管理委员会的成员。他对Gray的真言中“硬盘是新的磁带”部分作了更深入地探讨。White在讨论MapReduce编程模型的时候指出,为何对于Hadloop这类工具来说,硬盘仍然是可行的应用程序数据存储介质:

本质上,在MapReduce的工作方式中,数据流式地读出和写入硬盘,MapReduce是以硬盘的传输速率不断地对这些数据进行排序和合并。与之相比,访问关系数据库中的数据,其速率则是硬盘的寻道速率(寻道指移动磁头到盘面上的指定位置读取或写入数据的过程)。为什么要强调这一点?请看看寻道时间和磁盘传输率的发展曲线。寻道时间每年大约提高5%,而数据传输率每年大约提高20%。寻道时间的进步比数据传输率慢——因此采用由数据传输率决定性能的模型是有利的。MapReduce正是如此。

虽然固态硬盘(SSD)能否改变寻道时间/传输率的对比还有待观察,White文章的跟贴中,很多人都认为SSD会成为RAM/硬盘之争中的平衡因素。

Nati Shalom对内存和硬盘在数据库部署和使用中的角色作了一番有理有据的评述。Shalom着重指出用数据库集群和分区来解决性能和可伸缩性的局限。他说,“数据库复制和数据库分区都存在相同的基本问题,它们都依赖于文件系统/硬盘的性能,建立数据库集群也非常复杂”。他提议的方案是转向In-Memory Data Grid(IMDG),用Hibernate 二级缓存或者GigaSpaces Spring DAO之类的技术作支撑,将持久化作为服务(Persistence as a Service)提供给应用程序。Shalom解释说,IMDG

提供在内存中的基于对象的数据库能力,支持核心的数据库功能,诸如高级索引和查询、事务语义和锁。IMDG还从应用程序的代码中抽象出了数据的拓扑。通过这样的方式,数据库不会完全消失,只是挪到了“正确的”位置。

IMDG相比直接RDBMS访问的优势列举如下:

?位于内存中,速度和并发能力都比文件系统优越得多

?数据可通过引用访问

?直接对内存中的对象执行数据操作

?减少数据的争用

?并行的聚合查询

?进程内(In-process)的局部缓存

?免除了对象-关系映射(ORM)

你是否需要改变对应用和硬件的思维方式,最终取决于你要用它们完成的工作。但似乎公论认为,开发者解决性能和可伸缩性的思路已经到了该变一变的时候。

Amdahl定律和Gustafson定律

这里,我们都以S(n)表示n核系统对具体程序的加速比,K表示串行部分计算时间比例。

Amdahl定律的加速比:S(n)=使用1个处理器的串行计算时间/使用n个处理器的并行计算时间

S(n)=1/(K+(1-K)/n)=n/(1+(n-1)K)

Gustafson定律的加速比:S(n)=使用n个处理器的并行计算量/使用1个处理器的串行计算量

S(n)=K+(1-K)n

有点冷是不是?

通俗的讲,Amdahl定律将工作量看作1,有n核也只能分担1-K的工作量;而Gustafson定律则将单核工作量看作1,有n核,就可以增加n(1-K)的工作量。

这里没有考虑引进分布式带来的开销,比如网络和加锁。成本还是要仔细核算的,不是越分布越好。

控制算法的复杂性在常数范围之内。

万兆以太网

手段篇

一致性哈希

要求分布式架构的发展说起。

第一阶段

考虑到单服务器不能承载,因此使用了分布式架构,最初的算法为hash()mod n,hash()通常取用户ID,n为节点数。此方法容易实现且能够满足运营要求。缺点是当单点发生故障时,系统无法自动恢复。

第二阶段

为了解决单点故障,使用hash()mod(n/2),这样任意一个用户都有2个服务器备选,可由client随机选取。由于不同服务器之间的用户需要彼此交互,所以所有的服务器需要确切的知道用户所在的位置。因此用户位置被保存到memcached中。

当一台发生故障,client可以自动切换到对应backup,由于切换前另外1台没有用户的session,因此需要client自行重新登录。

这个阶段的设计存在以下问题

负载不均衡,尤其是单台发生故障后剩下一台会压力过大。

不能动态增删节点

节点发生故障时需要client重新登录

第三阶段

打算去掉硬编码的hash()mod n算法,改用一致性哈希(consistent hashing)分布

假如采用Dynamo中的strategy1

我们把每台server分成v个虚拟节点,再把所有虚拟节点(n*v)随机分配到一致性哈希的圆环上,这样所有的用户从自己圆环上的位置顺时针往下取到第一个vnode就是自己所属节点。当此节点存在故障时,再顺时针取下一个作为替代节点。

优点:发生单点故障时负载会均衡分散到其他所有节点,程序实现也比较优雅。

亚马逊的现状

aw2.0公司的Alan Williamson撰写了一篇报道,主要是关于他在Amazon EC2上的体验的,他抱怨说,Amazon 是公司唯一使用的云提供商,看起来它在开始时能够适应得很好,但是有一个临界点:

在开始的日子里Amazon的表现非常棒。实例在几分钟内启动,几乎没有遇到任何问题,即便是他们的小实例(SMALL INSTANCE)也很健壮,足以支持适当使用的MySQL数据库。在20个月内,Amazon云系统一切运转良好,不需要任何的关心和抱怨。

……

然而,在最后的八个月左右,他们“盔甲”内的漏洞开始呈现出来了。第一个弱点前兆是,新加入的Amazon SMALL实例的性能出现了问题。根据我们的监控,在服务器场中新添加的机器,与原先的那些相比性能有所下降。开始我们认为这是自然出现的怪现象,只是碰巧发生在“吵闹的邻居”(Noisy Neighbors)旁边。根据随机法则,一次快速的停机和重新启动经常就会让我们回到“安静的邻居”旁边,那样我们可以达到目的。

……

然而,在最后的一两个月中,我们发现,甚至是这些“使用高级CPU的中等实例”也遭受了与小实例相同的命运,其中,新的实例不管处于什么位置,看起来似乎都表现得一样。经过调查,我们还发现了一个新问题,它已经悄悄渗透到到Amazon的世界中,那就是内部网络延迟。

算法的选择

不同的哈希算法可以导致数据分布的不同位置,如果十分均匀,那么一次MapReduce就涉及节点较多,但热点均匀,方便管理。反之,热点不均,会大致机器效率发挥不完全。

Quorum NRW

?N:复制的节点数量

?R:成功读操作的最小节点数

?W:成功写操作的最小节点数

只需W+R>N,就可以保证强一致性。

第一个关键参数是N,这个N指的是数据对象将被复制到N台主机上,N在实例级别配置,协调器将负责把数据复制到N-1个节点上。N的典型值设置为 3.

复制中的一致性,采用类似于Quorum系统的一致性协议实现。这个协议有两个关键值:R与W。R代表一次成功的读取操作中最小参与节点数量,W代表一次成功的写操作中最小参与节点数量。R+W>N,则会产生类似quorum

的效果。该模型中的读(写)延迟由最慢的R(W)复制决定,为得到比较小的延迟,R和W有的时候的和又设置比N小。如果N中的1台发生故障,Dynamo立即写入到preference list中下一台,确保永远可写入

如果W+R>N,那么分布式系统就会提供强一致性的保证,因为读取数据的节点和被同步写入的节点是有重叠的。在一个RDBMS的复制模型中(Master/salve),假如N=2,那么W=2,R=1此时是一种强一致性,但是这样造成的问题就是可用性的减低,因为要想写操作成功,必须要等2个节点都完成以后才可以。

在分布式系统中,一般都要有容错性,因此一般N都是大于3的,此时根据CAP理论,一致性,可用性和分区容错性最多只能满足两个,那么我们就需要在一致性和分区容错性之间做一平衡,如果要高的一致性,那么就配置N=W,R=1,这个时候可用性就会大大降低。如果想要高的可用性,那么此时就需要放松一致性的要求,此时可以配置W=1,这样使得写操作延迟最低,同时通过异步的机制更新剩余的N-W个节点。

当存储系统保证最终一致性时,存储系统的配置一般是W+R<=N,此时读取和写入操作是不重叠的,不一致性的窗口就依赖于存储系统的异步实现方式,不一致性的窗口大小也就等于从更新开始到所有的节点都异步更新完成之间的时间。

(N,R,W)的值典型设置为(3,2,2),兼顾性能与可用性。R和W直接影响性能、扩展性、一致性,如果W设置为1,则一个实例中只要有一个节点可用,也不会影响写操作,如果R设置为1,只要有一个节点可用,也不会影响读请求,R和W值过小则影响一致性,过大也不好,这两个值要平衡。对于这套系统的典型的SLA要求99.9%的读写操作在300ms内完成。

无论是Read-your-writes-consistency,Session consistency,Monotonic read consistency,它们都通过黏贴(stickiness)客户端到执行分布式请求的服务器端来实现的,这种方式简单是简单,但是它使得负载均衡以及分区容错变的更加难于管理,有时候也可以通过客户端来实现Read-your-writes-consistency和Monotonic read consistency,此时需要对写的操作的数据加版本号,这样客户端就可以遗弃版本号小于最近看到的版本号的数据。

在系统开发过程中,根据CAP理论,可用性和一致性在一个大型分区容错的系统中只能满足一个,因此为了高可用性,我们必须放低一致性的要求,但是不同的系统保证的一致性还是有差别的,这就要求开发者要清楚自己用的系统提供什么样子的最终一致性的保证,一个非常流行的例子就是web应用系统,在大多数的web应用系统中都有“用户可感知一致性”的概念,这也就是说最终一致性中的“一致性窗口"大小要小于用户下一次的请求,在下次读取操作来之前,数据可以在存储的各个节点之间复制。还比如假如存储系统提供了

read-your-write-consistency一致性,那么当一个用户写操作完成以后可以立马看到自己的更新,但是其它的用户要过一会才可以看到更新。

几种特殊情况:

W=1,R=N,对写操作要求高性能高可用。

R=1,W=N,对读操作要求高性能高可用,比如类似cache之类业务。

W=Q,R=Q where Q=N/2+1一般应用适用,读写性能之间取得平衡。如N=3,W=2,R=2

Vector clock

vector clock算法。可以把这个vector clock想象成每个节点都记录自己的版本信息,而一个数据,包含所有这些版本信息。来看一个例子:假设一个写请求,第一次被节点A处理了。节点A会增加一个版本信息(A,1)。我们把这个时候的数据记做D1(A,1)。然后另外一个对同样key(这一段讨论都是针对同样的key的)的请求还是被A处理了于是有D2(A,2)。

这个时候,D2是可以覆盖D1的,不会有冲突产生。现在我们假设D2传播到了所有节点(B和C),B和C收到的数据不是从客户产生的,而是别人复制给他们的,所以他们不产生新的版本信息,所以现在B和C都持有数据D2(A,2)。好,继续,又一个请求,被B处理了,生成数据D3(A,2;B,1),因为这是一个新版本的数据,被B处理,所以要增加B的版本信息。

假设D3没有传播到C的时候又一个请求被C处理记做D4(A,2;C,1)。假设在这些版本没有传播开来以前,有一个读取操作,我们要记得,我们的W=1那么R=N=3,所以R会从所有三个节点上读,在这个例子中将读到三个版本。A上的D2(A,2);B上的D3(A,2;B,1);C上的D4(A,2;C,1)这个时候可以判断出,D2已经是旧版本,可以舍弃,但是D3和D4都是新版本,需要应用自己去合并。

如果需要高可写性,就要处理这种合并问题。好假设应用完成了冲入解决,这里就是合并D3和D4版本,然后重新做了写入,假设是B处理这个请求,于是有D5(A,2;B,2;C,1);这个版本将可以覆盖掉D1-D4那四个版本。这个例子只举了一个客户的请求在被不同节点处理时候的情况,而且每次写更新都是可接受的,大家可以自己更深入的演算一下几个并发客户的情况,以及用一个旧版本做更新的情况。

上面问题看似好像可以通过在三个节点里选择一个主节点来解决,所有的读取和写入都从主节点来进行。但是这样就违背了W=1这个约定,实际上还是退化到W=N的情况了。所以如果系统不需要很大的弹性,W=N为所有应用都接受,那么系统的设计上可以得到很大的简化。Dynamo为了给出充分的弹性而被设计成完全的对等集群(peer to peer),网络中的任何一个节点都不是特殊的。

Virtual node

虚拟节点,未完成

gossip

Gossip协议是一个Gossip思想的P2P实现。现代的分布式系统经常使用这个协议,他往往是唯一的手段。因为底层的结构非常复杂,而且Gossip也很有效。

Gossip协议也被戏称为病毒式传播,因为他的行为生物界的病毒很相似。

Gossip(State Transfer Model)

在状态转移到模式下,每个重复节点都保持的一个Vector clock和一个state version tree。每个节点的状态都是相同的(based on vector clock comparison),换句话说,state version tree包含有全部的冲突updates.

At query time,the client will attach its vector clock and the replica will send back a subset of the state tree which precedes the client's vector clock(this will provide monotonic read consistency).The client will then advance its vector clock by merging all the versions.This means the client is responsible to resolve the conflict of all these versions because when the client sends the update later,its vector clock will precede all these versions.

At update,the client will send its vector clock and the replica will check whether the client state precedes any of its existing version,if so,it will throw away the client's update.

Replicas also gossip among each other in the background and try to merge their version tree together.

Gossip(Operation Transfer Model)

In an operation transfer approach,the sequence of applying the operations is very important.At the minimum causal order need to be maintained.Because of the ordering issue,each replica has to defer executing the operation until all the preceding operations has been executed.Therefore replicas save the operation request to a log file and exchange the log among each other and consolidate these operation logs to figure out the right sequence to apply the operations to their local store in an appropriate order.

"Causal order"means every replica will apply changes to the"causes"before apply changes to the"effect". "Total order"requires that every replica applies the operation in the same sequence.

In this model,each replica keeps a list of vector clock,Vi is the vector clock the replica itself and Vj is the vector clock when replica i receive replica j's gossip message.There is also a V-state that represent the vector clock of the last updated state.

When a query is submitted by the client,it will also send along its vector clock which reflect the client's view of the world.The replica will check if it has a view of the state that is later than the client's view.

When an update operation is received,the replica will buffer the update operation until it can be applied to the local state.Every submitted operation will be tag with2timestamp,V-client indicates the client's view when he is making the update request.V-@receive is the replica's view when it receives the submission.

This update operation request will be sitting in the queue until the replica has received all the other updates that this one depends on.This condition is reflected in the vector clock Vi when it is larger than V-client

On the background,different replicas exchange their log for the queued updates and update each other's vector clock.After the log exchange,each replica will check whether certain operation can be applied (when all the dependent operation has been received)and apply them accordingly.Notice that it is possible that multiple operations are ready for applying at the same time,the replica will sort these operation in causal order(by using the Vector clock comparison)and apply them in the right order.

The concurrent update problem at different replica can also happen.Which means there can be multiple valid sequences of operation.In order for different replica to apply concurrent update in the same order, we need a total ordering mechanism.

One approach is whoever do the update first acquire a monotonic sequence number and late comers follow the sequence.On the other hand,if the operation itself is commutative,then the order to apply the operations doesn't matter

After applying the update,the update operation cannot be immediately removed from the queue because the update may not be fully exchange to every replica yet.We continuously check the Vector clock of each replicas after log exchange and after we confirm than everyone has receive this update,then we'll remove it from the queue.

Merkle tree

有数据存储成树状结构,每个节点的Hash是其所有子节点的Hash的Hash,叶子节点的Hash是其内容的Hash。这样一旦某个节点发生变化,其Hash的变化会迅速传播到根节点。需要同步的系统只需要不断查询跟节点的hash,一旦有变化,顺着树状结构就能够在logN级别的时间找到发生变化的内容,马上同步。

Paxos

paxos是一种处理一致性的手段,可以理解为事务吧。

其他的手段不要Google GFS使用的Chubby的Lock service。我不大喜欢那种重型的设计就不费笔墨了。

背景

当规模越来越大的时候。

一、Master/slave

这个是多机房数据访问最常用的方案,一般的需求用此方案即可。因此大家也经常提到“premature optimization is the root of all evil”。

优点:利用mysql replication即可实现,成熟稳定。

缺点:写操作存在单点故障,master坏掉之后slave不能写。另外slave的延迟也是个困扰人的小问题。

二、Multi-master

Multi-master指一个系统存在多个master,每个master都具有read-write能力,需根据时间戳或业务逻辑合并版本。比如分布式版本管理系统git可以理解成multi-master模式。具备最终一致性。多版本数据修改可以借鉴Dynamo 的vector clock等方法。

优点:解决了单点故障。

缺点:不易实现一致性,合并版本的逻辑复杂。

三、Two-phase commit(2PC)

Two-phase commit是一个比较简单的一致性算法。由于一致性算法通常用神话(如Paxos的The Part-Time Parliament论文)来比喻容易理解,下面也举个类似神话的例子。

某班要组织一个同学聚会,前提条件是所有参与者同意则活动举行,任意一人拒绝则活动取消。用2PC算法来执行过程如下

Phase1

Prepare:组织者(coordinator)打电话给所有参与者(participant),同时告知参与者列表。

Proposal:提出周六2pm-5pm举办活动。

Vote:participant需vote结果给coordinator:accept or reject。

Block:如果accept,participant锁住周六2pm-5pm的时间,不再接受其他请求。

Phase2

Commit:如果所有参与者都同意,组织者coodinator通知所有参与者commit,否则通知abort,participant解除锁定。

Failure典型失败情况分析

Participant failure:

任一参与者无响应,coordinator直接执行abort

Coordinator failure:

Takeover:如果participant一段时间没收到cooridnator确认(commit/abort),则认为coordinator不在了。这时候可自动成为Coordinator备份(watchdog)

Query:watchdog根据phase1接收的participant列表发起query

《NoSQL数据库原理》教学进度表

学院 课程教学进度计划表 (20?20学年第二学期) 课程名称NoSQL数据库原理 授课学时 _____________________ 48 _________ 主讲(责任)教师 _________________________ 参与教学教师 _____________________________ 授课班级/人数 ____________________________ 专业(教研室) __________________________ 填表时间 _________________________________ 专业(教研室)主任 _______________________ 教务处编印 年月

一、课程教学目的 NoSQL数据库大多具有横向扩展能力强、数据模型灵活等特点,在互联网、电力、电信、金融以及工业物联网等领域具有广泛应用。作为开源软件,NoSQL数据库的使用和部署较为 简单,不需要掌握复杂的底层技术原理,适合ICT领域中的各个专业人员学习和使用。 被统称为“ NoSQL ”的非关系型数据库,大多具有优秀的分布式部署能力、横向扩展能力和灵活的数据模型。本课程介绍NoSQL数据库的起源、基本技术原理、常见存储模式等知 识,介绍HBase、Cassandra、MongoDB、Neo4j和Redis等热门NoSQL软件的技术原理、架构特点和使用方法,使学生掌握常见NoSQL数据库的部署和使用方法,理解分布式大数据系 统可能遇到的技术难题和解决方法,进而更深入的理解大数据领域的开源工具和技术原理。 二、教学方法及手段 本课程采用理论与实践相结合的教学方法。在理论上,通过典型案例引入概念、原理和方法。在实践上,由教师讲解案例背景,提供简单思路。引导学生对案例进行针对性的分析,审理和讨论,扩展学生的思维,增加学生的兴趣。通过学生的讨论、自主实践和练习,提高学生的判断能力,专业能力和综合素质。 要求学生自主搭建常见NoSQL数据库,完成参数配置、调整,以及通过命令行和编程等方式进行操作使用。在教学条件允许的情况下,完成软件的分布式部署与调优实验,在理论上,要求学生掌握相关的软件架构、存储模式等方面的技术特点。在每章的任务教学中,可适当布置联系、组织讨论、引导提出扩展的解决方案,充分调动学生的主观能动性,锤炼学生的专业精神并提升动手能力,以达到本课程的培养目的。 三、课程考核方法 突出学生解决实际问题的能力,加强过程性考核。课程考核的成绩构成=出勤(10%)+ 平时作业与实验报告(60%)+课程综述(30% )。

8种NoSQL数据库比较

2011/08/30 | 分类:工具与资源, 程序员| 4 条评论| 标签:NOSQL, 数据库 分享到:38 导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql 数据库的文章。文章由敏捷翻译–唐尤华编译。如需转载,请参见文后声明。 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。 但是NoSQL数据库之间的不同,远超过两SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的NoSQL数据库。针对这种情况,这里对Cassandra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase进行了比较: (编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改变这一现状。目前Google的BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。参见NoSQL词条。) 1. CouchDB ?所用语言:Erlang ?特点:DB一致性,易于使用 ?使用许可:Apache ?协议:HTTP/REST ?双向数据复制, ?持续进行或临时处理, ?处理时带冲突检查, ?因此,采用的是master-master复制(见编注2) ?MVCC –写操作不阻塞读操作 ?可保存文件之前的版本 ?Crash-only(可靠的)设计 ?需要不时地进行数据压缩 ?视图:嵌入式映射/减少 ?格式化视图:列表显示 ?支持进行服务器端文档验证 ?支持认证 ?根据变化实时更新 ?支持附件处理 ?因此,CouchApps(独立的js应用程序) ?需要jQuery程序库 最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

Neo4j简介和功能说明

Neo4j 简介 数据存储一般是应用开发中不可或缺的组成部分。应用运行中产生的和所需要的数据被以特定的格式持久化下来。应用开发中很常见的一项任务是在应用本身的领域对象模型与数据存储格式之间进行相互转换。如果数据存储格式与领域对象模型之间比较相似,那么进行转换所需的映射关系更加自然,实现起来也更加容易。对于一个特定的应用来说,其领域对象模型由应用本身的特征来决定,一般采用最自然和最直观的方式来进行建模。所以恰当的选择数据存储格式就显得很重要。目前最常见的数据存储格式是关系数据库。关系数据库通过实体- 关系模型(E-R 模型)来进行建模,即以表和表之间的关系来建模。在实际开发中可以使用的关系数据库的实现非常多,包括开源的和商用的。关系数据库适合用来存储数据条目的类型同构的表格型数据。如果领域对象模型中不同对象之间的关系比较复杂,则需要使用繁琐的对象关系映射技术(Object-Relationship Mapping,ORM)来进行转换。 对于很多应用来说,其领域对象模型并不适合于转换成关系数据库形式来存储。这也是非关系型数据库(NoSQL)得以流行的原因。NoSQL 数据库的种类很多,包括键值对数据库、面向文档数据库和图形数据库等。本文中介绍的Neo4j 是最重要的图形数据库。Neo4j 使用数据结构中图(graph)的概念来进行建模。Neo4j 中两个最基本的概念是节点和边。节点表示实体,边则表示实体之间的关系。节点和边都可以有自己的属性。不同实体通过各种不同的关系关联起来,形成复杂的对象图。Neo4j 同时提供了在对象图上进行查找和遍历的功能。

对于很多应用来说,其中的领域对象模型本身就是一个图结构。对于这样的应用,使用Neo4j 这样的图形数据库进行存储是最适合的,因为在进行模型转换时的代价最小。以基于社交网络的应用为例,用户作为应用中的实体,通过不同的关系关联在一起,如亲人关系、朋友关系和同事关系等。不同的关系有不同的属性。比如同事关系所包含的属性包括所在公司的名称、开始的时间和结束的时间等。对于这样的应用,使用Neo4j 来进行数据存储的话,不仅实现起来简单,后期的维护成本也比较低。 Neo4j 使用“图”这种最通用的数据结构来对数据进行建模使得Neo4j 的数据模型在表达能力上非常强。链表、树和散列表等数据结构都可以抽象成用图来表示。Neo4j 同时具有一般数据库的基本特性,包括事务支持、高可用性和高性能等。Neo4j 已经在很多生产环境中得到了应用。流行的云应用开发平台Heroku 也提供了Neo4j 作为可选的扩展。 为什么选择Neo4j 1.社区活力大在官网声称3,000,000次以上的下载,每个月增加50,000次下载 2.高性能读写和可扩展性,支持ACID规范 3.简单易学,容易入门 4.使用方便,提供强大的图查询语言Cypher,并且对java支持很好提供专有 API接口 5.服务较稳定可靠,在兼顾性能的同事还支持事物 6.本身提供图可视化功能,缩短业务和IT之间的差距,业务人员可以参考快速 建模

NoSQL数据库学习教程

NoSQL数据库学习教程 本文档由https://www.360docs.net/doc/f75861776.html,整理发布。 1序 2思想篇 2CAP 2最终一致性 2变体 2BASE 2其他 2I/O的五分钟法则 2不要删除数据 2RAM是硬盘,硬盘是磁带 2Amdahl定律和Gustafson定律 2万兆以太网 3手段篇 3一致性哈希 3亚马逊的现状 3算法的选择 3Quorum NRW 3Vector clock 3Virtual node 3gossip 3Gossip (State Transfer Model) 3Gossip (Operation Transfer Model) 3Merkle tree 3Paxos 3背景 3DHT 3Map Reduce Execution 3Handling Deletes 3存储实现 3节点变化 3列存 3描述 3特点 4软件篇 4亚数据库 4MemCached 4特点 4内存分配 4缓存策略 4缓存数据库查询 4数据冗余与故障预防 4Memcached客户端(mc) 4缓存式的Web应用程序架构 4性能测试 4dbcached 4Memcached 和dbcached 在功能上一样吗?

4列存系列 4Hadoop之Hbase 4耶鲁大学之HadoopDB 4GreenPlum 4FaceBook之Cassandra 4Cassandra特点 4Keyspace 4Column family(CF) 4Key 4Column 4Super column 4Sorting 4存储 4API 4Google之BigTable 4Yahoo之PNUTS 4特点 4PNUTS实现 4Record-level mastering 记录级别主节点 4PNUTS的结构 4Tablets寻址与切分 4Write调用示意图 4PNUTS感悟 4微软之SQL数据服务 4非云服务竞争者 4文档存储 4CouchDB 4特性 4Riak 4MongoDB 4Terrastore 4ThruDB 4Key Value / Tuple 存储 4Amazon之SimpleDB 4Chordless 4Redis 4Scalaris 4Tokyo cabinet / Tyrant 4CT.M 4Scalien 4Berkley DB 4MemcacheDB 4Mnesia 4LightCloud 4HamsterDB 4Flare 4最终一致性Key Value存储 4Amazon之Dynamo 4功能特色 4架构特色 4BeansDB

对nosql的认识

浅谈NoSQL 摘要:随着NoSQL的兴起,在各种网站上追求高性能可靠性方面的被应用的越来越广泛,不由自主的选择NoSQL作为有限的考虑方向。大数据的不断发展,传统的关系型数据库在解决web问题上遇到瓶颈,而非关系型数据库成为热门的解决方法。在海量数据的环境下,NoSQL对数据科技树的发展产生了强烈的影响。本文介绍非关系型数 据库分类应用及与关系型数据库的比较。 关键字:NoSQL,非关系型数据库 1.前言 如今,MySQL,Oracle,Sybase等的一些传统关系型数据库在以往的到了很广泛的应用,但是面对现今的web应用却表现得不如人们预想的优越。Web应用和服务在数据访问操作中主要面向准结构化数据和非结构化数据,它的需求与传统数据库所管理的结构化数据有明显的区别,这些新兴的应用并不需要类似于传统数据库所要求的ACID性质,但在系统的可扩展性与并发访问的能力上有更高的要求,而解决这类问题上人们一般会使用NoSQL数据库。Web应用的普及和网络上数据量的爆炸式增长,NoSQL凭借自己的显著特色解决了很多问题。 2.传统关系型数据库的特点以及优缺点 以往的网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。关系型数据库使用简单功能强大,其有以下特点: (1)操作方便,开发者通过应用程序和数据库相链接,用户能方便的的对数据库中的数据进行操作,在没有数据库基础的人也可以对数据库进行管理, 直接在数据库中操作。 (2)易于维护,关系型数据库在完整性约束中提供了实体完整性、参照完整性和用户定义的完整性,通过完整性约束可以大大降低了数据存储的冗余及 数据不一致的概率。 (3)访问数据的灵活性。关系数据库中提供了视图视图,存储过程,触发器,索引等对象,是访问数据更加灵活。 不可否认,现存的数据库页面里这诸多的问题在web2.0技术发展的同时,更注重用户和服务器以及用户和用户之间的交互作用,用户成为即使网站内容的浏览者,也是网站内容的制造者。例如博客,社区网站,微博,微信。而传统型数据库有以下几点缺陷:

《NoSQL数据库原理与应用》课程教学大纲(正式版)

NoSQL数据库原理与应用 (含实验) 教学大纲 (2018版) 2018年10月

前言 一、大纲编写依据 NoSQL泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 本课程系统全面地介绍NoSQL数据库系统的基本原理和实现技术,充分反映该领域的最新研究成果。主要内容包括:NoSQL数据库所用的基本原理、结构特点、重要的算法,及部分系统的实际实现技巧等。 二、课程目的 1、知识目标 掌握NoSQL数据库系统的概念、结构、功能;掌握NoSQL数据库系统设计的原理、方法和技术;掌握NoSQL数据库的优化、可靠性、安全性等知识;掌握设计NoSQL数据库系统的方法,为学生后继课程及实践打下基础。 2、能力目标 (1) 实践能力 通过本课程的学习,努力培养学生良好的NoSQL数据库程序设计风格和严密的逻辑思维能力,提高NoSQL数据库程序设计与实现能力、创新思维和创新能力。为后续课程的学习和今后研制、开发各种计算机软件打下坚实的基础。 (2) 创新能力 通过使用NoSQL数据库语言进行数据库程序设计,从编程能力、软件开发能力等方面,使学生具备一定的NoSQL数据库开发的能力。 三、教学方法 1、课堂教学 (1) 讲授 本课程的教学内容以讲授为主,讲授的主要内容有NoSQL数据库的基本概念、基本原理、NoSQL数据库的分类、Hbase的基本原理、Hbase的基本组件、Hbase的管理与编程、MongoDB 基础、MongoDB进阶、其他非关系型数据库技术。根据教学大纲的要求,突出重点和难点。 (2) 教师指导下的学生自学 指导学生自主学习其他非关系型数据库的程序设计技术。教师通过给出一些相关的实例程序帮助学生理解和进行程序设计,并布置相应的上机习题让学生进行练习。 (3) 其它教学方法 采用多媒体辅助教学手段,结合传统教学方法,解决好教学内容多、信息量大与学时少的矛盾;充分利用学校的图书馆的资源优势,查阅与课程相关的资料;通过布置课程设计来

完整word版4NoSQL数据库原理与应用课程教学大纲正式版

NoSQL数据库原理与应用(含实验) 学教大纲 (2018版)

月10年2018. 前言 一、大纲编写依据 NoSQL泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。本课程系统全面地介绍NoSQL数据库系统的基本原理和实现技术,充分反映该领域的最新研究成果。主要内容包括:NoSQL数据库所用的基本原理、结构特点、重要的算法,及部分系统的实际实现技巧等。 二、课程目的 1、知识目标 掌握NoSQL数据库系统的概念、结构、功能;掌握NoSQL数据库系统设计的原理、方法和技术;掌握NoSQL数据库的优化、可靠性、安全性等知识;掌握设计NoSQL数据库系统的方法,为学生后继课程及实践打下基础。 2、能力目标 (1) 实践能力 通过本课程的学习,努力培养学生良好的NoSQL数据库程序设计风格和严密的逻辑思维能力,提高NoSQL数据库程序设计与实现能力、创新思维和创新能力。为后续课程的学习和今后研制、开发各种计算机软件打下坚实的基础。 (2) 创新能力 通过使用NoSQL数据库语言进行数据库程序设计,从编程能力、软件开发能力等方面,使学生具备一定的NoSQL数据库开发的能力。 三、教学方法 1、课堂教学 (1) 讲授 本课程的教学内容以讲授为主,讲授的主要内容有NoSQL数据库的基本概念、基本原理、NoSQL 数据库的分类、Hbase的基本原理、Hbase的基本组件、Hbase的管理与编程、MongoDB基础、MongoDB 进阶、其他非关系型数据库技术。根据教学大纲的要求,突出重点和难点。 (2) 教师指导下的学生自学 指导学生自主学习其他非关系型数据库的程序设计技术。教师通过给出一些相关的实例程序帮助学生理解和进行程序设计,并布置相应的上机习题让学生进行练习。 (3) 其它教学方法 采用多媒体辅助教学手段,结合传统教学方法,解决好教学内容多、信息量大与学时少通过布置课程设计来查阅与课程相关的资料;充分利用学校的图书馆的资源优势,的矛盾; 提高学生的综合处理问题的能力和软件开发的能力。 2、课外学习 作业1:课外练习。 作业2:上机实验报告。 四、适用对象

浅析NoSQL数据库_卢冬海

开 发 应 用
浅析NoSQL数据库
卢冬海 何先波
(西华师范大学计算机学院,四川 南充 637002) 摘 要:NoSQL数据库打破了传统的关系模型,以一种模式自由的方式存储数据,提供了新型的访问接口,并克服了传 统RDBMS的缺点。NoSQL数据库可部署在廉价的硬件之上,支持分布式存储,能透明地扩展节点。本文介绍了NoSQL数据 库的基本特点与设计思想,列举了几种流行的NoSQL数据库产品,分析了其应用方向、优缺点及发展前景。 关键词:NoSQL;SQL;关系型数据库 DOI:10.3969/j.issn.1671-6396.2011.02.008 The Analysis of NoSQL Database LU Dong-hai,HE Xian-bo (School of Computer Science,China West Normal University,Nanchong Sichuan 637002) Abstract: NoSQL database that breaks the traditional relational model, stores data as a free style, provides a new type of access interface, and overcomes the shortcomings of RDBMS database to design to be deployed on inexpensive hardware to support distributed storage and to transparent extension node. This article described some common ideas of NoSQL database, listed kinds of popular NoSQL database products, and analyzed their applications, advantages, disadvantages and prospects. Key words:NoSQL;SQL;RDBMS

关系型数据库面临的挑战
明地扩展节点。典型的NoSQL数据库以key-values的形式存 储数据,具有模式自由的特点。 2.1 key-values key-values是指一个键名对应一个键值,可以通过键名 访问键值。例如一条员工的记录信息如图1和图2所示,有 Name、 Age、 Profession等 键 名 , 各 个 键 名 对 应 着 一 个 键 值。
employeeA { “tom”, Name : Age:13, “tearcher ”, Profession : Birth: {year : 1990, month: 9:day:10}, “myemail@https://www.360docs.net/doc/f75861776.html,” Email : }
1.1 数据库高并发读写需求 在Web2.0时代,网站通常要根据用户的个性化定制实 时生成页面,例如现在流行的SNS网站,微博网站等。网 站几乎要实时地为用户提供信息。该类应用对数据库提出 了很高的并发负载要求,传统的RDBMS面临很大的挑战。 1.2 海量数据的高效存储需求 在Web2.0时代,网站信息的提供者由传统的网站信息 管理员变成了普通的用户,用户提供的信息是海量的。类 似facebook,qq空间等SNS类型的网站,可能每天都会产 生千万级的数据。如果在RDBMS里的一张存有亿级记录的 数据表里作SQL查询,耗费时间巨大。虽然可通过分库、 分表等方法切分数据,部分地解决查询问题,但也带来了 诸如加重程序开发的复杂度和数据备份以及数据库扩容的 复杂度等问题。 1.3 数据库高扩展性和高可用性需求 在云计算时代,一项很重要的任务就是存储交由云 端,云计算供应商需面对存储海量数据的挑战。如果用传 统的RDBMS来保证存储的海量性和高可用性,云计算供应 商必须花费巨额的资金去购置高性能高可靠性的机器。同 时,RDBMS的无缝、不宕机扩容实现难度也大大增加。 2 NoSQL介绍 NoSQL数据库指那些非关系性的、定义不是很明确的
employeeB { Name “ : tom”, Age:13, Profession“ :tearcher” , Birth : {year : 1990, month: 9: day: 10}, }
图1
图2
2.2 模式自由 模式自由是指使用数据库前不再预先定义数据模型。在 传统的RDBMS中,如果想要存储某一员工的信息,必须先定 义一张员工表,表里有各项与员工相关的字段。如果日后需 求有变更,要增加员工的信息就必须去修改原先定义的数据 模型。模式自由的数据库没有预先定义要存储的数据的数据 模型。仍以员工信息为例,并不是所有员工的记录信息里都 有name,age,profession,email这些key,有可能员工B的
数据存储仓库。NoSQL数据库不再使用关系模型的概念, 放弃了SQL数据库操作语句。NoSQL数据库克服了RDBMS的 缺点,可部署在廉价的硬件之上,支持分布式存储,能透
收稿日期:2010-11-20 修回日期:2010-12-17
作者简介:卢冬海(1986-),男,汉族,浙江三门籍,研究生,研究方向为嵌入式系统。
15

NoSQL数据库总结

数据库 一、N oSQL数据 简介 NoSQL(NoSQL = Not Only SQL ),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 优点 可以处理超大量的数据 可以运行在便宜的PC服务器集群上 打破了性能的瓶颈 NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。 “SQL并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL 值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。 没有过多的操作 Bootstrap支持 因为NoSQL项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。 缺点 没有正式的官方支持,万一出了差错会是可怕的 nosql并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验 二、N oSQL数据库开源软件 1.MongoDB: 简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson 格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

有关NOSQL与SQL的对比外文翻译

SQL数据库与NoSQL数据库的对比 迈克尔·斯通布雷克考虑了几个支持NoSQL数据库的性能参数并且发现它们的不足之处 最近,出现了很多关于NoSQL数据库的声音。事实上,在2009年至少有两个关于这个主题的顶级会议,东西海岸各有一个。表面来看,这些声音来自以下技术的支持者:文档样式存储的数据库记录由键-值对的集合和一个负载组成。这类系统的例子有CouchDB 和MongoDB,为了简单起见,我们称这样的存储为系统文档存储。 键值存储的记录由key-payload对组成。通常,这些都是由分布式哈希表实现,为了简单起见,我们称它为键值存储。这类例子有MemcacheDB和Dynamo。 在这两种情况下,通常得到一个低级、一次一记录的数据库管理系统(DBMS)接口而不是SQL系统。因此,这群人将自己标识为NoSQL的追随者。 有这两种可能的原因倾向于这两种可交替的DBMS技术:性能和灵活性。 性能方面的争论大致如下:刚开始时我为了数据存储需求完全使用MySQL,随着时间的推移发现性能不合适。我的选择是: 1.将数据分区横跨多站点处理,但在应用程序上管理分布式数据十分困难。 2.狂热追求MySQL并向SQL数据库管理系统企业支付大额许可费或使用除了SQL数据库管理系统的平台。 弹性方面的争论大致如下:我的数据不符合严格的关系模式。因此,我不能受RDBMS的结构的约束,需要更高的灵活性。 这篇博文介绍了性能方面的争议,随后将详细说明在灵活性方面的争议。为简单起见,我们将重点讨论NoSQL数据库通常被认为的工作负载:更新,密集查找,在线事务处理,非密集查询,数据仓库的工作量。我们不考虑文档存储库或其他专门的NoSQL系统可能适合的工作负载。 有两种方法可以提高在线事务处理(OLTP)的性能;即,在无共享处理环境下提供自动分片处理和提高单台服务器的在线事务处理(OLTP)性能。 第一种情况,是通过向计算环境里添加节点提高扩展性来增加性能。第二种则是提高各个节点的性能。 每一个像Greenplum, Aster Data, Vertica,ParAccel的正式的SQL DBMS,如果不这样做的话在过去十年里就不会共享伸缩技术,任何新的进步也会变迟缓。因此,该组件的性能应该是DBMS的赌注。在我看来,没有人能够运行一个越过计算节点,不提供自动切分的数据库管理系统。 所以,该帖继续分析其他的组件。也就是,单节点OLTP的性能。在传统数据库中与OLTP数据库有关的总开销跟系统没有关系,这就是为什么说“NoSQL”这个词用的不当的原因。 相反,OLTP SQL DBMS的主要开销是通过使用ODBC或JDBC用在与DBMS进行通信上。基本上所有的性能敏感的应用都使用存储程序接口去运行DBMS内的逻辑,避免在应用程序和DBMS间来来回回交流带来的损失。别的替代方案是在一个相同的地址空间里像运行一个应用程序一样去运行DBMS,从而放弃了访问控制和安全的借口,这样的嵌入式数据库管理系统在一些环境中是合理的,但不是对主流的OLTP而言的,因为在那安全是个很热闹重要的事。 不论是使用存储程序还是嵌入方式,有效的负载成分只占OLTP数据库总的

典型的十大NOSQL数据库

分布式系统 论文题目:NOSQL数据库 专业 班级 学生 学号 指导教师 2014 年秋季学期

目录 1.引言 (1) 2. NoSQL数据库类型 (1) 2.1按照NoSQL存储模型和特点分类 (1) 2.2根据CAP原理分类 (2) 3.NoSQL架构 (5) 3.1 纯NoSQL架构 (5) 3.2 以NoSQL作为数据源的架构 (6) 4.典型NoSQL数据库概述 (8) 4.1 HBase简介 (8) 4.2 Redis简介 (9) 4.3 MongoDB简介 (10) 4.4 Cassandra简介 (11) 4.5 CouchDB简介 (11) 5.总结 (12)

NoSQL数据库 1.引言 随着互联网Web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,其相关产品的发展也非常迅速。传统的关系数据库在应付Web2.0网站时暴露了很多难以克服的问题,主要有包括:不能满足对数据库高并发读写的需求;不能满足对海量数据的高效率存储和访问的需求;不能满足对数据库的高可扩展性和高可用性的需求。另外,许多Web2.0网站并不需要关系数据库提供的一些服务,诸如:数据库事务一致性、数据库的写实时性和读实时性、对复杂的SQL查询等。因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。 NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库. 无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。 2. NoSQL数据库类型 2.1按照NoSQL存储模型和特点分类 按照NoSQL存储模型和特点分类形式如表1所示,表1 参照存储模型的NoSQL分类中根据NoSQL数据库的存储原理,列出了六大类主要的NoSQL数据库分类,分别是:列存储、文档型存储、Key-value存储、图存储、对象存储和xml存储。表1中仅列出了一些比较常见的NoSQL数据库,在所有的这些类型的NoSQL数据库中,当前应用较多的就是前三种类型:列存储类型、文档存储、key-value存储类型。特别需要说明的是,图数据库也可称为面向/基于图的数据库,对应的英文是Graph database。图数据库的基本含义是以“图”这种数据结构存储和查询数据,不是存储图片的数据库。

NoSQL数据库原理教学进度表

学院 课程教学进度计划表(20 ~20 学年第二学期) 课程名称NoSQL数据库原理 授课学时48 主讲(责任)教师 参与教学教师 授课班级/人数 专业(教研室) 填表时间 专业(教研室)主任 教务处编印 年月

一、课程教学目的 NoSQL数据库大多具有横向扩展能力强、数据模型灵活等特点,在互联网、电力、电信、金融以及工业物联网等领域具有广泛应用。作为开源软件,NoSQL数据库的使用和部署较为简单,不需要掌握复杂的底层技术原理,适合ICT领域中的各个专业人员学习和使用。 被统称为“NoSQL”的非关系型数据库,大多具有优秀的分布式部署能力、横向扩展能力和灵活的数据模型。本课程介绍NoSQL数据库的起源、基本技术原理、常见存储模式等知识,介绍HBase、Cassandra、MongoDB、Neo4j和Redis等热门NoSQL软件的技术原理、架构特点和使用方法,使学生掌握常见NoSQL数据库的部署和使用方法,理解分布式大数据系统可能遇到的技术难题和解决方法,进而更深入的理解大数据领域的开源工具和技术原理。 二、教学方法及手段 本课程采用理论与实践相结合的教学方法。在理论上,通过典型案例引入概念、原理和方法。在实践上,由教师讲解案例背景,提供简单思路。引导学生对案例进行针对性的分析,审理和讨论,扩展学生的思维,增加学生的兴趣。通过学生的讨论、自主实践和练习,提高学生的判断能力,专业能力和综合素质。 要求学生自主搭建常见NoSQL数据库,完成参数配置、调整,以及通过命令行和编程等方式进行操作使用。在教学条件允许的情况下,完成软件的分布式部署与调优实验,在理论上,要求学生掌握相关的软件架构、存储模式等方面的技术特点。在每章的任务教学中,可适当布置联系、组织讨论、引导提出扩展的解决方案,充分调动学生的主观能动性,锤炼学生的专业精神并提升动手能力,以达到本课程的培养目的。 三、课程考核方法 突出学生解决实际问题的能力,加强过程性考核。课程考核的成绩构成= 出勤(10%)+平时作业与实验报告(60%)+ 课程综述(30%)。

NOSQL数据库数据模型以及系统介绍

关键词:关系型数据库;非关系型数据库nosql ;云计算技术;数据模型 一、nosql数据库概述 关系型数据库越来越无法满足云计算的应用场景,为了解决此类问题,非关系型数据库应运而生,由于在设计上和传统的关系型数据库相比有了很大的不同,所以此类数据库被称为“nosql(not only sql)”系列数据库。与关系型数据库相比,它们非常关注对数据高并发读写和海量数据的存储,在架构和数据模型方面作了简化,而在扩展和并发等方面作了增强。 二、nosql数据库优势 nosql数据库主要有以下优势: 扩展简单,去掉关系型数据库的关系型特性,数据之间无关系这样就非常容易扩展。典型例子是cassandra,由于其架构类似于经典的p2p,因此能够通过简单添加新的节点来扩展集群; 读写快速,典型例子是redis,由于数据之间无关系,纯内存操作,因此其具有非常出色的性能,单节点每秒可以处理超过10万次的读写操作; 灵活的数据模型,nosql 数据库无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。在关系型数据库中,处理大数据量的表,增加字段的工作量是非常庞大的; 成本低廉,企业级数据库的价格很高,并且随着系统的规模增大而不断上升。高昂的建设和运维成本无法满足云计算应用对数据库的需求。nosql一般都是以开源的形式存在,可以聚集很多人的智慧,获得很多人得关注,可以减少高昂的成本支出。 三、nosql数据库数据模型 目前,主流的nosql数据库包括bigtable、hbase、cassandra、simpledb、couchdb、mongodb以及redis等。nosql常用数据模型包括以下3种。 (1)column-oriented(列式) (2)key-value(键值) 虽然key-value这种模型和传统的关系型相比较简单,有点类似常见的hashtable,一个key对应一个value,但是它能提供非常快的查询速度、大的数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。 (3)document(文档) 在结构上,document和key-value是非常相似的,也是一个key对应一个value,但是这个value主要以json或者xml等格式的文档来进行存储,是有语义的,并且document db 一般可以对value来创建secondary index来方便上层的应用,而这点是普通key-value db 所无法支持的。 四、主要nosql系统的介绍 根据nosql常用的数据模型进行分类,并在每类中选出一种典型系统进行介绍。 (1)面向列存储系统――bigtable bigtable已经在超过60个google的产品和项目上得到了应用,包括 google analytics、googlefinance、orkut等。它具有用性广泛、可扩展、高性能和高可用性的特点。bigtable 是一个是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序map,采用面向列的存储方式来提高数据的读取效率。 bigtable其它特征:稀疏,分布式,持久化。持久化的意思很简单,bigtable的数据最终会以文件的形式放到gfs去。bigtable建立在gfs之上本身就意味着分布式,当然分布式的意义并不仅限于此。稀疏的意思是,一个表里不同的行,列可能完完全全不一样。

NoSQL数据库的特点与应用场景

NoSQL数据库的特点与应用场景 MongoDB、HBase、Redis

目录 1.NoSQL的四大种类 (3) 2.MongoDB (4) 3.HBase (6) 4.Redis (8)

1.NoSQL的四大种类 NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数据库处理任务,这时NoSQL凭借易扩展、大数据量和高性能以及灵活的数据模型成功的在数据库领域站稳了脚跟。 目前大家基本认同将NoSQL数据库分为四大类:键值存储数据库,文档型数据库,列存储数据库和图形数据库,其中每一种类型的数据库都能够解决关系型数据不能解决的问题。在实际应用中,NoSQL数据库的分类界限其实没有那么明显,往往会是多种类型的组合体。 主流nosql的详解:MongoDB、Hbase、Redis

2.MongoDB MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代统的关系型数据库或键/值存储方式。 1.MongoDB特点 ?所用语言:C++ ?特点:保留了SQL一些友好的特性(查询,索引)。 ?使用许可:AGPL(发起者:Apache) ?协议:Custom, binary(BSON) ?Master/slave复制(支持自动错误恢复,使用sets 复制) ?内建分片机制 ?支持javascript表达式查询 ?可在服务器端执行任意的javascript函数

?update-in-place支持比CouchDB更好 ?在数据存储时采用内存到文件映射 ?对性能的关注超过对功能的要求 ?建议最好打开日志功能(参数--journal) ?在32位操作系统上,数据库大小限制在约2.5Gb ?空数据库大约占192Mb ?采用GridFS存储大数据或元数据(不是真正的文件系统) 2.MongoDB优点: 1)更高的写负载,MongoDB拥有更高的插入速度。 2)处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。 3)高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点(数据中心)故障转移。 4)快速的查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度。 5)非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响,整个过程会非常快速。 3.MongoDB缺点: 1)不支持事务。

图形数据库、NOSQL和Neo4j

图形数据库、NOSQL和Neo4j 作者Peter Neubauer译者胡键发布于 2010年9月8日上午12时0分 社区架构,Java 主题NoSQL , 数据库设计, 数据访问 简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle、MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS)。然而,最近随着关系数据库使用案例的不断增加,一些问题也暴露了出来,这主要是因为两个原因:数据建模中的一些缺陷和问题,以及在大数据量和多服务器之上进行水平伸缩的限制。两个趋势让这些问题引起了全球软件社区的重视: 1.用户、系统和传感器产生的数据量呈指数增长,其增长速度因大部分数据 量集中在象Amazon、Google和其他云服务这样的分布式系统上而进一步 加快。 2.数据内部依赖和复杂度的增加,这一问题因互联网、Web2.0、社交网络, 以及对大量不同系统的数据源开放和标准化的访问而加剧。 在应对这些趋势时,关系数据库产生了更多的问题。这导致大量解决这些问题某些特定方面的不同技术的出现,它们可以与现有RDBMS相互配合或代替它们 - 亦被称为混合持久化(Polyglot Persistence)。数据库替代品并不是新鲜事物,它们已经以对象数据库(OODBMS)、层次数据库(如LDAP)等形式存在很长时间了。但是,过去几年间,出现了大量新项目,它们被统称为NOSQL数据库(NOSQL-databases) 本文旨在介绍图形数据库(Graph Database)在NOSQL运动里的地位,第二部分则是对Neo4j(一种基于Java的图形数据库)的简介。 NOSQL环境 NOSQL(Not Only SQL,不限于SQL)是一类范围非常广泛的持久化解决方案,它们不遵循关系数据库模型,也不使用SQL作为查询语言。 简单地讲,NOSQL数据库可以按照它们的数据模型分成4类: 1.键-值存储库(Key-Value-stores) 2.BigTable实现(BigTable-implementations) 3.文档库(Document-stores) 4.图形数据库(Graph Database)

8种Nosql数据库系统对比

8种Nosql数据库系统对比 2013/05/01 ·工具与资源, 开发· 128.3K 阅读· 7 评论· NoSQL, 数据库 分享到:240 ?Android-打造万能适配器 ?Android猜歌游戏是这样炼成的 ?Android必学-AsyncTask基础 ?Android高级Root技术原理解析 本文由伯乐在线 - 唐尤华翻译。未经许可,禁止转载! 英文出处:Kristóf Kovács。欢迎加入翻译组。 导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型N oSQL数据库的文章。 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。 但是NoSQL数据库之间的不同,远超过两SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的NoSQL数据库。针对这种情况,这里对Cassan dra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase进行了比较:(编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而N oSQL致力于改变这一现状。目前Google的BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。参见NoSQL词条。)

1. CouchDB ?所用语言:Erlang ?特点:DB一致性,易于使用 ?使用许可:Apache ?协议:HTTP/REST ?双向数据复制, ?持续进行或临时处理, ?处理时带冲突检查, ?因此,采用的是master-master复制(见编注2)?MVCC –写操作不阻塞读操作 ?可保存文件之前的版本 ?Crash-only(可靠的)设计 ?需要不时地进行数据压缩 ?视图:嵌入式映射/减少 ?格式化视图:列表显示 ?支持进行服务器端文档验证 ?支持认证 ?根据变化实时更新

相关文档
最新文档