Функция Firebase для Rolling Counter - PullRequest
0 голосов
/ 02 августа 2020

Моему приложению Flutter требуется счетчик прокрутки (1, 2, 3, ..., 98, 99, 1, 2, 3 ...). Учитывая, что может быть несколько приложений Flutter, запрашивающих и увеличивающих Rolling Counter , я думаю, что имеет смысл управлять счетчиком с помощью Cloud Function (я обычно использую TypeScript). (Обратите внимание, что я также использую Cloud Firestore и Realtime Firebase , если это помогает.)

Я могу легко создать облачную функцию Google, которая использует что-то вроде FieldValue.increment для увеличения счетчика. Меня беспокоит, что атомарно получает значение и затем увеличивает его таким образом, чтобы параллелизм не создавал проблем. Стратегии, ограничивающие затраты на чтение / запись документов, также могут быть привлекательными.

Что такое хорошая стратегия?

1 Ответ

1 голос
/ 02 августа 2020

Я думаю, что вы ищете транзакцию firestore, это обеспечит правильное атомарное обновление данных. Если документ был изменен другим клиентом, транзакция будет пытаться повторить "ограниченное количество раз".

См. Документацию по транзакциям здесь: https://firebase.google.com/docs/firestore/manage-data/transactions

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

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