Дизайн ключа строки HBase для чтения и обновления

Я пытаюсь понять, как лучше всего создать ключ для моей таблицы HBase.

Мой вариант использования:

Структура прямо сейчас

PersonID | BatchDate | PersonJSON

Когда что-то в человеке изменяется, в Hbase вставляются новый PersonJSON и новый batchdate, обновляя старые записи. И каждые 4 часа сканирование всех людей, которые были изменены, затем отправляется в Hadoop для дальнейшей обработки.

Если мой ключ - это просто personID, он отлично подходит для обновления данных. Но моя производительность отстой, потому что мне нужно добавить фильтр в столбец BatchData, чтобы сканировать все строки, превышающие дату пакета.

Если мой ключ является составным ключом, например BatchDate | PersonID, я мог бы использовать startrow и endrow для ключа строки и получить все строки, которые были изменены. Но тогда у меня было бы много дубликатов, поскольку ключ не уникален и больше не может обновлять человека.

Можно ли использовать фильтр bloom для row + col (personid + batchdate)?

Любая помощь приветствуется. Спасибо, Абхишек


person Abhishek Andhavarapu    schedule 11.10.2014    source источник


Ответы (2)


В дополнение к таблице с PersonID в качестве ключа строки, похоже, вам нужен двойной- напишите вторичный индекс с BatchDate в качестве ключа строки.

Другой вариант - Apache Phoenix, который обеспечивает поддержку вторичных индексов.

person Mark Rajcok    schedule 12.01.2015

Обычно я делаю два шага: создаю таблицу, в которой только ключ - это комбинация BatchDate + PersonId, значение может быть пустым. Создайте таблицу два, как обычно. Ключ - это PersonId. Значение - это все данные.

Для запроса диапазона дат: сначала запросите таблицу, чтобы получить PersonIds, а затем используйте Hbase batch get API, чтобы получить данные пакетным способом. это было бы очень быстро.

person Jack    schedule 06.02.2016