百亿数据毫秒响应级交易系统读写分离存储数据设计

刚完成了一个存储百亿级数据,响应时间要求10毫秒内的交易系统数据存储设计方案,如今有空整理一下思惟。oracle

1、分库分表fetch

1.实时数据和历史数据分离设计

分为ABC表,AB表每日日切,只存储1天数据,每到24点切另外1张表。C表存储历史数据,T-1数据日终批量AB表迁移至C表索引

这样实现动态数据和静态数据之间的分离。hash

2.数据离散先垂直划分、再水平划分方法

(1)垂直划分第一层  根据业务相互之间的数据隔离,分开不一样用途的表(使用不一样的表名X)。技术

(2)垂直划分第二层   根据业务的实体进行划分(咱们这里为商户,某些大商户独占一个实体序号Y)统计

(3)水平划分第一层    对于交易量大的实体根据流水号进行水平离散(离散序号Z)数据

所以一个表名由此构成: A/B/C_X_Y_Z查询

2、实时交易

对于高tps的交易,保证足够的离散数量,3000万/日的交易量,水平离散数量要到48以上。

对于凌晨数据迁移的批量,涉及查找日期为T-1日期的历史数据,需根据迁移状态表进行判断,若是正在迁移,须要拒绝交易,不然容许查询。

3、历史数据迁移

使用存储过程,提供2种方法,对于交易量大的表,使用oracle分区交换技术,其它使用fetch bulk批量提交方法迁移数据。

注意:分区交易交换时,不只要注意全局索引、分区索引失效的问题,还要考虑统计信息的问题。

1.分区交换的技术细节以下:

(1)将普通表统计信息export到1个中间的表

(2)检查须要交换的分区是否存在,数据是否为空,若是非空,拒绝

(3)分区交换

(4)检查分区表全局索引和本地索引是否失效,若是失效,重建索引

(5)检查普通表索引是否失效,若是失效,重建索引

(6)从中间表导统计信息到普通表

(7)对普通表锁定统计信息

2.普通fetch bulk批量提交数据迁移数据的技术细节以下:

(1)使用fetch bulk从普通表插入数据到分区表

(2)强制对普通表进行统计信息收集

(3)批量删除或者truncate普通表

(4)对普通表锁定统计信息

3、扩容

1.每笔流水数据都在联机交易时存储交易特征计算出来并取mod 4800的hash值。

例如离散了 48张表,将这个mod 4800的值 再mod48,(数值为0,48,96,144)为0表,(1,49,97,145)为1表。

如今要扩充成96张表,mod 96,(数值为0,96)为0表,(1,97)为1表,须要把原表0中数值为48的数据迁移至48表,49的数据迁移至49表。

虽然麻烦,可是能够基本能够实现不停机扩容。

相关文章
相关标签/搜索