Database design 数据库优化-是否有一个总字段或查询表?

Database design 数据库优化-是否有一个总字段或查询表?,database-design,cumulative-sum,Database Design,Cumulative Sum,我有一个应用程序,用户执行的动作都会得到分数——简单动作得1分,困难动作得2分。 我希望向用户显示他在我的应用程序中获得的积分总数以及本周获得的积分(从周一午夜开始) 我有一个记录所有动作的表格,以及它们的时间和点数 我有两个选择,我不确定哪一个更好: 每次用户看到报告时,都会执行查询并对用户得到的分数求和 向每个用户添加两个字段,记录迄今为止获得的点数(总数和每周)。每周积分值将在每周一午夜设置为0 第一个选项更简单,但我担心,由于我将获得许多用户和操作,查询将花费很长时间 第二种选择暴露了行

我有一个应用程序,用户执行的动作都会得到分数——简单动作得1分,困难动作得2分。 我希望向用户显示他在我的应用程序中获得的积分总数以及本周获得的积分(从周一午夜开始)

我有一个记录所有动作的表格,以及它们的时间和点数

我有两个选择,我不确定哪一个更好:

  • 每次用户看到报告时,都会执行查询并对用户得到的分数求和
  • 向每个用户添加两个字段,记录迄今为止获得的点数(总数和每周)。每周积分值将在每周一午夜设置为0
  • 第一个选项更简单,但我担心,由于我将获得许多用户和操作,查询将花费很长时间

    第二种选择暴露了行动表和汇总值之间不一致的风险

    我对你认为这里最好的选择很感兴趣

    谢谢,
    多里安

    选择一稍后缩放

    我的想法是采用更简单的方法每次查询表,当您的站点上有太多用户导致服务器速度减慢时,您可以在那个时候切换。如果您的用户太多,以至于服务器速度变慢,那么您可能也需要扩展应用程序的其他部分,但在扩展应用程序的早期阶段,不要太过费劲。需要缩放时进行缩放

    我的观点摘自37signals的《变得真实》一书,第4章——之后的音阶

    这两种解决方案同样有效。你自己说对了:第一种选择会更容易实现,但每次用户进入分数页面时都需要对分数进行汇总。另一方面,对于第二个备选方案,您只需要在用户表中添加和维护两个附加属性。如果仔细编程,这几乎不会危及应用程序的完整性