在web应用程序数据库中跟踪进度或级别的正确方法


Proper way to track progress or levels in a web application database

我正在创建一个基于成就的网站,成就分为50多个组。每组有500项成就。完成一项成就后,我会在数据库中记录他们完成成就的日期。我总是单独和整体地跟踪每个小组的进展。例如:

Group 1: 5/500
Group 2: 89/500
Group 3: 21/654
Overall: 115/1654

我的问题是,一直从头开始计算这些进度报告是一种糟糕的做法,还是我应该有另一个表来存储这些进度,并不时更新它?

创建一个活动表,跟踪个人成就并一直计算。这样做的美妙之处在于,如果你改变计算成绩的方式,那么你根本不需要接触你的原始数据

如果速度太慢,那么您可以创建一个成就跟踪表,计算成就并定期存储它们以供查询。

我相信您想知道是否应该缓存输出。这真的取决于你的申请。

  • 它是一个要"按原样"多次部署的产品吗?实现缓存
  • 否则,您的报告是否存在性能问题?
    • ?不要缓存
    • ?实现缓存

缓存有各种策略,对于您的应用程序(我只是假设您有一个可以获得这些成就的多个"对象"的集合),我更喜欢在某些事件上无效的缓存。就像每当对象x获得成就一样,这个"事件"会使缓存无效。

输出代码首先查询缓存,只有在无效时才会执行重建缓存的代码。这确保了输出始终有效,而不是每x小时重建一次所有缓存。