作者:蒋步星

来源:数据蒋堂

本文共1100字,建议阅读7分钟。
在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很关键的问题。

在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很关键的问题。因为很多运算是数据密集型的,如果数据分布做得不好,就会导致网络传输量变大,从而影响性能。

一般来讲,分布式数据库会提供两种分布策略:对于大表按某个字段(的HASH值)去分布,大多数情况会使用主键,这样可以把数据分拆到多台机器上;对于小表则采用复制性分布,也就是每个机器上都会复制一份。

但是,表的大小并没有绝对的判定标准,很大很小的表都容易识别并采取相应的策略,而那些数据不多不少的中型数据表又该采取哪种策略呢?


要搞清这个问题,我们就要知道数据分布背后的逻辑,什么样的数据分布才算是好的?

合理的数据分布能够有效地减少JOIN运算过程中的网络传输量!这也是数据分布的关键目标。

大部分常规运算都容易分拆到多个机器上分别执行后再汇总,这样,原则上数据只要尽量平均分布就可以由各节点来分摊计算负担。但是JOIN不一样,它涉及关联计算,如果JOIN的两条记录不在同一个节点上,那就需要把它们先传输到一起才能进行运算,这种事当然越少越好了。


那么怎样才能尽量避免JOIN过程中的数据传输呢?

这又要回到我们已经讨论过多次的JOIN类型。回顾一下去年的文章《JOIN运算剖析》,我们把JOIN分成三类:外键、同维、主子。同维表和主子表的JOIN是在主键(或部分)之间进行的,主键不同的两条记录是不可能发生JOIN的,这样,如果数据已经按主键分布的,就不会发生跨节点JOIN的现象了。而外键表的JOIN,维表记录可能被事实表随意引用,无论怎样将维表分布,都有可能发生跨节点JOIN的现象,只有将维表复制到每个节点上去,才能避免JOIN过程中的网络传输。

这样,我们就知道了:同维表和主子表要按主键字段去分布,而维表则要采用复制性策略,每节点都放一份,这样能有效减少跨节点JOIN运算。


但这和大表小表有什么关系?

一般来讲,记录事件的事实表会随着时间推移而不断增大,常常是大表,而这种表之间的JOIN大多数是同维表或主子表(比如订单及明细)关系。而用于外键指向的维表主要是用于存储一些不常变化的属性信息,相对要小一点。于是,本来是事实表要分拆分布、维表要复制分布的策略,就会表现成“大表”分拆、“小表”复制的特征了。

明白了这一点,我们就不会再纠结大表小表的界限在哪里了,其实没有大小之分,而是在数据结构中的地位决定的。


不过,关系数据库中并没有明确的事实表和维表概念,需要我们主动地去识别,有意识地设置分布方案。而且,一定要用主键去分布,随便找一个无关字段去分布,就起不到减少跨节点JOIN的作用了。

有些大数据平台只提供自动(按大小)分布的方案,不能强制复制维表,也不能让同维表和主子表按主键同步分布,这时候分布式计算的效果就不会好了,在选择这些计算体系时需要特别注意。

专栏作者简介

润乾软件创始人、首席科学家

清华大学计算机硕士,中国大数据产业生态联盟专家委员,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016、2017年,荣获中国电子信息产业发展研究院评选的“中国软件和信息服务业十大领军人物”;2017年度中国数据大工匠、数据领域专业技术讲堂《数据蒋堂》创办者。

数据蒋堂

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

数据蒋堂第二年往期回顾:

数据蒋堂 | 莫非我就是被时代呼唤的数学人

数据蒋堂 | SQL是描述性语言?

数据蒋堂 | 存储和计算技术的选择

数据蒋堂 | 人工智能中的“人工”

数据蒋堂 | 中国报表漫谈

数据蒋堂 | 内存数据集产生的隐性成本

数据蒋堂 | 多维分析预汇总的功能盲区

数据蒋堂 | 多维分析预汇总的存储容量

数据蒋堂 | 多维分析预汇总的方案探讨

数据蒋堂 | 数据库的封闭性

数据蒋堂 | 内存数据集产生的隐性成本

数据蒋堂 | 前半有序的大数据排序

数据蒋堂 | “后半”有序的分组

数据蒋堂 | 时序数据从分表到分库

数据蒋堂 | BI系统的前置计算

数据蒋堂 | 性能优化是个手艺活

