花钱的年华

江南白衣,公众号:春天的旁边

Cassandra杂记

| Filed under 技术

最近又开始新一轮的Cassandra选型测试,稳定性上还是会遇到Query Timeout,把旧资料翻出来记一下。但,未完待续。

几乎是完美的特性列表

Cassandra是Peer 2 Peer完全去中心化的的分布式数据库

也就是它没有控制节点,只通过Gossip协议同步集群状态,
它的数据节点也没有Master/Slave之分,使用RWN(R+W>N)保证一致性。
完全可线性扩展的,基于Virtual Node的分区方式。

Cassandra 还是天生的跨数据中心

数据的读写都支持跨数据中心的设计,不是后来外挂的跨数据中心复制与切换方案,这也是它完胜其他SQL/NOSQL的地方最吸引我的地方。
Cassandra是列式文件数据库

它不是内存数据库,数据不放在内存里,因此可以存T级的数据。

写入时,先写到内存MemTable(1/4 JVM size)和顺序写的Commit Log文件(用于在Crash后恢复MemTable),满了会被刷成磁盘上的SSTable文件, SSTable再时不时合并一下,详见LSM模式

读取则需要从磁盘读取,使用Bloom Filter加速在各个SSTable文件中寻找所有插入修改记录再拼装出查询所需字段。所以它是少有的写比读还快的数据库

不过Cassandra内置了使用native memory(off-heap不占JVM)的缓存机制,不需要再加一个Memcached/Redis在前面。

它的删除也不是直接的删除,只做标记,等SSTable合并时再处理,还要更新Bloom Filter。 删除的性能很差,所以绝对不合适做Session之类短生命周期数据的存储

它是列式的,记录有属性也支持按属性查询,不是简单Key-Value数据库。 不过数据其实还是以行存储。
有数据expired 设置,Counter类型这些新一代DB的功能。

CQL
CQL,类似于SQL(DDL与DML都有),甚至有3PP项目提供ORM/JPA的支持。
CQL不支持Join表查询,但支持 column类型是map、list、 set ,也就是可以把子表也放进主表的column里。
CQL不支持GroupBy的聚合。

 

RWN

官方比较推荐的复制数份数是3(N=3),写的时候一定要成功写入两台才返回(W=2),和读取时也获取两台的结果返回结果最新的那条。满足R+W>N的约束,因为W在三份复制里成功写了两份,则R在三份复制里读取任意两份,其中一定有一份是最新的。

满足此条件又保证HA,最少的机器也是4台,否则crash了一台就无法实现N=3了。

如果只有三台机器,N=2,W=2,R=1 ,貌似也满足一致性约束。

 

稳定性

Cassandra 2.0在这几周各种测试的折腾下,死活跑不出一个平静的下午,不愧是把Digg的副总裁弄下课了的主。和清汤一样简单的Redis比,还是越复杂的东西越容易坏,它的功能实在太完备了。不过,好像也挺多项目用Cassandra用着挺顺手的呀,他们的神经得有多粗壮。 20140-4-23

后来,又找到一位同病相连者:我是如何一夜变身 Cassandra DBA的,每次看别人深夜大战NOSQL,都是心肝儿颤的感觉.....Cassandra好像做这种大战的主角的机会最多。

(Caption: 心中默默祈禱,上帝保佑)

 

参考资料

《Mastering Apache Cassandra 2nd Edition.2015》 百度网盘 密码:nl2t

发表评论

您的电子邮箱不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>