文档菜单
文档首页
/
MongoDB 手册
/ / /

使用近似模式

本页

  • 关于此任务
  • 步骤
  • 插入示例数据
  • 实现近似模式
  • 结果
  • 了解更多

当您有频繁变化的值,但用户不需要知道精确值时,请使用近似模式。无需每次数据更改时都更新值,近似模式根据更大的粒度更新数据,从而减少更新次数并降低应用程序的工作负载。

当值不需要精确报告时,近似模式非常有用。例如

  • 城市人口

  • 网站访问量

  • 航空公司旅客

前面的测量值通常在近似时很有用。应用程序可以通过每次更新存储值数百或数千次来节省时间和资源,具体取决于数据的规模。

在此示例中,一个应用程序显示一个大约有40,000人口的城市的人口数据。应用程序用户主要关注整体趋势,并不需要知道确切的市人口。

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

实际人口值在一天内变化多次。而不是每次变化都更新人口值,当人口变化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%。

用户可以看到人口随着时间的推移而增加,这满足了他们查看高级趋势的需求。

  • 存储计算数据

  • 数据一致性

  • 分组数据

返回

计算数据