Аналог транзакции в HBase - PullRequest
3 голосов
/ 15 декабря 2011

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

void batch(List<Row> actions, Object[] results)
//Method that does a batch call on Deletes, Gets and Puts.

Но это работает только с одной таблицей. Погуглил, я нашел класс MultiAction :

Контейнер для действий (т. Е. Get, Delete или Put), которые сгруппированы по regionName. Предназначено для использования с HConnectionManager.processBatch ()

Это то, что я ищу? Если да, то я не могу понять, что такое регион . Спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

HBase не поддерживает транзакции.Хотя у вас есть что-то вокруг атомарности в одной таблице, вы заметили, как транзакция, если вам нужно обновить более одной.Транзакции означают 4 вещи, которые идут под аббревиатурой ACID .в двух словах

  • атомарность - изменения в транзакции происходят вместе ("все или ничего").
  • согласованность - состояние должно оставаться действительным
  • изоляция - операции внетранзакция не может видеть половинные изменения (промежуточные несогласованные состояния)
  • Долговечность - изменения должны сохраняться

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

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

Обратите внимание, что, поскольку у вас нет изоляции, иногда откат не возможен, поэтому вам необходимо реализовать логику компенсации (alsо взглянуть на шаблон саги )

2 голосов
/ 16 декабря 2011

Есть несколько проектов, направленных на создание транзакционного слоя поверх HBase, например Omid , которому я помогаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...