Выбор правильной стратегии хранения облачных данных Google для изображений

Я пишу свой первый облачный бэкэнд Google для мобильного приложения для обмена изображениями, и мне трудно понять, какой вариант хранения данных выбрать. Клиентами будут мобильные приложения и, возможно, веб-интерфейс. Из того, что я прочитал до сих пор, AppEngine кажется хорошей инфраструктурой для этого.

Мне нужно справиться с:

  • пользователей
  • Группы пользователей
  • Коллекции изображений (созданные в группе пользователей, многие из которых передаются всем пользователям)
  • Фактические файлы изображений
  • Начните с малого, но с архитектуры, способной поддерживать масштабное масштабирование (с точки зрения пользователей и изображений)

Имеет ли смысл хранить реальные изображения в облачном хранилище и метаданные о пользователях, группах пользователей и коллекциях изображений в хранилище данных или MySql? В частности, у меня возникают проблемы при выборе между Datastore и MySql.

Любой совет будет принята с благодарностью, у меня очень мало опыта работы с базами данных:)

Ура!

1 ответ

Решение

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

Если вам нужны некоторые функции реляционных баз данных, такие как JOIN s, в ваших метаданных, тогда Cloud SQL может быть тем, что вам нужно для "более структурированного хранилища"; однако, поскольку вы проектируете с нуля, обычно вполне возможно использовать хранилище NoSQL, такое как хранилище данных App Engine, с масштабируемостью и другими преимуществами, имеющими к нему отношение (и вы упомянете о "масштабном апскейлинге" в будущем, так что это может быть весьма актуально для вы!-).

Одним из преимуществ этой классической архитектуры является то, что хранилища объектов, такие как облачное хранилище, могут предоставлять вам "обслуживающие URL-адреса" для определенных объектов (изображений), которые вы можете передавать клиентам, чтобы обслуживание таких массивных данных осуществлялось собственными серверами облачного хранилища. без нагрузки на серверы вашего приложения. Более того, как говорит https://cloud.google.com/storage/docs/website-configuration,

Облачное хранилище Google ведет себя по сути как сеть доставки контента (CDN), и с вашей стороны это не работает, поскольку общедоступные объекты по умолчанию кэшируются в сети облачного хранилища Google.

поэтому, по крайней мере, для изображений, которые "доступны для всех" (и, таким образом, вы можете пометить их как общедоступные), вы получите преимущества CDN с низкой задержкой "без работы с вашей стороны".