SSD的低延迟键值存储

use*_*016 10 database performance solid-state-drive key-value nosql

我们正在开发具有以下属性的SSD支持的键值解决方案:

  • 吞吐量:10000 TPS; 50/50看/得;
  • 延迟:平均1ms,99.9百分位10ms
  • 数据量:约10亿个值,每个约150个字节; 64位密钥; 随机访问,20%的数据适合RAM

我们在商用SSD上尝试了KyotoCabinet,LevelDB和RethinkDB,使用不同的Linux IO调度程序,ext3/xfs文件系统; 使用Rebench进行了多次测试; 并发现在所有情况下:

  • 只读吞吐量/延迟非常好
  • 整个写入/更新是适度的,但有许多高延迟异常值
  • 即使在直接访问块设备(绕过文件系统)的情况下,混合读/写工作负载也会导致吞吐量/延迟出现灾难性的振荡

下图说明了KyotoCabinet的这种行为(横轴是时间,三个周期清晰可见 - 只读,混合,仅更新).

问题是:是否可以使用SSD实现所描述的SLA的低延迟以及建议使用哪些键值存储?

在此输入图像描述

Mik*_*ord 0

这是一个有点轻率的想法,但它可能会奏效。假设您的 SSD 是 128GB。

  1. 在SSD上创建128GB交换分区
  2. 配置您的计算机以将其用作交换
  3. 在机器上设置memcached并设置128GB内存限制
  4. 基准

内核能够足够快地调入和调出内容吗?没办法知道。这更多地取决于您的硬件而不是内核。

Poul-Henning Kamp 在 Varnish 中做了与此非常相似的事情,即让内核跟踪 Varnish 的事物(虚拟内存与物理内存),而不是让 Varnish 来做。 https://www.varnish-cache.org/trac/wiki/ArchitectNotes