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

拆分表的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可能会失败,事务弱一致性
发布了49 篇原创文章 · 获赞 31 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/zengqiang1/article/details/103758543
今日推荐