【问题标题】:Optimizing Mysql to avoid redundancy but still have fast access to calculable data优化 Mysql 避免冗余但仍然可以快速访问可计算的数据
【发布时间】:2010-05-15 13:55:17
【问题描述】:

一个问题的例子:我有一个包含用户、问题和答案的数据库。每个用户都有一个分数,可以使用问题和答案表中的数据来计算。因此,如果我在 users 表中有一个 score 字段,那将是多余的。但是,如果我不使用分数字段,那么每次计算分数都会显着降低网站速度。

我目前的解决方案是将它放在一个分数字段中,然后每隔几个小时运行一个 cron,它会重新计算每个人的分数,并更新该字段。

有没有更好的方法来处理这个问题?

【问题讨论】:

  • 什么是数字中的“显着慢”值?

标签: mysql redundancy


【解决方案1】:

在我看来,消除冗余对于创建高效(且清晰!​​)代码是次要的。

不使用cron来更新分数,为什么不create a trigger在适当的地方插入记录时更新用户的分数?

如果在更新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 脚本设置为每周运行一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多