分享一下自己做Core Table Housekeeping的思路…首先说下背景:我们系统没有使用warehouse,用的是ODS,因为考虑到改动和测试量很大,所以暂不考虑建数仓。
一、为什么要做数据清理?
●系统运行一段时间后,会产生历史数据,保存太久会降低系统处理效率。比如:账户计提历史表。
●若系统没有建数据仓库,使用的是操作型数据存储ODS(Operational Data Storage)存储数据,通常存储周期在半年以内。
二、如何做?
1.导出系统存量表清单(含全量数据量、每日增量数据量、历史数据存量以及数据量增长的趋势);
2.补充表信息(名称、归属模块、负责人、清理建议、备注);
3.对表进行分类(主档/历史表/参数表/关系表):
(1)主档(Master table):指系统中的共享数据(如客户信息表、账号信息表,表Key为客户号、账号)。
(2)历史表(History table):用于记录业务活动的数据,一旦被记录,不会再变化(开销户登记簿、账户利率历史表)。
(3)参数表(Parameter table):记录表数据值域的内容,或是业务参数(比如活期II类户的限额参数、标准费率参数)。
(4)关系表(Relationship table):记录主档与主档之间(比如客户与账户关联关系表、卡账关联表)、主档与历史表之间。
4.每张表挨个分析(确定清理周期、清理条件、清理范围)因为各表的业务不同,所以清理时间和条件及范围也不同。比如每半年执行一次清理,根据清理条件把之前的数据都清理掉。
其实,除了要考虑设计方法,也还需要看数据量。
1.因为银行的交易量是巨大的,若数据到了一定规模可能还是要大改的,没有捷径,比如引入数仓。如果一年数据量仍然太大,要不要做horizontal sharding等等;
2.分析主数据信息的单条记录长度、重要信息的单条记录长度、主数据被变更的频率;
3.有分区表做分区切换,将历史数据置换出去。