文档章节

走进cassandra之三 分区器

chenkangyao
 chenkangyao
发布于 2016/07/19 13:30
字数 1158
阅读 8
收藏 0
点赞 0
评论 0

从这节开始,都是高年级知识了,需要一点分布式的基础知识。

以前的文章说到, james(公司大佬)把任务分给了几拨人来做,那么怎么个分法呢? 什么任务交给什么人呢?
James估计是有自己的一套算法的, 在cassandra里面,这个对应的概念就叫 data partitioning.(数据分区)
数据分区,也是有一套算法的,里面有这3个重要参数:
• A partitioner that determines which node to store the data on.
• The number of copies of data, which is determined by the replica placementstrategy.
• The topology of the cluster, which is the number of nodes, the distributionof the nodes on racks, and the number
of data centers.

第一个参数说的是,你是用的什么分区器,打算怎么分区,分区的意思,就是数据分布,怎么把数据分布到很多很多的节点上。
第二个参数说的是,你的数据,有多少个副本,你是肯定不能只有 一份数据的,否则你这台死掉了,就消失了,必须准备好备胎。
第三个参数说的是,网络拓扑结构,数据中心,机架。你想想,机器总是放在机架上的,机架总是放在机房里的,机房总是放在大楼上的,一个大楼就可以视为一个数据中心,你要是南京,北京,上海,有三个机房,那你就是三个数据中心了。

在cassandra里面,这一堆大量的数据,表现为一个环(ring),为什么是一个环儿呢?
就是一个圆,无头无尾,自称一体,你要是看图的话,书上举的例子,都是画了一个圆,来说明数据咋分布的。就是james和韶涵他们手拉手,组织长了一个环儿,翩翩起舞。

环里的每一个节点,负责一部分数据。(one or more ranges of the data)。
同时,环里的节点,都持有一个令牌(token),这个令牌的作用,就是确定 环里翩翩起舞的韶涵,是真正的韶涵。
拿着令牌,james给你分任务,让你承包哪一块。

对于列族来说,承包给谁,是通过 row key来标示的。(Columnfamily data is partitioned across the nodes based on the row key). 一个节点,负责一小块区域的row key.
上面说了,要搞承包,怎么个包法呢?用什么办法呢?
Cassandra offers the following partitioners:

• RandomPartitioner

• ByteOrderedPartitioner

cassandra提供了2个办法,第一个办法叫RandomPartitioner。
啥意思呢?
掷骰子。

大家不要小瞧骰子,在很多情况下,这都是最公平的一种方式。
为了保证公平,得有一个算法来掷骰子。

The RandomPartition uses consistent hashing to determinewhich node will own a particular row。

这个算法翻译过来叫, 一致性哈希算法。
哈希哈希,嘻嘻哈哈,稀里哗啦,都散架了。

To distribute the data (including replicas) evenly acrossthe nodes, a hashing algorithm creates
an MD5 hash value of the row key.
这个分法,就是强调公平(evenly),各个节点,谁也别有怨言,上天来定,童叟无欺。

公平就是最好吗?
NO.
公平不见得有效率。

所以,我们还第二种算法来分包。
ByteOrderedPartitioner
这个是什么意思呢?
按照byte 的顺序, 来组织分区数据。
这个比刚才掷骰子不一样的地方是,它是有顺序的。
有顺序有什么用呢?
可以举个例子,把这一排人,按照个高个矮 排个队,排好对之后呢,如果你想要找 1.7 -1.8 米的人,就很容易找到了。
在cassandra里对应的例子就是:
Using the ordered partitioner allows range scans over rows.For example, if yourapplication has user names as the row key, you can scan rows
for users whose names fall between Jake and Joe.

你可以很容易找到 名字介于 Jake and Joe之间的人。

如果你有多个数据中心,分发数据就要使用另外一个分区器。
NetworkTopologyStrategy
在现实世界中,多个数据中心一般分布在不同的地理位置,比如说亚洲和美洲。
因此,对于这类情况,要特殊处理一下。
The preferred replication placement strategy for multiple data centerdeployments is the  NetworkTopologyStrategy,which calculates replicaplacement per data center

这个分区策略,是基于数据中心考虑问题,举例来说,你最少要保证,一个数据中心里,得有一个最新的记录的副本。

