一种平台分库和交易主键分表的方法、装置及存储介质
文献发布时间:2023-06-19 18:47:50
技术领域
本发明涉及互联网分布式微服务架构领域,提供了一种平台分库和交易主键分表的方法、装置及存储介质。
背景技术
银行账户系统分为进件服务模块,交易服务模块、账户服务模块、对账服务模块。各服务之间采用dubbo rpc协议通信。
交易模块接收并校验记录各类交易,然后发到账户模块进行记账。
交易模块中有一个交易消费转账(payments),未来1-2年的系统目标,预测未来单日数据量在200多w笔。目前还是使用单表,必然无法支撑现有业务。
本提案是新增基于shardingjdbc第三方开源jar扩展开发的基于平台(渠道)分库和交易主键分表的技术方案。现有未分表方案无法支撑现有业务。因此,一个能够支持大交易量的分库分表技术系统亟待出现。
发明内容
消费转账交易日均200w的数据,根据mysql数据库规范,一般业务表限制是500w条数据。如果不分表,3天数据就达到限制了,会导致交易创建和查询性能明显下降。所以必须分库分表,不然无法支撑业务运行。
为了解决上述技术问题本发明采用以下技术手段:
一种平台分库和交易主键分表的方法,包括以下步骤:
步骤1:接收到平台发过来的消费转账交易报文,做基本校验后,通过shardingjdc配置的分库分表策略实现存储交易信息表payments_xx和交易信息配对表payment_mappings_xx,其中_xx为数字变量序号,根据交易信息表payments_xx分库策略配置,对消费转账交易报文中的平台id信息root_mch_id判断,该平台是否是配置的大交易量平台;
步骤2:接步骤1,如该平台是配置的大交易量平台,大交易量平台根据配置指定独享分库,m个分库作为大平台独立使用;
步骤3:接步骤l,如该平台不是配置的大交易量平台,根据平台root_mch_id/n取模运算得到对应的分库,n个分库给所有不是大数据量交易的平台共享使用;
步骤4:接步骤2,步骤3得到交易的分库后,根据交易信息表payments_xx分表策略配置使用消费转账交易报文中的交易主键payment_id/n
步骤5:接步骤4,将消费转账交易报中的交易信息写入到对应的payments_xx;
步骤6:接步骤3,在步骤3确定的同一个库中要再存储一个以交易订单号为分表依据的交易配对表payment_mappings_xx,该配对表只存储主键out_orde r_no交易订单号,payment_id交易主键id,root_mch_id平台ID,根据交易配对表payment_mappings_xx分表策略配置使用交易订单号out_order_no.hashcode/n
步骤7:接将消费转账交易报文中的交易配对信息落表payment_mappings_xx;
步骤8:接步骤7,至此交易信息和交易配对信息,都已经按配置落到的对应的分库和分表,交易信息落到表payments_xx,交易配对信息落到表payment_mappings_xx,交易再发往账户模块记账,记账成功或失败后,将记账结果更新到交易信息表payments_xx中status状态字段,更新时,根据步骤1,2,3,4找到对应的分库分表,然后更新;
步骤9:接步骤8,平台方可通过交易订单号来查询交易终态,根据步骤1,2,3得到分库后,使用交易订单号out_order_no.hashcode/n
上述技术方案中,m取值为4,n取值为16,n
本发明还提供了一种平台分库和交易主键分表的装置,包括以下模块:
平台类型判别模块:接收到平台发过来的消费转账交易报文,做基本校验后,通过shardingjdc配置的分库分表策略实现存储交易信息表payments_xx和交易信息配对表payment_mappings_xx,其中_xx为数字变量序号,根据交易信息表payments_xx分库策略配置,对消费转账交易报文中的平台id信息root_mch_id判断,该平台是否是配置的大交易量平台;
大交易量平台分库模块:如该平台是配置的大交易量平台,大交易量平台根据配置指定独享分库,m个分库作为大平台独立使用;
普通平台分库模块:如该平台不是配置的大交易量平台,根据平台root_mch_id/n取模运算得到对应的分库,n个分库给所有不是大数据量交易的平台共享使用;
交易信息表分表模块:到交易的分库后,根据交易信息表payments_xx分表策略配置使用消费转账交易报文中的交易主键payment_id/n
交易信息入表模块:将消费转账交易报中的交易信息写入到对应的payments_xx;
交易配对表分表模块:在普通平台分库模块确定的同一个库中要再存储一个以交易订单号为分表依据的交易配对表paymentmappings_xx,该配对表只存储主键out_order_no交易订单号,payment_id交易主键id,root_mch_id平台ID,根据交易配对表payment_mappings_xx分表策略配置使用交易订单号out_order_no.hashcode/n
交易配对信息落表模块:接将消费转账交易报文中的交易配对信息落表payment_mappings_xx;
记账状态更新模块:交易信息和交易配对信息,都已经按配置落到的对应的分库和分表,交易信息落到表paymentsxx,交易配对信息落到表payment_mappings_xx,交易再发往账户模块记账,记账成功或失败后,将记账结果更新到交易信息表payments_xx中status状态字段,更新时,根据步骤1,2,3,4找到对应的分库分表,然后更新;
调用模块:平台方可通过交易订单号来查询交易终态,根据步骤1.2,3得到分库后,使用交易订单号out_order_no.hashcode/n
上述技术方案中,m取值为4,n取值为16,n1取值为16,n2取值为16。
本发明还提供了一种存储介质,处理器执行程序时,实现如权利要求1-2任一所述的一种平台分库和交易主键分表的方法。
因为本发明采用了上述技术方案,因此具备以下有益效果:
1、本发明基于shardingjdbc分库分表,能支持30亿的数据量,按每天200w的数据可支持4年。
2、本发明基于平台分库,可按平台id取模运算得到共享库或者指定独享库。独享库可以防止大数据量的平台导致各个分库资源不均,可以单独指定一个或多个大数据量的平台占用某个独享库。
3、本发明基于平台分库后,再基于交易分表。而且支持交易主键和交易订单号2个维度的查询操作。
4、本提案基于可按平台(渠道)业务量大小不同配置的shardingjdbc分库策略,和按交易主键和交易订单号2个业务维度的分表策略。通过可配置的方式,轻松实现大数据量的交易实时存储和查询。
附图说明
图1为交易创建分库分表流程图;
图2为交易订单号查询流程图。
具体实施方式
以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员将理解,没有这些具体细节,本发明同样可以实施。
一种平台分库和交易主键分表的方法,其特征在于,包括以下步骤:
步骤1:接收到平台发过来的消费转账交易报文,做基本校验后,通过shardingjdc配置的分库分表策略实现存储交易信息表payments_xx和交易信息配对表payment_mappings_xx,,其中_xx为数字变量序号,根据交易信息表payments_xx分库策略配置,对消费转账交易报文中的平台id信息root_mchid判断,该平台是否是配置的大交易量平台,其中_xx为数字变量序号。
步骤2:接步骤1,如该平台是配置的大交易量平台,大交易量平台根据配置指定独享分库trade61-trade65,m个分库作为大平台独立使用;
步骤3:接步骤1,如该平台不是配置的大交易量平台,根据平台root_mch_id/16取模运算得到对应的分库trade01-trade16,16个分库给所有不是大数据量交易的平台共享使用;
步骤4:接步骤2,步骤3得到交易的分库后,根据交易信息表payments_xx分表策略配置使用消费转账交易报文中的交易主键payment_id/16取模运算得到对应的分表,每个库16个分表payments_0,payments_1,…,payments_xx,…payments_15:
步骤5:接步骤4,将消费转账交易报中的交易信息写入到对应的payments_xx;
步骤6:接步骤3,在步骤3确定的同一个库中要再存储一个以交易订单号为分表依据的交易配对表payment_mappings_xx,该配对表只存储主键out_order_no交易订单号,payment_id交易主键id,root_mch_id平台ID,根据交易配对表payment_mappings_xx分表策略配置使用交易订单号out_order_no.hashcode/16取模运算得到对应的分表,每个库16个分表payment_mappings_0,…,payment_mappings_xx,…payment_mappings_15,其中out_order_no.hashcode是对字符串的一个运算得到一个数值;
步骤7:接将消费转账交易报文中的交易配对信息落表payment_mappings_xx;
步骤8:接步骤7,至此交易信息和交易配对信息,都已经按配置落到的对应的分库和分表,交易信息落到表payments_xx,交易配对信息落到表payment_mappings_xx,交易再发往账户模块记账,记账成功或失败后,将记账结果更新到交易信息表payments_xx中status状态字段,更新时,根据步骤1,2,3,4找到对应的分库分表,然后更新;
步骤9:接步骤8,平台方,可通过交易订单号来查询交易终态,根据步骤1,2,3得到分库后,使用交易订单号out_order_no.hashcode/16取模运算得到对应的分表(每个库16个分表payment_mappings_0…payment_mappings_15)。获取payment_mappings数据得到out_order_no对应的payment_id。再根据步骤4得到payments的分表,进而得到消费转账交易信息,然后返回给调用方。
- 一种Redis分布式数据库主键id的生成方法及系统、存储介质
- 数据分库处理方法、系统、装置和存储介质
- 一种区块链交易方法、装置、管理系统、设备及存储介质
- 一种交易流水数据检测方法、装置、设备及可读存储介质
- 一种虚拟化管理平台中网络查询方法、装置和存储介质
- 分库分表方法、分库分表装置、分库分表设备及存储介质
- 交易单分库分表处理方法、系统、电子设备及存储介质