Если бы я хотел сравнить две подобные таблицы Accumulo и выделить их различия, как я мог это сделать?

Моя первая мысль - создавать дампы базы данных и запускать Unix diff над файлами, но это не будет масштабироваться.

Моя вторая мысль - возможно, есть способ синхронизировать две таблицы Accumulo, надеюсь, с опцией пробного запуска, которая могла бы где-то собрать различия.

... есть ли способ сделать это в HBase?

1 ответ1

2

К сожалению, я не знаю ничего, что существует из коробки, чтобы сделать это.

Тривиально, вы можете реализовать это с помощью двух сканеров и выполнить объединенное чтение. Поскольку оба сканера возвращают отсортированные данные, если два значения ключа равны, вы продвигаете оба сканера. Если Ключ от Scanner1 сортируется перед Ключом от Scanner2, вы знаете, что Ключ не существует в таблице из Scanner2, и вы продвигаете Scanner1. Если Ключ от Сканера2 сортируется до Ключа от Сканера1, этот Ключ не существует в таблице от Сканера2, и вы продвигаете Сканер2.

Однако, как вы сказали, это будет довольно медленно, так как у вас есть один поток, читающий одну таблицу, и у вас, вероятно, есть несколько ядер для одновременной работы.

Чтобы сделать эту шкалу, вы можете "разбить" свою таблицу на сегменты (например, если ваши ключи таблицы - алфавит [A, B, C, ... Z], в этом случае каждый раздел может быть буквой), и вы можете распараллелить свой алгоритм. Используя пример с алфавитом, вы можете иметь 26 клиентов, одновременно читающих части таблиц. Это то, что может быть легко реализовано как работа по уменьшению карты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .