近似パターンの使用
頻繁に変更される値があるが、ユーザーは正確な値を知っている必要がない場合は、近似パターンを使用します。 データが変更されるたびに値を更新するのではなく、近似パターンはより大きな粒度に基づいてデータを更新するため、更新が少なくなり、アプリケーションのワークロードが軽減されます。
このタスクについて
近似パターンは、値を正確に報告する必要がない場合に役立ちます。 (例: )。
都市の人口
ウェブサイトの訪問数
航空会社の利用者
上記の測定値は通常、近似すると便利です。 アプリケーションは、データの増やすに応じて、保存された値を数百または数ごとに更新することで、時間とリソースを節約することができます。
手順
この例では 、アプリケーションには、約 40、000 人の都市の人口データが表示されています。アプリケーション ユーザーは主に全体的な傾向を検索しているため、都市の正確な人口を知っている必要はありません。
近似パターンを実装する
実際の人口値は、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% に減らします。
ユーザーは時間の経過とともに人口が増加することがわかっており、高レベルの傾向が見られます。