拆分表的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可能会失败,事务弱一致性

相关文章:

  • 2021-06-11
  • 2021-10-02
  • 2021-05-13
  • 2022-12-23
  • 2022-12-23
  • 2021-10-24
  • 2021-12-17
猜你喜欢
  • 2022-01-23
  • 2021-12-29
  • 2021-11-23
  • 2021-07-05
  • 2021-05-03
  • 2021-09-12
  • 2021-10-18
相关资源
相似解决方案