背景
cassandras是由facebook的两位工程开发出来的一款nosql数据库。它兼有Dynamo和BigTable的优点。主要有下面一些特点:
- 分布式,无单点失败
- 基于列族的数据模型
- 可水平扩展,添加或删除节点不需要重启任何进程
安装与配置
cassandra的安装和配置都比较简单。如果不做集群,直接把下下来的压缩包解压后,就可以使用。如果要做集群,那就需要配置conf目录下的storage-conf.xml文件。storage-conf.xml文件中的主要配置参数解释如下:
- ClusterName 集群名.两台机器要处于同一个集群,必须配置相同的集群名
- AutoBootstrap 如果设置为true,当有新结点加入集群时,不再需要额外的操作
- KeySpace 相当于关系数据库中的scheme或database
- Partitioner 分区器.如果要使数据均匀的分布到各个结点上,可以使用RandomPartitioner
- Seeds 种子结点.
- ListenAddress 结点间互相通信使用的ip地址
配置完storage-conf.xml文件后,执行bin目录下的cassandra文件就可以启动cassandra.要监视集群的运行状态可以使用nodeprobe命令.
客户端API
连接cassandra可以使用两种api,一种是thrift api,另一种是高级api.下面是一段用thrift api连接cassandra的代码
Ttransport tr = new Tsocket(“192.168.0.1”, 9160);
TProtocol proto = TBinaryProtocol(tr);
tr.open();
Cassandra.Client client = new Cassandra.Client(proto);
ColumnPath cp = new ColumnPath(“Super1”,
“SuperColumn_1”.getBytes(“utf-8”), null);
ColumnOrSuperColumn cosc = client.get(“Keyspace1”, key, cp,
ConsistencyLevel.ONE);
SuperColumn sc = cosc.super_column;
for (Column col : sc.columns) {
String colname = new String(col.getName(), “UTF-8”);
String colvalue = new String(col.getValue(), “UTF-8”);
… …
}
tr.close();
假设集群有三个结点组成: 192.168.0.1, 192.168.0.2, 192.168.0.3,那么上面这段连接cassandra的代码就有一个问题: 代码中只连接192.168.0.1这一个结点,一旦这个结点宕机就与整个集群失去了联系.但其实cassandra是没有中心结点的,一个结点宕机不会影响整个集群(假设复制因子大于1),所以在连接cassandra时不能只尝试连接一个结点,而应当尝试连接多个结点.
数据的读取和写入
写入过程如下:
1) 写入提交日志
2) 发送数据到合适的结点
3) 写入本地日志并且更新memtables
4) 把memtable中的数据刷新到磁盘上
5) 删除提交日志
6) 如果需要,则对存储的数据进行compact
读取过程如下:
1) 通过api访问任一个结点
2) 如果该结点存在这个key指定的数据,则返回,否则根据partioner计算该key对应的value在哪个结点,并从该结点取得数据返回.
一致性哈希和Gossip协议
cassandra能做到没有单点代失败实际上是由一致性哈希和gossip协议保证的.
限制
使用cassandra时要注意下面这些限制:
- 一行数据必须要能放到一个结点上.cassandra不会把一行数据分开存储
- 一列数据的长度不能大于2GB
- 一行最多可以包含有20亿列
- key必须限制在64kb以下
分享到:
相关推荐
Cassandra技术详解 操作与测试报告 基于nosql实现集群
cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战cassandra 实战...
nosql数据库cassandra 2.1版本运维PPT,教你如何根据日志、nodetool和系统工具追踪cassandra线上出现的问题以及如何优化cassandra。
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非...
Cassandra关键技术详解[整理].pdf
本文档详细介绍了Cassandra,DataStax的原理,以及在各种环境下的安装方法。
The rising popularity of Apache Cassandra rests on its ability to handle very large data sets that include hundreds of terabytes -- and that's why this distributed database has been chosen by ...
DevCenter cassandra客户端 DevCenter cassandra客户端 DevCenter cassandra客户端
Cassandra(apache-cassandra-4.0.1-bin.tar.gz)是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身...
Cassandra(apache-cassandra-3.11.11-bin.tar.gz)是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身...
阿里云cassandra技术架构及最佳实践
Cassandra文档
cassandra介绍
java NoSql Cassandra hector 做的实例,拿出来分享
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。...
DTCC 2014 中国数据库技术大会 大数据技术探索和价值发现 Cassandra应用和改进 360 王峰
1、cassandra的安装、维护使用 2、java操作cassandra实例 3、cql使用详解
cassandra