银行核心系统之分表分区和批处理性能优化
法国 · 巴黎 · 塞纳河
(1)分表
分表是表名不同,表结构一致,由应用程序自行实现访问的封装。
(2)分区
分区是在同一个表内,由数据库实现记录存储的分片,对应用程序透明。此时索引可选择是分区索引还是全局索引。但有分区删除的情况时,不应建立全局索引。
(3)选择
如果划分的规则未来会有变化,则应选择分表,可实现不停机修改规则。因此,按日期可分区,按hash应分表。
(4)数据拆分
按日期拆分的,查询时必须带日期或日期范围。历史日期数据不得更改,要进行转移。只应访问当日和昨日的数据,其余日期由历史数据提供查询。
按稳定不变的各类ID(如账号,客户号,卡号)进行hash分表的,查询时必须带ID,如果有间接查询的情况,应建立映射转换表。Hash选择要直观和均匀。
(1)批处理并发
批处理并发时,并发进程按照分表分区来拆分,每个进程顺序处理且只处理一个分片。因此,相同ID的其他表应保持一样的hash规则,达到进程处理的拆分一致。
并发处理时有大量insert的表,要注意达到最高性能,需要做到:同一个分片只由一个进程插入数据。
(2)批处理
批处理时,对一定可以成功,并且对外无影响的部分处理,可登记异步加工。如内部账记账,补清算。
批处理时,在一个进程内,应考虑一个事务下对频繁更新插入的表记录进行合并,一次性处理,如多笔一对一记账可以改变成多对一记账,或者设计传票和明细表结构时,能体现多合一的汇总传票,汇总明细。如果不能,还可以将一个事务中该记录的多次update在应用中暂存,commit时再进行一次update,将一个事务中多次insert暂存,commit时进行整体insert。
赞 (0)