5

高レプリケーション データストア (私は NDB を使用しています) では、一貫性は最終的です。保証された完全なセットを取得するために、祖先クエリを使用できます。祖先クエリは、種類のないクエリで特定の祖先のすべての「子」を取得する優れた方法も提供します。つまり、祖先モデルを活用できることは、GAE で非常に役立ちます。

私が抱えていると思われる問題はかなり単純です。連絡先レコードとメッセージ レコードがあるとします。特定の連絡先レコードは、各メッセージの祖先として扱われています。ただし、同じ人物に対して 2 つの連絡先が作成される可能性があります (ユーザー エラー、異なるデータ ポイントなど)。この状況では、関連するメッセージを持つ 2 つの連絡先レコードが生成されます。

2 つのレコードを「マージ」して、すべてのメッセージを 1 つの大きな山にまとめることができる必要があります。理想的には、レコードの子の 1 つの祖先を変更できるようにします。

これを行う唯一の方法は、マッピングを作成し、アプリでレコードがマージされたかどうかを確認することです。存在する場合は、マッピングを調べて 1 つ以上の関連レコードを見つけ、それらに対してクエリを実行します。これは非常に非効率に思えます。このユースケースを処理するための「本による」方法は他にありますか?

4

1 に答える 1

9

エンティティの先祖を変更する唯一の方法は、古いものを削除し、新しいキーで新しいものを作成することです。これは、祖先パス内のすべての子 (および孫など) エンティティに対して実行する必要があります。これが不可能な場合は、リストされているソリューションが機能します。

これが必要なのは、エンティティの祖先パスがその一意のキーの一部であるためです。エンティティの親 (祖先パス内のエンティティ) が存在する必要はないため、親のキーを変更すると、データストア内の子は親を持たないままになります。

于 2012-08-07T22:47:07.237 に答える