一个问题的例子:我有一个包含用户、问题和答案的数据库。每个用户都有一个分数,可以使用问题和答案表中的数据来计算。因此,如果我在 users 表中有一个 score 字段,那将是多余的。但是,如果我不使用分数字段,那么每次计算分数都会显着降低网站速度。
我目前的解决方案是将它放在一个分数字段中,然后每隔几个小时运行一次 cron,它会重新计算每个人的分数,并更新该字段。
有没有更好的方法来处理这个?
一个问题的例子:我有一个包含用户、问题和答案的数据库。每个用户都有一个分数,可以使用问题和答案表中的数据来计算。因此,如果我在 users 表中有一个 score 字段,那将是多余的。但是,如果我不使用分数字段,那么每次计算分数都会显着降低网站速度。
我目前的解决方案是将它放在一个分数字段中,然后每隔几个小时运行一次 cron,它会重新计算每个人的分数,并更新该字段。
有没有更好的方法来处理这个?
在我看来,消除冗余对于创建高效(且清晰!)代码是次要的。
与其使用 cron 来更新分数,不如在适当的位置插入记录时创建一个触发器来更新用户的分数?
如果在更新表时更新分数answers
,那么您将执行以下操作:
create trigger 'scores_increment'
after insert on 'answers'
for each row begin
update 'users' set user_score = user_score + 1 where user_id = NEW.user_id;
end;
create trigger 'scores_decrement'
after delete on 'answers'
for each row begin
update 'users' set user_score = user_score - 1 where user_id = NEW.user_id;
end;
虽然,有时 DBMS 会“打嗝”并忘记运行触发器或其他东西。我建议将您的原始 cron 脚本设置为每周运行一次。