问题1 :数据库中存储的数据量很少,但读写操作很大,并未超出数据库服务器的处理能力。
基于阿里巴巴云RD版测试结果(Mysql处理性能)
CPU内存连接数TPS QPS
4 16 4000 685 12337
8 16 4000 982 20879
8 32 8000 1308 23555
16 64 16000 2040 41530
光靠扩充机器是满足不了我们的要求的。 我该怎么办?
解决方案:添加常用方法——缓存(Redis )以减少数据库压力
派生问题:
1、缓存是过期,还是要求数据库进行大量读取和所有写入? 如果数据库不支持该怎么办?
:典型方法——读写分离(Mysql主从复制)由多个数据库提供读写服务
2、读写分离需要操作不同的库,对道层代码有影响吗? 怎么隔离这个变化?
:添加数据访问模块—— (数据库中间件),减少代码入侵
问题2:APP应用程序业务模块多、总数据量大,并发读写操作是否超出了单个数据库服务器的处理能力?
解决方案:数据量大,同时压力大,可以分库读写分离
1、面对领先压力,我们可以将多个从机集群化。
2、对于写入压力,多个主库之间的数据库同步,难以保持数据的完整性吗? 如果数据量很大,单一库存来不了怎么办?
:分库——怎么分库? 每个业务模块有多个数据库(用户库、商品库……) ) ) )。
派生问题:
1、谁负责多个数据库之间的负载平衡操作?
2、有可能操作多个库,对Dao层的代码有影响吗?
a、如何在库之间关联查询?
b、某业务数据库读写压力大,该怎么办?
:添加数据访问模块—— (数据库中间件),减少代码入侵
问题3 )如果一个表的数据量大,如电子商务网站的商品表、订单表等,超过一个表的在线?
解决方案:考虑超过1000万个分区表、分区表
派生问题:
1、怎么分?
:根据一定的规则将数据分成多个表存储时,可以有什么样的表划分规则?
2、分表的情况下,对刁层的代码有影响吗?
如何决定将数据存储在哪里?
要查询多个表?
如何使其对Dao层透明?
:添加数据访问模块—— (数据库中间件),减少代码入侵
总结:为什么要使用数据库中间件
高并发性,对于大量数据:
1、数据库中存储的数据量很少,但读写操作都很大,并没有超出数据库服务器的处理能力。
2.APP应用的业务模块多,总数据量大,同时读写操作超出了单个数据库服务器的处理能力。
3、电子商务网站、商品表、订单表等单表数据量大,超过单表存储在线的。
要解决数据存储、访问性能问题,需要数据库中间件。 这样可以在APP应用程序中快速应用读写隔离、库拆分和表拆分