在分布式存储数据库的世界中,无论是基于Key/Value的数据库还是Column Base(比如HBase)的数据库,都有一个重要的因子------Key,或者叫RowKey。我们总是根据Key来快速的获取存储的数据。毫不夸张的说,Key是读数据的基础。

对于Key的存储,有两种截然不同的分布方式,我们称之为:随机分布(RP)和顺序分布(OPP)

RP和OPP之间并没有绝对的优劣,不能直接断定谁比谁好,只能说是否适合当前的业务场景。在这篇文章中我们希望能够讨论一下两种方式的优劣:

OPP

我们先来讨论OPP,因为我们可能更喜欢这种方式,而且这种存储方式思想比较传统和简单。*OPP的意思是顺序分布,Key在分布式节点中是严格排序的。*比如200一定是位于100和300之间的。这一特性带来了以下的优缺点。

优点:

1. 容易分片。*我们能很容易的将大量的数据分成N片,只需要知道每一片的StartKey和EndKey。根据分片表我们可以很容易的定位任何一个Key。*分片对于分布式系统来说是一个非常重要的功能,它意味着我们能不能将大量的数据分而治之(分治算法,二分查找等算法就可以使用了)。

2. *快速区间扫描。*这可能是OPP对于RP的一个绝对优势。比如给我一个StartKey和一个EndKey,我可以给你扫出区间内的所有数据。这种方式在很多应用中都会用到,但RP却无法快速完美的做到。

举个例子,有一个问题跟踪系统每天要记录大量的Log,每一条Log的Key是当时的时间。有一天问题发生了,管理员希望查看当天所有的Log。OPP很容易做到这件事,它从开始点一条一条往下读,直到结束点。RP就傻眼了,当天的Log被散落在各个节点中,更严重的是它不知道当天有多少Log。它只能作出如下回答:

1) 告诉我一个具体时间,我给你一条Log.

2) 等等我,我要扫描全部的Log,之后我会给你一份当天Log的Report.

缺点:

1. 目前我只想到了负载均衡问题。

对于这个缺点我们从“写入数据”和“读取数据”两个方面来看:

1. 写入数据

有一种写入方式可以让基于OPP的分布式数据库完全发挥不了威力。就是刚才那个记Log的系统,将时间作为Key,连续不断的写入。由于时间在不断增长,每一次写入都添加在数据的末尾。这意味着什么?对于分片系统来说只有最后一片在不断增加,也就是说只有管理最后一片的节点在工作,其它节点完全干瞪眼帮不上忙。这时候分布式系统退化成了单节点的系统,再也没什么优势可言。

2. 读取数据

假设我们有一批Key需要读取数据。如果使用RP,无论这些Key是怎样的内容,读取的操作都会被很均匀的分布到各个节点。但对于OPP来说如果不凑巧这一批Key是连续的,属于同一个分片,同样的事情发生了,只有一个节点在工作,其他的干瞪眼。

RP

讨论完OPP之后我们会更容易讨论RP,因为基本上RP的缺点就是OPP的优点,RP的优点敲好是OPP的缺点。RP使用Consistent Hash(一致性哈希)解决了分片问题,从此以后负载均衡成了RP最大的资本,无论是读还是写,RP总是能充分的使用每个节点。同样区间扫描依然是RP的致命伤。

了解完基本概念之后我们来看看一些经典数据库的选择:

HBase:毫无疑问HBase是OPP的忠实支持者。有了HDFS的支持,HBase不在担心数据冗余问题,大胆的使用OPP来构建系统。对于负载均衡的问题,HBase的回答是:对不起,我们就是这个样子的!

Dynamo:讨论Dynamo可能稍稍有点过时了,但他毕竟是Cassandra的前身,奠定了很多基础的思想。Dynamo可以说是RP的忠实支持者,在Amazon系统中的成功应用使得它坚信基于Key/Value的系统可以解决绝大多数问题。对于RP的区间扫描问题,Dynamo的回答是:开什么玩笑,你能在HashMap中扫描区间吗?

Cassandra,这个可以说是近两年的后起之秀了,继承了Dynamo和BigTable的优点。但在RP还是OPP的选择上它却模棱两可。它两种方式都提供,爱用啥用啥,但只能选一样哦。

扯了这么多,估计大家也都明白了,用RP还是OPP关键看应用,也许把RP和OPP分开,各弄一套,适合不同应用才是最佳选择。

