Cassandra
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的更多相关文章
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- ASP.NET Core Web API Cassandra CRUD 操作
在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...
- cassandra写数据CommitLog
cassandra 两种方式: Cassandra-ArchitectureCommitLog Cassandra持久化-Durability 一种是配置commitlog_sync为periodic ...
- 学习Cassandra的开源电子书(中英文版)
学习Cassandra的开源电子书(中英文版)发布啦:http://teddymaef.github.io/learncassandra/ 之前发布了英文版,现在包含中文版了. 学习Cassandra ...
- Solr与Cassandra二级缓存实践
额达到数十亿美元.在Newegg,每天有数以千万计的用户浏览商品,并产生下单交易等后续操作.我们构建的数据系统,必须应对日益增大的数据量,具备健壮性.可靠性.目前,我们采用Cassandra来构建Ne ...
- cassandra.yaml介绍
cluster_name 集群的名字,默认情况下是TestCluster.对于这个属性的配置可以防止某个节点加入到其他集群中去,所以一个集群中的节点必须有相同的cluster_name属性. list ...
- Cassandra数据类型:
Cassandra在CQL语言层面支持多种数据类型[12]. CQL类型 对应Java类型 描述 ascii String ascii字符串 bigint long 64位整数 blob ByteBu ...
- Cassandra 配制 cassandra.yaml
一.设置用户名和密码 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenticator 改成 authenticator: Password ...
- Centos启动Cassandra交互模式失败:No appropriate python interpreter found
在CentOS6.5安装好Cassandra后,启动交互模式: bin/sqlsh 192.168.10.154 时,报错 No appropriate python interpreter foun ...
- cassandra 公司内分享 ppt
在公司内分享的cassandra ppt http://files.cnblogs.com/files/yuhan-TB/cassandra.pptx
随机推荐
- Linux下df与du两个命令的差别?
Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...
- vs2005中的WebBrowser控件的简单应用
原文:vs2005中的WebBrowser控件的简单应用 这个控件被封装了一下,和以前的调用方式稍有不同.事件还是那几个,变化不大.方法变了不少.从网上能查到的资料不多,贴出一些代码来作参考.看看这段 ...
- MVC5控制器、路由、返回类型、选择器、过滤器
ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器 [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...
- 74LS183 加法器 【数字电路】
74LS183 搭的一个还有点意思的加法电路,串行进位的 2+6 == 8 大家都懂的哈哈
- 安卓MonkeyRunner源码分析之与Android设备通讯方式
如前文<谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析>所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目 ...
- C# 以嵌入到窗体的方式打开外部exe
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using S ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
- SVG 学习(二)--- 创建组合交互式应用
接着上一节的内容,本次学习主要介绍SVG组合式应用以及js交互式应用! 1.组合式应用 绘制两棵带有投影效果的树! <svg width="400" height=" ...
- HP quality center 9.0 邮件设置
[转载]HP quality center 9.0 邮件设置 (2010-09-20 10:28:03) 转载▼ 标签: 转载 原文地址:HP quality center 9.0 邮件设置作者: ...
- shell删除指定时间之前的文件
cat delbak.sh 1 #!/bin/sh 2 location="/root/sqlbak/" 3 find $location -mtime +30 -type f | ...