Запрос метки времени сервера Firestore

#google-cloud-firestore

# #google-облако-firestore

Вопрос:

Мне интересно, существует ли вероятность того, что Firestore ServerTimestamp будет точно таким же для 2 или более документов в данной коллекции, учитывая, что несколько клиентов будут записывать данные в коллекцию. Я спрашиваю об этом, потому что Firestore не предоставляет автоматически увеличивающийся порядковый номер для созданных документов, и мы должны полагаться на метку времени сервера, чтобы предполагать последовательную запись. Мой вариант использования требует, чтобы документы были пронумерованы или, по крайней мере, имели сходство с моделью «линейной записи». Мое приложение работает на мобильных устройствах и в Интернете

(Есть и другие способы получить добавочное число, например, облачную функцию Firebase с использованием FieldValue.Increment() метода, который я уже делаю, но это добавляет еще один уровень сложности и задержки)

Можно ли с уверенностью предположить, что каждый документ, созданный в данной коллекции, будет иметь уникальную временную метку и столкновения не будет? Помещает ли Firestore записи в очередь для коллекции или записи выполняются параллельно?

Заранее спасибо.

Ответ №1:

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

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

Помещает ли Firestore записи в очередь для коллекции или записи выполняются параллельно?

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

Комментарии:

1. Это отвечает на мой вопрос, спасибо. Хотя я не уверен, что наличие другого поля со случайными данными и сортировка коллекции по полю решат мою проблему. На данный момент, я думаю, я буду использовать то, что у меня есть — логику увеличения на стороне облачной функции. На самом деле я делаю то, что вы предлагаете. В документе есть поле, которое увеличивается с помощью функции cloud. Спасибо за быстрый ответ.