Я знаю, что этот вопрос задавался ранее, и официальная документация пожарной базы также предполагает, что оба они имеют абсолютно одинаковый эффект.
Однако у меня путаница в восприятии обоих как одного и того же из-за нескольких вещей:
- транзакции повторяются при аборте автоматически, хотя в документации нет упоминания о том, что FieldValue.increment () делает то же самое.
- , как указано в документации. МаксимумСкорость записи документа пожарного хранилища составляет одну запись в секунду, поэтому нельзя обновлять один счетчик более одного раза в секунду с помощью FieldValue.increment ().Но в документации не упоминается, что что происходит в этом случае? Например, если FieldValue.increment () вызывается дважды за одну секунду, второй вызов FieldValue.increment () завершается неудачно илион блокируется до тех пор, пока не пройдет одна секунда, а затем будет выполнена после того, как это произойдет, или произойдет что-то другое.
- Если две идентичные транзакции для обновления одного и того же счетчика будут выполняться двумя разными клиентами в одно и то же время,транзакций прерывается и повторяется?
Учитывая вышеизложенное, я считаю, что транзакции более безопасны для обновления счетчиков, особенно в случае, когда, например, несколько клиентов могут обновить один счетчик, поэтому, еслиПриведенные выше предположения верны. FieldValue.increment () не будет работать всякий раз, когда два или более клиентов пытаются обновить счетчик в течение одной секунды.Но, делая то же самое с транзакциями, будет преимущество автоматической повторной попытки прерывания беременности из-за параллелизма.
Так что я хочу знать, верны ли мои предположения?Если нет, то каким образом именно вышеупомянутые 3 вещи сделаны?Также с учетом примера, когда несколько пользователей обновляют один счетчик, есть ли преимущество использования транзакций по сравнению с FieldValue.increment ().