通用分布数据库
程序员文章站
2022-07-15 13:51:27
...
提出:
关系数据库容量在一定容量下,可以保持一定的性能。超过容量,则性能下降。能否通过分库的方式,使得容量大了之后,每个库限制在一定容量下,保持稳定的性能?
方案:
数据库划分:
将数据库的表分为分库表和不分库表。下面假定和客户号有关的表为分库表(客户、卡、账户以及对应的流水)
分库表,建立 函数 分库号=f(客户),这个客户、分区对照放在redis里。
每个分库建立一个数据库,所有不分库表建在一个数据库里,再建一个数据库(中心库)用于跨库操作。
操作
- 特定客户操作:
根据客户号,定位分库,将用户会话和分库号绑定,后面操作始终在这个分库上进行。比如根据卡号、账户查询,始终在这个分库进行。
- 不定客户操作:
比如报表、查询等,不定客户,无法局限在一个分库上。需要根据sql99标准,对sql进行适配,主要涉及到行的操作进行重新组合,也就是要重写sql的执行。下面举例说明:
select * from flow where trade_date='20200202' order by trade_date desc;
在每个分库上执行这个sql,再将结果导入中心库的临时表,执行order by trade_date desc,完毕。
适配
jdbc适配。开发jdbc驱动,负责sql和存储过程执行。
上一篇: 浦发风险量化平台支持记录