Предлагает ли база данных Firebase в реальном времени строгая согласованность ?
В некоторых случаях мы используем базу данных Firebase в режиме реального времени:
Сценарий 1
- Мобильный клиент записывает
item
документ в /items
- Сервер A (Облачная функция) прослушивает
/items
и вызывает Сервер B через POST /processItem/:itemID
- Сервер B выбирает
items/:item
и начинает обработку
- После обработки Сервер B пишет
item.processedAt = <timestamp>
Логика сценария 1, кажется, работает нормально, однако мы начали задаваться вопросом, действительно ли Firebase предлагает строгую согласованность и можем ли мы быть уверены, что когда Сервер B получит items/:itemID
из Firebase документ безусловно существует.
Сценарий 2
- Сервер A записывает
item
документ в /items
- Сервер A звонит Сервер B через
POST /processItem/:itemID
- Сервер B получает
items/:itemID
и начинает обработку
- После обработки Сервер B пишет
item.processedAt = <timestamp>
Это потенциально еще более «рискованно», поскольку Сервер A может вызвать Сервер B потенциально даже до того, как событие child_added
сработало бы.
Оба эти сценария безопасны?