設計パターンの適用
スキーマ設計パターン は、アプリケーションのアクセス パターンに合わせてデータモデルを最適化する方法です。 アプリケーションのパフォーマンスが向上し、スキーマの複雑さが軽減されます。 スキーマ設計パターンは、データの保存方法とアプリケーションに返されるデータに影響します。
スキーマ設計パターンと例のリストについては、 「 パターンを使用した構築 (0})」MongoDB Blog シリーズを参照してください。
このタスクについて
スキーマ設計パターンを実装する前に、解決しようとしている問題を検討してください。 各スキーマ設計パターンには、データの一貫性、パフォーマンス、複雑さのユースケースとトレードオフが異なります。 たとえば、一部のスキーマ設計パターンでは書込みパフォーマンスが向上し、他のスキーマ設計パターンでは読み取りパフォーマンスが向上します。
アプリケーションとそれに必要なデータを理解しずにパターンを実装すると、アプリケーションのパフォーマンスが低下し、スキーマ設計に不要な複雑さが生じる可能性があります。
例
映画館のフラグメントで使用される次のサンプルパターンについて考えてみましょう。
スキーマには、
movie
コレクションとtheater
コレクションが含まれています。 スキーマはサブセット パターンを使用して、theater
コレクション内のmovie
コレクションから情報のサブセットを複製します。 サブセット パターンにより、アプリケーションに返されるドキュメントのサイズが縮小され、読み取りパフォーマンスが向上します。movie
コレクションにはtotal_views
フィールドが含まれています。このフィールドでは、 の計算パターンを使用して、映画が公開されているすべての映画館でカスタマーが映画を閲覧する回数の実行中合計を計算します。
映画コレクション
db.movie.insertOne( { _id: 1, title: "Titanic", year: 1997, director: "James Cameron", runtime: 194, distributor: "Paramount Pictures", languages: [ "English" ], total_views: 3500 } )
映画館コレクション
db.theater.insertMany( [ { name: "Downtown Cinemas", address: { street: "2212 Taylor Street", state: "NY" }, movies: [ { movie_id: 1, title: "Titanic", runtime: 194, views: 1500 } ] }, { name: "Midtown Theater", address: { street: "1232 5th Street", state: "NY" }, movies: [ { movie_id: 1, title: "Titanic", runtime: 194, views: 2000 } ] } ] )