分库分表之后怎么进行join操作?

2024-08-28 10:04

本文主要是介绍分库分表之后怎么进行join操作?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、应用层join

二、使用数据库中间件

三、数据冗余

四、搜索引擎


在我们做了分库分表之后,数据会散落在不同的数据库中,这时候在需要进行跨库或跨表的JOIN操作时,就会比较麻烦。

如果数据被分表后,分散在不同的数据库上面,那么标准的join是要在单库内执行的,所以这就会带来复杂性。还有就是不同的库可能在不同的服务器上面,那么一次join就需要和多个数据库交互,那就会有更多的网络延迟,带来性能问题。

而且,有的时候一次join可能并不是2个库,而可能是多个库,比如订单和用户join,我们要查的用户可能散布在很多个库中,那么一次join就会横跨很多库。

那么如何解决呢?有如下几个方法。

一、应用层join

在应用代码中单独查询各个表,然后在应用层将结果合并。这意味着所有必要的数据被加载到应用服务器的内存中,然后执行类似于join的操作。如:

//先从数据库中查询出要查询的订单列表
List<OrderDO> orders = getOrders();for(OrderDO orderDO : orders){OrderDTO orderDTO= new OrderDTO(orderDO);//根据用户ID去users表查询用户名String userName = getUserNameByUserId(orderDO.getUserId());orderDTO.setUserName(userName);
}

这么做的优点是,灵活,可以跨不同的数据库和表实现。不依赖数据库特性,适用于任何数据库系统。

但是他的缺点也很明显,那就是对应用服务器的内存和处理能力要求较高,尤其是数据量大时。而且网络开销可能增加,性能可能受到影响。

二、使用数据库中间件

在分库分表后,我们也可以使用诸如MyCat、Shardingsphere等数据库中间件来支持分库分表环境下的 JOIN 操作,比如使用shardingsphere的联邦查询功能(这个功能还在完善中,并不是特别建议在生产环境中用)。这些中间件可以理解为一个数据库代理,对应用透明地处理数据分片和查询路由。

这个方案的优点是对应用透明,应用不需要关心数据如何分片。可以较为高效地执行查询优化和数据汇总。缺点就是引入额外的系统复杂性和维护成本。性能和支持的SQL特性可能受限于中间件的能力。

三、数据冗余

还有一种方案,那就是调整分库分表策略,尽量减少需要执行 JOIN 操作的场景,比如通过合理的数据冗余和预聚合来避免跨库查询。

这个方案可以显著减少复杂查询,提升系统性能。减少了跨网络的数据传输。缺点是一致性问题,也会增加存储空间。

但是,这个方案确实是公司里面用的比较多的。很多时候对于一些不常修改的字段,做一些数据冗余是非常方便的,比如用户的真实姓名。

四、搜索引擎

使用Elasticsearch等搜索引擎,也是可以解决跨库JOIN的问题的,尤其是在处理大数据和复杂搜索场景时。

我们可以基于前面宽表的思想,把orders表和users中我们关心的所有字段做成一个文档,如类似以下形式:

{
"userId": "123",
"userName": "CLAY",
"orders": [{"orderId": "a1","orderDate": "2021-01-01","amount": 100},{"orderId": "b2","orderDate": "2021-02-01","amount": 150}
]
}

然后再基于canal等工具,把orders表及users表的变更同步到ES中,这样我们就可以基于ES直接做查询了。

这篇关于分库分表之后怎么进行join操作?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f