Возможен ли единый документ с двойной транзакцией в пожарном депо? - PullRequest
0 голосов
/ 15 октября 2019

Я создаю приложение todolist. когда я использую транзакцию, у меня возникает вопрос.

Я пытаюсь изменить количество пользователей todolist с помощью транзакции. но стало так, что количество пользователей меняется друг от друга по двум действиям по некоторым причинамв todolist

val todoListRef = firestore!!.collection("todoList").document(checkListName!!)

firestore?.runTransaction { transaction ->
    val todoListDTO = transaction.get(todoListRef).toObject(TodoListDTO::class.java)
    todoListDTO!!.todoListUserCount = todoListDTO.todoListUserCount - 1
    todoListDTO.todoListUsers.remove(currentUserUid!!)
    transaction.set(todoListRef, todoListDTO)

    return@runTransaction
}

Меня беспокоит сбой транзакции. Если кто-то добавлен в список пользователей todolist и в то же время кто-то удален в счетчик пользователей todolist, это приведет к прерыванию транзакции или не отразит изменение. Это правильно? Или я могу использовать двойную транзакцию с одним документом?

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

Всегда Спасибо.

1 Ответ

0 голосов
/ 15 октября 2019

Пожарные транзакции оптимистичны. В коде транзакции вы сначала читаете документ, затем вы определяете новое значение, а затем пишете документ. Клиент Firestore отправляет на сервер оба значения: и . Затем сервер сравнивает прочитанное вами значение с имеющимся у него документом и записывает ваше новое значение только в том случае, если документ не был изменен во время вашей транзакции.

Все это означает, что невозможно неправильно перезаписать документесли все клиенты используют транзакции. Если вы видите неправильную запись, вы можете проверить, не используете ли вы где-нибудь транзакцию.

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