Ho questa classe che desidero perseguire usando Objectify, questa classe rappresenterà un dato più grande di 1MB quindi c'è un elenco di oggetti Blob che rappresenta un frammento dell'array di byte memorizzato che è inferiore a 1MB:Memorizzazione di blob di grandi dimensioni con Objective 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>();
...
}
Tuttavia, i i "frammenti" è @Serialized, che renderà la dimensione di questa classe BigBlob/oggetto più grande di 1MB.
che causano questo errore:
com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large.
Se uso annotazione @Embedded ottengo questo errore:
Cannot place array or collection properties inside @Embedded arrays or collections
Come faccio a fare in modo che i "frammenti" vengono memorizzati come un'entità separata?
BTW, ho già la logica di chunking di byte che interrompe l'intera matrice di byte e inserisce i frammenti in List
di Blob
in modo che questa domanda non riguardi come tagliare i byte.
Principalmente quello che voglio sapere è più sul lato persistente.
"D'altra parte, ci sono alcuni buoni motivi per usare le entità split per l'archiviazione dei BLOB, specialmente se si stanno memorizzando dati vicini al margine 1M" - non proprio, non c'è motivo per cui non si possano memorizzare BLOB più piccoli oltre 1 MB nel blobstore. –
Certamente, ma le API correlate al blobstore sono un problema con cui lavorare e non possono essere facilmente trasformate in transazioni con altri lavori di datastore. A volte è molto più semplice usare il datastore, anche con l'hack di più entità. D'altra parte, lo storage blobstore è più economico rispetto all'archivio del datastore, quindi questa scelta non dovrebbe essere resa frivola. – stickfigure
E per quanto riguarda le API di blobstore è difficile lavorare? E perché hai bisogno di una transazione che si estende sul blobstore e sul datastore? –