参考 > 资料模型 > 数据模型示例和模式 > 模型特定的应用程序上下文 > 模型计算数据
通常,应用程序需要从数据库中存储的源数据中获取值。计算新值可能需要大量的CPU资源,尤其是在大型数据集或必须检查多个文档的情况下。
如果经常需要一个计算值,那么将其提前保存在数据库中会更有效。这样,当应用程序请求数据时,仅需要一个读取操作。
如果读取的次数大大超过写入的次数,则计算出的模式将减少执行计算的频率。应用程序没有将计算负担附加到每次读取上,而是存储了计算值并根据需要重新计算。应用程序可以在每次写操作时重新计算该值,这些写操作会更改计算值的源数据,或者作为定期作业的一部分。
注意
使用定期更新时,不能保证计算值在任何给定读取中都是准确的。但是,如果不要求精确性,则此方法可能值得提高性能。
一个应用程序显示电影查看器和收入信息。
考虑以下screenings
集合:
用户通常想知道有多少人看了一部电影以及该电影赚了多少钱。在此示例中,您必须对总计为num_viewers
和revenue
的剧院进行读取,这些剧院已经放映了标题为“ Reservoir Dogs”的电影,并对这些字段的值求和。为了避免每次请求信息时都执行该计算,您可以计算总值并将其movies
与电影记录本身一起存储在一个
集合中:
在低写入环境中,可以结合screenings
数据的任何更新来完成计算。
在定期写入的环境中,可以按定义的时间间隔进行计算-例如每小时进行一次。输入的源数据
screenings
不受对movies
集合的写入的影响,因此您可以随时运行计算。
这是一种常见的设计模式,可以减少CPU工作量并提高应用程序性能。每当您重复执行相同的计算并且读写比很高时,请考虑计算模式。
除了经常要求求和的情况(例如在电影数据库示例中获得总收入或观众)之外,无论何时需要对数据进行计算,计算出的模式都非常合适。例如: