比如查询在合同信息的时候要关联客户数据,由于是合同数据和客户数据是在不同的数据库,那么我们肯定不能直接使用join 的这种方式去做关联查询。

我们有几种主要的解决方案:

1、字段冗余

比如我们查询合同库的合同表的时候需要关联客户库的客户表,我们可以直接把一些经常关联查询的客户字段放到合同表,通过这种方式避免跨库关联查询的问题。

2、数据同步:比如商户系统要查询产品系统的产品表,我们干脆在商户系统创建一张产品表,通过ETL 或者其他方式定时同步产品数据。

3、全局表(广播表) 比如行名行号信息被很多业务系统用到,如果我们放在核心系统,每个系统都要去关联查询,这个时候我们可以在所有的数据库都存储相同的基础数据。

4、ER 表(绑定表)

我们有些表的数据是存在逻辑的主外键关系的,比如订单表order_info,存的是汇总的商品数,商品金额;订单明细表order_detail,是每个商品的价格,个数等等。或者叫做从属关系,父表和子表的关系。他们之间会经常有关联查询的操作,如果父表的数据和子表的数据分别存储在不同的数据库,跨库关联查询也比较麻烦。所以我们能不能把父表和数据和从属于父表的数据落到一个节点上呢?

比如order_id=1001 的数据在node1 , 它所有的明细数据也放到node1 ;order_id=1002 的数据在node2,它所有的明细数据都放到node2,这样在关联查询的时候依然是在一个数据库。

上面的思路都是通过合理的数据分布避免跨库关联查询,实际上在我们的业务中,也是尽量不要用跨库关联查询,如果出现了这种情况,就要分析一下业务或者数据拆分是不是合理。如果还是出现了需要跨库关联的情况,那我们就只能用最后一种办法。

5、系统层组装

在不同的数据库节点把符合条件数据的数据查询出来,然后重新组装,返回给客户端。

多案分库分表带来的问题-跨库关联查询相关推荐

  1. 怎么在同一页中分页_分库分表业界难题,跨库分页的几种常见方案

    为什么需要研究跨库分页? 互联网很多业务都有分页拉取数据的需求,例如: (1)微信消息过多时,拉取第N页消息: (2)京东下单过多时,拉取第N页订单: (3)浏览58同城,查看第N页帖子: 这些业务场 ...

  2. 多案分库分表带来的问题-分布式事务

    比如在一个贷款的流程里面,合同系统登记了数据,放款系统也必须生成放款记录,如果两个动作不是同时成功或者同时失败,就会出现数据一致性的问题.如果在一个数据库里面,我们可以用本地事务来控制,但是在不同的数 ...

  3. 分库分表原因,分库分表的方式,分库分表带来的问题

    分库分表 1 为什么分库分表 ​ 随着平台的业务发展,数据可能会越来越多,甚至达到亿级.以MySQL为例,单库数据量在5000万以内性能比较好,超过阈值后性能会随着数据量的增大而明显降低.单表的数据量 ...

  4. mysql分库一致性_分库分表带来的完整性和一致性问题

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在最近做的一个项目中,由于每天核算的数据量过于庞大,需要把数据库进行分库保存.当数据 ...

  5. 为什么分库分表后不建议跨分片查询

    来源:阿飞的博客 写在前面:如果对分库分表还不是很熟悉的,可以参考笔者之前的文章<分库分表技术演进&最佳实践>. 在这篇文章中提到了一个场景,即电商的订单.我们都知道订单表有三大主 ...

  6. 分布式专题-数据库分库分表之Mycat01-数据库性能优化方案

    目录导航 前言 为什么要分库分表 数据库性能瓶颈主要原因 数据性能优化方案 SQL 与索引 表与存储引擎 架构 配置 操作系统与硬件 架构演进与分库分表 单应用单数据库 多应用单数据库 多应用独立数据 ...

  7. 我们为什么要分库分表?

    在文章开头先抛几个问题: (1)什么时候才需要分库分表呢?我们的评判标准是什么? (2)一张表存储了多少数据的时候,才需要考虑分库分表? (3)数据增长速度很快,每天产生多少数据,才需要考虑做分库分表 ...

  8. 收好这份武林秘籍,让你分库分表再无烦恼

    互联网发展至今,各个公司企业的数据量都大幅增长,分库分表越来越多的被我们用到,那么我们应该如何针对我们自己的业务场景,对数据进行合理的划分,用最小的代价解决掉性能瓶颈. 1 分库分表的介绍 1.1 什 ...

  9. 嘘,别着急!让腾讯架构师告诉你为什么要分库分表

    在文章开头先抛几个问题: (1)什么时候才需要分库分表呢?我们的评判标准是什么? (2)一张表存储了多少数据的时候,才需要考虑分库分表? (3)数据增长速度很快,每天产生多少数据,才需要考虑做分库分表 ...

最新文章

  1. Python-从视频到gif(imageio,moviepy,ffmpeg)
  2. Node.js小白开路(一)-- fs篇
  3. ThreadGroup其实比ExecutorService更好
  4. 如果C++程序要调用已经被编译后的C函数,该怎么办?
  5. $(@:_config=)的意思
  6. 国防科大JAVA工程师笔试题_国防科大人工智能考博题答案
  7. 【软件工程】用于IS规划的SWOT方法
  8. 从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
  9. 机器学习与计算机视觉(FPGA的图像处理方法)
  10. 敏捷个人新体系学习 - 1.实践的艺术
  11. Facebook的体系结构分析---外文转载
  12. Bug--Mybatis报错:There is no getter for property named 'id' in 'class java.lang.Integer'
  13. JAVA RMI远程方法调用简单实例
  14. 6.郝斌C语言笔记——流程控制
  15. **python 随机生成一段旋律**
  16. 51nod1007:正整数分组 DP
  17. 服务器加什么网站才打开快,如何优化让网站打开速度更快些呢?
  18. 支持 Docker 运行的 ChatGPT 平替之 Alpaca-Turbo (羊驼)
  19. 微信公众号给微信用户推送信息 模板信息
  20. 一步一步构建手机WebApp开发——页面布局篇

热门文章

  1. mvn install时跳过Test
  2. [译]Vulkan教程(32)生成mipmap
  3. 软件工程综合实践专题第三次个人博客作业
  4. 怎么确定Oracle客户端安装成功
  5. J-LINK7 固件修复
  6. javascript 基础下
  7. I/O流(四)—java如何添加到文件尾
  8. Asp.Net Ajax的两种基本开发模式
  9. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-持续更新
  10. PHP----------安装包lnmp1.3-full安装的lnmp环境,如何安装PHP扩展