cassandra学习流水笔记

前端之家收集整理的这篇文章主要介绍了cassandra学习流水笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的NoSQL相关文章