为了全面监测区域内企业的金融风险,金鹰系统汇集了工商、舆情、投诉举报等多维度的大量数据。随着时间的推移,积攒的数据量越来越大,对系统的数据处理效率提出了更高的要求。目前金鹰系统单表最大数据量已达到亿级别,传统的数据库性能优化手段已无法满足系统的性能需求。为了减少数据库的负担,提升数据库响应速度,缩短查询时间,防控中心技术团队对数据进行分库分表。
什么是分库分表?
分库指从单个数据库拆分成多个数据库的过程,将数据散落在多个数据库中。而分表指从单张表拆分成多张表的过程,将数据散落在多张表内。
分库分表能解决什么问题?
如果数据库的查询压力过大,就需要考虑拆库,通过分库来分担单个数据库的连接压力。比如,数据库每秒需处理3500笔请求,假设单库每秒能处理的请求数最大为1000笔,那么就可以考虑拆分成4个库,来分散查询连接压力。
如果单表数据量过大,当数据量超过一定量级后,无论是对于数据查询还是数据更新,在经过索引优化等纯数据库层面的传统优化手段之后,还是可能存在性能问题。这时候就需要去换个思路来解决问题。比如:从数据生产源头、数据处理源头来解决问题,既然数据量很大,那我们就来个分而治之,化整为零。可以通过分表把数据按照一定的规则拆分成多张表,来解决单表环境下无法解决的存取性能问题。
►►►
金鹰系统数据库分库分表策略
金鹰系统目前采用ShardingSphere(一款分库分表框架)作为数据库中间件。通过对企业名称、法人等多个关键字进行组合散列运算得到企业ID。以企业ID作为分片键,ShardingSphere将根据企业ID与配置的路由信息决定该企业的数据落于哪个数据库分片、哪张表上,合理的算法使数据均匀分布在各数据库分片上,不同分片保存的数据量大致相同,从而确保数据处理效果能得到最大的优化。