分布式数据库复杂 SQL 的执行效率如何? 有没有优化? 核心跑批 和 实时联机 是否都迁移到分布式数据库了?

比如多表join联查,举个栗子,用卡号来查交易流水信息,涉及到多张表,怎么优化?显示全部
  1. 比如多表join联查,举个栗子,用卡号来查交易流水信息,涉及到多张表,怎么优化?
收起
参与4

返回Dingk的回答

DingkDingk副总经理张家港行

我行核心所有实时、批处理都在TD上运行。

仅以TD解释,不同实现应对方法不同。
TD的分库是使用表的shardkey的hash计算值来分的,这个键是表的一个字段。
如单表查询,如查询条件有shardkey字段并指定值,系统会将SQL直接路由至具体数据对应节点查询,效率最高。如这个键未指定值,则系统将SQL分发所有节点分别执行,再由代理层汇总数据返回,效率也不差。
多表关联情况,如两表关联条件包含shardkey互等,两表的关联数据,必都分别落在同一物理节点,系统将语句下发各节点分别执行,再汇总数据,这样效率很高。如没有shardkey的关联,则需代理将两表全量数据拉至代理,再运算,效率极差。
所以设计的关键是shardkey的设计与选择。

查指定卡的交易流水:
如关联的是两个流水表,那以两个流水表共有的流水字段作shardkey即可,但这种方式并不太好。最好是给表加卡号的冗余字段,让每个表都有卡号,并以卡号作为shardkey,并给查询条件加上卡号的关联,这样通用性更强。
单一场景很好做,但要多场景适用需全面考虑设计。

银行 · 2020-06-05
浏览1399

回答者

Dingk
副总经理张家港行
擅长领域: 数据库服务器分布式系统

Dingk 最近回答过的问题

回答状态

  • 发布时间:2020-06-05
  • 关注会员:3 人
  • 回答浏览:1399
  • X社区推广