2012-03-20 6 views
0

私は構築しているフォーラムで遊んでいますし、しばらくの間、未読の投稿や通知を追跡する方法データベース。いくつかの解決策を見た後、私のニーズに合った解決策を思いついたと思いますが、私が考えなかったことを指摘するために新鮮な目が必要です。ここに私の考えのアーキテクチャがあります。未読の投稿と通知を保存するためのPHPのアイデア

1)ユーザーがログインしたときに、現在のtime()と最後のログインtime()の間で投稿を確認します。

2)投稿が見つかった場合は、配列に追加し、serialize()配列を追加し、データベースのメンバー行に保存します。

3)空でない場合は、配列をユーザーに出力します。

この方法では、非アクティブなユーザーの未読IDを保持する不必要な領域を占有するのではなく、実際にフォーラムにログインしているユーザーに未読の投稿とストアをチェックするだけです。ユーザーが投稿を読んでいない場合、データベースのシリアライゼーションが管理するには大きすぎる可能性があるので、これはあまり良い考えではないかと私はまだ疑問に思っています。

私の考え方に問題がある人はいますか?もしそうなら、私に知らせてください。

+1

search.phpのPHPBBのnewpostsセクションを参照することをお勧めします。 – hjpotter92

+1

SMFストアはトピックを読み取りました。はい、各ユーザーは、各トピックを読んでいます。あなたが言うように、すべての "未読"アイテムを保存しないようにするには、 "読む"アイテムを保存することです。 –

答えて

4

実際に問題が生じるまで心配する必要はありません。投稿ID(整数)とユーザID(別の整数)を格納するテーブルは小さくなる。あなたは、ユーザーの投稿や、数千、数千を持っている場合でも、あなたは安全にそれを取ることができる:

  • ユーザーの大部分が非アクティブになります(ワンタイム登録は何かを掲示し、全体の問題を忘れて)
  • アクティブなメンバーであっても、すべての投稿を読み上げるのではなく、トピックに興味のあるものの(比較的小さな)部分だけを読み上げます。

もう1つのこと:スペースを最小限に抑えたい場合は、未読の投稿を保存しないでください。最後に読んだポストだけを各スレッドに格納します。これは、ユーザーごとに1スレッドにつき1つのレコードで、ユーザーがスレッドを開いたことを前提としています。

+0

+1ストアのみを読み取ります。未読を推測することができます。 –

+0

これは意味があります、ありがとうございます。 –

1
  1. ユーザーがログインしても投稿を読み取らない場合でも、スキームはそれらを読み取り済みとしてマークします。
  2. ユーザが(デスクトップコンピュータとiPadのように)一度に2回ログインすると、どうなりますか?

それぞれのユーザーがフォーラムを閲覧するのに問題があり、それぞれを読むかどうかを示すフラグが付いていますか?このような仕組みは、アップボーディング、お気に入りなどに拡張するためには明らかに役立ちます。

+0

ユーザーごとに読み取られたトピックごとにtopic_idとmember_idをテーブルに格納するほうが指数関数的に大きくなります。また、ユーザーがすべての投稿を読んだとしてマークするとどうなりますか? –

+1

投稿数とユーザー数に比例して大きくなります。それらが同じ割合で増加すると、それは指数関数的成長ほど悪くない時間の経過と共に幾何学的に成長します。あなたがIDとフラグだけを格納しているならば、各レコードは10バイトのような本当に厄介なものでなければなりません。 2,000人のユーザーと10,000の投稿の後、可能な最大サイズは200Mになります。合理的に私にとって安全です。 – octern

+0

@EdR:指数関数ではありません。 2つの次元のそれぞれについて線形である。200万人のユーザーと2万のトピックのための 'Topic_id * member_id'は約320GBのストレージしかありません。現在の価格では、購入したディスク容量の21ドルを消費します。大したことではありません。 – wallyk

関連する問題