CouchbaseTemplate.save(List‹Employee›) хотел сохранить несколько объектов за один раз

Я хотел сохранить несколько объектов «Сотрудник» в документе «Couchbase», но меня беспокоил вариант использования, что произойдет, когда у меня есть объект «Список» размером 5. Предположим, когда он сохранил 3 объекта с 3-мя документами в документе «Couchbase», как сервер «Couchbase» выходит из строя при сохранении остальных 2-документов, что произойдет в этом случае.

1) будет ли отменен весь мой сохраненный документ?
2) будут ли сохранены еще 2 документа?
3) если не оба, то какой вариант рекомендуется для этого варианта использования.??


person Shobhit Pal    schedule 19.06.2017    source источник


Ответы (2)


Из справочной документации:

Couchbase Server не поддерживает многодокументные транзакции или откат.

Так что ни 1., ни 2. не произойдет.

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

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

В конкретном примере вы можете сначала сохранить 5 документов, объединенных в один документ, а затем разделить его в отдельном процессе. Первая запись защищена транзакцией, а второй процесс может повторяться до тех пор, пока он не завершится успешно.

person Jens Schauder    schedule 20.06.2017

Добавление к ответу @ jens-schauder: если у вас есть как минимум 3 узла в кластере Couchbase, проблема не должна возникнуть. Скажем, узел выходит из строя, кластер автоматически переключает то, что этот узел был хозяином (1/3 данных), на 2 других узла, таким образом, запись будет работать без проблем.

person Sir4ur0n    schedule 23.06.2017