@
monkeydream 我大概算算 MySQL 单表,受限于 IO 的读并发吧:
假设:
- B+ 树 4 层 *(若 InnoDB 、Dynamic 、16 KB 每页、8 字节主键、1 KB 一条消息,可容纳 110 亿)*
- 缓存前两层 *( 14 MB 内存代价)*
- 有 `(uid 4 字节, time 5 字节)` 索引
- 每个用户每次获取不超过 700 条消息 *(此时索引只需读一个叶节点)*
- **不缓存实际消息** *(就当所有用户都在获取历史消息吧。因为每个叶节点可能存着 15 个不同用户的消息,太散了,不会算『每次一个用户获取一堆消息时,能利用上多少缓存』,直接按最差情况算)*
设每秒有 x 人请求,平均每人有 y 条消息要获取,硬盘有 z 个 16 KB 的 IOPS ,那么:
2x (每人消耗 2 次 IO 去索引读取自某个时间以来的消息 ID 列表) + 2xy (每条消息都要 2 次 IO 去消息表读取) <= z
如,我的垃圾固态,16 KB 有 25000 IOPS (也就 400 多 MB/s )。那么:
每秒 100 人要获取消息时,平均每人能得到(不在缓存中的) 124 条历史消息?
(数据库新手,算的不对,恳请指出)