Tengo esta clase que quiero persistir utilizando Objectify, esta clase representará datos de más de 1 MB por lo que hay una lista de objetos Blob que representa un fragmento de la matriz de bytes almacenada que es menor que 1 MB de tamaño:Almacenamiento de blob grande con Objectify Appengine
@Entity
public class BigBlob {
@Id
private Long id;
public static final int FRAGMENT_LIMIT = 777 * 1024;
@Serialized
private List<Blob> fragments = new ArrayList<Blob>();
...
}
Sin embargo, los los "fragmentos" se @Serialized, que hará que el tamaño de esta clase BigBlob/objeto más de 1 MB.
causando este error:
com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large.
Si uso anotación @Embedded consigo este error:
Cannot place array or collection properties inside @Embedded arrays or collections
¿Cómo asegurarse de que los "fragmentos" se almacenan como una entidad separada?
Por cierto, ya tengo la lógica de fragmentación de bytes que corta todo el conjunto de bytes y pone los fragmentos en List
de Blob
, por lo que esta pregunta no se refiere a cómo cortar los bytes.
Principalmente lo que quiero saber es más del lado persistente.
"Por otro lado, hay algunas buenas razones para usar entidades divididas para almacenar blobs, especialmente si está almacenando datos que están cerca del borde de 1M" - no realmente, no hay razón para que no pueda almacenar blobs de 1 MB en la tienda de blob, también. –
Puede, sin duda, pero las API relacionadas con el almacén de blob son difíciles de manejar y no se pueden hacer fácilmente transaccionales con otras tareas del almacén de datos. A veces es mucho más fácil usar el almacén de datos, incluso con el hack de múltiples entidades. Por otro lado, el almacenamiento en blobstore es más barato que el almacenamiento en el almacén de datos, por lo que esta opción no debe hacerse de manera frívola. – stickfigure
¿Qué pasa con las API de blobstore es difícil trabajar con ellas? ¿Y por qué necesita una transacción que abarque blobstore y el almacén de datos? –