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
随机推荐
- 【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号
首先,需要登录github注册一个帐号:https://github.com/ 注册帐号登录后,.在右上角,"新仓库": 然后会出现例如以下的界面: 仅仅须要输入仓库的名称,描写叙 ...
- mysql 数据库插入语句之insert into,replace into ,insert ignore
近期才发现mysql的插入语句竟然有如此多的使用方法,这里拿来分享一下. ①关于insert into : insert into table_name values(); insert into t ...
- WebView无法放大缩小解决方式
先看看我们之前所写的代码 1) 加入权限:AndroidManifest.xml中必须使用了许可"android.permission.INTERNET" 2) 使用了一个WebV ...
- UITabBarControler解决旋转问题
在遇到开发项目中播放视频,播放视频回列表后,,列表 NavigationController 里边, NavigationController 在 UItabBarController 里边,不要旋转 ...
- 概率图形模型(PGM)学习笔记(一)动机和概述
在本文中,基于Daphne Koller完成课程. PDM(ProbabilisticGraphiccal Models) 称为概率图模型. 以下分别说明3个词相应的意义. 概率 -给出了不确定性的明 ...
- AFNetworking3.0 POST请求
// 请求管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer ...
- C#二维码生成解析
C#二维码生成解析工具,可添加自定义Logo 二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能 ...
- IOS中UIDatePicker
UIDatePicker 1.常见属性 /* 样式 UIDatePickerModeTime,时间 UIDatePickerModeDate,日期 UIDatePickerModeDateAndTim ...
- bootstrap基本标签总结2
[布局]bootstrap基本标签总结2 缩略图 <div class="container"> <div class="row"> ...
- 基于4.5Framework web程序、SQLSERVER数据库打包
原文:基于4.5Framework web程序.SQLSERVER数据库打包 估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水... 最近公司要求我们把项目和数据库(SQL ...