2011-07-31 13 views
0

テーブル内に100行あり、3列の数値があるとします。私はすべての行を必要としません、私はデータをフェッチするたびにそれらの約半分だけです。私は残っているものを冗長にするように更新された行だけを必要とします。基本的な質問:データとパフォーマンスのトレードオフを照会

フィールドを追加し、最後にフェッチしてから更新されたことを表す日時フィールドを与えて、それを選択時の基準として使用する方が良いでしょうか?または、毎回すべてのデータをダウンロードするだけです(現在、データはJSONファイルとして返送されています)。

これらの2つのオプションの間の速度、帯域幅の使用率、およびサーバーCPU使用率のトレードオフは何ですか?前者は後者よりも平易なのですか?

答えて

1

Jens Struweとroyclの両方が正しいですが、仮説的な質問をしているときには、正しい回答が得られます。は矛盾しています。

データの半分だけが関連する場合、クライアントはどのデータを表示するかを決定する方法はありますか?意思決定をソフトウェアで行うことができれば、それはデータベース上で行うほうが効率的ですが、それはより論理的です。

100行の表では、パフォーマンスはここにもそこにもありません。保守性と長期的なアップグレード性ははるかに大きな問題です。ほとんどの開発者は、論理的なデータベース設計とソート/フィルタリングがクライアントではなくDBで行われることを期待しています。

1

タスクを達成するために必要なデータのみを常に選択してください(少なくとも可能な場合)。逆の場合:除外するデータは決して選択しないでください。結果:更新のタイムスタンプフィールドを追加し、タイムスタンプが指定されたタイムスタンプより大きい行のみを選択します。

1

テーブルが100行、数字が3列の場合、サーバが数十ミリ秒未満でデータを返すかどうか気にしない場合は、どのアプローチを使用しても問題ありません。問合せが頻繁に行われた場合は、行はいずれにしてもメモリに格納されます。また、あなたのjsonコードをよりシンプルにし、クライアントコードのダンベル(これはおそらく良い、よりメンテナンス可能です)になります。

必要なデータの割合がごくわずかな数百万行のテーブルがある場合は、当然のことながら戻り値セットを制限したい場合は、SQL WHERE句を使用するのが最も簡単ですWHERE dt_modified > my_timestamp。適切に最適化されたデータベースでは、このクエリでも100ミリ秒以下で来る可能性があります。

この問題は、データが「有線で」過ごす時間、クライアントがページを再生成するのに費やす時間、または返されたデータに基づいて更新する時間に関係します。クライアントの処理時間は、しばしばプロセスの中で最も遅いものです。異なるブラウザと異なるネットワーク速度でテストするだけで、サーバー側のtweek、ネットワークの修正(データを圧縮するためのgzipなど)、JavaScriptの呼び出しを最適化することができます。