7

PHP、Mysql、Apache に基づくプロジェクトに取り組んでいます。

FACEBOOKで利用可能な通知と同じような通知というモジュールがあります。これには3つの方法があります

これらの更新について通知する必要があるユーザーの数に、すべての更新をテーブルに挿入します。つまり、カテゴリ B にいくつかの更新があり、このカテゴリ B に 100 人のユーザーが含まれている場合、それぞれのユーザーに 100 行を挿入しますたとえば、通知テーブル。

2番目の方法

私ができることは、テーブルに特定のカテゴリのエントリを挿入し、これらの各ケアゴリー ID に対して大量の JOIN クエリをファイルして、複数のテーブルからすべてのレコードを取得してレコードを取得することです。

サードウェイ

ユーザーへの通知に使用できるように、すべての更新でトリガーを使用します。

この 3 つの方法はすべて、ある時点で問題があると思います。

今、誰かがより良いアイデアを提案できますか、またはこれらのどれがより良いオプションですか?

大量のエントリがあるため、サイトのパフォーマンスが心配です

ありがとう

4

2 に答える 2

0

MySQL でのトリガーのサポートはせいぜい見掛け倒しです。そのため、良い方法であった可能性はありますが、私はその方向に進むつもりはありません。

これを行う最も簡単な方法は次のとおりです。ログイン/ログアウトするたびに、「オンラインユーザー」.idからユーザーを挿入/削除し、フロントエンド(とにかくやるべきことがある)に今すぐ尋ねてもらい、次に、彼が知っているIDのどれがテーブルにあるかを知るために。

結合は、mysql では比較的スマートではないことを除けば、インデックスがあっても大きなテーブルでは遅くなります。

トリガー、まったく同じで、トリガーに何をするように依頼しますか?? この人がログインしたすべてにプッシュしますか? 興味のある人にプッシュしますか?これは、さらに別の結合、つまりパフォーマンス ヒットを意味します。

通知表 ? 理由もなく完全に巨大で遅い(つまり、1つのクエリではなく100の挿入)。

于 2011-09-22T11:32:06.253 に答える
0

これは、私が最初に考えたよりも少しトリッキーでした:)

アプリ/ユーザーの動作はどうですか? いつ最も多くの作業を行う必要がありますか? データを挿入するとき、またはデータを取得するときです。

最も一般的な操作は何かを想定する必要があります。多くのユーザーに未読メッセージの通知が表示されるため、データのフェッチはもう少し一般的であると思いますが、新しいメッセージの「挿入」は1つだけですか?

したがって、私は新しい通知の挿入に取り組みますが、それでもユーザーがあなたのアプリに群がり始めると、ひどく終わる可能性があります.

しかし、最適化の前にモデルを設定する必要があると思います。それはより重要です。最適化は、 denormalisation 、スケジューリングなどを使用して後で管理できます。トリガーには実際には触れません。トリガーは少しファンキーな私見です。

また別のアプローチをします。

ユーザーが新しいメッセージを書きます:

  • メッセージを挿入
  • user_category (has many) カテゴリをその時点で更新されたように更新します

    UPDATE user_category SET last_changed = 'NOW()' where category_id = ?;

ユーザーの未読メッセージを見つける方法:

  • ユーザーが最後に閲覧してから更新された (汚い?) カテゴリを選択します。
  • 「user_message_noticed」に含まれていないカテゴリからすべてのメッセージを選択します (以下を参照)。

ユーザーがメッセージを読んだとき

  • メッセージとユーザーを結合する *user_message_noticed* スキーマに行を挿入します。カテゴリ ID があるので、追加の結合なしで上記をより迅速に実行できます。

そのカテゴリから読み取られたすべてのメッセージについて - ユーザーがすべてのメッセージを読んだ日付で *user_category™ (has many many) を更新します。

しかし、実際の作業から逃れられない場合もあります。

于 2011-09-04T01:33:53.663 に答える