App Engineデータストアコードを設計しようとしていますが、潜在的な問題について考えましたが、特定の状況で何が起こるかについて、ドキュメントで具体的な情報を見つけることができませんでした。
祖先を持つエンティティを格納する場合、格納する前に、その祖先が1つのトランザクションに存在することを確認し、存在しない場合は祖先を作成します。次に、前の手順で見つかった、または作成された祖先キーを使用してエンティティを作成した、エンティティを格納する別のトランザクションを開始します。単一のユーザーまたはごく少数のユーザーでテストする場合、同時変更の可能性は最小限であるため、これが問題になることはありませんが、一度展開すると、最初のトランザクション(祖先の作成/取得)の間の時間に懸念があります。 )および2番目のトランザクション(祖先の子孫としてエンティティを追加する)では、別のユーザーが祖先を削除する可能性があります。
私の当初の考えは、これをすべて1つのトランザクションとして発生させることでしたが、祖先が存在せずに作成する必要がある場合、作成するエンティティが存在するかどうかを確認するための祖先クエリは、のスナップショット分離モデルのために失敗します。データストア。しかし、これが正しいかどうかはわかりません。
誰かがその問題について何か知識を持っていますか?祖先が削除された場合でも、エンティティのコミットは、現在は何も参照していない親キーで機能しますか?これにより親が再作成されるので、今後のチェックで同じキーが返されますか?私はこの状況をテストしますが、それを行うための実用的な方法を考案することはできません。