2012 年NOsql学习笔记之三
十一、如何理解最终一致性
最终一致性
一言以蔽之:过程松,结果紧,最终结果必须保持一致性
为了更好的描述客户端一致性,我们通过以下的场景来进行,这个场景中包括三个组成部分:
- 存储系统
存储系统可以理解为一个黑盒子,它为我们提供了可用性和持久性的保证。
- Process A
ProcessA主要实现从存储系统write和read操作
- Process B 和ProcessC
ProcessB和C是独立于A,并且B和C也相互独立的,它们同时也实现对存储系统的write和read操作。
下面以上面的场景来描述下不同程度的一致性:
- 强一致性
强一致性(即时一致性)假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值
- 弱一致性
假如A先写入了一个值到存储系统,存储系统不能保证后续A,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,C读取到最新值这一段时间。
- 最终一致性
最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。
十二、NOsql与传统数据库系统设计上的区别
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样。
这样做的好处就是:这样的结构非常方便进行表与表之间连接等操作。
但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。为什么呢?
因为不是每个元组都需要所有的字段,但是关系型数据库会为每个元组分配所有的字段。
而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
十三、NOsql的特点(或者叫优点)是什么?
n 它们可以处理超大量的数据。
n 它们运行在便宜的PC服务器集群上。
PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。
n 它们击碎了性能瓶颈。
Nosql的支持者称,通过Nosql架构可以省去将Web或Java应用和数据转换成sql友好格式的时间,执行速度变得更快。
“sql并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,sql值得花钱。但是当数据库结构非常简单时,sql可能没有太大用处。
n 没有过多的操作。
虽然Nosql的支持者也承认关系数据库提供了无可比拟的功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。
n Bootstrap支持
因为Nosql项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。
十四、Google、Facebook、Amazon等大公司用的什么NOsql产品
公司 |
Nosql产品 |
补充说明 |
|
BigTable |
|
|
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 是单进程的服务,性能非常之高,在一台4个Q6600的cpu机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。 |
滑铁卢大学 |
HBase |
|
十五、 NOsql产品的按用途和环境分类
Nosql数据库根据不同的用途和环境大致可以分为以下的三类:
1.满足极高读写性能需求的Kye-Value数据库:
代表性产品有:
Redis,Tokyo Cabinet, Flare
2.满足海量存储需求和访问的面向文档的数据库:
代表性产品有:
MongoDB,CouchDB
3.满足高可扩展性和可用性的面向分布式计算的数据库:
代表性产品有:
Cassandra,Voldemort
十六、 NOsql产品的按数据存储模型分类
七、 序号 |
数据存储模型 |
产品 |
特点 |
1 |
key-value存储 |
Kyoto Cabinet/Tycoon |
|
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 |
|
BaseX |