RocksDB 缓存服务的可用性

Usability of RocksDB for caching services

我主要阅读英文论文和手册,我的母语不是英语,这就是为什么我不太了解 RocksDB 的工作原理。你能回答我几个关于 RocksDB 是如何工作的问题吗?

  1. RocksDB是单线程还是多线程?它是否以多线程模式处理所有任务?它是如何工作的? RocksDB 是否有类似负载均衡器的东西,可以在不同线程之间分配任务?

  2. 如果 RAM 内存没有足够的 space 用于新记录,RocksDB 会做什么?例如,一些缓存服务删除最少使用的信息以便能够加载新记录,其中一些只是报告内存不足错误。在这种情况下,RocksDB 会做什么?

  3. 我经常比较 Rocksdb 和 Memcached,因为我一直在为高负载网站寻找缓存服务。出于缓存目的,什么会更快? RocksDB 还是 Memcached?我试图找到基准,但没有找到任何基准。

1).它是多线程的。它使用后台线程将数据写入磁盘并在磁盘上保持高效的数据布局(log structured merge-tree - LSM)。并没有真正的 "tasks being processed" 之类的东西,因为它是一个库,您可以 link 进入您的过程。如果它是多线程的,则您的进程负责以安全的方式使用它。

2). RAM 仅用于缓存 rocksdb 中的数据。数据被保存到一个高效的磁盘数据结构中——前面提到的 LSM。如果您的缓存已满,某些内容将被逐出,但它仍在磁盘上。

3).在您进行简单查找的大多数情况下,Memcached 可能更快,但由于 rocksdb 是一个库,它可以以许多不同的方式使用,它们无法真正进行比较。我知道 rocksdb 将其文件写入 RAMfs 的一种设置,这当然比写入磁盘快得多,但在典型设置中,我希望必须维护记录的顺序并必须保留数据将使它显着比 memcached 使用的基于 RAM 的关联数组慢。如果您的主要成本是对 memcached 的网络访问,那么拥有一个位于同一位置的 rocksdb 可能会更快。