上面说的,都是如何分发数据的事情。

在现实世界里,每个节点都不是绝对可靠的,说不定会生病,死掉,所以你的数据必须要有备份。

下篇就来说这个事, 副本机制。

© 著作权归作者所有

共有 人打赏支持
chenkangyao
粉丝 4
博文 29
码字总数 36163
作品 0
广州
高级程序员
走进cassandra 之一 CAP和分布式

决定share一下我的cassandra学习成果,写一些博客,跟大家共同分享一下,准备写10篇文章,内容分别涉及 分布式存储概述及CAP, 数据模型, 分区器, 副本机制, 存储机制, 数据读写删, 最终一...

chenkangyao ⋅ 2016/07/19 ⋅ 0

走进cassandra之四 副本机制

如果你要想最大限度保持一个东西不会忘记掉,你最好的办法,不是死记,记好几十遍。 而是要告诉几个人,这样就算你忘记了,别人还记得。 在cassandra里面呢,这个原理可以描述为 Replicatio...

chenkangyao ⋅ 2016/07/19 ⋅ 0

NoSQL数据库 Cassandra(一)

随着互联网技术的发展,对数据存储的要求越来越高,在容量、安全性、备份、高可用性等方面都有很高的需求,很受欢迎的关系型数据库有SQLServer、MySQL、Orcale等,非关系型数据库有key、val...

tianya1993 ⋅ 2017/10/26 ⋅ 0

调整Java资源功能详情

调整Java资源 调整Java虚拟机(JVM)可以提高性能减少内存消耗。 本页面的主题: 关于垃圾收集 选择一个Java垃圾收集器 将G1设置为Java垃圾收集器 确定堆大小 Cassandra如何使用内存 - 请先阅...

yuanjian0814的博客 ⋅ 2017/12/18 ⋅ 0

【译】Cassandra数据模型

本文是英文贴的翻译,可以直接查看英文原文。 选择正确的数据模型正是使用Cassandra最困难的一部分。如果诸位有相关开发经验,就会发现CQL虽然看起来很熟悉,但是使用起来却完全不同。 本文将...

Landas ⋅ 2016/12/21 ⋅ 0

Cassandra维护最终一致性 和存储机制 分区策略

维护最终一致性 Cassandra 通过4个技术来维护数据的最终一致性,分别为逆熵(Anti-Entropy),读修复(Read Repair),提示移交(Hinted Handoff)和分布式删除。 1) 逆熵 这是一种备份之间的...

Will--wang ⋅ 2015/05/26 ⋅ 0

走进cassandra之六 数据读写删

先说写,再说读,最后说 数据一致性(data consistency)。 cassandra对于 数据写入,那是相当给方便的,比对 首长儿子还亲呢, 写的相当快,相当高效。 相比来说,关系型数据库,对于数据 ...

chenkangyao ⋅ 2016/07/19 ⋅ 0

Apache Ignite 1.6.0 发布,内存数据组织平台

Apache Ignite 内存数据组织平台 1.6.0 版本发布: --------------------------------------- Ignite .NET: 新增:为缓存的SQl查询提供了 LINQ Provider; 新增: 原生的配置机制 (C#, app.c...

李玉珏 ⋅ 2016/05/23 ⋅ 9

考虑 Apache Cassandra 数据库

简介 在数据库历史文章 “What Goes Around Comes Around”(参阅 参考资料)中,Michal Stonebraker 详细描述了存储技术是如何随着时间的推移而发展的。实现关系模型之前,开发人员曾尝试过...

ihaolin ⋅ 2014/08/17 ⋅ 0

Cassandra NoSQL数据模型设计指南

原文:Cassandra NoSQL Data Model Design 翻译:雁惊寒 摘要:本文通过一个简单的实例详细介绍了Cassandra数据建模的五个步骤。以下是译文。 我们最近在Instaclustr发表了一篇有关在Cassand...

dev_csdn ⋅ 2017/11/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一张图看懂CDN全站加速产品解决方案

原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云云栖社区 ⋅ 12分钟前 ⋅ 0

一张图看懂CDN全站加速产品解决方案

原文链接

猫耳m ⋅ 13分钟前 ⋅ 0

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 30分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 35分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 38分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 41分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 46分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 49分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 49分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 53分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部