您的位置:首页 > 数据库

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树存储索引,其主要思想是:将对数据的修改增量保持在内存中,当达到指定大小时候,这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存最近修改操作。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nosql cassandra