对于SSD低延迟key-value存储(Low-latency Key-Value Store fo

2019-07-29 09:39发布

我们正在与以下属性的SSD支持的关键价值的解决方案:

  • 吞吐量:10000 TPS; 50/50看跌/获取;
  • 时延:1ms的平均水平,99.9%为10ms
  • 数据量:约1个十亿值,〜150个字节的每个; 64位密钥; 随机访问,数据的20%,符合RAM

我们试图KyotoCabinet,性LevelDB和RethinkDB商品固态硬盘,具有不同的Linux IO调度,EXT3 / XFS文件系统; 提出了一些使用测试Rebench ; 并且发现,在所有情况下:

  • 只读吞吐量/等待时间都非常好
  • 写/更新,只有始终是温和的,但也有许多高延迟的异常值
  • 混合读/写工作量会导致吞吐量/延迟灾难性振荡甚至在直接访问块设备的情况下(绕过文件系统)

下面的图片示出了用于KyotoCabinet这样的行为(水平轴是时间,三个时期都清晰可见 - 只读,混合,仅更新)。

现在的问题是:是否有可能实现使用SSD和描述的SLA低延迟推荐什么键值存储?

Answer 1:

高度变异写入延迟是固态硬盘(特别是消费模式)的共同属性。 还有就是为什么在这一个相当不错的解释Anandtech的审查 。

总结是,SSD的写入性能恶化加班磨损均匀化开销增加。 由于驱动器上的可用页数减少NAND控制器必须开始整理网页,这有助于延迟。 所述NAND还必须建立一个LBA到方框图来跟踪数据的跨各种NAND块的随机分布。 作为这个地图的增长,地图(插入,删除)上的操作会变慢。

你是不是要能够解决低水平硬件问题与SW的做法,你将需要或者向上移动到一个企业级SSD或放松您的等待时间要求。



Answer 2:

塞是可以与关闭SSD的完全运行一个较新的键/值(行)存储<1ms的延迟的读/写和非常高的TPS(到达入百万)。

固态硬盘有很大的随机读取访问,但关键是降低在写入方差使用顺序IO(这类似于普通硬盘)。 这也大大降低了损耗平衡和褪色,可以有很多的固态硬盘写入的发生。

如果您正在构建自己的密钥值系统,使用日志结构方法(如塞式),这样写是散装及附加/写大块。 而后台进程从磁盘清洁陈旧/删除的数据和碎片整理文件内存中的索引可以维护的值正确的数据的位置。



Answer 3:

这是一个轻率的想法一种,但它可能工作。 让我们假设你的SSD是128GB。

  1. 创建于SSD 128GB的交换分区
  2. 配置机器使用,作为交换
  3. memcached的安装在机器上,并设置一个128GB的内存限制
  4. 基准

请问内核能够页的东西进出速度不够快? 没有办法知道。 这更多地取决于你的硬件比内核。

波尔·亨宁·卡普通过使事物的内核跟踪(虚拟VS物理内存),清漆,而不是使光油做的确实非常相似,这光油的东西。 https://www.varnish-cache.org/trac/wiki/ArchitectNotes



Answer 4:

NUDB是专为您的使用情况而设计的。 它具有O(1)插入和查找,无论数据库有多大得到。 目前,它正在服刑的波纹需求与9TB(9兆兆字节)的数据文件。 该库开源的,仅邮件头,并且只需要C ++ 11 https://github.com/CPPAlliance/NuDB



文章来源: Low-latency Key-Value Store for SSD