standard pricing prices ndb how google engine create appengine app google-app-engine google-cloud-datastore blobstore

google app engine - pricing - Almacenar fotos en Blobstore o como Blobs en Datastore-¿Cuál es mejor/más eficiente/más barato?



ndb google app engine (1)

Tengo una aplicación donde cada entidad de DataStore de un tipo específico puede tener una cantidad de fotos asociadas a ella. (Imagine un sitio web de ventas de automóviles: un auto tiene varias fotos)

Originalmente, dado que todos los datos provienen de otro sitio, estaba limitado a tener que almacenar las fotos como Blobs de DataStore, pero ahora que es posible escribir elementos de BlobStore programáticamente, me pregunto si debería cambiar mi diseño y almacenar las fotos. como artículos BlobStore?

Entonces, la pregunta es:
¿Es "mejor" almacenar las fotos en el almacén de blob, o como blobs en el almacén de datos? Ambas son posibles soluciones, pero ¿cuál sería el enfoque mejor / más barato / más eficiente y por qué?


Las imágenes servidas desde BlobStore tienen varias ventajas sobre Datastore:

  1. Las imágenes se sirven directamente desde BlobStore, por lo que la solicitud no pasa por la instancia de interfaz GAE. Así que está ahorrando en instancias frontend el tiempo y, por lo tanto, el costo.

  2. El costo de almacenamiento de BlobStore es aproximadamente la mitad del costo de almacenamiento del almacén de datos ($ 0.13 frente a $ 0.24). Con Datastore también pagaría por get () o query ().

  3. BlobStore utiliza automáticamente el servicio de caché de Google, por lo que el único costo es el costo del ancho de banda ($ 0,12 / GB). También puede configurar esto en la instancia de interfaz a través del control de caché, pero la diferencia es que esto se realiza automáticamente para BlobStore.

  4. Las imágenes en BlobStore se pueden servir a través de ImageService y se pueden transformar sobre la marcha , por ejemplo, creando miniaturas. Las imágenes transformadas también se almacenan en caché automáticamente.

  5. Los blobs binarios en Datastore están limitados a 1Mb de tamaño.

Una desventaja de BlobStore es que no tiene controles de acceso. Cualquiera con una URL para blob puede descargarlo. Si necesita ACL (Lista de control de acceso) eche un vistazo a Google Cloud Storage .

Actualizar:

En cuanto a los costos, el mayor ahorro provendrá de almacenar adecuadamente las imágenes en el caché:

  1. Cada imagen debe tener una URL permanente.
  2. Cada URL de imagen debería publicarse con los encabezados HTTP de control de caché adecuados:

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

puedes hacer esto en java a través de:

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

Actualización 2:

Como Dan señala correctamente en los comentarios, los datos de BlobStore se sirven a través de una instancia de interfaz, por lo que los controles de acceso pueden implementarse por código de usuario.