Весенние данные для MongoDB

Я использую mongodb with spring mvc для REST API. У меня есть контроллер, который добавляет комментарии к событиям. Этот контроллер использует метод моей службы событий. И реализация их ниже. Однако мне кажется, что мое соединение с mongodb работает без transaction. У меня есть 1 insert и 1 update в том, что мой контроллер добавляет комментарий. Если обновление события выдает ошибку, запрос фиксирует вставку. Почему не выполняется откат? Как я могу решить эту проблему?

public Comments addComment(Comments comment) throws Exception{
    comment.setCommentDate(SowUtil.getDateTimeDB());
    comment.setCommenter(personService.findPersonById("531cc90e3c37b20bef47dfc7"));
    mongoTemplate.insert(comment);
    Events adv = findEventById(comment.getEventId());
    adv.addComment(comment);
    eventService.save(adv);
    return comment;
}

person Emilla    schedule 12.03.2014    source источник


Ответы (1)


MongoDB не имеет того же понятия о транзакциях, что и RDBMS. Судя по вашему примеру, вы используете два документа.

В MongoDB есть статья о шаблонах двухэтапной фиксации с участием нескольких документов ( http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/). Возможно, это поможет вам осуществить откат?

Я считаю, что Spring также имеет понятие поддержки транзакций для MongoDB (http://docs.spring.io/spring-integration/reference/html/mongodb.html).

person Christopher Z    schedule 12.03.2014
comment
Честно говоря, я удивлен. Он должен сохранять транзакцию для всех коммитов между запросом и циклом ответа. Первая ссылка, которую вы дали, является своего рода обходным путем, и она замедляет мою систему. Я думаю, должно быть решение. я продолжаю искать - person Emilla; 13.03.2014
comment
Или, может быть, вы можете посоветовать лучшее представление данных для моей модели, описанной выше. Как вы можете видеть из моего вопроса, между событиями и комментариями существует связь OnetoMany. и именно поэтому я подумал, что у меня должно быть 2 документа. вы советуете мне вместо этого иметь 1 документ - person Emilla; 13.03.2014
comment
Прежде чем изменить модель данных, есть ли особая причина, по которой вы не хотите использовать СУБД? Кроме того, вы смотрели на функцию синхронизации транзакций Spring? - person Christopher Z; 13.03.2014
comment
Да, у меня есть причина, до сих пор mongodb полностью покрывает мои требования. Я пытаюсь создать социальное приложение, которое точно зависит от географических данных. И mongodb делает это очень хорошо и быстрее, чем реляционная база данных. У меня много гео-запросов. - person Emilla; 13.03.2014
comment
Когда я ищу и читаю в Интернете, мне трудно сделать то, что мне нужно. И я решил поместить все комментарии в документ событий, чтобы я мог обрабатывать их в 1 запросе и 1 документе. Тем не менее, я хотел бы спросить вас, можно ли решить, получить событие со всеми комментариями и без комментариев весной. - person Emilla; 13.03.2014
comment
Вы можете попробовать это stackoverflow.com/questions/ 5301795/ - person Christopher Z; 13.03.2014