数据蒋堂 | 数据分布背后的逻辑相关推荐

  1. 数据分布_数据蒋堂 | 数据分布背后的逻辑

    作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读7分钟. 在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很关键的问题. 在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很 ...

  2. 结婚率连7年下降,数据揭秘单身背后复杂逻辑

    "女生到年龄就一定要结婚吗""建议法定结婚年龄降至18岁""姐弟恋可以有多快乐"--各种热搜话题裹挟充斥着社媒平台,好像结婚问题放到哪里都能 ...

  3. 数据蒋堂 | BI系统中容易被忽视的数据源功能

    作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读8分钟. 关注BI系统数据源有关的后台功能点. 用户在选购BI解决方案的时候,常常会更关注界面环节的功能指标,比如美观性.操作的流畅性.移动端支 ...

  4. 数据蒋堂 | 做基础软件要投入很多钱?

    作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读8分钟. 看起来还真是,似乎还要再加大投入才行? 现在有个说法,国家对基础软硬件的投入太少,经常会说微软.Oracle.Intel这些巨头每年的 ...

  5. 数据蒋堂 | 大数据技术的4个E

    作者:蒋步星 来源:数据蒋堂 本文共1100字,建议阅读8分钟. 本文将大数据特点总结成4个E,可作为选择大数据技术解决方案的参考. 大数据的4个V说法在业界已经尽人皆知,这是指的大数据本身的特征.现 ...

  6. 数据蒋堂 | 大清单报表的打印?

    作者:蒋步星 来源:数据蒋堂 本文共900字,建议阅读5分钟. 报表打印也需要做一个缓存机制吗? 上一期文章<大清单报表应当怎么做?>中,我们谈了大清单报表的呈现方法,其实有时候这些报表还 ...

  7. 数据蒋堂 | 数据压缩手段

    作者:蒋步星 来源:数据蒋堂 本文共2600字,建议阅读9分钟.如果能物理地减少数据存储量,也就自然而然地减少了外存访问量. 我们知道,外存(硬盘)的性能远远低于内存,即使是同样复杂度的运算(CPU计 ...

  8. 数据蒋堂 | 怎样生成有关联的测试数据

    作者:蒋步星 来源:数据蒋堂 本文共1500字,建议阅读7分钟. 如何在多表情况下生成大规模测试数据时还能保证合理的关联性呢? 在向用户推荐新的数据处理技术,特别是涉及性能优化的场景时,经常会碰到生成 ...

  9. 数据蒋堂 | 内置的数据无法实现高性能

    作者:蒋步星 来源:数据蒋堂 本文共1400字,建议阅读7分钟. 获得了数据库的方便性就得不到高性能,要数据外置的高性能就要牺牲方便性. 这里说的"内", 是指数据库之内. 当数据 ...

最新文章

  1. Halcon 彩色图片通道分割处理
  2. AI研发新药登上Nature子刊:46天合成潜在新药候选分子,比传统方法快15倍 | 开源...
  3. [经典排序算法][集锦]
  4. python qt教程_Python - Python Qt 开发教程(1)
  5. 用python 中的链表 实现 截取其中一部分_Python数据结构——链表的实现
  6. 健康管理-健康的概念和健康管理目标特点
  7. 【题目分析】1059 Prime Factors (25 分)
  8. Python(28)-文件,os模块
  9. maven引用公共包_使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴...
  10. 【Kafka】kafka 偶然报错 NotLeaderForPartitionException
  11. C++ C++基础语法入门总结(二)引用-内联函数-C++11新特性
  12. C#DateTime的用法
  13. eduline php5.3,index.php
  14. Ci522/CI523替代RC522手机NFC开锁方案13.56Mhz读写器芯片
  15. Gateway原理及实例
  16. linux中ess33没有IP地址问题
  17. 3090显卡 爆显存调试
  18. 从图片到涂鸦:高品质涂鸦的自动生成
  19. 亚信科技中国有限公司实习面试(长春)
  20. JS–ECMAScript5

热门文章

  1. CentOS 7.4 安装 MySQL 5.6.40 完美教程
  2. 关于华为虚拟操作键收起后页面高度不会刷新问题的总结
  3. MySql按周,按月,按日分组统计数据
  4. xcode打包(Archive)显示Command /usr/bin/codesign failed
  5. Delphi - 数组 详解
  6. go 1.4支持Android的说明(译文)
  7. WebService简单验证:SoapHeader
  8. 创建健壮的isArray()函数(JavaScript中判断对象类型的种种方法)
  9. Json的list、map、对象对应格式
  10. 面试02.01移除重复结点