ある不動産テック企業が、物件情報(テキスト・写真・価格履歴・オーナー変遷)を Azure Cosmos DB for NoSQL に格納している。各物件ドキュメントは最大 5 MB あり、全国 100 万件の物件データを保有している。「築 10 年以内かつ価格が 5,000 万円以下の東京都内の物件を面積の広い順に取得する」クエリが著しく遅い。Cosmos DB のどの設定を見直すべきか。
- A. ドキュメントサイズを削減するために写真データを Cosmos DB から Blob Storage に移動し参照 URL のみを格納する
- B. 整合性レベルを「最終的」に変更してクエリのスループットを向上させる
- C. コンテナの TTL(Time to Live)を無効にして、古いデータが削除されないようにする
- D. インデックスポリシーを見直し、築年数・価格・都道府県・面積フィールドを含まれるパスとしてインデックスに追加する
解答と解説を見る
正解: D
Azure Cosmos DB はデフォルトですべてのフィールドを自動インデックス(includeAll)する設定だが、カスタムインデックスポリシーで除外パスを設定していると、クエリの WHERE 句や ORDER BY で使用するフィールドがインデックスから除外されてフルスキャンになる。「築年数・価格・都道府県・面積」の 4 フィールドをクエリが使用しているため、これらがインデックスに含まれていることを確認し、必要に応じてカスタムインデックスポリシーで includeAll または明示的に含まれるパスとして追加することがクエリ性能の直接的な解決策である。選択肢 C の TTL 無効はデータ削除防止であり、クエリ性能とは無関係である。選択肢 B の整合性レベル変更は読み取りレイテンシにわずかな影響はあるが、フルスキャンが発生しているインデックス問題の根本解決にはならない。選択肢 A のドキュメントサイズ削減は一定の効果があるが、クエリが遅い直接原因がインデックス欠如である場合には不十分であり、インデックスポリシーの修正が優先される。