2012-03-19 17 views
0

私は、MySQLデータベースで動作する小規模のPHPソーシャルネットワークを持っています。ネットワーク上のユーザーは、さまざまなグループに参加して更新を受け取ることができます。PHPの基本的な通知システム

グループによって新しい更新がリリースされたときにユーザーに通知したいと思います。

私はソケットで気にしないことをしたくないです。ユーザが最後にアクティブになって以来、いくつのアップデートがポストされているかの表示が欲しいです。

私は、ページを更新するたびにユーザーに対して現在の時刻を記録すると考えました。この方法では、更新日とユーザーが最後にアクティブだった時刻を比較できます。

すべてのページの読み込み時にデータベースに書き込むことは良い考えです。その他の適切な提案ですか?

答えて

1

私はこれを行う最良の方法は、実際にデータベースに書き込むことだと思います。しかし、パフォーマンスの面では、それをより速くするいくつかの方法があります。私が考えることのできる2つの方法は、一般的なグループの更新をキャッシュし、ユーザーとタイムスタンプのみを持つテーブルを作成することです。

+0

ご返信ありがとうございます。既存のユーザーテーブルから1つの列を抽出するだけでなく、別のテーブルを使用する方が早い理由を説明できますか?乾杯。 – Alex

+0

違いが実際に感じられるかどうか分かりませんが、テーブルが非常に大きい場合は、同じクエリを使用して他の情報を取得する場合は、間違いなくオーバーヘッドが発生します。 – Ynhockey

+0

余分なオーバーヘッドはどこから来ていますか?確かに両方のテーブルは同じ数の行を持ち、同じフィールドにインデックスを付けることができます。 – Alex

1

解決策は問題ありません。データベースの正しいフィールドにインデックスを付けることを確認してください。

は今、これまでは再びこのような疑問を持っている場合...次の手順を経る:あなたはスケーラビリティの問題を心配している場合は

  • は測定

  • それを試してみてくださいあなたはあなたが何本(またはそれをサポートしたいと思う)のレコードを測定することを除いて、同じことをやり直してください。 10.000レコードや何百万ものレコードを生成して再試行するのは簡単でしょう。

    実際にが許容できない速度で実行されている場合は、問題を書き留めて、ここで最適化する方法を再度尋ねます。

  • +0

    はいお父さん。むしろ貧弱な代替案の無駄な時間をテストするよりも巧妙な解決策を考えていくのに時間を割いています。 – Alex

    +0

    私は、すべてのデータベースベースのソリューションが特定の状況でパフォーマンスの問題を引き起こす可能性があると言います。最初に測定した場合のみ、問題があるかどうかを判断し、(より複雑な)代替案を探ることができます。 – Evert

    +0

    非常に一般的な状況を記述しているため、非常に一般的な回答以上のものは期待できません。 (たとえば、クエリが1つのフィールドについて心配していますか?)。 – Evert