0

質問のための例: ユーザー、質問、および回答を含むデータベースがあります。各ユーザーには、質問と回答の表のデータを使用して計算できるスコアがあります。したがって、users テーブルにスコア フィールドがあると、冗長になります。ただし、スコア フィールドを使用しない場合、毎回スコアを計算すると、Web サイトの速度が大幅に低下します。

私の現在の解決策は、それをスコアフィールドに入れ、数時間ごとにcronを実行して、全員のスコアを再計算し、フィールドを更新することです。

これを処理するより良い方法はありますか?

4

1 に答える 1

1

私の意見では、冗長性を排除することは、効率的な (そして読みやすい!) コードを作成することよりも重要です。

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 が「しゃっくり」して、トリガーなどを実行するのを忘れることがあります。スコアを週に 1 回実行するように設定する元の cron スクリプトを配置することをお勧めします。

于 2010-05-15T14:19:33.567 に答える