0

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

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

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

Мой вопрос: а) это разумный подход для моего варианта использования?

если б) Как связать две вещи вместе?

или, если нет b) Каков наилучший способ их хранения?

ответ

2

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

Что касается увязки датастора структурированы сущностей к изображениям альтернативным, более масштабируемый подход к предложенному Андрею Волгин будет иметь несколько entitites отображения - один на связанный файл, содержащий в качестве свойств:

  • в хранилище данных структурирован ключ лица (или идентификатор ключа)
  • хранение название/местоположение изображения

Преимущество такого подхода (особенно, когда число изображений, связанные с одним объектом является структурированным привет GH) является:

  • нет 1 записи/сек ограничения на добавление/удаление изображения для одной и той же структурированной компании

  • без конфликтного на самой структурированной компании при попытке получить местоположения изображений из нескольких одновременных запросов

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

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

Эти объекты сопоставления могут содержать дополнительную структурированную информацию, связанную с изображением, если это необходимо.

2

У объектов Datastore может быть свойство, которое содержит список имен файлов изображений. Предполагая, что вы положили каждое изображение в «папке», которая представляет собой объект ID/Name, вы можете отобразить изображение простого вызова (например):

"https://storage.googleapis.com/MY_BUCKET/" + entity.getId() + "/" + IMAGE_NAME; 

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

+0

Звучит огромное спасибо за это, возможно ли получить все капли из заданной папки, что означает, что мне нужно только сохранить имя папки/базы с ее именем с идентификатора объектов? – DomAyre

+0

Вы можете легко сделать это на стороне сервера. Вы можете получить список всех файлов в ведре или в папке внутри ведра. В моих проектах ключевым требованием является получение всех изображений непосредственно веб-клиенту из облачного хранилища без прохождения экземпляра App Engine/Compute Engine. –

0

Я бы использовал два разных типа сущностей. ех. Album и Images и организовать их с помощью ancestor path, как файловая структура. Тогда я мог бы легко добавить вид объекта Comment как дочерний элемент Images.

Пример 2 лиц [TaskList:default, Task:sampleTask]

$taskKey = $datastore->key('TaskList', 'default') 
    ->pathElement('Task', 'sampleTask'); 

Подробнее о Ancestor paths