通用分布数据库
提出:
关系数据库容量在一定容量下,可以保持一定的性能。超过容量,则性能下降。能否通过分库的方式,使得容量大了之后,每个库限制在一定容量下,保持稳定的性能?
方案:
数据库划分:
将数据库的表分为分库表和不分库表。下面假定和客户号有关的表为分库表(客户、卡、账户以及对应的流水)
分库表,建立 函数 分库号=f(客户),这个客户、分区对照放在redis里。
每个分库建立一个数据库,所有不分库表建在一个数据库里,再建一个数据库(中心库)用于跨库操作。
操作
- 特定客户操作:
根据客户号,定位分库,将用户会话和分库号绑定,后面操作始终在这个分库上进行。比如根据卡号、账户查询,始终在这个分库进行。
- 不定客户操作:
比如报表、查询等,不定客户,无法局限在一个分库上。需要根据sql99标准,对sql进行适配,主要涉及到行的操作进行重新组合,也就是要重写sql的执行。下面举例说明:
select * from flow where trade_date='20200202' order by trade_date desc;
在每个分库上执行这个sql,再将结果导入中心库的临时表,执行order by trade_date desc,完毕。
相关推荐
CoderToy 2020-11-16
技术之博大精深 2020-10-16
emmm00 2020-11-17
bianruifeng 2020-11-16
云中舞步 2020-11-12
世樹 2020-11-11
暗夜之城 2020-11-11
张荣珍 2020-11-12
amienshxq 2020-11-14
ASoc 2020-11-14
yungpheng 2020-10-19
loveyouluobin 2020-09-29
尘封飞扬 2020-09-29
Coder技术文摘 2020-09-29
lbyd0 2020-11-17
BigYellow 2020-11-16
sushuanglei 2020-11-12
我心似明月 2020-11-09