1

私はアプリケーションを書いています、そして私は多くの異なる言語でいくつかの辞書の値を持っています。GetTextを使用できることはわかっていますが、AFAIRファイルは編集後にコンパイルする必要があり、ユーザーに辞書を編集させたいので、サーバー上で.moファイルを再コンパイルできません。いくつの言語が使われるかわからないので、解決策は弾力的でなければなりません。

私はデータベースを設計して、それがうまく機能し、スキーマが正常に見えるようにしましたが、すべてのディクショナリ値に対して2つの結合があるため、ソリューションはそれほど速くありません。

そのため、辞書の値を一度保存​​し、値を編集してから更新することを考えています。残念ながら、PHP静的変数はリクエストの最後に終了するため、使用できませんでした。ユーザーごとにDB呼び出しを行う必要があるため、セッションを使用したくありません。理想的には、Javaと同じように静的変数を使用したいと思います。静的変数は、アプリケーションがJVMに存在する限り存続します。

すべてのユーザー(ユーザーごとではない)に対して、いくつかの変数(私の例では辞書、辞書エントリなど)を長期間(要求ごとではなく)保存するための最良の解決策は何ですか?

クラスのようなものを作成しDictionaryValues、一度シリアル化してから、リクエストごとに逆シリアル化することを考えています。誰かが辞書を編集するたびに、オブジェクトは再びシリアル化され、古いシリアル化されたオブジェクトを置き換えます。もちろん、辞書の値が読み取られる頻度と比較して、編集が行われることはめったにありません。

これは良い解決策ですか?オブジェクトをシリアル化してディスクに保存するか、データベースに書き込む必要がありますか?どちらが速いですか?

多分あなたはその問題のより良い解決策を見つけますか?

4

3 に答える 3

5

PHPAPCを試すことができます。高速で使いやすいです。オブジェクトをシリアル化/逆シリアル化し、それらを簡単に保存/取得できます。

分散環境では、 memcacheを使用して同じ機能を実行できます。

于 2009-11-12T21:42:30.213 に答える
2

memcache / APCが多すぎるか不可能な場合のいくつかのオプション:

データベース値を頻繁にPHPファイルに「コンパイル」して、それを含めることができます。これは、解析および処理の面で最速になります。

各ページにすべてのディクショナリ値が必要ではない場合(おそらくそうではありませんか?)、JOINなしで機能するキャッシングテーブルを使用することをお勧めします。これは、フットプリントの観点から最適なソリューションです。

于 2009-11-12T21:49:08.837 に答える
1

いくつかのオプションがあります:

  1. 共有メモリ(shmopまたはmemcache)を使用できます。
  2. ファイルまたはデータベースにキャッシュできます-PEAR ::Cache_Lite(または@jldupontが提案するAPC )を試してください
于 2009-11-12T21:43:52.650 に答える