Подтвердить что ты не робот

Хранить фотографии в Blobstore или как Blobs в хранилище данных - что лучше/эффективнее/дешевле?

У меня есть приложение, в котором каждый объект DataStore определенного типа может иметь несколько связанных с ним фотографий. (Представьте себе сайт для продажи автомобилей - у одного автомобиля есть несколько фотографий)

Изначально, поскольку все данные были получены с другого сайта, мне было ограничено хранение фотографий в виде DataStore Blobs, но теперь, когда можно было писать элементы BlobStore программно, мне интересно, нужно ли мне менять свой дизайн и хранить фотографии в виде элементов BlobStore?

Итак, вопрос:
"Лучше" хранить фотографии в Blobstore или как Blobs в хранилище данных? Оба варианта - это возможные решения, но которые будут лучше/дешевле/эффективнее и почему?

4b9b3361

Ответ 1

Изображения, поданные с BlobStore, имеют несколько преимуществ перед хранилищем данных:

  • Изображения подаются непосредственно из BlobStore, поэтому запрос не проходит через экземпляр интерфейса GAE. Таким образом, вы сохраняете время на интерфейсе и, следовательно, стоите.

  • Стоимость хранилища BlobStore составляет примерно половину стоимости хранилища данных ($ 0,13 против $0,24). С Datastore вы дополнительно платите за get() или query().

  • BlobStore автоматически использует службу кеша Google, поэтому единственной ценой является стоимость полосы пропускания ($ 0,12/ГБ). Вы также можете установить это на экземпляре frontend с помощью управления кешем, но разница в том, что это делается автоматически для BlobStore.

  • Изображения в BlobStore могут быть отправлены через ImageService и могут быть преобразованы на лету, например. создание эскизов. Преобразованные изображения также автоматически кэшируются.

  • Двоичные капли в хранилище данных ограничены размером 1 Мб.

Один из недостатков BlobStore заключается в том, что он не имеет элементов управления доступом. Любой, у кого есть URL-адрес, может загрузить его. Если вам нужен ACL (список контроля доступа), посмотрите Google Cloud Storage.

Update:

Разумеется, самая большая экономия будет зависеть от правильного кэширования изображений:

  • Каждое изображение должно иметь постоянный URL.
  • Каждый URL изображения должен быть отправлен с правильными заголовками HTTP-заголовков кеша:

    // 32M seconds is a bit more than one year 
    Cache-Control: max-age=32000000, must-revalidate
    

вы можете сделать это в java через:

httpResponse.setHeader("Cache-Control", "max-age=32000000, must-revalidate");

Обновление 2:

Как правильно указывает Дэн в комментариях, данные BlobStore подаются через внешний интерфейс, поэтому элементы управления доступом могут быть реализованы с помощью кода пользователя.