cassandra学习流水笔记

来源:互联网 发布:bilibili网页知乎 编辑:程序博客网 时间:2024/05/22 08:11

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会通过Gossip协议发现,他会将这些临时数据返还该节点。

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

0 0