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