RocksDB:每个打开/关闭数据库都会创建一个新的SST / LOG文件吗?

时间:2018-12-05 15:07:24

标签: rocksdb

我正在尝试使用发行版中提供的简单API用C语言编写代码。我的目标是将短行写入db,以便另一个进程尽快读取它们。因此,我将在写完任何行后立即关闭数据库以解锁数据库,以便另一个进程能够读取该行。当我使代码正常工作时,该任务将被认为已经完成,但是..行插入的速度很快就会减慢。我们将从每秒〜50次插入开始,在一分钟内最大速度将不超过每秒10次插入。我试图弄清楚原因,发现每个插入都将制作自己的小型SST文件,仅包含一行,如果我打开WAL,然后避免刷新,那么将会有太多的wal日志文件,并且仅一排。每秒还会有2000个“ LOG.old”文件,每个文件都会加倍并加倍选项列表-这就是我认为使整个工作缓慢的原因。首先,我尝试避免冲洗,然后尝试进行定期冲洗,但这都没有用。我想知道,是否有任何选项可以多次关闭和打开数据库以进行写入,但是每次执行操作时仍不创建SST或WAL文件?

1 个答案:

答案 0 :(得分:1)

似乎您不应该像现在这样使用rocksdb。如果您在这么短的时间内打开了数据库,那么它将无法运行压缩,并且所有数据将保留在WAL或0级中。仅打开所有包含未压缩SST的文件的开销很高,并且所有0级SST都必须在读取时进行扫描,因为它们是内部排序的,但是在该级别中没有顺序,这会使rocksdb在读取时变慢。

您可能应该使用基于守护程序的数据库/存储(memcached?),并且仅通过IPC(unix-socket?)从进程进行通信,因为对于单个读/写操作打开数据库总是很慢。