Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

使用近似模式

在此页面上

  • 关于此任务
  • 步骤
  • 插入示例数据
  • 实施近似模式
  • 结果
  • 了解详情

当值经常更改,但用户不需要知道精确值时,请使用近似模式。 近似模式不是在每次数据发生变化时都更新值,而是基于更大的粒度更新数据,从而减少更新次数和应用程序工作负载。

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

  • 城市人口

  • 网站访问量

  • 航空旅客

上述测量值在求近似值时通常很有用。 应用程序可以根据数据扩展,将存储的值更新成百上千个,从而节省时间和资源。

在此示例中,应用程序显示一个大约有 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%。

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

  • 存储计算数据

  • 数据一致性

  • 分组数据

后退

计算数据