_)mどうもお久しぶりになります、マツウラです。EngineのDatastoreにおけるAncestorクエリです。今回Ancestorクエリについて調べたのは次の理由からです。put直後にQueryで問い合わせたところ、putしたハズのEntityが取れなかったのです。原因は単純なことでした。Entityとして扱っていたためです。put直後であったため、インデックスの更新が間に合っていなかったようで結果に含まれなかったんですね。これを解決したのがAncestorクエリでした。どんなものか、概要をサラッと見てゆきたいと思います。DevelopersAncestorパスについてデータストア内のEntityは、ディレクトリ構造と似たような階層構造化空間を形作ります。Entityを作る際は必要に応じて、親となる別Entityを指定できます。すると、新しいEntityは親Entityの子となります。Entityとなります。Entityと親の関連付けは永久的で、Entityが作成されると変更することはできません。Entityへ同じ数値IDを割り当てることはありません。Entityの親、そして親の親など、再帰的にはEntityの祖先ということになります。子、そして子の子などはEntityの子孫です。Entityとその子孫は同じEntityグループに属します。Entityから始まり親から子へと進むEntityの順序や、特定のEntityへの繋がり、Entityの祖先パスを構成しています。名前のペアによるシーケンスで構成されています。Entityである場合はAncestorパスは空で、キーは単に自分自身のkindと識別子で構成されます。Ancestorクエリについてクエリでは、特定のEntityグループに属するEntityだけを取得するようにAncestorフィルターを追加できます。これはAncestorクエリとして知られています。デフォルトでは、Ancestorクエリはデータへの最終変更が最新であることが保証されており、強く一貫した結果を返します。対照的にAncestorクエリ以外では、単一のEntityグループというよりもデータストア全体を範囲としますが、結果整合性だけなので古い結果を返すかもしれません。強力な一貫性がアプリにとって重要なら、データはAncestorクエリで取得できるように、関連するEntityは同じEntityグループに置くように、データを構造化する際に考慮する必要があります。kind無しのAncestorクエリAncestorクエリを含んだkindを指定しないクエリでは、kindに関係なく指定したAncestorとその子孫すべてを取得します。このタイプのクエリではカスタムインデックスを必要としません。すべてのkind無しクエリのように、プロパティ値ではフィルタやソート順を含めることはできませんが、エンティティのキーではフィルタリングができます。注意することAncestorクエリは便利ですが、巨大なAncestorパスツリーを作らないように注意する必要があります。同じEntityグループに属するため、同時書き込みが増えると並行処理のためにエラーが起きやすくなってゆきます。複数のユーザーが書き込むケースなら注意が必要ということです。要するにAncestorクエリは、強力な一貫性を持つ高速なクエリということです。今回のケースで便利さが実感できました。データへの最終変更が最新であることが保証されていることが良いですね。ルームを作成する本日よりいよいよチャット本体の作成にとりかかります。(2)月別アーカイブリンクはてなブログブログをはじめる週刊はてなブログはてなブログPro参加グループプログラミングテクノロジーはてなブログをはじめよう!knightsoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。