3

ユーザーが契約数を購入するたびに、これらのイベントは、(明確にするために簡略化)が実行されていますデータストアの私のGoogleアプリのアプリ内取引の制限

  • user.cashが
  • user.contractsを減少させるが増加しています番号
  • contracts.current_priceが更新されます。
  • market.no_of_transactionsはRDMS 1.

によって増加し、これらは、同じトランザクション内に配置されることになります。 Googleのデータストアでは、複数のモデルのエンティティが同じトランザクション内に存在することはできません。

この問題に対する正しいアプローチは何ですか?書き込みが失敗した場合、先行するすべての書き込みがロールバックされるようにするにはどうすればよいですか?

編集:明らかにエンティティグループが見つかりませんでした。今、私は彼らがどのように使用されているかに関するいくつかのさらなる情報に感謝します。もう1つのポイントは、Googleが「トランザクションに必要なエンティティグループのみを使用します。エンティティ間の他の関係については、クエリで使用できるReferencePropertyプロパティとKey値を使用してください」と述べています。参照プロパティ(クエリを必要とするため)と親子関係(トランザクション)の両方を定義する必要があるということですか?

edit 2最後に、エンティティが2つの親の間にn対nの関係を確立するために作成されている場合、どのようにしてエンティティの2つの親を定義しますか?

答えて

0

私は、単一のエンティティグループ制限の解決法を提供する分散トランザクションレイヤーが、いくつかのGoogleの人々の助けを借りてユーザーランドで開発されていることを発見しました。しかし今のところ、それはリリースされておらず、javaでしか利用できません。

0

私はDatastore documentationからの引用を追加してみましょう:

エンティティグループのための親指の良いルールは、彼らが データ以下の単一のユーザーの価値のおよそ 大きさでなければならないことです。

疑似ルートエンティティを作成し、これより下にすべてを配置できます。次に、トランザクション内のすべてを実行します。

0

shanyu、1つのトランザクションで任意の数のエンティティグループを操作できる分散トランザクションレイヤについて説明しました。それは実際には has been released、それは非常に大きな声で宣伝されていません。それはダニエル・ウィルカーソンとエリック・アームブーストによってデザインされ、私の一部でいくつかのコンサルティングを行いました。ダンはthis talkにそれを記述します。

ニックジョンソンも説明したとおり、 how to do "transfer" type operations across entity groupsと記載されています。それはタピオカオームのような一般目的ではありませんが、よりシンプルで軽量です。

関連する組み込み機能transactional tasksがあります。この機能を使用すると、データストアトランザクション内のキューにタスクを追加できるため、トランザクションが正常にコミットされた場合にのみタスクが追加されます。そのタスクは、異なるエンティティグループ上のトランザクションを含め、より多くのデータストア操作を実行できます。danやerickのソリューションほど強力ではありませんが、余分なオーバーヘッドはなく、多くのユースケースに十分対応できる、エンティティグループ間の最終的な一貫性を保証します。

あなたの質問に答えて:1)参照プロパティと親子関係(エンティティグループ)の両方を使用する必要はありません。このガイドラインは、エンティティグループごとに書き込みがシリアル化されるため、エンティティグループがデータストアの書き込みスループットを制限することを意味します。祖先クエリのためだけにエンティティグループにデータを構造化することを検討している場合は、注意する必要があります。

2)エンティティは複数の親を持つことはできません。多対多リレーションシップをモデル化する場合は、一般に参照プロパティ(キーなど)のListPropertyを使用する必要があります。詳細はthis articlethis talkを参照してください。

+0

@systempuntoout私は、あなたがタスクハンドラ内の別のエンティティグループに書き込むことを意味しました。元のトランザクションではありません。 – ryan

+0

誤解、私の無駄なコメントは数分で蒸発する:)。 – systempuntoout

関連する問題