数据库中间件系列架构实战-内部原理

拆分表的SQL转发

针对各种sql语句,中间件内部是如何处理的

在这里插入图片描述

解析出带有In的sql语句,内部根据分库分表原则,拆分成多个sql,然后发送到不同的节点上去

在这里插入图片描述

等待不同的节点数据全部返回之后,再合并结果,然后根据协议拼接返回的数据

在这里插入图片描述

  • 跨库join是笛卡尔积的数据计算量,如果数据量稍大,系统就会将任务拒绝掉,否则系统就会崩溃
  • 跨库join计算量太大,不适合实时系统的处理
  • 如果加上主键索引字段查询,那样计算量就会缩小很多
  • 如果两个库关联较大,应该采取相同的DB分片规则,放在同一个库中处理
  • 小表广播策略

禁止使用跨库join

OrderBy limit

在这里插入图片描述

  • 当sql为order limit时,必须全表扫描,去拿每个节点的limit+offset的排序数据,然后针对所有的数据结果进行重排序,最终拿到2需要的2个数据返回,当然可以排序算法上面可以做一些优化。

  • 这样的计算量非常大,当limit最后的排序数据时,需要返回的数据量更是大得惊人,所以可以使用es来解决这个查询问题

Group By

在这里插入图片描述
在这里插入图片描述

事务支持

  • 如果是同库事务,支持
  • 如果是不同库事务,DB在commit之前,任何失败,全部失败。
  • 如果是不同库事务,前一个commit成功,后一个commit可能会失败,事务弱一致性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值