2011-01-11 11 views
2

特定の外国語の出現をブログ投稿で確認してから、それらの単語をサウンドファイルにリンクして再生できるようにします。このデータを保存してトラバースする最も効率的な方法は?

私はサウンドファイルを持っている2500語のXMLファイルを持っています。このリストを格納してトラバースする最も良い方法は何ですか?リストは変更されない可能性が高く、アーカイブページなどに抜粋が表示されていないときは、各ブログ投稿で機能が実行されます。

XMLファイルは350KBです。これはPHPにsimplexml_load_fileでロードしています。私はこれが少し大きかったと思ったので、単語の索引付き配列を含むPHPファイルに変換しました。ファイルのサイズは約60KBになりました。

ファイルのサイズや、データを検索するのにどれくらい時間がかかるか心配する必要がありますか?これを行う良い方法はありますか、それともデータベースに最適でしょうか?どんな助けもありがとう!

+0

memcachedを使用してデータをキャッシュする方法はありますか? – Sairam

答えて

3

blogpostに対するXMLファイルの解析と照合が適切な時間内に行われた場合、最適化する必要はありません。重大な悪影響が発生した場合に最適化します。

最も簡単なアプローチは、処理されたページを単にキャッシュすることです。ブログ投稿または単語リストが変更されるたびに、キャッシュを無効にするので、次回呼び出されるときに新たに処理されます。

+2

+1 - それは特にデータが巨大ではないキャッシュ – ajreal

0

ファイルをPHP配列に変換することは素晴らしいことです(独自の拡張機能を作成しない限り、そのパフォーマンスよりも優れているわけではありません)。入力ファイルは小さくなるだけでなく、(他の操作に関連して)かなりCPUが重いXML解析ステップも処理しています。

アレイではすべてのデータを一度に読み込む必要がありますが、60Kで重大な問題はありません。

データの検索に関して、PHP配列は連想的なので、このようなシナリオではかなり良いパフォーマンスを提供します。

全体的に私はあなたのアプローチが正しいと言います。

+1

"かなりCPUが重い[...] XML解析ステップ" ...そしてそれはかなりCPU重いPHP解析ステップに置き換えられました。あるいは、PHPのインタプリタは何をすべきかを知っていると思いますか?実際には、Expatのような優れたXMLストリームパーサが、DBに値を格納すること以外にも、次善のソリューションになるかもしれません。 – Boldewyn

+0

@Boldewyn:真実なのは、PHPの解析コストです。私はそれがはるかに高速であると信じています(それ以外のものがあれば、350KBと60KBを解析します)。さらに、オペコードキャッシングにも適しています。経験に基づいて、私はこれが最終結果そのものをキャッシュする以外にも最良の方法だと考えています。 – Jon

+0

配列を解析するのに時間がかかるのではないかと心配しました。配列に単語が存在するかどうかを調べるために、基本的には "if(!empty($ words [$ match]))"を実行します。 – iamdarrenhall

0

ファイルに格納された単語の配列に基づく索引付けは、XMLでの検索より時間がかかります。

+2

は完全に間違っています。 – Jon

0

これに対する最も拡張性のある解決策は間違いなく、データベースを使用することです。これにより、大幅なパフォーマンス低下なしに膨大な量のデータを処理できるため、将来的にデータを追加した場合は、追加するのは簡単ではありません。この場合、sqliteを使用することができますが、これはインストールと設定の面ではほとんど必要ありませんが、かなり高速で強力です。

PHP配列(おそらくinclude/requireを使用しています)を使用しているソリューションは、かなり良いものです。私はそれを変更することについてあまり心配しません。ただし、XMLファイルを失うのは間違いありません。それは過度に労働集約的であり、遅いことです。

関連する問題