1. 数据量
1.1 Mysql
Mysql数据主要存储在磁盘,会有内存存放最近的buffer,主要需要评估容量的是不能打满磁盘,磁盘打满爆库,数据无法更新或写入。
但是考虑的业务的性能,谈数据库本身的最大max其实没有太大意义,比如一张表可以存放的行数非常多,但是达到一定的行数之后性能骤降,那设计的时候一定是选择这个性能下降的临界值(标准值),就行完美身材和标准身材,哈哈哈。
一般单库接近2000w行就需要做水平拆分了,查询效率会急剧下降。
库 | 表(per db) | 列(per table) | 行 | |
---|---|---|---|---|
max:20亿个表 |
1024列 所有变长字段的长度和 不超过 |
每行的最大长度为8092字节? 每行的最大varchar长度和为65535 |
||
所有变长字段定义长度和 不超过65535字节 | 标准值:单表行数超过500万行或者单表容量超过2GB |
1.1 Redis
存储在内存,容量受机器内存限制,单机承受合理容量是20G。
当实例需要的容量超过 20G 或要求的时,我们会使用集群(Cluster)实例来承担流量。集群是通过中间件(客户端或中间代理proxy等)将流量分散到多个 Redis 实例上的解决方案。
2 并发量(吞吐量)
能够承受的QPS,一般通过压测可以得出,但由于业务读写属性的差距(读多写少,读少写多)会有比较大的差距,因为读是共享锁,写是互斥锁,写比较影响并发量。
2.1 Mysql
由于写操作需要加锁,所以写操作的吞吐量要远远小于读性能。下表是5.5版本的测试数据,
操作 | binlog | 索引 | InnoDB(QPS) | myisam(QPS) |
---|---|---|---|---|
写 |
不开 |
无 | 1K | 1.5K |
开 | 无 | 0.4K | 0.6K | |
有 | 0.3K | 0.6K | ||
读 | 2.5K | 2.4K |
查询的性能也与 数据在不在缓冲区有关,如果在缓冲区无需读磁盘要快,如下图:
吞吐量也与存储引擎有关:
2.2 Redis
由于Redis不存在并发,单进程,此处以吞吐量,单机吞吐量: 20万 请求每秒
3 耗时
1.3.1 MySQL
插入性能与索引个数相关,由于索引树有变动