2010-06-27 5 views
1

Одна из первых схем примеров, которые вы читаете в FAQ HBase, - это пример студенческого курса для отношения многих факторов. В схеме есть столбец «Курсы» в таблице «Студент» и столбец «Студенты» в таблице «Курс».Ссылочная целостность и HBase

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

Я вижу, что есть объект транзакции, но какова стоимость использования этого на что может быть каждый Put? Или есть другие способы подумать о проблеме?

ответ

0

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

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

1

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

2

Мы попали в ту же проблему.

Я разработал коммерческий плагин для hbase, который обрабатывает транзакции и проблемы отношений, которые вы упомянули. В частности, мы используем DataNucleus для среды, совместимой с JDO. Наш плагин указан на этой странице http://www.datanucleus.org/products/accessplatform_3_0/datastores.html или вы можете перейти непосредственно к нашему маленькому блогу http://www.inciteretail.com/?page_id=236.

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

0

Логические реляционные модели используют два основных разновидности отношений: один-ко-многим и многие-ко-многим. Реляционные базы данных моделируют первые непосредственно как внешние ключи (независимо от того, явно принудительно используется базой данных в качестве ограничений или неявно ссылается вашим приложением как столбцы соединения в запросах), а последние - как таблицы соединений (дополнительные таблицы , где каждая строка представляет один экземпляр связь между двумя основными таблицами ). В HBase нет прямого отображения этих данных, и часто это сводится к де- , нормализующим данные. Первое, что нужно отметить, это то, что HBase, не имеющий встроенных объединений или ограничений, малоприменим для явных отношений. Вы можете так же легко разместить данные, которые являются одним-на- многими в природе в таблицы HBase :. Но это только отношения в том, что некоторые части строки в предыдущей таблице происходят с , соответствуют частям строк в последней таблице. HBase ничего не знает об этой связи, так что ваше приложение может делать с ним что-либо (если угодно).