Справка схемы HBase

Происходя из среды SQL Server, я - новичок относительно HBase, но технология надеется быть подходящим вариантом для того, что мы делаем, и стоимость является определенно правильной!

Я должен вести список записей в журнале, которые обычно я создал бы в RDBS как:

создайте таблицу Log (Интервал UserID, интервал SiteID, Page varchar (50), Дата smalldatetime)

где у одного пользователя может быть 0 или 1 000 строк в этой простой таблице. Типичные запросы состояли бы в том, чтобы найти все строки для одного пользователя или все строки для одного пользователя на одном сайте.

Как это переводит в "карту" в HBase, где нет никакого "ключа строки", И то же (SiteID, Страница) может много раз появляться. Моя первая мысль - то, что UserID является ключом строки, но я все еще не понимаю "семейства столбцов" и другую терминологию достаточно хорошо, чтобы понять, как установить таблицу для содержания этих данных, где тот UserID может иметь многих (SiteID, Страница, Дата) "строки".

Любое направление ценится!

1
задан Jody Powlette 11 May 2010 в 18:42
поделиться

1 ответ

Один из подходов заключается в том, чтобы сделать составные ключи строк из вашего userid+siteid

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

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

Таким образом, у вас будет таблица с содержимым примерно следующего вида

Row             Page

user1:site1     www.example.com/index.html@1234567890
                www.example.com/somepage.html@123456800
                www.example.com/someotherpage.html@123456900
                www.example.com/index.html@123457123

user1:site2     blahblah

user2:site1     etc...

Чтобы разобраться с двумя примерами запросов:

Для поиска всех строк пользователей вы должны сделать сканирование (не забудьте установить maxVersion) от userx:0 до userx+1:0, а затем разобрать идентификаторы сайтов из каждой строки результатов

Чтобы получить все страницы для определенного пользователя/сайта, просто сделайте сканирование от userx:sitex до userx:sitex+1. Насколько я знаю, вы не можете установить maxVersions в get, так что это не вариант.

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

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

Чтобы лучше понять внутреннюю структуру HBase, блог Ларса Джорджа также очень полезен.

0
ответ дан 3 September 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: