ある HR テック企業が、従業員の職歴・資格・スキル・プロジェクト経験を Azure Cosmos DB for NoSQL で管理している。「あるスキルを持つ従業員と、その従業員のマネージャー、さらにそのマネージャーが過去に担当したプロジェクト」を 1 回のクエリで取得したいという要件が出てきた。しかし Cosmos DB for NoSQL でこのクエリが困難であることが判明した。どのように対応すべきか。
- A. Cosmos DB の整合性レベルを厳密に設定すれば複数コレクションをまたぐクエリが可能になる
- B. Cosmos DB for Gremlin に移行し、従業員・スキル・プロジェクトをノードとして関係をエッジで表現しグラフトラバーサルを活用する
- C. Azure Synapse Analytics の Synapse Link で Cosmos DB を分析ストアとして接続し SQL でクロスコンテナ結合を実行する
- D. Cosmos DB for NoSQL のカスタムインデックスポリシーを調整して結合クエリを最適化する
解答と解説を見る
正解: B
「従業員 → マネージャー → プロジェクト」という複数ホップのリレーショナル横断クエリはグラフデータベースが最も得意とする処理である。Cosmos DB for Gremlin はグラフ API を提供し、従業員・スキル・プロジェクトをノード(頂点)、報告関係や担当関係をエッジ(辺)として表現し、Gremlin クエリ言語でトラバーサルを 1 回のクエリで実行できる。選択肢 D のカスタムインデックスポリシーはクエリのフィールド検索を高速化するが、コレクションをまたいだ結合や多段階トラバーサルは Cosmos DB for NoSQL の設計上サポートされない。選択肢 A の整合性レベルはデータの一貫性保証に関する設定であり、クエリ能力(結合・トラバーサル)には全く無関係である。選択肢 C の Synapse Link は分析クエリには有効だが、リアルタイムのマルチホップトラバーサルには Gremlin が適切であり、SQL JOIN で表現するには複雑な再帰クエリが必要になる。
📚 関連サービスの解説: Azure Cosmos DB