分布式存储数据库的Key的随机分布(RP)和顺序分布(OPP)相关推荐

  1. Greenplum 分布键 distribute hash分布和随机分布

    Greenplum是分布式系统,创建表时需要指定分布键,目的是为了数据能够平均分布到各个段,所以选择分布键十分重要,选择错了会导致数据不一致. 分布方式: Hash分布:按分布键对数据列进行hash取 ...

  2. 【数据库】达梦数据库更新key文件

    达梦数据库更新key文件 情景 当达梦数据库连接报错,显示网络异常连接异常/超时,可能是授权文件dm.key过期了 查看日志文件:/home/dmdba/dmdbms/log/dm_DMSERVER_ ...

  3. 重尾分布,长尾分布,肥尾分布 和 随机游走 (Heavy-tailed, Long-tailed, Fat-tailed distribution and Random walk)

    一看题目就知道本文内容较多,但因为放在一起讨论才能互相比较理解异同.本文主要讨论重尾分布,长尾分布,肥尾分布三者的联系,同时顺带讨论了一下 Random walk 中的 Lévy flight 和 B ...

  4. 风速Weibull分布和光伏Beta分布的参数拟合方法

    在风光场景生成.随机优化调度等研究中,常常假设风速服从Weibull分布,太阳辐照度服从Beta分布.那我们如何得到两个分布的参数呢?文本首先介绍了风速Weibull分布和辐照度Beta分布的基本概率 ...

  5. 概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布

    概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布 使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用 ...

  6. Gumbel 分布介绍(耿贝尔分布)

    目录 1. 分布的形式化 参考资料 度娘百科: 耿贝尔分布是根据极值定理导出,由费雪(R·A·Fisher ) 和蒂培特(L·H·C·Tippe -t t) 于1928 年发现各个样本的最大值分布将趋 ...

  7. php将数组中元素打乱顺序,PHP公开课|学会随机打乱数组元素顺序的函数,你的PHP会学的更好...

    [摘要]PHP作为一种超文本预处理器,已经成为了我们常用的网站编程语言,并且结合了C语言,Java等我们常见的编程语言,所以,有很多web开发领域的新人都看中了他的使用广泛性,有很多人都想了解php的 ...

  8. Gamma分布和逆Gamma分布

    Gamma分布和逆Gamma分布 Gamma分布 Gamma function 参数 图形 Probability density function Cumulative distribution f ...

  9. CVPR 2021 分布对齐,长尾分布问题解决新思路

    本文转载自旷视研究院. 收录会议:CVPR 2021 论文单位:旷视研究院 论文链接:https://arxiv.org/abs/2103.16370 论文代码:https://github.com/ ...

  10. t分布 u分布 卡方分布_重要抽样分布:卡方分布(χ2分布)、t分布和F分布

    冒泡~:最近在回顾一些以前学过的概率论和数理统计的知识 发现这三个抽样分布经常出现,在参数估计和假设检验也会运用到,所以做一下整理. [首先,这三个抽样分布都是来自正态总体的常用的分布 可以根据情况应 ...

最新文章

  1. Linux安装与硬盘分区
  2. 解决jquery版本冲突问题
  3. 一些琐碎+分不清的知识点
  4. mysql特性举例_MySQL事务的四大特性和隔离级别
  5. 使用FlexDeploy对融合中间件应用程序进行自动化软件测试
  6. Android之旅--Handler与多线程
  7. linux端口转发_详解Linux网桥功能--概念、工作机制、相关命令及实例说明
  8. get 与 post的区别?application json 与form表单的区别?
  9. tensorflow内存溢出问题
  10. 七雄争霸mysql修改_七雄争霸单机版游戏
  11. 怎么修改管家婆服务器密码忘记,管家婆操作员密码找回教程.doc
  12. DSP方案山景AP8224C2芯片可烧录适用USB声卡降噪麦克风
  13. Java调用dll文件
  14. 解锁计算机桌面,电脑锁屏按什么键解锁
  15. java 生成纯色图片_浅谈Java设置PPT幻灯片背景——纯色、渐变、图片背景
  16. 最佳量化交易的计算机操作系统
  17. 相机标定与三维重建原理
  18. 逆势增长背后的启示:亚信科技公布2022中期业绩
  19. 机械硬盘哪个好?买1T好还是2T好?注意别买到叠瓦盘
  20. python绘制并列的条形图的方法_python matplotlib库绘制条形图练习题

热门文章

  1. The General Framework Of Signal ProcessingOTFS Modulation Scheme(信号处理的一般框架OTFS调制)(4)
  2. python maketrans函数_python中maketrans
  3. python性能分析工具模块_关于Python Profilers性能分析器
  4. 【codeforces】【01字符串匹配】Equalize【Manthan, Codefest 18 (rated, Div. 1 + Div. 2)】
  5. 一道学吧上的题 ^ 题目:不允许重复的实验 - 从数字1、2、3、4、5中随机抽取3次数字(不允许重复)组成一个三位数,则其各位数字之和等于n的概率为________ 输入整数 输出一个小数(保留
  6. 使用Uchihash处理恶意软件中的嵌入式哈希
  7. 2020-8-4 Codeforces摸鱼报告
  8. win10计算机信息更改图,Win10系统怎么修改通知信息的位置【图文】
  9. 官服好吗_【知否的唯美手绘图】看到齐衡身穿“官服”时,网友:好帅啊!
  10. hkust ucl 电子工程比较_通信工程专业