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

近似パターンの使用

項目一覧

  • このタスクについて
  • 手順
  • サンプル データの挿入
  • 近似パターンを実装する
  • 結果
  • 詳細

頻繁に変更される値があるが、ユーザーは正確な値を知っている必要がない場合は、近似パターンを使用します。 データが変更されるたびに値を更新するのではなく、近似パターンはより大きな粒度に基づいてデータを更新するため、更新が少なくなり、アプリケーションのワークロードが軽減されます。

近似パターンは、値を正確に報告する必要がない場合に役立ちます。 (例: )。

  • 都市の人口

  • ウェブサイトの訪問数

  • 航空会社の利用者

上記の測定値は通常、近似すると便利です。 アプリケーションは、データの増やすに応じて、保存された値を数百または数ごとに更新することで、時間とリソースを節約することができます。

この例では 、アプリケーションには、約 40、000 人の都市の人口データが表示されています。アプリケーション ユーザーは主に全体的な傾向を検索しているため、都市の正確な人口を知っている必要はありません。

1
db.population.insertOne( {
city: "New Perth",
population: 40000,
date: ISODate("2022-09-15")
} )
2

実際の人口値は、1 日に何回変化します。 変更ごとに人口値を更新するのではなく、人口が 100 によって変化するたびにアプリケーションロジックを使用して新しいドキュメントを挿入します。

例、アプリケーションロジックは次のようになります。

let population = 40000
function updateStoredPopulation(curr_population, new_population) {
let population_change = Math.abs(curr_population - new_population)
if (population_change >= 100) {
db.population.insertOne(
{
city: "New Perth",
population: new_population,
date: Date()
}
)
population = new_population
}
}

注意

上記の例は説明のためのもので、正確な構文は使用していません。 アプリケーションに適した構文については、対応する ドライバーのドキュメントを参照してください。

上記のアプリケーションロジックでは、次のドキュメントが生成されます。

db.population.insertMany( [
{
city: "New Perth",
population: 40100,
date: ISODate("2024-09-20")
},
{
city: "New Perth",
population: 40200,
date: ISODate("2024-10-01")
},
{
city: "New Perth",
population: 40300,
date: ISODate("2024-10-09")
},
] )

注意

更新された値がどのように収集されるかは、シナリオによって異なります。 この例では 、更新された人口値はクラスター レポートから収集できます。

近似パターンは、人口を 100 の粒度で更新することで、更新数を個々の人口の変化を追跡するために必要な更新の 1% に減らします。

ユーザーは時間の経過とともに人口が増加することがわかっており、高レベルの傾向が見られます。

  • 計算されたデータを保存する

  • データの整合性

  • グループデータ

戻る

計算されたデータ