0

すでに数時間検索しましたが、この件については何も見つかりませんでした。

ページにロードする必要がある要素を定義するクエリに依存する Web サイトを開発しています。しかし、データを整理するには、このクエリの結果を 4 回再渡す必要があります。

最初の試行では、クエリを再送信できるように mysql_data_seek を使用し始めましたが、パフォーマンスが低下し始めました。このため、データを配列に入れて foreach ループを実行する mysql_data_seek を交換してみました。

パフォーマンスは測定できるほど改善されなかったので、実際にはどれが最良のオプションなのか疑問に思い始めました. mysql_fetch_array を複数回実行して、かなり大きなデータ配列を構築します。

私のアプリケーションは現在、PHP 5.2.17、MySQL で実行されており、すべてがローカルホストにあります。残念ながら、私はビジーなデータベースを持っていますが、データベースへの接続数に問題はありませんでした.

このタスクを実行するための好ましい方法はありますか? mysql_data_seek または大きな配列データ以外のオプションはありますか? これらのオプションのベンチマークテストに関する情報はありますか?

どうぞよろしくお願いいたします。

4

1 に答える 1

1

問題の答えは、データベース内の適切なフィールドのインデックス作成にある可能性があります。ほとんどのデータベースは、頻繁に提供されるクエリもキャッシュしますが、通過するテーブルが変更されると、それらを破棄する傾向があります。(これは理にかなっています)

したがって、データベースを信頼して、データベースがうまく機能することを実行できます。データのクエリと取得を行い、テーブルでの競合がほとんどないことを確認したり、適切なインデックスを配置したりすることで、データベースを支援します。ただし、これにより書き込みのパフォーマンスが変わる可能性がありますが、これはあなたの場合は重要ではない可能性があり、実際に判断できるのはあなただけです。(インデックスを計算して保持する必要があります)。

速度が重要な場合は、使用するPHP拡張機能も役割を果たします。「アップグレード」をmysqliまたはpdoに実行し、-> fetch_all()を実行します。これにより、phpプロセスとデータベースサーバー間の通信が削減されます。これに対する唯一の理由は、クエリするデータの量が非常に多いために、php / webserverプロセス、さらにはサーバー全体を強制的にスワップさせて停止または停止させる場合です。

使用するテーブルタイプは重要な場合があります。特定のタイプのクエリは、INNODBとは対照的にMYISAMでより高速に実行されるようです。少しツールを変更したい場合は、このデータ(またはそのコピー)をmysqlのHEAPエンジンに保存して、メモリに保存することができます。変更されたデータを確実に保持したい場合でも、書き込み時にディスクテーブルと同期するように注意する必要があります。(サーバーの障害またはシャットダウンの場合に備えて)

または、 memcacheのようなものに、またはapc_storeを使用してデータをキャッシュすることもできます。これは、phpプロセスメモリにあるため、非常に高速です。ここでの大きな注意点は、APCのストレージに使用できるメモリが一般的に少ないことです(デフォルトは32MBです)。Memcacheの大きな利点は、高速でありながら分散されているため、複数のサーバーを実行している場合、このデータを共有できることです。

nosqlデータベースを試すことができます。できれば、 redisなどのドキュメントストアではなく、単なるキーストアであるデータベースを試してみてください。

そして最後に、phpスクリプトに値をハードコーディングし、eacceleratorやAPCなどを使用して、本当に4回使用する必要があるかどうか、または実際に作成したものの出力をキャッシュできないかどうかを確認します。それと。

申し訳ありませんが、既成の回答を提供することはできませんが、パフォーマンスに関する質問は、該当する場合、通常、多面的なアプローチが必要です。:-|

于 2012-06-01T23:12:27.827 に答える