Hadoop Hbase: Распространение групп столбцов через таблицы или нет

Документация Hbase дает понять, что вы должны группировать аналогичные столбцы в семейства столбцов, поскольку физическое хранилище выполняется по семейству столбцов.

Но что значит помещать два семейства столбцов в одну и ту же таблицу, а не отдельные таблицы в группе столбцов? Существуют ли конкретные случаи, когда "разделение" таблиц имеет смысл, и случаи, когда одна "широкая" таблица работает лучше?

Отдельные таблицы должны приводить к отдельным "регионам строк", что может быть полезно, когда некоторые семейства столбцов (в целом) очень разрежены. И наоборот, когда было бы выгодно иметь сгруппированные семьи?

Ответ 1

У вас есть идея семейств столбцов: на самом деле это всего лишь подсказка для HBase для хранения и репликации этих элементов для более быстрого доступа.

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

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

Если они находятся в разных таблицах, мне придется выполнить операцию объединения в двух таблицах. Я действительно не знаю числа, хотя поэтому я не могу сказать вам, насколько медленна операция, подобная соединению (так как я не помню, что HBase имеет соединение, так как он не является реляционным), и какова точка опроса, где происходит расщепление их на отдельные таблицы перевешивают их в одной таблице (или наоборот).

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

Ответ 2

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

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

Что касается того, должны ли столбцы быть в одной таблице... Я бы просто соблюдал нормативные правила моделирования данных и поместил все столбцы в одну и ту же таблицу, если они являются атрибутами одного и того же объекта. Семейство столбцов относится к производительности, а не к схеме.