最近の 20 件の投稿と、各投稿の最新の 4 件のコメントを表示するためのさまざまなアプローチを分析しています。これは Facebook の壁のようなものですが、いいね、共有、その他はありません。
テーブル構造の例
投稿p_id
= その投稿の数user_id
= 投稿しているユーザーposter_user_id
= 投稿者post
comment_id
= そのコメントの数post_id
= コメントが関連する投稿の番号commenter_user_id
= そのコメントをしている人物comment
アプローチが頭に浮かぶ
1) POST テーブルをクエリして、最近の 20 件の投稿を取得し、投稿 ID をデータベースに送信して、COMMENT テーブルからコメントを取得します。しかし、この合計呼び出しは
1(投稿)+20(コメント)=21 DBコール
2) POST と COMMENT テーブルを結合し、最近の 20 件の投稿のすべてのコメントを取得し、表示時に以前の POST_ID を確認し、同じ場合は投稿を表示せず、コメントのみを表示します。しかし、このアプローチ
多くの不要なデータを取得します
3) POSTテーブルをクエリし、最近の20件の投稿を取得し、投稿IDを取得し、コメントクエリを動的に構築します(以下の種類のクエリを作成するPHPで)
SELECT comment FROM comments WHERE post_id=<1st latest_id> ORDER BY comment_id desc LIMIT 4
UNION ALL
SELECT comment FROM comments WHERE post_id=<2nd latest_id> ORDER BY comment_id desc LIMIT 4
UNION ALL
SELECT comment FROM comments WHERE post_id=<3rd latest_id> ORDER BY comment_id desc LIMIT 4
....................up to 20
ここでは、
1(投稿)+1(コメント) = 2 つのデータベース呼び出し
このアプローチは問題ないように見えます
4) 3 番目の方法を使用して、結果を memcached に 1 分間または 30 秒間保存します。ユーザーがコメントまたは新しい投稿を行う場合は、jquery を使用して、ブラウザーで自分のエントリを更新します。彼が更新を押した場合、サーバーにフラグを送信してデータベースを再度クエリし、それらを memcached に保存します。
このアプローチでは、1 分間に 1 つまたは 2 つのデータベース呼び出ししか必要ありませんが、ユーザーは最近のものではなく、1 分前に投稿されたデータを取得します。これは、通常のフォーラムでは問題ありません。
5)毎分データベースにクエリを実行する代わりに、最初にデータベースから上位 20 件の投稿を取得し、それらをコメントと共に memcached に保持します。ユーザーが新しい投稿を書くたびに、memcached から 20 番目の投稿を削除し、新しい投稿を 1 番目のトップ投稿として追加します。コメントについても、4 番目のコメントを削除し、新しいコメントを投稿に添付します。ただし、これには開発作業が必要です。もちろん、レコードをデータベースに保存する必要があります (または、必要に応じてグループ コミットに従うこともできます)。
完璧にコーディングすれば、これは私にとって最良のアプローチのように見えます
5番目のアプローチを実装するための他のアプローチや良いリンクはありますか? (memcached の更新)
ご協力ありがとうございます