Как я могу реализовать JTA-подобные транзакционные операции с документно-ориентированной базой данных, такой как MongoDB?

Просматривая, я действительно изо всех сил пытаюсь найти подходящий ответ на этот вопрос.

Я попробовал свой шанс с двухфазными коммитами Mongo, как описано здесь: http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/, но это кажется утомительным и не имеет распределенных транзакций с другими уровнями.

Мне также потребуются веские аргументы относительно прочности и надежности.

Кто-нибудь добился успешного изучения или внедрения в производство на этом?

Моя основная потребность состоит в том, чтобы добавить персистентность, ориентированную на документ, к реализации JCR.

Спасибо за помощь


person Charles    schedule 18.12.2013    source источник
comment
Получить базу данных, совместимую с ACID?   -  person Sammaye    schedule 18.12.2013
comment
Или используйте STM (программная транзакционная память) для управления этим на уровне приложения.   -  person Aravind Yarram    schedule 18.12.2013
comment
Что ж, STM на самом деле переместит проблему на уровень приложения, а не решит ее. Ожидаемая поддержка транзакций в моей проблеме предназначена для обеспечения надежности на нескольких и разных уровнях хранения данных (БД, ФС и т. д.).   -  person Charles    schedule 18.12.2013
comment
Этот вопрос возникает часто, поскольку некоторые думают, что есть обходной путь. К сожалению, вы выбрали неправильную технологию БД, если межуровневые транзакции важны для вашего приложения.   -  person WiredPrairie    schedule 18.12.2013


Ответы (1)


К сожалению, большинство баз данных NoSQL не поддерживают ACID или XA, за исключением графовых баз данных, таких как Neo4j. MongoDB поддерживает атомарные операции только в одном документе. Вот почему вы находите так называемые двухфазные коммиты в документе mongodb такими громоздкими. Вы также можете проверить, соответствует ли использование компенсирующей транзакции вашему варианту использования или нет.

person Lan    schedule 18.12.2013