我们正在开发具有以下属性的SSD支持的键值解决方案:
我们在商用SSD上尝试了KyotoCabinet,LevelDB和RethinkDB,使用不同的Linux IO调度程序,ext3 / xfs文件系统;使用Rebench进行了多次测试;并发现在所有情况下:
下图说明了KyotoCabinet的这种行为(横轴是时间,三个时段清晰可见 - 只读,混合,仅更新)。
问题是:是否可以使用SSD实现所述SLA的低延迟以及推荐使用哪些键值存储?
答案 0 :(得分:3)
高度变异的写入延迟是SSD(尤其是消费者模型)的常见属性。在AnandTech review中有一个很好的解释原因。
总结是随着磨损平衡开销的增加,SSD写入性能随着时间的推移而恶化。随着驱动器上空闲页面的数量减少,NAND控制器必须开始对页面进行碎片整理,这会导致延迟。 NAND还必须构建LBA以阻止映射以跟踪跨各种NAND块的数据的随机分布。随着地图的增长,地图上的操作(插入,删除)将变慢。
您无法使用SW方法解决低级硬件问题,您需要升级到企业级SSD或放宽延迟要求。
答案 1 :(得分:1)
Aerospike是一个较新的键/值(行)存储,它可以完全脱离SSD,并且<读/写的延迟为1ms,TPS非常高(达到数百万)。
SSD具有良好的随机读取访问权限,但减少写入差异的关键是使用顺序IO(这类似于常规硬盘)。它还可以大大降低SSD上大量写入时可能出现的磨损均衡和褪色。
如果您正在构建自己的键值系统,请使用日志结构方法(如Aerospike),以便批量写入并以大块形式附加/写入。内存索引可以维护值的正确数据位置,而后台进程可以清除磁盘中的陈旧/已删除数据并对文件进行defrags。
答案 2 :(得分:0)
这是一种难以理解的想法,但可能是有效的。我们假设你的SSD是128GB。
内核是否能够足够快地进出内容?没办法知道。这更多地取决于你的硬件而不是内核。
Poul-Henning Kamp通过让内核跟踪Varnish的事物(虚拟与物理内存)而不是让Varnish这样做,在Varnish中做了类似于此的事情。 https://www.varnish-cache.org/trac/wiki/ArchitectNotes
答案 3 :(得分:0)
NuDB专为您的用例而设计。无论数据库有多大,它都具有O(1)插入和查找功能。当前,它满足了9TB(9 TB)数据文件的需求。该库是开源的,仅标头,仅需要C ++ 11 https://github.com/CPPAlliance/NuDB