mongodb - стратегия, обеспечивающая сохранение данных в разных коллекциях, например транзакции на уровне приложения - PullRequest
2 голосов
/ 25 марта 2012

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

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

Эти данные операций могли бы быть сохранены как вложенный документ одной коллекции,Например, если я попытаюсь сохранить данные в collection1 , тогда я могу сохранить «вставьте данные операции» в той же коллекции1, что и встраиваемый документ.Если я попытаюсь изменить данные в collection2 , тогда я смогу сохранить «изменить данные операции» в той же самой коллекции2, что и встраиваемый документ, и т. Д. Таким образом, когда я хочу получить «данные вложенного документа операций», я должен запросить collection1, collection2, collection3 и т. д. и т. д. Я думаю, что это дорого.Дальнейшие collection1, collection2, collection3 уже подчеркнуты приложением, поэтому я больше не хочу подчеркивать.

Альтернативно, я могу сохранить «данные операции» в отдельном наборе, например, имя коллекции «oper_coll».Поэтому я могу запросить только «oper_coll» для получения «данных операций», но это означает, что когда я сохраняю данные в collection1, я должен сохранять «данные операций» в «oper_coll» для отслеживания текущей операции.Я хочу, чтобы данные правильно сохранялись в collection1, а операции - в oper_coll.Если что-то идет не так, ничего не происходит, данные не представлены ни в одной коллекции (collection1 и oper_coll).Поэтому мне нужна система транзакций на уровне приложений, потому что я знаю, что mongodb не поддерживает транзакции.

Итак, я хочу реализовать нечто подобное на уровне приложения, потому что мне нужно сохранить данные1 в collection1 и, если все в порядке, сохранить данные2 в collection2.Если что-то пойдет не так, откатите все.

У вас есть идеи?

1 Ответ

0 голосов
/ 25 марта 2012

Во-первых, я думаю, что эта ссылка поможет, она предоставляет пример того, как организовать двухфазный коммит, используя mongo.

http://cookbook.mongodb.org/patterns/perform-two-phase-commits/

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

Помогает ли это вообще?

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