Храните фотографии в Blobstore или как Blobs в Datastore - что лучше / эффективнее / дешевле? - PullRequest
26 голосов
/ 20 февраля 2012

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

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

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

1 Ответ

46 голосов
/ 20 февраля 2012

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

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

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

  3. BlobStore автоматически использует службу кэширования Google, поэтому единственной стоимостью является стоимость полосы пропускания (0,12 долл. США / ГБ).Вы также можете установить это для экземпляра веб-интерфейса через элемент управления кэшем, но разница в том, что это делается автоматически для BlobStore.

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

  5. Двоичные двоичные объекты в хранилище данных ограничены размером 1 МБ.

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

Обновление:

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

  1. Каждое изображение должно иметь постоянный URL.
  2. Каждый 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 передаются через экземпляр внешнего интерфейса, поэтому контроль доступа может быть реализован с помощью кода пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...