助けてくれてありがとう。
背景- 呼び出し元が到達しようとしている宛先を把握する必要がある PHP スクリプトを作成しています。テレフォニー プレフィックスは、宛先を識別する文字列です。呼び出しごとに、プログラムは文字列に一致する最長のプレフィックスを見つける必要があります。たとえば、番号 30561234567 は 305 と一致しますが、3057 または 304 とは一致しません。3056 が存在する場合、それが優先一致となります。
いくつかのデータ構造を調査した結果、各ノードが数字を格納し、他の 10 個の可能な選択肢へのポインターを含むツリーが理想的であると思われます。これは配列の配列として実装できます。スクリプトは 3 をチェックし、そこで配列を見つけ、次にその新しい配列で 0 をチェックし、別の配列を見つけ、配列ではなく値が見つかるまで繰り返します。この値は宛先 ID (スクリプトの出力) になります。
要件- パフォーマンスは非常に重要です。これらのプレフィックスのチェックに時間がかかると呼び出しが遅延し、各サーバーは大量の呼び出しを処理する必要があるため、データ構造をメモリに格納する必要があります。現在、約 6000 のプレフィックスがあります。
問題- サーバーが呼び出しを受信するたびにスクリプトが実行されるため、データを何らかのキャッシュ サーバーに保持する必要があります。memcached と APC (Advanced PHP Cache) を確認した後、[はるかに高速][3] (ローカル メモリ ストア) であるため、APC を使用することにしました。
私が抱えている問題は、配列の配列が最大 10 配列の深さになる可能性があり、非常に複雑なデータ構造になり、オブジェクトとしてキャッシュに追加すると、逆シリアル化に長い時間がかかることです。
ただし、すべての配列を個別にキャッシュに追加すると (配列 3 の場合は 3、配列 30 の場合は 30、そのパッチに続く配列の場合は 305 などのように、簡単に見つけられる論理命名構造を使用して...) 私はキャッシュからさまざまな配列を何度もフェッチする必要があり (呼び出しごとに最大 10 個)、キャッシュにヒットする頻度が高くなりすぎます。
私はこれを正しい方法で行っていますか?多分別の解決策がありますか?それとも、私が提案した方法の 1 つが他の方法よりも優れているのでしょうか?
ご入力いただきありがとうございます。
アレックス