我主要阅读英语文章和手册,而我的母语不是英语,这就是为什么我对RocksDB的工作方式不甚了解的原因。您能回答我几个有关RocksDB工作原理的问题吗?
1)RocksDB是单线程还是多线程?是否以多线程模式处理所有任务?以及它如何运作? RocksDB是否具有类似负载平衡器的功能,可以在不同线程之间分配任务?
2)如果RAM内存没有足够的空间来存储新记录,dRocksDB会怎么做?例如,某些缓存服务删除了最少使用的信息以能够加载新记录,其中一些仅报告内存不足错误。在这种情况下,RocksDB会做什么?
3)我比较Rocksdb和Memcached,因为我为高负载的网站选择了缓存服务,所以为什么最后一个问题是RocksDB或Memcached的速度更快?我试图找到基准,但没有找到任何基准。
答案 0 :(得分:0)
1)。它是多线程的。它使用后台线程将数据写入磁盘并在磁盘上保持有效的数据布局(log structured merge-tree-LSM)。实际上并没有“正在处理的任务”之类的东西,因为它是您链接到流程中的库。如果您的进程是多线程的,则负责以安全的方式使用它。
2)。 RAM仅用于在rocksdb中缓存数据。数据被持久化为有效的磁盘数据结构-上述LSM。如果您的缓存已满,将会驱逐某些东西,但它仍在磁盘上。
3)。在大多数情况下,Memcached在执行简单查找的情况下可能会更快,但是由于rocksdb是一个库,因此它可以以多种不同的方式使用,因此它们实际上无法进行比较。我知道用rocksdb将其文件写入RAMfs的一种设置,这当然比将其写入磁盘要快得多,但是在典型的设置中,我希望必须保持记录的顺序并必须保留数据将使它显着提高比memcached使用的基于RAM的关联数组慢。如果您的主要成本是对memcached的网络访问,则在同一地点放置rockdb可能会更快。