У меня есть несколько вопросов относительно поведения FieldValue.serverTimestamp() в Firestore:
Индексирование и коллизии: Я хочу ранжировать документы, сортируя их с помощью FieldValue.serverTimestamp(). Если я создам соответствующие индексы, гарантирует ли строгая модель согласованности Firestore, что эти временные метки сервера не будут конфликтовать?
Запросы большого объема без индексов: В сценарии, где нет индексов, даже при строгой согласованности, если одновременно выполняется большой объем запросов FieldValue.serverTimestamp() для разных документов, могут ли временные метки сервера точно совпадать и, таким образом, конфликтовать?
Я прочитал документацию Firestore и поискал в Интернете подробную информацию о гарантиях точности и согласованности FieldValue.serverTimestamp().
Я ожидал выяснить, всегда ли наносекунды заканчиваются на «0000» и предотвращает ли строгая согласованность коллизии временных меток. Однако однозначных ответов я не нашел.
Будем очень признательны за любые идеи или ссылки на официальную документацию. Спасибо!
TL;DR: Вы не должны зависеть от уникальности значений временных меток на стороне сервера.
- ... Если я создам соответствующие индексы, гарантирует ли строгая модель согласованности Firestore, что эти временные метки сервера не будут конфликтовать?
Нет.
- ... возможно ли, чтобы временные метки сервера точно совпадали и, таким образом, конфликтовали?
Да.
Вполне возможно, что несколько документов будут созданы с одной и той же меткой времени, и это не имеет ничего общего с надежностью модели согласованности, которую использует Firestore.
Я не уверен, что вы подразумеваете под этим типом системы, и у меня такое ощущение, что мы начали с проблемы XY здесь. Если вы хотите генерировать уникальные идентификаторы, используйте встроенные операции add()
Firestore, если вы хотите, чтобы временные метки создания использовали для этого временные метки на стороне сервера, но не смешивайте эти два варианта использования. --- См. также Что мне делать, если кто-то отвечает на мой вопрос?
Является ли тот факт, что наносекундная часть временной метки сервера всегда заканчивается на «0000», просто совпадением, или Firestore на самом деле обеспечивает разрешение только на уровне микросекунд? Спасибо!
Я ответил на два вопроса из трёх в вашем посте. Пожалуйста, в дальнейшем включайте только один вопрос в каждое сообщение. Также смотрите Что мне делать, если кто-то отвечает на мой вопрос?
МММ спасибо!! Означает ли это, что Firestore не подходит для крупномасштабных систем очередей или нумерации? Стоит ли мне рассмотреть Kafka или другие системы?