Objectiveを使用してこのクラスを維持したい場合、このクラスは1MBを超えるデータを表すため、格納されているバイト配列のフラグメントを表すBLOBオブジェクトのリストがあります。サイズは1メガバイト:Objective Appengineで大規模なBLOBを格納する
@Entity
public class BigBlob {
@Id
private Long id;
public static final int FRAGMENT_LIMIT = 777 * 1024;
@Serialized
private List<Blob> fragments = new ArrayList<Blob>();
...
}
しかし、「断片」@Serializedされ、このBigBlobクラス/のサイズをレンダリングします1メガバイトよりも大きなオブジェクト。
Cannot place array or collection properties inside @Embedded arrays or collections
がどのように私は、「断片」は別のエンティティとして保存されていることを確認してください:私はこのエラーを取得する@Embeddedアノテーションを使用している場合
com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large.
:
このエラーの原因?
私は既に、バイト配列全体をチョップし、List
のBlob
にフラグメントを入れるバイトチャンクロジックを持っています。この質問は、バイトの切り詰め方法に関するものではありません。
ほとんど私が知りたいことは、永続的な側面です。
"特に、1Mエッジに近いデータを格納している場合は、ブロブを格納するためにスプリットエンティティを使用する理由がいくつかあります。実際にはブロブを小さく保存できない理由はありませんブロブストアでも1MB以上です。 –
あなたは確かにそうすることができますが、ブロブストア関連のAPIは他のデータストアの作業とやりとりすることができず、容易にトランザクション化できません。時には、複数のエンティティのハックがあっても、データストアを使用する方がはるかに簡単です。一方、ブロブストアのストレージはデータストアのストレージよりも安価なので、この選択は慎重に行うべきではありません。 – stickfigure
blobstore APIはどのように動作するのが難しいですか?そして、なぜブロブストアとデータストアにまたがるトランザクションが必要なのですか? –