分区

分区器实际上就是基于分区键字段的哈希函数,由此生成名为令牌的值。可能的令牌值的集合组成一个环,Cassandra会把可能的令牌值分配到集群里的不同节点上。分区器生成的令牌值是用来标识存储相应数据的主节点的

默认的分区器是 Murmur3Partitioner,这是个随机分区器。另外还有有序分区器。有序分区器的目的是为了能把存储相似主键的分区尽可能地分配到相同节点上,以此来提升范围查询的性能。但在实践中,这个好处抵不过数据在集群内分布不均衡的缺点,因为在某些节点上存储的数据记录数可能会远超其它节点。因为这个原因,而分区器又是整个集群范围内的设置,所以大多数情况下大家还是会用默认的分区器。

复制

分区器生成的令牌会决定每个相应的分区存储的主节点,同时我们还要决定要保存哪些额外的数据副本。这就是存在复制策略的原因。用得最多的策略就是 SimpleStrategyNetworkTopologyStrategy

SimpleStrategy主要用于单个数据中心的部署,用户提供一个值,名为复制因子,意思是数据需要保存多少份(多少个副本),剩下的事交给 Cassandra 就好了。

NetworkTopologyStrategy主要用于多个数据中心的部署,采用这个策略时,需要为每个数据中心都指定一个复制因子。

与其它Nosql的区别

与 MongoDB 之类的其他 NoSQL 数据库的主要不同在于,Cassandra 的每份数据副本都是被平等对待的,而不是有主和备。