2012-02-20 5 views
0

私はユーザーが投稿にコメントできるソーシャルネットワークプラットフォームに取り組んでいます。データベースから選択してソフトウェアで制限するか、データベース(mysql)で制限する

そして私は各ポスト(ページをロードするとき)のコメントをすべて選択してからソフトウェアを使って切り捨てるべきか、またはmysqlクエリを使って結果を制限すべきかというジレンマを思いつきました。

このジレンマの理由は、mysqlは独自の最適化とクエリ/結果キャッシングを行い、出力を制限するとクエリキャッシングは役に立たなくなりますが、そうでないと、私は必要以上に多くのデータを取得するだけでなく、ソフトウェアのオーバーヘッドが発生します。

質問はこのように聞こえるかもしれませんMYSQL and the LIMIT clauseこれは制限1を参照していますが、私の場合、結果の数は0から3000(またはそれ以上)になります。制限は通常3ですが、ユーザーがコメントをもっと見たい場合は異なります。

クエリには、ORDER BY id DESC句とそのSELECT *(必須)が必要です。基本的に、SELECT * FROMテーブルWHERE postid = '$ variable' ORDER BY id DESC。

また、ソフトウェアは2年以上にわたって正常に動作していますが、私はそれを最適化するプロセスに入っています。だから、どんな助けも素晴らしいだろう。

編集:TL; DR主な質問は次のとおりです。1つのデータベースクエリがあり、ソフトウェアの一部を使用して、必要な正確なデータを要求するよりも優れていますか?

+0

なぜテストしないのですか?あなたはあなた自身のためにそれを試してみる必要があるほど具体的な音を出します –

+0

両方の方法はうまく動作しますが、パフォーマンスの違いを見つける正確な方法はありません。また、専門家の意見も参考になります。 – Sina

+0

また、テストするのは簡単ではないと付け加えるべきです。システムに乗るには何千人ものユーザーが必要で、可変長の可変ポストを作成して何千ものコメントを作成し、それらを比較するために読み込む時間を書き留めます。だから、基本的にはテストすることは実際には不可能です。 – Sina

答えて

0

両方の方法が正常に機能する場合は、データベースに制限をかけることをおすすめします。

これにより、処理をデータベースに移すことができるため、将来はサーバーを分離して強化することが容易になります。

バルーンのコメント数があれば、想像してみてください。 dbをより重いサーバーに移動するだけで、パフォーマンスが向上します。

+0

あなたが知っているかもしれないことは、Twitter、fbなどのソーシャルネットワークでは、コメントしてから忘れてしまいます。 だから、本当に重要なのは、同じプロセスが多くのユーザーに対して実行されていることです。私はそれが急速に変化するので、キャッシュを行うことはできません。また、すべてをロードしてmysqlにキャッシュさせるかどうかを知りたいのは、必要なものだけをロードするよりもパフォーマンス上の利点があります。 – Sina

+0

あなたが言ったことに基づいて。それをデータベースにキャッシュすることはできませんし、httpでもキャッシュすることはできません。なぜ、dbを制限するだけでメモリ使用量を減らさないのでしょうか。そうでない場合は、PHPを表示するだけで1000件のコメントをすべて読み込む必要があります。5.データベースがデータベースの最適化と同じようにデータフィルタリングを処理できるようにします。 – iWantSimpleLife

+1

もう1つは、リレーショナル表を使用しないことです。テラコッタや大きなテーブルのようないくつかのnosqlソリューションを見てください。 Facebookやtwitterのようなほとんどのサイトでは、ハードウェアを追加することで簡単に拡張できるので、これを使っています。 – iWantSimpleLife

関連する問題