cassandra技术分享


背景

 

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以下

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值