Ссылочная целостность и HBase - PullRequest
1 голос
/ 27 июня 2010

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

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

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

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Мы столкнулись с той же проблемой.

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

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

1 голос
/ 07 июля 2010

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

0 голосов
/ 19 марта 2014

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

0 голосов
/ 27 июня 2010

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

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

...