Семейство столбцов HBase: сколько?

Вероятно, есть много похожих вопросов, но они не отвечают на мой сценарий (по крайней мере, я не могу понять).

  • У меня есть, скажем, таблица в HBase с четырьмя семействами столбцов. Основная причина в том, что каждое семейство столбцов имеет разные атрибуты VERSIONS (очень разные).

  • Все столбцы всех семейств не хранят большие данные (например, полнотекстовые), а в среднем 1 КБ (длинные идентификаторы, короткие строки, целые числа и т.д.)

  • Мне нужно получить доступ к данным несколькими способами: сканировать и получать по семейству столбцов, получать все ячейки определенной строки по версии (конкретная версия или диапазон) и, наконец, не последнюю очередь: получить последнюю версию все столбцы данной строки.

Итак, каковы в этом сценарии недостатки наличия четырех семейств столбцов? Имеются ли чтения менее эффективны, поскольку они работают (в случае, если строка не находится в памяти) в разных файлах хранилища?

Ответ 1

Идея семейств столбцов велика - к сожалению, текущая реализация HBase не справляется с большим количеством семейств столбцов. В основном вы должны попытаться придерживаться одного и добавить второй, если у вас есть радикально разные шаблоны доступа. Также см. руководство HBase

Что вы можете сделать, так это сохранить свою "семью" в виде столбцов с разными префиксами. HBase разрежен, поэтому он не займет больше места, и вы можете получить только одну "семью" с фильтром columnPrefix при сканировании, если вам нужно

Ответ 2

Существует ограничение на количество семейств столбцов в HBase. Существует один MemStore (его кеш-запись, в котором хранятся новые данные, прежде чем записывать их в Hfiles) для каждого семейства столбцов, когда он заполнен, все они скрыты.

Чем больше вы добавите семейства столбцов, тем больше будет создано MemStore, а Memstore flush будет более частым. Это ухудшит производительность.

Ответ 3

Согласно вики-странице Apache HBase Hbase столкнется с проблемами производительности более чем с 2 или 3 семействами столбцов.

Ответ 4

Когда MemStore накапливает достаточно данных, весь отсортированный набор записывается в новый HFile в HDFS. HBase использует несколько файлов HFiles для каждого семейства столбцов, которые содержат фактические ячейки или экземпляры KeyValue. Эти файлы создаются со временем, так как правки KeyValue, отсортированные в MemStores, сбрасываются как файлы на диск.

Обратите внимание, что это одна из причин, по которой существует ограничение на количество семейств столбцов в HBase. Существует один MemStore на CF; когда один полон, они все сбрасывают. Также сохраняется последний записанный порядковый номер, чтобы система знала, что сохранилось до сих пор. Чем больше вы добавляете семейства столбцов, тем больше будет создаваться MemStore и тем чаще будет происходить очистка Memstore.