NoSQL之Cassandra

 

  9月初听了一个讲座,演讲者是张月同学,他给我们分享了Cassandra nosql数据库,讲得很精彩,听完之后收益良多。

  Cassandra是一个noSQL数据库,在国外被广泛使用,比如FaceBook、Twitter、Intel等,国内用的较少,只有奇虎360等公司在大规模使用。张月首先讲了Cassandra怎么来的,之后讲了Cassandra的一些具体细节,让我印象比较深刻的有数据分布以及通讯协议两个部分,最后讲了Cassandra的效率以及使用情况。

1. Cassandra怎么来的

他山之石可以攻玉,Cassandra从Dynamo和BigTable中借鉴了相应的思想。

类似Dynamo的特性

类似bigTable的特性

对称、P2P的结构,没有主节点

稀疏、列存储模型

基于 Gossip的集群管理

commit log,内存有 MemTable,SSTable Files

分布式哈西表

支持Hadoop

最终一致性

2. Cassandra中的数据是怎样分布的?

1.2版本之前使用的是普通一致性哈西算法,如图上部所示,一共6个节点,每个节点计算Hash值a,之后各个节点根据各自的hash值映射到一段区间上,比如Node1对应着A,此外,各个节点保存着其它节点的两个副本,比如Node1还保存着Node5的E,以及Node6的F。

普通的一致性哈西有个缺点,当增加或删除节点时会导致数据分布不均衡,比如Node2宕机后,原先Node2的数据全部分布到Node3上,造成Node3的数据量大大多余其它节点;同理,当在区间B插入一个节点Node7时,会使得Node2和Node7的数据量大大小于其它节点。

为了解决上述问题,1.2版本使用带有虚拟节点的一致性哈西算法,如图下部所示,一共6个节点,每个节点需要计算两次hash,首先与传统一样计算Hash值a,然后根据这个值a计算多个hash值a1,a2,a3...,即将一个节点映射到多个hash值,从而每个节点不再仅仅对应一个区间,而是对应着许多小区间,如果保证各个hash值是随机的,则能使得这些小区间的分布也是随机的,从而确保了数据分布的均衡性

 3. Gossip协议管理集群

每隔T秒,集群中各个节点将都会将自己的Heartbeat信息通过Gossip传递给其他节点。Gossip协议效率较高,只需要Log(N)次就能将所有节点状态信息传递给各个节点。

4. Cassandra的效率以及使用情况

张月给了张图,上面显示Cassandra读写速度远远大于Hbase和MongoDB,但是也有很多人质疑这个图,因为他没有给出这张图的实验条件,比如多大数据量,各个数据库是否在同一集群上等等。不过我后来查看了些文献,发现Cassandra的性能还是很不错的。

5. 讨论

会后有个问题:既然Cassandra性能这么出色, 为什么国内很少有公司使用Cassandra? 为什么国外的facebook和twitter等都弃用Cassandra而转用HBase了,Cassandra有什么不足?

张月的回答是国内的宣传不够,至于facebook和twitter为什么转用HBase,可能和HBase天生支持Hadoop有关系,可以结合mapreduce,虽然Cassandra也支持Hadoop,但是配置起来特别麻烦。

后来我网上查了下,Cassandra还是有一些缺点,或许因为这些使得很多大公司转向HBase。

a)Cassandra来源自Facebook,但是在Facebook内部Cassandra 目前只用在inbox search产品上,容量大约有一两百T,且Inbox Search在Facebook的也不是核心应用;

b)Cassandra出身较晚,自身还存在不少问题。

 
 

Cassandra的更多相关文章

  1. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  2. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  3. cassandra写数据CommitLog

    cassandra 两种方式: Cassandra-ArchitectureCommitLog Cassandra持久化-Durability 一种是配置commitlog_sync为periodic ...

  4. 学习Cassandra的开源电子书(中英文版)

    学习Cassandra的开源电子书(中英文版)发布啦:http://teddymaef.github.io/learncassandra/ 之前发布了英文版,现在包含中文版了. 学习Cassandra ...

  5. Solr与Cassandra二级缓存实践

    额达到数十亿美元.在Newegg,每天有数以千万计的用户浏览商品,并产生下单交易等后续操作.我们构建的数据系统,必须应对日益增大的数据量,具备健壮性.可靠性.目前,我们采用Cassandra来构建Ne ...

  6. cassandra.yaml介绍

    cluster_name 集群的名字,默认情况下是TestCluster.对于这个属性的配置可以防止某个节点加入到其他集群中去,所以一个集群中的节点必须有相同的cluster_name属性. list ...

  7. Cassandra数据类型:

    Cassandra在CQL语言层面支持多种数据类型[12]. CQL类型 对应Java类型 描述 ascii String ascii字符串 bigint long 64位整数 blob ByteBu ...

  8. Cassandra 配制 cassandra.yaml

    一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...

  9. Centos启动Cassandra交互模式失败:No appropriate python interpreter found

    在CentOS6.5安装好Cassandra后,启动交互模式: bin/sqlsh 192.168.10.154 时,报错 No appropriate python interpreter foun ...

  10. cassandra 公司内分享 ppt

    在公司内分享的cassandra ppt http://files.cnblogs.com/files/yuhan-TB/cassandra.pptx

随机推荐

  1. table中的边框合并实例

    <html><head><style type="text/css">table,th,td{border:1px solid blue;bor ...

  2. python_random随机

    在数据清洗,评估 ,抽验等等过程中,经常有这样的应用场景 : 需要在一个大的数据集合中随机出来样本,进行人工评估.为了保证足够随机,借助脚本来实现. 下面一个脚本  ,用于应对这种应用场景. 使用方法 ...

  3. Moq 和RhinoMocks

    Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 ...

  4. vim跳转

    w 跳到下一个单词的开始 e 跳到单词的结束 b 向后跳 gg 跳到文件的开始 G 跳到文件的结束 10gg 或10G 跳到第10行 ta 跳到下一个a 前面 fa 跳到下一个a 大写的意思相反 另外 ...

  5. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...

  6. 微信公众平台消息接口PHP版开发教程

    原文:微信公众平台消息接口PHP版开发教程  一.写好接口程序 在你的服务器上上传好一个接口程序文件,如http://www.yourdomain.com/weixin.php  内容如下: &l ...

  7. ARM指令集中经常使用的存储和载入指令

    ARM微处理器支持载入/存储指令用于在寄存器和存储器之间传送数据,载入指令用于将存储器中的数据传送到寄存器,存储指令则完毕相反的操作.经常使用的载入存储指令例如以下: -  LDR     字数据载入 ...

  8. asp.net动态加载ascx用户控件

    原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或T ...

  9. JavasScript实现调查问卷插件

    原文:JavasScript实现调查问卷插件 鄙人屌丝程序猿一枚,闲来无事,想尝试攻城师是感觉,于是乎搞了点小玩意.用js实现调查问卷,实现了常规的题型,单选,多选,排序,填空,矩阵等. 遂开源贴出来 ...

  10. 客户端Webview重定向

    今天在客户端的网页中写了句alert的代码,发现执行了两次,后来发现网页的地址写的是http://192.168.14.72/app 客户端Webview加载网页,对于不完全路径会重定向到完全路径,导 ...