Я пытаюсь найти подход, который будет гарантировать правильное количество загруженных пользователем файлов из веб-клиента в хранилище firebase.
Основные требования:
- он должен быть стабильным : он должен гарантировать подсчет каждого загруженного файла
- он должен быть масштабируемым : я не могу прочитать «все сохраненные файлы» для расчета размер сразу, так как количество файлов может быть огромным
- это должно быть безопасное : я не могу полагаться на браузер, расчеты должны выполняться на сервере.
Пока что подход таков:
- пользователь моего веб-приложения может загружать несколько файлов
- эти файлы загружаются с помощью sdk веб-клиента firebase
- на сервер, который я слушаю
functions.storage.object().onFinalize()
, чтобы получить размер файла для каждого файла - , затем я обновляю специальный документ в firestore, чтобы добавить новый размер к общему количеству (назовем его
totalStorageSizeDoc
)
Этот подход касается безопасности и масштабируемости, но проблема Я вижу, что когда пользователь загружает кучу достаточно маленьких файлов, это может легко вызвать множество functions.storage.object().onFinalize()
в течение 1 секунды, что является «не жестким, но все же» пределом для операций записи в firestore. На этом этапе записи в totalStorageSizeDoc
также будут выполняться слишком быстро с риском отклонения некоторых из этих записей.
Есть ли способ легко поставить в очередь записи из onFinalize()
, чтобы гарантировать totalStorageSizeDoc
не завалило? Или мне следует использовать совершенно другой подход? Может быть, есть какие-нибудь передовые методы подсчета использованного размера хранилища, которые я пропустил?
Любые советы очень приветствуются.