现在的位置: 首页 > 综合 > 正文

2012 年NOSQL学习笔记之三

2013年08月21日 ⁄ 综合 ⁄ 共 2688字 ⁄ 字号 评论关闭

2012 年NOSQL学习笔记之三

十一、如何理解最终一致性

最终一致性

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

 

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

  • 存储系统

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

  • Process A

ProcessA主要实现从存储系统writeread操作

  • Process B 和ProcessC 

ProcessBC是独立于A,并且BC也相互独立的,它们同时也实现对存储系统的writeread操作。

 

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

  • 强一致性

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

  • 弱一致性

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

  • 最终一致性

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

十二、NOSQL与传统数据库系统设计上的区别

关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样。

这样做的好处就是:这样的结构非常方便进行表与表之间连接等操作。

 

但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。为什么呢?

因为不是每个元组都需要所有的字段,但是关系型数据库会为每个元组分配所有的字段。

 

 

而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

十三、NOSQL的特点(或者叫优点)是什么?

它们可以处理超大量的数据

它们运行在便宜的PC服务器集群上

PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。

它们击碎了性能瓶颈

NoSQL的支持者称,通过NoSQL架构可以省去将WebJava应用和数据转换成SQL友好格式的时间,执行速度变得更快。

“SQL并非适用于所有的程序代码,
对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。

没有过多的操作

虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。

Bootstrap支持

因为NoSQL项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。

十四、Google、FacebookAmazon等大公司用的什么NOSQL产品

公司

NoSQL产品

补充说明

Google

BigTable

 

Facebook

Cassandra

 

Amazon

Dynamo

 

Apache

HBase

 

日本第一大SNS网站mix

Tokyo Cabinet (TC) 

 

日本第二大SNS网站green.jp

Flare

 

淘宝网

Tair

Tair是由淘宝网自主开发的Key/Value结构数据存储系统,在淘宝网有着大规模的应用。您在登录淘宝、查看商品详情页面或者在淘江湖和好友“捣浆糊”的时候,都在直接或间接地和Tair交互。

新浪网

memcachedb

memcachedb是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。

 

 

Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法

LevelDB
是单进程的服务,性能非常之高,在一台4Q6600CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w

滑铁卢大学

HBase

 

 

十五、   
NOSQL产品的按用途和环境分类

NoSQL数据库根据不同的用途和环境大致可以分为以下的三类:

1.满足极高读写性能需求的Kye-Value数据库:

代表性产品有:

RedisTokyo Cabinet Flare

2.满足海量存储需求和访问的面向文档的数据库:

代表性产品有:

MongoDBCouchDB

3.满足高可扩展性和可用性的面向分布式计算的数据库:

代表性产品有:

CassandraVoldemort

 

十六、   
NOSQL产品的按数据存储模型分类

七、   
序号

数据存储模型

产品

特点

1

key-value存储

Kyoto Cabinet/Tycoon

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

Redis

Berkeley DB

MemcacheDB

Flare

2

文档存储

MongoDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

CouchDB

3

列存储

Hbase

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

Cassandra

Hypertable

4

图存储

Neo4J

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

FlockDB

5

对象存储

db4o

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

Versant

6

XML数据库

Berkeley DB XML

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath

BaseX

 

 

 

抱歉!评论已关闭.