数据分布背后的逻辑

2023-12-12 02:38
文章标签 逻辑 背后 数据分布

本文主要是介绍数据分布背后的逻辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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


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

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

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


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

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

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


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

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

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


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

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



作者:279400248
链接:http://c.raqsoft.com.cn/article/1539137773156
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这篇关于数据分布背后的逻辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482952

相关文章

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

逻辑表达式,最小项

目录 得到此图的逻辑电路 1.画出它的真值表 2.根据真值表写出逻辑式 3.画逻辑图 逻辑函数的表示 逻辑表达式 最小项 定义 基本性质 最小项编号 最小项表达式   得到此图的逻辑电路 1.画出它的真值表 这是同或的逻辑式。 2.根据真值表写出逻辑式   3.画逻辑图   有两种画法,1是根据运算优先级非>与>或得到,第二种是采

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

重启顺风车的背后,是高德难掩的“野心”

以史鉴今,我们往往可以从今天的事情中,看到古人的智慧,也看到时代的进步。就如西汉后期文学家恒宽曾说的,“明者因时而变,知者随事而制”。 图源来自高德官方 近日,高德就展现了这样的智慧。在网约车市场陷入饱和状态时,高德审时度势,宣布重启顺风车业务,并在全国范围内大规模启动,首批覆盖珠三角、长三角及湖北省武汉市等共计65座城市,完成在出行服务领域的又一重要布局。 重启顺风车,增量市场的“蛋糕

黑神话悟空背后的技术揭秘与代码探秘

《重塑神话:黑神话悟空背后的技术揭秘与代码探秘》 引言 在国产游戏领域,《黑神话:悟空》无疑是一颗璀璨的明星,它不仅融合了深厚的中国文化元素,更在技术上实现了诸多突破,为玩家带来了前所未有的沉浸式体验。本文将深入剖析《黑神话:悟空》背后的关键技术,并通过代码案例展示其技术实现的魅力。 一、高精度动作捕捉技术 《黑神话:悟空》中的角色动作之所以如此逼真,得益于高精度动作捕捉技术的应用