一、概述
本篇着重介绍一下从数据库设计层面的热点账户的经验与实践,修改余额方式及业务层面见交易系统热点账户问题(一),交易系统热点账户问题(二)。
二、问题分析
热点账户的性能问题,除了修改余额方式的优化跟结合业务场景的优化,还有一方面可从DB资源上优化。
打个比方(数据不准确,只是想说明数据库资源也会是一个可优化的地方):
如果一个实体机数据库,对单条数据的更新tps可达到1000/s,那对10条不同的数据更新tps也就9500/s,对100条更新的tps就70000/s。因为数据库这个资源是共享的,而我们真正的业务场景不会是只有一个账户。
因此总结了一下,存在共享资源的部分:
1.数据库内存及CPU
2.数据库连接
3.表空间(单表数据量)
三、一些方案及实践
1.数据库内存及CPU
常用方案:分库
2.数据库连接
常用方案:
(1)通过压测设置适当的数据库最大连接
(2)读写分离
(3)加机器
3.表空间
常用方案:分表
分库分表方案:
分表一般按照账号进行hash分表,把与账户相关的都进行通规则的分表,例如账户信息表,账户余额表,账户变动历史表,账户冻结解冻表等等。这样查询操作该账户的相关信息都会在一个分库里,一个分表里,是对于连表查询,事务操作必须的。
四、其他
数据的冷热分离,账户的“冷数据”为账户、账户主体、开户时间、账户类型。“热数据”为账户余额、累计金额之类。将两类数据分别建表存储,也可提高tps,也降低扩展对交易的影响。