Я разрабатываю этот CLI для загрузки изображений в Google Фото. CLI создает несколько go подпрограмм для параллельной загрузки файлов 1 . После загрузки та же процедура добавляет его к Album
. Эти альбомы создаются, если они не существовали раньше. 2 .
Из-за параллелизма и того факта, что API Google Фото позволяет создавать два Albums
с одинаковыми name , у меня есть повторяющиеся названия альбомов, которых я бы хотел избежать.
GetOrCreateAlbumByName()
3 не гарантирует, что Album
уникален. Он в основном спрашивает, существует ли альбом с таким же именем, и если нет, он создаст новый. Но эта функция может быть вызвана параллельно, поэтому могут быть созданы два Album
с одинаковым именем. Помимо реализации мьютекса, я наблюдаю за дубликатами.
Как вы порекомендуете с этим справиться?
- Создайте воркер (например, микросервис) которые занимаются созданием альбомов. Каждая подпрограмма go будет заблокирована, пока не будет создан альбом. Он удалит параллелизм в части создания
Album
. - Поддерживайте кеш-память альбома и используйте его, чтобы проверить, был ли альбом уже создан. В этом случае также может произойти состояние гонки, но с меньшей вероятностью.
- Использование 1 и 2 вместе.
- Другое, укажите.
У меня есть вопросы примерно 1, 2 и 3 ... вот почему я хотел бы знать, как вы с этим справитесь.
Заранее спасибо