私は以下のエンティティを持っています(非関連フィールド/メソッドは削除されています)。私はバッチをやろうとしているGoogleのデータストア(ハイレプリケーション)への1回のトランザクションで、「あまりにも多くの」オブジェクトがいくつ見つかりますか?
public class HitsStatsTotalDO
{
@Id
transient private Long targetId;
public Key<HitsStatsTotalDO> createKey()
{
return new Key<HitsStatsTotalDO>(HitsStatsTotalDO.class, targetId);
}
}
だから... ...私はHitsStatsTotalDO.createKey()
を使用してキーを構築しているために10個のオブジェクトのために取得します。私はこのような取引でそれらを取得しようとしている:あなたはあまりにも多くのですどのように多くの手の込んだてもらえますし、それを修正する方法を
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
:
final List<Key<HitsStatsTotalDO>> keys = ....
// This is being called in transaction..
Map<Key<HitsStatsTotalDO>, HitsStatsTotalDO> result = DAOBase.ofy().get(keys);
次の例外をスローしていますか?私はドキュメントの正確な番号を見つけることができませんでした。
ありがとうございます!
うん、私は5つのエンティティについてその部分を逃した。 – expert
少なくともPython SDK 1.7.3では、BadRequestErrorに対する2つの異なるエラーメッセージがあります。「グループ間のトランザクションを明示的に指定する必要があります.TransactionOptions.Builder.withXG」と「1つのトランザクション"。あなたの答えは前者を解決しますが、5つ以上のエンティティグループで動作する場合、後者はXGトランザクションで発生する可能性があります。 –
XGトランザクションの場合、limitは25のエンティティグループに見えます。 https://cloud.google.com/appengine/docs/standard/java/datastore/transactions?csw=1#What_Can_Be_Done_In_a_Transactionをご覧ください。 – rimsky