登录后如何显示每个用户的总数 - 拥有25,000个用户的数据库 - 数百万行?

flu*_*ore 3 mysql database

我正在处理大约25,000个用户的数据库,这些用户平均每天添加大约6行(员工保留工作订单的日志).基本上,数据库不确定地增长并包含数百万行(在这25,000个用户之间划分).

在用户登录后,我希望系统显示一些总计,例如在整个工作生涯中用卡车编号xyz驱动的里程,在订单项xyz上工作的总时间等等.基本上,每次用户登录时,都需要立即显示这些总数.此外,一旦用户为工单添加行,总计需要立即反映此更改.

是否建议为每个用户构建一个总计表,并使用每个条目进行更新.或者我应该只查询数据库并让它在每次用户登录时动态计算总数(无总表).如果用户每秒登录一次并且数据库需要根据数百万行吐出总数,那么会产生瓶颈吗?谷歌如何做到这一点?:)

谢谢.

Mar*_*ers 5

您可能会发现一个简单的查询足够快,具有适当的索引(例如索引user_id).这应该减少需要扫描的行数.

但如果速度不够快,您可以在一夜之间计算所有用户的结果,并将此结果缓存到另一个表中.然后,您可以执行以下操作:

  • 直接从缓存表获取最后一次缓存更新的总计.
  • 从主表获取自上次缓存更新以来的总计.
  • 添加这两个数字以获得总数.

另一种选择是使用触发器来保持预先计算的结果准确,即使插入,更新或删除行也是如此.