Hadoop Hbase: распределять семейства столбцов по таблицам или нет - PullRequest
11 голосов
/ 25 марта 2009

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

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

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

Ответы [ 2 ]

8 голосов
/ 14 июля 2009

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

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

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

8 голосов
/ 15 апреля 2009

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

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

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

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

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

...