cassandra学习流水笔记
2014-05-02 17:54
330 查看
cassandra 结合了Bigtable的数据模型以及Dynamo的分布式技术。
配置集群:
配置cassandra.yaml文件
1,seeds 所有的节点的seeds要相同
2,listen_address 本机ip
3,rpc_address 本机ip或者0.0.0.0
删除节点: ./nodetool removenode HostID
启动客户端:cassandra-cil
数据格式:
Column:Column是Cassandra中最小的数据单元。它是一个3元的数据类型,包含:name,value和timestamp。
SuperColumn:看作一个name + 一个Column的数组。
ColumnFamily:一个key看作一行,其下有若干column\SuperColumn。
ColumnFamily有分为Standard(对应Column)和Super类型(对应SuoerColumn)。
Keyspace:Keyspace是我们的数据最外层,你所有的ColumnFamily都属于某一个Keyspace。
在Casssandra中的每个row中,所有的Column都会按照name排序。
数据分布:集群采用DHT(一致性hash)
cassandra采用简化版的Chord算法。
考虑到节点的异构性,不同的节点的处理能力可能差别很大,Cassandra采用了Dynamo中改进的一致性Hash算法:每个物理节点根据其性能差异分配多个token,每个token对应一个虚拟节点,每个虚拟节点的处理能力相当,并随机分配到hash空间。
配置复制数量:
在createkeyspace的时候若没有配置貌似是没有复制的,这会导致在一个节点down掉后无法取数据。
两种算法:
1,SimpleStrategy;
用在只有一个数据中心的情况,第一个数据副本放在 环里的一个节点上(这个节点由上节说到的分区器确定),其他的数据副本,按照顺时针方向,依次放在写一个节点。(不考虑机架或者数据中心的位置)。
2,NetworkTopologyStrategy
用于多个数据中心。
配置复制数量为2:
create key space KEYSPACE名字 with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'and strategy_options = {replication_factor:2};
副本的存储:假设有N个副本,DHT定位到数据所属节点K,则数据存储位置为节点K,K+1,K+2....K+N-1。若K+i节点宕机,则往后再找一个节点K+N代替;当K+i节点恢复后,临时代替节点K+i会通过Go
4000
ssip协议发现,他会将这些临时数据返还该节点。
Snitch:
一个snitch定义了拓扑信息,主要的功能是:1,根据网络拓扑确定数据流向;2,尽量使不同的副本存放在同一个机架(RAC)中。
节点采用Gossip完成节点通信:
当一个节点启动时,获取配置文件(storage-conf.xml)中的seeds配置,从而知道集群中所有的seed节点,Cassandra内部有一个Gossiper,每隔一秒运行一次(在Gossiper.java的start方法中),按照以下规则向其他节点发 送同步消息:
1, 随机取一个当前活着的节点,并向它发送同步请求
2, 向随机一台不可达的机器发送同步请求
3, 如果第一步中所选择的节点不是seed,或者当前活着的节点数少于seed数,则向随意一台seed发送同步请求
存储机制:
先将操作记录在日志(commitlog)中,然后将数据先写入内存中的Memtable,Memtable达到条件后刷新到磁盘,保存为SSTable,同一个CF的多个SSTable可以合并(Compaction)以优化读操作。
(是否是内存越大,写入速度越快?)
在执行update操作的时候,也是先写入commit log和Memtable,再由Memtable flush入硬盘,形成一个新的sstable,最后新老sstable合并。
而读取过程是:当要读取k时,会将内存内的Memtable,硬盘内包含k的SSTable都merge到一起,再读取。
存储索引
同Google的Bigtable一样,Cassandra采用LSM树存储索引,其主要思想是:将对数据的修改增量保持在内存中,当达到指定大小时候,这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存最近修改操作。
配置集群:
配置cassandra.yaml文件
1,seeds 所有的节点的seeds要相同
2,listen_address 本机ip
3,rpc_address 本机ip或者0.0.0.0
删除节点: ./nodetool removenode HostID
启动客户端:cassandra-cil
数据格式:
Column:Column是Cassandra中最小的数据单元。它是一个3元的数据类型,包含:name,value和timestamp。
SuperColumn:看作一个name + 一个Column的数组。
ColumnFamily:一个key看作一行,其下有若干column\SuperColumn。
ColumnFamily有分为Standard(对应Column)和Super类型(对应SuoerColumn)。
Keyspace:Keyspace是我们的数据最外层,你所有的ColumnFamily都属于某一个Keyspace。
在Casssandra中的每个row中,所有的Column都会按照name排序。
数据分布:集群采用DHT(一致性hash)
cassandra采用简化版的Chord算法。
考虑到节点的异构性,不同的节点的处理能力可能差别很大,Cassandra采用了Dynamo中改进的一致性Hash算法:每个物理节点根据其性能差异分配多个token,每个token对应一个虚拟节点,每个虚拟节点的处理能力相当,并随机分配到hash空间。
配置复制数量:
在createkeyspace的时候若没有配置貌似是没有复制的,这会导致在一个节点down掉后无法取数据。
两种算法:
1,SimpleStrategy;
用在只有一个数据中心的情况,第一个数据副本放在 环里的一个节点上(这个节点由上节说到的分区器确定),其他的数据副本,按照顺时针方向,依次放在写一个节点。(不考虑机架或者数据中心的位置)。
2,NetworkTopologyStrategy
用于多个数据中心。
配置复制数量为2:
create key space KEYSPACE名字 with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'and strategy_options = {replication_factor:2};
副本的存储:假设有N个副本,DHT定位到数据所属节点K,则数据存储位置为节点K,K+1,K+2....K+N-1。若K+i节点宕机,则往后再找一个节点K+N代替;当K+i节点恢复后,临时代替节点K+i会通过Go
4000
ssip协议发现,他会将这些临时数据返还该节点。
Snitch:
一个snitch定义了拓扑信息,主要的功能是:1,根据网络拓扑确定数据流向;2,尽量使不同的副本存放在同一个机架(RAC)中。
节点采用Gossip完成节点通信:
当一个节点启动时,获取配置文件(storage-conf.xml)中的seeds配置,从而知道集群中所有的seed节点,Cassandra内部有一个Gossiper,每隔一秒运行一次(在Gossiper.java的start方法中),按照以下规则向其他节点发 送同步消息:
1, 随机取一个当前活着的节点,并向它发送同步请求
2, 向随机一台不可达的机器发送同步请求
3, 如果第一步中所选择的节点不是seed,或者当前活着的节点数少于seed数,则向随意一台seed发送同步请求
存储机制:
先将操作记录在日志(commitlog)中,然后将数据先写入内存中的Memtable,Memtable达到条件后刷新到磁盘,保存为SSTable,同一个CF的多个SSTable可以合并(Compaction)以优化读操作。
(是否是内存越大,写入速度越快?)
在执行update操作的时候,也是先写入commit log和Memtable,再由Memtable flush入硬盘,形成一个新的sstable,最后新老sstable合并。
而读取过程是:当要读取k时,会将内存内的Memtable,硬盘内包含k的SSTable都merge到一起,再读取。
存储索引
同Google的Bigtable一样,Cassandra采用LSM树存储索引,其主要思想是:将对数据的修改增量保持在内存中,当达到指定大小时候,这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存最近修改操作。
相关文章推荐
- 大数据时代的数据库选择:SQL还是NoSQL?
- PHP对MongoDB[NoSQL]数据库的操作
- mongodb常遇到的错误。
- NoSQL的现状
- 5款主流NoSQL数据库全方位横评
- HBase技术介绍
- NoSQL 纪要
- 值得尝试的10款出色NoSQL数据库
- Cassandra,Mongodb,CouchDB,Redis,HBase分类探讨
- MongoDB vs Cassandra
- keven的路
- Redis与Memcached的区别
- 谈谈Memcached与Redis(一)
- 谈谈Memcached与Redis(三)
- 谈谈Memcached与Redis(四)
- NoSQL架构的几幅图
- NoSQL数据库选型
- HBase vs Cassandra
- MongoDB与CouchDB全方位对比
- Cassandra的简单介绍