2009-06-05 11 views
3

MySQLやPHPやPythonのようなサーバ言語でデータを処理する方が速いのかどうか疑問に思っていました。私はORDERのようなネイティブ関数が原因インデックスへのMySQLに速くなると確信している、キャッシングなど、実際に(同じランクを持つものとして複数のエントリを返す絆含む)のランクを計算する:MySQLとWebサーバのデータ処理

サンプルSQL

SELECT TORCH_ID, 
    distance AS thisscore, 
    (SELECT COUNT(distinct(distance))+1 FROM torch_info WHERE distance > thisscore) AS rank 
    FROM torch_info ORDER BY rank 

サーバー

...ちょうどSELECT TORCH_ID FROM torch_info ORDER BY score DESCを実行するのとは対照的に、Webサーバー上でPHPのランクを計算します。

答えて

1

MySQLは、複雑でない計算のほうが高速になるでしょう。しかし、データベースサーバの90%がボトルネックになっているので、これらの計算を使ってデータベースを動揺させて実際に追加したいのですか?私は自分自身をウェブ/アプリケーションサーバーに置き、負荷を均等にすることもできますが、それがあなたの決定です。

1

カウントの速度は、使用しているDBストレージエンジンとテーブルのサイズによって決まります。 mySQLで行われたほとんどすべてのカウントとランクが、同じデータをPHPメモリに取り込み、同じ操作を行うよりも速いと私は思っています。

+0

私の元の投稿で言ったように、COUNTはネイティブSQL関数であり、DBが最適化されると確信しています。それを実行します。ただし、ランクはネイティブ関数ではありません。私の質問は、それらの非ネイティブ関数がMySQLでより速いか、あるいはリストを扱うように特別に作られたpythonのような言語であるかどうかを尋ねることです。 – Karan

0

ランキングはカウントに基づいています。だから、もしあなたがそれらの機能をより速く行うことができれば、ランクは明らかに速くなります。

0

質問の大部分は、設定した主キーとインデックスに依存しています。 torchIDが適切に索引付けされていると仮定すると...

mySQLはサーバー側コードよりも高速です。

このSQLを呼び出す頻度は、もう1つ考えてください。ランク列を作成し、各レコードが入ってくるたびに更新する方が簡単です。これにより、データベースへのマイナーヒットが多く、データベースへのヒット数が増えます。

1万件のレコードと、このクエリを1日に1回ヒットした1000人のユーザーと、毎日新しいトラックのレコードを記録した100人のユーザーがあるとします。私はむしろDBが100の更新を行って、10%がすべてのレコード(9,999)をヒットしてから、ランキングクエリが1日に1,000回ヒットするようにしたいと思います。

私の2セントです。

0

テストでトランザクションをポストするのではなく、個々のクエリを実行している場合は、ODBCのdsnでJDBCドライバを使用することをお勧めします。 (あなたのテストでは、ここでODBCデータベースを使用していると仮定しています)

2

一般的に、「データベースまたはWebサーバーの質問にデータを処理する必要がありますか?

  1. 別のWebサーバーを追加するのは簡単です。別のデータベースサーバーを追加するのは難しいです。データベースから負荷を取り除くことができれば、それは良いことです。
  2. データ処理の出力が必要な入力よりもはるかに小さい場合、データベースの処理を実行することによって、多くのデータ転送のオーバーヘッドを避けることができます。簡単な例として、SELECT *には愚かで、テーブル内のすべての行を検索し、Webサーバー上で反復して、x = 3の場所を選択します。SELECT * WHERE x = 3
  3. あなたが指摘したように、
関連する問題