4

PHP に永続的な変数、つまり最終的な変更不可能な変数を保存することは可能ですが、ページを要求しているすべてのユーザーが読み取ることができますか?

たとえば、大きな (不変の) 単語リストから始めて、ページで辞書を使用する必要があります。これを行う最善の方法は何ですか?

  • ページが読み込まれるたびに単語リストをオンザフライでツリーに変換すると、計算リソースが完全に無駄になり、ページの読み込みごとに数秒かかります。
  • ツリーをサブフォルダーとしてファイル システムに配置して使用するのfile_exists()は十分高速ですが、1 ワードあたり 4KB を使用するため、ディスク スペースが無駄になります。
  • ページの読み込みごとに何千ものルックアップが必要なため、単語をデータベースに入れることはできません。

この辞書を保存する適切な方法は何でしょうか?

4

4 に答える 4

5

memcachedは、多くのプロセスからアクセスできるものをメモリに保持する方法としてphpで非常に人気があります http://php.net/manual/en/book.memcached.php

同様の解決策は、sqlite共有メモリデータベース http://www.sqlite.org/inmemorydb.htmlを使用することです。

于 2012-12-25T21:10:08.900 に答える
2

私の理解では、あなたのページは単語の不変リストの辞書を保持することになっています。単語のリストが不変で結果の辞書も不変である場合、ページのコンテンツ全体をキャッシュしてみませんか? これにより、すべてのユーザーが一定のアクセス時間を確保できます。

この使用例の一般的なパターンは、 memcachedなどのデータストアでのルックアップに適した、単語のリストをキーに計算することです。あなたにとってパフォーマンスは重要であると思われます。この場合、データストアへの 1 回の読み取りラウンドトリップであり、ページを表示するための処理はほとんど必要ありません。

ユーザーが単語リストを操作できる場合は、キャッシュされたページを無効にするときです。ここでも、データストアへの 1 回の書き込みラウンドトリップが必要です。

于 2012-12-25T21:26:17.877 に答える
1

MongoDBのようなNoSQLデータベースはあなたのニーズに非常に適していると思います。より詳しい情報:

于 2012-12-25T21:15:07.510 に答える
0

「ロードごとに数千回のルックアップ」を処理するデータベースの何が問題になっていますか? そのような目的で設計されたものです。

適切なインデックスを使用してデータベース ソリューションを実装すれば、問題ありません。

于 2012-12-25T21:21:25.043 に答える