首页 > 代码库 > 分库分表

分库分表

       生产环境Oracle数据库大表性能出现瓶颈:该表用于事务申请、检验和销毁业务,每天千万级请求量,16个应用节点,均操作单数据库单表,当请求量短时间飙升时数据库性能出现扛不住的迹象。考虑进行分库分表优化:

1、单数据库扩展为多数据库。新增两个数据库,用来分担原来的主库压力。主库原来其他表不动,大表数据割接到分库中。在主库新增路由表,保存分库映射分表关系,通过分表定位分库,供程序识别数据源。

2、单表扩展为多表。分表均衡分布在两个新增数据库中。大表分16张表,原t_wlf分为t_wlf_0至t_wlf_15,两个分库各负责8张分表。分库1对应分表0到7,分库2对应分表8到15,映射关系保存到路由表。大表割接算法:取大表中的关键字段手机号码最后两位跟16取模,得到对应的分表后缀数值。大表数据的增删改查均使用该算法找到对应分表。

3、数据割接:分库1建立到主库DBLINK,将大表备份到分库1的t_wlf_bak1,使用上述割接算法导入到分表0到7中,删除备份表;重复该过程,分库2建立到主库DBLINK,将大表备份到分库2的t_wlf_bak2,使用割接算法导入到分库7到15中,删除备份表。

3、分库分表支持水平扩容。假如只新增两张分表,直接在分库上分别新增t_wlf_16和t_wlf_17,取模由16改为18,路由表新增映射数据:分库1对应分表16,分库2对应分布17,无需数据割接。若新增一个分库3同时新增分表16和17,则直接将新分表放在新分库上,新增分库3和分表16和17的映射,无需数据割接。若只新增分库3,修改路由表映射:分库1对应分表0到5,分库2对应分表6到11,分库3对应分表12到15。数据割接:分库1上的分表6和7导入到分库2,分库2上的分表12到15导入到分库3。

      数据库操作完了还得注意修改其他地方。原来只有单一数据源,现在需要将新增分库的数据源和数据实例配置到对应的容器和ORM中。

分库分表