通用分布数据库

提出:

    关系数据库容量在一定容量下,可以保持一定的性能。超过容量,则性能下降。能否通过分库的方式,使得容量大了之后,每个库限制在一定容量下,保持稳定的性能?

方案:

   数据库划分:


    将数据库的表分为分库表和不分库表。下面假定和客户号有关的表为分库表(客户、卡、账户以及对应的流水)

    分库表,建立 函数  分库号=f(客户),这个客户、分区对照放在redis里。

     每个分库建立一个数据库,所有不分库表建在一个数据库里,再建一个数据库(中心库)用于跨库操作。

操作


  • 特定客户操作:

    根据客户号,定位分库,将用户会话和分库号绑定,后面操作始终在这个分库上进行。比如根据卡号、账户查询,始终在这个分库进行。

  • 不定客户操作:

    比如报表、查询等,不定客户,无法局限在一个分库上。需要根据sql99标准,对sql进行适配,主要涉及到行的操作进行重新组合,也就是要重写sql的执行。下面举例说明:

select * from flow where trade_date='20200202' order by trade_date desc;

在每个分库上执行这个sql,再将结果导入中心库的临时表,执行order by trade_date desc,完毕。

相关推荐