Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

コレクションの数を減らす

項目一覧

  • このタスクについて
  • 詳細

コレクションを作成しすぎると、パフォーマンスが低下する恐れがあります。 MongoDBはコレクションごとに、追加のストレージを使用するデフォルトの _idインデックスを作成します。 過剰なコレクションを作成すると、それらのコレクションとインデックスがレプリカセットのリソースに負担がかかり、パフォーマンスを低下させる可能性があります。

1 時間ごとの日次温度読み取り値を保存する次のスキーマを検討してください。 temperatureデータベースは 1 日ごとの読み取り値を個別のコレクションに保存します。

// Temperatures for May 10, 2024
{
_id: 1,
timestamp: "2024-05-10T010:00:00Z",
temperature: 60
},
{
_id: 2
timestamp: "2024-05-10T011:00:00Z",
temperature: 61
},
{
_id: 3
timestamp: "2024-05-10T012:00:00Z",
temperature: 64
}
...
// Temperatures for May 11, 2024
{
_id: 1,
timestamp: "2024-05-11T010:00:00Z",
temperature: 68
},
{
_id: 2
timestamp: "2024-05-11T011:00:00Z",
temperature: 72
},
{
_id: 3
timestamp: "2024-05-11T012:00:00Z",
temperature: 72
}
...

コレクション数に上限がない場合、デフォルトの_idインデックス数が増えてパフォーマンスが低下する可能性があります。

さらに、このアプローチでは複数のコレクションにわたってクエリを実行するために$lookup操作が必要になります。 $lookup操作はクエリの複雑さを含み、リソースに負担がかかる可能性があります。

コレクションの数を減らすには、未使用のコレクションを削除またはアーカイブするか、関連するコレクションを統合してデータを非正規化するか、必要に応じて埋め込みドキュメントを活用してデータスキーマを再モデル化します。

スキーマを変更して、毎日の温度の読み取りを単一のコレクションに保存することができます。 (例: )。

db.dailyTemperatures.insertMany( [
{
_id: ISODate("2024-05-10T00:00:00Z"),
readings: [
{
timestamp: "2024-05-10T10:00:00Z",
temperature: 60
},
{
timestamp: "2024-05-10T11:00:00Z",
temperature: 61
},
{
timestamp: "2024-05-10T12:00:00Z",
temperature: 64
}
]
},
{
_id: ISODate("2024-05-11T00:00:00Z"),
readings: [
{
timestamp: "2024-05-11T10:00:00Z",
temperature: 68
},
{
timestamp: "2024-05-11T11:00:00Z",
temperature: 72
},
{
timestamp: "2024-05-11T12:00:00Z",
temperature: 72
}
]
}
] )

更新されたスキーマは、元のスキーマよりも必要なリソースが少なくなります。 1 日ごとに個別のインデックスが必要になる代わりに、デフォルトの_idインデックスを使用することで、日付別のクエリが容易になります。

戻る

無制限の配列を避ける