寻求日处理数十亿读写的最优数据库——Cassandra性能过慢
你现在面临的是一个典型的超大规模吞吐量场景——每日10亿次插入(平均每秒1万多次,峰值肯定更高),再加上数十亿次批量读取(每次要拉50行),还有带500字节Blob的小记录。结合你已经做的本地测试,我给你几个值得继续评估的方向:
值得测试的数据库选项
Cassandra
这货天生就是为高写入、分布式场景设计的,单节点写入轻松能到每秒几万次,集群扩展后写入能力几乎是线性增长的。对于你的Blob存储,它原生支持大对象存储,而且在复制(replication)和分片(partitioning)上是核心功能,完全不会出现MongoDB那种分布式场景掉链子的情况。不过要注意,Cassandra是列族数据库,得提前把查询模式规划好——比如你以ID为主的话,把ID设为分区键,读取性能会非常顶。ClickHouse
虽然大家常把ClickHouse当分析库用,但它的写入性能真的猛,单节点每秒几十万次插入都很正常,分布式集群的复制、分片也成熟得很。500字节的Blob用它的String类型存毫无压力,而且它的列式存储对批量读取(一次50行)特别友好,读取性能会很出色。唯一要注意的是,ClickHouse的实时更新能力偏弱,但你的场景以插入为主,这点基本不影响。RocksDB(搭配定制上层逻辑)
如果你要追求极致的写入性能,RocksDB这个嵌入式KV存储绝对能满足你——单节点写入轻松破每秒10万次,空间利用率比你测的原生文件系统高太多。你可以基于它封装自己的读写逻辑,比如按ID分片存Blob,或者做批量插入优化。不过这种方式需要自己搞定分布式、复制的逻辑,适合有一定研发能力的团队。ScyllaDB
这是Cassandra的C++重写版,性能比Cassandra强2-3倍,单节点写入能到每秒十几万次,同样原生支持分布式复制和分片,完美适配你的高写入场景。而且它兼容Cassandra的生态,学习成本很低,要是你考虑Cassandra的话,优先试试ScyllaDB准没错。
额外测试建议
- 别只测单节点!一定要模拟多节点集群场景,比如3节点以上的复制、分片环境,这才是你生产环境会遇到的真实情况,单节点性能再好,分布式场景拉胯也没用。
- 可以考虑把Blob和元数据分离:用数据库存ID和其他小字段,Blob存在对象存储里,这样能减轻数据库的存储压力,读取的时候按需拉取Blob,可能还能提升整体性能。
内容的提问来源于stack exchange,提问作者S.D

