Загрузить изображение в хранилище и обновить профиль - PullRequest
0 голосов
/ 18 апреля 2019

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

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

Я рассмотрел либо использование транзакций для этого, либо реализацию триггера Cloud Function, который прослушивает хранилище иобрабатывает обновление профиля пользователя.

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

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

1 Ответ

0 голосов
/ 18 апреля 2019

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

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

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

Также см .:

...