Amazon DocumentDB 8.0 でのビューの使用 - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DocumentDB 8.0 でのビューの使用

  • Amazon DocumentDB 8.0 でビューがサポートされるようになりました。ビューは、指定された集計オペレーションに基づいてデータを表示する仮想コレクションとして機能します。ビューを作成するときは、1 つ以上のソースコレクションからデータを変換するクエリを定義します。Amazon DocumentDB 8.0 は、追加のストレージリソースを消費することなく、ビューにアクセスするたびにこのクエリを実行します。標準コレクションとは異なり、Amazon DocumentDB 8.0 のビューはドキュメントをディスクに保存しないため、変換またはフィルタリングされたデータをアプリケーションに提示するための効率的なソリューションとなります。Amazon DocumentDB でビューを作成するには、createView コマンドまたは db.createView() ヘルパーメソッドを使用できます。

    db.createView("viewName","sourceCollection", [ { $match: { status: "active" } }, { $project: { _id: 1, name: 1, email: 1 } } ] )

    これにより、アクティブなドキュメントとプロジェクトのみを含むsourceCollection」に基づいてviewName」という名前のビューが作成され、_id、名前、E メールフィールドのみがプロジェクトされます。Amazon DocumentDB のビューは読み取り専用です。ビューに対する書き込みオペレーションはエラーを返します。大規模なデータセットで最適なパフォーマンスを得るには、ビューパイプラインを構築して効率を最大化できます。複雑な集約パイプラインの場合、パイプラインの最初のステージまたは早い段階で $match ステージを使用して、後続のステージで処理する必要があるドキュメントの数を減らし、クエリのパフォーマンスを向上させることをお勧めします。

ベストプラクティス

ビューで従うべきベストプラクティスを以下に示します。

  • 早期フィルタリング: $match ステージをビューパイプラインの早い段階で使用して、処理されるデータ量を減らします。

  • 複雑な集計を避ける: 複雑な集計で頻繁にアクセスされるビューの場合は、定期的に更新される事前計算された結果を含む個別のコレクションを作成することを検討してください。

  • Index Planning: ビューパイプライン、特に $match および $sort オペレーションで使用されるフィールドが、ソースコレクションで適切にインデックス作成されていることを確認します。

  • クエリの最適化: explain コマンドを使用して、ビュークエリの実行方法を理解し、それに応じて最適化します。

  • ビューの代替方法: Amazon DocumentDB ビューと MongoDB ビューの機能の違いを考慮して、制限が発生した場合はビューの代替として、スケジュールされた更新で通常のコレクションを使用することを検討してください。

アグリゲータ演算子の互換性

Amazon DocumentDB は、互換性の拡張を継続しながら、ビュー定義で多くの集約演算子をサポートしています。ビューを使用する場合は、サポートされている以下の演算子に焦点を当てます。

  • ドキュメントをフィルタリングするための $match

  • フィールドの選択と変換の $project

  • 計算フィールドを追加するための $addFields

  • 結果を注文するための $sort

  • ページ分割の $limit と $skip

$currentOp、$replaceRoot、$geoNear などの一部の特殊な演算子は現在、ビュー定義ではなく直接集計クエリで動作します。

インデックスとビューの活用

Amazon DocumentDB 8.0 のビューは、基盤となるコレクションのインデックスを使用します。そのため、ビューでインデックスを直接作成、削除、または再構築することはできません。ただし、ソースコレクションで適切に設計されたインデックスは、ビューのクエリパフォーマンスを大幅に向上させることができます。ビューのクエリパフォーマンスを最適化するいくつかのステップを以下に示します。

  • ビューのパイプライン、特に $match および $sort オペレーションで使用されるソースコレクションフィールドに適切なインデックスが存在することを確認します。

  • explain() メソッドを使用して、クエリ実行プランを分析し、インデックスの使用を確認します。例: db.viewName.find({...}).explain()