Systems that require high-throughput and fault tolerance, such as key-value stores and databases, are looking to persistent memory to combine the performance of in-memory systems with the data-consistent fault-tolerance of nonvolatile stores. Persistent memory devices provide fast bytea-ddressable access to non-volatile memory. We analyze the design space when integrating persistent memory into in-memory key value stores and quantify performance tradeoffs between throughput, latency, and and recovery time. Previous works have explored many design choices, but did not quantify the tradeoffs. We implement persistent memory support in Redis and Memcached, adapting the data structures of each to work in two modes: (1) with all data in persistent memory and (2) a hybrid mode that uses persistent memory for key/value data and non-volatile memory for indexing and metadata. Our experience reveals three actionable design principles that hold in Redis and Memcached, despite their very different implementations. We conclude that the hybrid design increases throughput and decreases latency at a minor cost in recovery time and code complexity
翻译:需要高通量和差分容忍度的系统,例如关键值仓库和数据库,正在寻找耐久性记忆,以便将模拟系统的性能与非挥发性仓库的数据一致的过错耐受力结合起来。耐久性记忆装置提供快速的字节可改用的非挥发性记忆。当将耐久性记忆纳入模拟关键值仓库并量化通过量、延缓度和回收时间之间的性能权衡时,我们分析了设计空间。以前的工作探索了许多设计选择,但没有量化权衡。我们在Redis和Memcached中持续性记忆支持,将每个系统的数据结构调整为两种模式:(1)所有持续性记忆中的数据,和(2)使用耐久性记忆用于关键/价值数据和非挥发性记忆用于索引和元数据的混合模式。我们的经验揭示了三种可操作的设计原则,这些原则在Redis和Memcached之间,尽管其执行程度非常不同。我们的结论是,混合性设计增加过量,减少延迟性,在恢复时间和代码复杂性方面费用很小。