在 rocksdb 中按键排序

Sorting by key in rocksdb

我试图在 java 中比较大量数据和 2 个文件夹条目 folder1 和 folder2。 每个文件夹包含多个文件,每个文件大小约为 10 MB。我在每个文件夹中有大约 100 个文件。 每个文件都包含一个键值行(每个文件夹总共大约有 5 亿行):

RFE023334343432-45,456677
RFE54667565765-5,465368
and son on..
  1. 第一步

首先,folder1 中所有文件的每一行都被读取并加载到 rocksdb 中,使用 在我上面的例子中

key = RFE023334343432-45 and corresponding 
value = 456677
  1. 第二步

一旦我的 rocksdb 充满了 folder1 数据, 对于 folder2 中读取的每一行,我调用 folder1 rocksdb get() 方法来检查为 folder2 行提取的密钥是否存在于 rocksdb 中。它 returns null 当我不存在时。 请注意,我不能使用 rocksdb keyMayExist() 方法,因为当您操作大量数据时,它 returns 会产生误报。

当 folder1 中的数据根据​​键值排序时,性能是正确的。

但是当输入数据未排序时,我的持续时间乘以 3(我使用 shell 命令将它们打乱)。这很奇怪,因为在我的测试中 我将 unsort folder1 复制到 folder2(只是复制我的文件夹)。因此,即使 folder1 未排序,folder2 也以与 folder1 完全相同的方式未排序。

我的问题是如何按键对 rocksdb 进行排序?

RocksDB 总是按键排序数据。您可以使用迭代器从 RocksDB 实例中获取 K/V 对。这是创建迭代器的API:https://github.com/facebook/rocksdb/blob/v6.22.1/include/rocksdb/db.h#L709-L716