【问题标题】:Usability of RocksDB for caching services [closed]RocksDB 用于缓存服务的可用性 [关闭]
【发布时间】:2020-08-25 01:11:29
【问题描述】:
我主要阅读英文论文和手册,而我的母语不是英语,这就是为什么我不太了解 RocksDB 的工作原理。请您回答我几个有关 RocksDB 工作原理的问题吗?
-
RocksDB 是单线程还是多线程?它是否以多线程模式处理所有任务?它是如何工作的? RocksDB 是否有类似负载均衡器之类的东西,可以在不同线程之间分配任务?
-
如果 RAM 内存没有足够的空间容纳新记录,RocksDB 会怎么做?例如,一些缓存服务会删除最少使用的信息以加载新记录,其中一些只是报告内存不足错误。 RocksDB 在这种情况下会做什么?
-
我经常比较 Rocksdb 和 Memcached,因为我一直在为高负载网站寻找缓存服务。出于缓存目的,哪个更快? RocksDB 还是 Memcached?我试图找到基准,但没有找到任何基准。
【问题讨论】:
标签:
caching
memcached
rocksdb
【解决方案1】:
1)。它是多线程的。它使用后台线程将数据写入磁盘并在磁盘上保持有效的数据布局(log structured merge-tree - LSM)。实际上并没有“正在处理的任务”之类的东西,因为它是一个链接到您的流程的库。如果它是多线程的,那么您的进程负责以安全的方式使用它。
2)。 RAM 仅用于在 RocksDB 中缓存数据。数据被持久化到一个高效的磁盘数据结构中——前面提到的 LSM。如果您的缓存已满,则某些内容将被驱逐,但它仍在磁盘上。
3)。在您进行简单查找的大多数情况下,Memcached 可能更快,但由于 RocksDB 是一个库,它可以以许多不同的方式使用,它们无法真正进行比较。我知道 Rocksdb 将其文件写入 RAMfs 的一种设置,这当然比磁盘快得多,但在典型设置中,我希望必须维护记录的顺序和必须持久化数据会显着比 memcached 使用的基于 RAM 的关联数组慢。如果您的主要成本是对 memcached 的网络访问,那么拥有一个托管的 RocksDB 可能会更快。