注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zorksylar

Nothing is impossible , if distributed.

 
 
 

日志

 
 

【cassandra】 Data Partitioning in Cassandra  

2012-07-13 15:52:20|  分类: Distributed |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      Cassandra是一个分布式的数据库,具有较好的容灾性,在设计的时候,数据的分配就非常细的划分了以下几个层次:
      Cluster:逻辑上的集群的概念,包含多个Node。
      DataCenter :数据中心,可以理解为是一个机房,包含多个Rack
      Rack : 机架,机架上包含多个Node
      Node : 可以理解为机器,每个Node上都需要标示出这个Node是属于哪个DC和RAC上,
                      如cassandra的cassandra-topology.properties这个配置文件中存有Cassandra Node IP=Data Center:Rack的记录用于设置。
       
      当你启动了一个Cassandra Cluster的时候,就必须设定数据是如何分布在这个Cluster上的(choosing a partitioner for the cluster)(关于partitioner后面会解释),这个设定不是对某个Keyspace而言的,而是对全局,这个Cluster而言的。
     这个Cluster中各个Node在逻辑上构成了一个环(ring),每个Node都会分配一个Token,并且这个Token和Node是一一对应的,这个Token决定了这个Node在ring中的位置。数据根据自己的row key 按照环形分配到各个Node上。row的第一个replica会分配在ring中的第一个 Token 大于这个row key的 node上。这样来看也就是说每个node都会负责ring中的某个区间的row, 这个区间是这个node的Token的值到下一个node的Token值这个范围。

    举个例子:一个Cluster有4个node,这个Cluster中的row key都分配在[0,100],每个node的token分别是:0,25,50,75。第1个node负责的范围是个wrapping range(75 - 0). 所以row的分配见下图:

【cassandra】 Data Partitioning in Cassandra - sylareclipse - zorksylar


关于Partitioner
      Partitioner 我的理解是一个row key到存储这个row key数据Node的一个映射。
      注意Partitioner是对Cluster全局的设置,如果要改变Partitioner的设置,需要改变完之后重新上传数据到Cassandra。所以设置Partitioner的时候要谨慎。
      Partitioner的选择有  RandomPartitioner ,OrderedPartitioner  , ByteOrderedPartitioner ,  OrderPreservingPartitioner  CollatingOrderPreservingPartitioner 
      默认情况下设置的RandomPartitioner.
      RandomPartitioner  将计算row key的MD5 hash值,通过这个值决定将这个数据分配在哪个Node上,这个值的范围是0到2^127,每个Node都会分配一个Token在0到2^127的范围内,row key 的MD5值属于这个范围内的row key 都归这个Node存储。对于单个DC的部署,每个Node所负责的Data range都是均等的。对于多个DC的部署,每个DC内的Node所负责的Data range也是均等的。采用RandomPartitioner还能够在一定程度上负载均衡。
      相对于其他的Partitioner,RandomPartitioner是推荐的设置。
      

  评论这张
 
阅读(218)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018