Hbase Schema Nested Entity
У кого-нибудь есть пример того, как создать таблицу Hbase с вложенной сущностью?
пример
UserName (string)
SSN (string)
+ Books (collection)
Например, коллекция книг будет выглядеть так
книги
isbn
title
etc...
Я не могу найти ни одного примера, как создать такую таблицу. Я вижу, что многие говорят об этом и о том, как это лучше всего использовать в определенных сценариях, но я не могу найти пример того, как это сделать где-либо.
Спасибо...
2 ответа
Вложенные сущности не являются официальной особенностью 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-клиентом более изощренным способом, чем я делаю с этими командами оболочки, они ' только для пояснительных целей). И хотя вы можете эффективно сканировать только часть столбцов в таблице по ключу (используя фильтр разбиения на страницы столбцов), вы не можете ничего сделать с содержимым ячеек, кроме как извлекать их и анализировать их в другом месте.
Зачем ты это делаешь? Вероятно, просто, если вы хотите атомарность вокруг всех вложенных строк для одной родительской строки. Это не очень часто, лучше всего начинать с моделирования их как отдельных таблиц и переходить к этому подходу, только если вы действительно понимаете компромиссы.
Есть некоторые ограничения для этого. Во-первых, эта техника работает только до одного уровня: ваши вложенные сущности не могут сами иметь вложенные сущности. Вы можете по-прежнему иметь несколько разных вложенных дочерних объектов в одном родителе, а квалификатор столбца - это их идентифицирующие атрибуты. Во-вторых, доступ к отдельному значению, хранящемуся в качестве квалификатора вложенного столбца внутри строки, не так эффективен, как доступ к строке в другой таблице, как вы узнали ранее в этой главе. Тем не менее, существуют убедительные случаи, когда подобный дизайн схемы подходит. Если единственный способ получить доступ к дочерним объектам - через родительский объект, и вы хотите иметь транзакционную защиту для всех дочерних объектов родителя, это может быть правильным способом.