Сортировка по ключу в rockdb

avatar
cknelle
27 июля 2021 в 10:06
432
1
0

Я пытаюсь сравнить в java огромное количество данных с двумя входами в папки: папка1 и папка2. Каждая папка содержит несколько файлов размером около 10 Мбайт каждый. У меня около 100 файлов в каждой папке. Каждый файл содержит строку ключа и значения, например (всего около 500 миллионов строк для каждой папки):

RFE023334343432-45,456677
RFE54667565765-5,465368
and son on..
  1. Первый шаг

Сначала каждая строка всех файлов из папки1 считывается и загружается в базу данных rockdb с помощью в моем примере выше

key = RFE023334343432-45 and corresponding 
value = 456677
  1. Второй этап

После того, как база данных rockdb заполнится данными из папки1, для каждой строки, прочитанной в папке 2, я вызываю метод рокдб get() папки 1, чтобы проверить, существует ли ключ, извлеченный для строки папки 2, в базе данных рокс. Он возвращает null, когда I не существует. Обратите внимание, что я не могу использовать метод rockdb keyMayExist(), потому что он возвращает ложноположительные результаты, когда вы манипулируете слишком большим объемом данных.

Производительность правильная, когда данные внутри папки1 упорядочены относительно значения ключа.

Но моя продолжительность умножается на 3, когда входные данные не отсортированы (я перетасовал их с помощью команды оболочки). Это странно, потому что в моем тесте Я копирую свою несортированную папку1 в папку2 (просто дублирую мою папку). Таким образом, даже если папка1 не отсортирована, папка2 также не отсортирована точно так же, как и папка1.

Мой вопрос: как я могу отсортировать базу данных rockdb по ключу?

Источник

Ответы (1)

avatar
Siying Dong
27 июля 2021 в 19:21
2

RocksDB всегда сортирует данные по ключу. Вы можете использовать итератор для пар K/V из экземпляра RocksDB. Вот API для создания итератора: https://github.com/facebook/rocksdb/blob/v6.22.1/include/rocksdb/db.h#L709-L716