我们需要做一个线上的 cache 系统,key 上亿,value 有多个 field。key 的访问频度分布不均,即只有一部分是热门 key,需要放在内存里。总数据量很大,超过总内存,所以也需要把一部分数据存在 SSD 上。也要求重启后能恢复大部分数据。
今天测试了 Redis 和 RethinkDB 的性能。
Redis 设计目标是纯内存 KV 数据库,用磁盘文件 swap 的功能已经废弃了。不过我还是测试了最后一个支持 swap 功能的 2.4 版。
Redis 打开 VM,在没有用超内存的情况下速度很理想,4 个 Redis 实例和几十个 Client 可以用满千兆网卡。超过配置的内存限额,开始使用 swap 之后,插入速度骤降到 20MB/s。并且客户端频繁遇到 timeout 错误,需要重试。磁盘 IO 很小, CPU 用满。瓶颈应该在查找最老的数据上。
Redis 的文档写得很好,作者 antirez 还亲自在 StackOverflow 上回答问题,比较了和 memcached 的优缺点,态度非常诚恳。
RethinkDB 是一个商业的磁盘 KV 数据库,为机械硬盘、SSD 和 Raid 做过优化,理论上说是最符合我们的需求的。
RethinkDB 直接用 SSD 的设备(而不是用 ext3 文件系统上的文件)做数据库时,10 Client 并发插入速度 80000qps,30MB/s。客户端很稳定,没有遇到 timeout。但无法知道文件系统现在使用了多少,也偶尔遇到 kill 掉之后重启时加载数据库文件失败,崩溃的情况。而它的文档很少,竟然一共只有一张网页,Support 也很冷清,无法解决问题。
Memcached 因为不支持 dump 到备份文件,也不能存储超过内存容量的数据,所以排除在外。
不知道大家有没有用过其它的方案?
今天测试了 Redis 和 RethinkDB 的性能。
Redis 设计目标是纯内存 KV 数据库,用磁盘文件 swap 的功能已经废弃了。不过我还是测试了最后一个支持 swap 功能的 2.4 版。
Redis 打开 VM,在没有用超内存的情况下速度很理想,4 个 Redis 实例和几十个 Client 可以用满千兆网卡。超过配置的内存限额,开始使用 swap 之后,插入速度骤降到 20MB/s。并且客户端频繁遇到 timeout 错误,需要重试。磁盘 IO 很小, CPU 用满。瓶颈应该在查找最老的数据上。
Redis 的文档写得很好,作者 antirez 还亲自在 StackOverflow 上回答问题,比较了和 memcached 的优缺点,态度非常诚恳。
RethinkDB 是一个商业的磁盘 KV 数据库,为机械硬盘、SSD 和 Raid 做过优化,理论上说是最符合我们的需求的。
RethinkDB 直接用 SSD 的设备(而不是用 ext3 文件系统上的文件)做数据库时,10 Client 并发插入速度 80000qps,30MB/s。客户端很稳定,没有遇到 timeout。但无法知道文件系统现在使用了多少,也偶尔遇到 kill 掉之后重启时加载数据库文件失败,崩溃的情况。而它的文档很少,竟然一共只有一张网页,Support 也很冷清,无法解决问题。
Memcached 因为不支持 dump 到备份文件,也不能存储超过内存容量的数据,所以排除在外。
不知道大家有没有用过其它的方案?