Подтвердить что ты не робот

Hbase Schema Nested Entity

Есть ли у кого-нибудь пример того, как создать таблицу Hbase с вложенным объектом?

Пример

UserName (string)
SSN  (string)
  + Books (collection)

Коллекция книг будет выглядеть так, например

Книги

isbn
title
etc...

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

Спасибо...

4b9b3361

Ответ 1

Вложенные объекты не являются официальной функцией HBase; это просто способ, которым некоторые люди говорят об одном шаблоне использования. В этом шаблоне вы используете тот факт, что "столбцы" в HBase - это действительно просто большая карта (куча пар ключ/значение), позволяющая моделировать размерность внутри строки, добавляя по одному столбцу на "строку" вложенный объект.

С точки зрения схемы, вам не нужно много делать на самом столе; когда вы создаете таблицу в HBase, вы просто указываете имя и семейство столбцов (и связанные свойства), например (в оболочке hbase):

hbase:001:0> create 'UserWithBooks', 'cf1'

Тогда, это к вам, что вы вложили в него, столб мудрый. Вы можете вставить такие значения, как:

hbase:002:0> put 'UsersWithBooks', 'userid1234', 'cf1:username', 'my username'
hbase:003:0> put 'UsersWithBooks', 'userid1234', 'cf1:ssn', 'my ssn'
hbase:004:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_12345', '<isbn>12345</isbn><title>mary had a little lamb</title>'
hbase:005:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_67890', '<isbn>67890</isbn><title>the importance of being earnest</title>'

Имена столбцов полностью зависят от вас, и нет предела тому, сколько у вас может быть (в пределах разумности: см. Справочное руководство по HBase для получения дополнительной информации об этом). Конечно, делая это, вы должны выполнить свою собственную работу: ввести и выдать значения (и вы, вероятно, сделаете это с помощью java-клиента более сложным способом, чем я делаю с этими командами оболочки, re только для пояснительных целей). И хотя вы можете эффективно сканировать только часть столбцов в таблице по ключевому слову (используя фильтр разбивки на столбцы), вы не можете многое сделать с содержимым ячеек, кроме как вытащить их и проанализировать их в другом месте.

Зачем вам это делать? Вероятно, просто если вы хотите атомарность вокруг всех вложенных строк для одной родительской строки. Это не очень распространено, лучше всего начать с моделирования их как отдельных таблиц и только перейти к этому подходу, если вы действительно понимаете компромиссы.

Ответ 2

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