Поддерживает ли HBase вложенные транзакции (или что-то подобное)? - PullRequest
0 голосов
/ 09 ноября 2018

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

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

Если я переключусь на HBase (что у меня есть другие причины для рассмотрения, например, масштабирование), могу ли я сделать что-то подобное? Это случай "не уверен, что гуглить".

1 Ответ

0 голосов
/ 11 ноября 2018

Во-первых, существует очень мало баз данных, которые поддерживают действительно вложенные транзакции. Тем не менее, и MySQL, и Postgres поддерживают SAVEPOINT, который можно использовать для выполнения того, что вы пытаетесь сделать. Если вы используете ORM как рельсы; он уже должен быть в состоянии обработать такой вариант использования.

Транзакции в HBase

Apache HBase не поддерживает транзакции в общепринятом смысле, т. Е. Не предоставляет возможности запустить и затем откатить операцию. Единственные транзакционные гарантии, которые предоставляет HBase:

  1. Атомарность операций на уровне строк.
  2. Любая операция сканирования, выполняемая в области HBase, будет видеть состояние данных в том виде, в котором оно было в начале сканирования. Он не увидит новые данные, которые были записаны в регион во время сканирования.

Мой совет - не ожидать таких же ожиданий от базы данных NoSQL, как от реляционной базы данных. HBase хорош для обработки десятков петабайт данных для выполнения точечных обновлений большого объема, считывания точек и сканирования диапазона. Однако управление кластером HBase является гораздо более сложной задачей, чем управление экземпляром MySQL. Вам нужно будет отказаться от многих требований, которые вы бы предъявляли к реляционной базе данных при переходе на HBase.

Тем не менее, существуют обходные пути к тому, что вы пытаетесь сделать, которые могут или не могут работать в зависимости от ваших точных настроек. Вы можете просто очистить всю БД / таблицу перед началом каждого теста.

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

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