使用近似模式
当值经常更改,但用户不需要知道精确值时,请使用近似模式。 近似模式不是在每次数据发生变化时都更新值,而是基于更大的粒度更新数据,从而减少更新次数和应用程序工作负载。
关于此任务
当不需要准确报告值时,近似模式非常有用。 示例:
城市人口
网站访问量
航空旅客
上述测量值在求近似值时通常很有用。 应用程序可以根据数据扩展,将存储的值更新成百上千个,从而节省时间和资源。
步骤
在此示例中,应用程序显示一个大约有 40、000 人的城市的人口数据。应用程序用户主要寻找总体趋势,不需要知道确切的城市人口。
1
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%。
用户可以看到人口随着时间的推移而增长,这满足了他们查看高级趋势的需求。