key => value
1つのプロセス内に数千またはkey => array
ペアを一時的に保存するにはどうすればよいでしょうか。ルックアップkey
はプロセス内で継続的に実行され、プロセスが終了するとデータは破棄されます。
配列を使用する必要がありますか?一時的なMySQLテーブル?またはその間の何か?
これは、数千の意味と、アレイがメモリ内でどれだけ大きくなるかによって異なります。PHPで処理できる場合は、mysqlを使用するとここで少しオーバーヘッドが発生するため、処理する必要があります。
ただし、共有ホストを使用している場合、またはmemory_limit
php.iniに制限があり、それを増やすことができない場合は、MySQLの一時テーブルを使用できます。
また、 MemcachedやRedisのようなシンプルで高速なキー値ストレージを使用できます。これらはメモリでのみ機能し、キーの実際の高速ルックアップが可能です(RedisはO(1)の時間計算量を約束します)
Several thousand?! You mean it could take up several KILObytes?!
Are you sure this is going to be an issue? Before optimizing, write the code the simplest, straightforward way, and check later what really needs optimalization. Also, only having the benchmark and the full code will you be able to decide on the proper way of caching. Everything else is a waste of time and the root of all evil...
Memcachedは、データをキャッシュする一般的な方法です。
その1つのプロセスのみを実行していて、同時アクセスについて心配する必要がない場合は、php内で実行します。複数のプロセスがある場合は、確立されたソリューションを使用するので、詳細について心配する必要はありません。
それはすべてあなたのアプリケーションとあなたのハードウェアに依存します。私の賭けは、データベース(特にMySQL)にデータベースの仕事だけをさせることです。つまり、データを保存および取得するよりも多くの作業を行う必要はありません。他のDBMSは本当に効率的かもしれませんが(たとえば、Informix)、残念ながら、MySQLはそうではありません。一時テーブルはPHP配列よりも効率的かもしれませんが、DBへの接続数を増やします。
スケーラビリティも問題です。PHPでそれを行うことはそのように優れています。
全体像がわからないと、正直に答えるのは難しいです。これは、データのソースがどこにあるかによって異なります。
データがデータベースにある場合は、そこに保持して操作し、必要なアイテムを取得することをお勧めします。必要に応じて一時テーブルを使用する
データがすでにPHPにある場合は、おそらくそこに保持する方がよいでしょう。PHPでのデータの処理は非常に集中的ですが
データルックアップがわずかなクエリで実行される場合は、mysql一時テーブルを使用して実行します。
多くのデータルックアップがある場合は、ほとんどの場合、php側に保存するのが最適です。(接続オーバーヘッド)