2012-01-25 25 views
1

私はxmlフィードをcronジョブを通して別のサーバーからサーバーにフェッチしてファイルとして保存し、私のWebサイトはそのxmlファイルを使ってデータを表示するプロジェクトに取り組んでいますウェブサイトでビッグXMLデータを保存するのに最適な場所

しかし、問題は、xmlファイルが2つの大容量(4MB)であり、ユーザーがサイトにアクセスするたびにサーバーが(同じ場所から)ファイルを取得して解析し、ユーザーをサーバーするためです。サーバーは1000回(それは解決したいオーバーヘッド)を引きます。

私はmemcacheを使用しようとしましたが、それも2MBに制限されています。

大きなxmlをXMLファイルとして保存するかmemcacheで保存するのが最も良い方法は誰か教えてください。

+0

新しいXMLフィードは3~10分後にフェッチされ、古いものを置き換えます – MZH

+0

これはXMLフィードの内容によって異なります。それがカテゴリを含む製品フィードであった場合、カテゴリー別に小さなファイルに取り込んだ後に分割することができます。あるいは、スクリプトでxmlをデータベースに解析して、検索するものをより選択的にできるようにする必要があります。どのような種類のコンテンツを扱っていますか? –

+0

非常に大きな製品xml(約4MBのファイル)開いているときにしばらくの間ブラウザをハングアップし、問題がカテゴリを変更し続ける場合は、 – MZH

答えて

2

データベースからのユーザーにのみサービスを提供します。

データが一貫していることを確認するために、基本的なバージョン管理を実装できます。現在のバージョン番号をどこかに保存します。新しいXMLを取得するたびに、次のバージョンをデータベースに格納し、現在のバージョン番号を更新して定期的にクリーンアップします。

+0

ありがとうあなたは、データベースに保存する必要があります、1つのテーブルの行が非常に大きいです(キロバイト)? – MZH

+0

レコード用のサーバー、3〜5分ごとにxmlを更新するので、すべての製品のすべての行としてdbに保存することはお勧めできません。 1つのカテゴリの1行と同様に、すべてのカテゴリxmlをdb行に保存し、各行はKB単位のデータを保持します – MZH

+0

個々のxmlファイルは約60,000行です。内容を別のテーブルに分割してデータベースに挿入するのはいい考えですが、毎日1000個のXMLファイルがあると言います。大きなフィールドにすべてをダンプし、後でそのテキスト/文字列をxmlファイルとして解析し、結果を返します(ユーザーが照会するたびに)。私はそれが毎回そのような巨大なデータを解析するオーバーヘッドを作成することを知っていますが、確かにそれはデータベースの行の制限を解決します。 2つの中で最も良い選択肢は何ですか、私は各行にそれらの値を挿入すると、私は行がなくなります。 – Pramod

0

あなたがいないMemcachedのようなメモリの制限を持つネイティブPHPのキャッシュシステムを実装することができ、これを読んで: http://www.the-art-of-web.com/php/buffer/

私は、データベースを作成するcronジョブを持ってフェッチして、XMLを解析しにすべてを挿入する
0

4MBのデータに対してmemcacheを使用するのは適切ではありません。また、すでにXMLファイルの問題が発生しています。 @oriによって返されるように、より良いオプションは、XMLデータをあるデータベースに格納し、データベースからユーザを提供することです。
このリンクを見つけるにはMySQL 5.5 Load XML Syntaxたとえば、XMLをデータベースに読み込む方法です。
このXMLをWebサービス(SOAPなど)として取得する場合は、更新されたデータのみを取得するオプションが必要です。この方法では、ダウンロード時間を節約できます。

+0

いいえ、ちょうどいいえxml soapレスポンス – MZH

0

しかし、問題は、xmlファイルは、(4メガバイト)の周りに大きな2であるとするたびにユーザーがサイトを打つことで、サーバが(ファイルを取得それを解析してユーザーをサーバーするので、1000ヒットすればサーバーは1000倍(解決したいオーバーヘッド)です。

したがって、ネットワークアクセスは既にキャッシュされていますが、これまでパージングをキャッシュしています。なぜパッシングもキャッシュしないのですか?これにより、XMLが変更されていないため、結果を表示するのに必要な時間が短縮されます。は解析されません。

速度が遅すぎる場合は、次に速度を改善する場所を探すことができます。各カテゴリ等をキャッシュする。コードを表示していない場合や、データを使って何をするかを具体的に説明している場合は、それ以上の提案はできません。

+0

いいえ私は何もキャッシュしていない、私はちょうど私のサーバーにそのxmlを保存し、誰かがレコードのためにサーバーをヒットしたときにそれを解析し、xmlは3-5分ごとにリフレッシュするすべての製品のすべての行としてdbに保存することをお勧めしません。 1つのカテゴリの1行と同じように、各行にはKB単位でデータが保持されます – MZH

+0

すでにXMLにディスクを格納しています:ネットワークをキャッシュするのでキャッシュと呼んでいますアクセス。これはファイルベースのキャッシュです。追加のキャッシュを追加することは理にかなっています(たとえば、提案するカテゴリ別にDBに格納して解析をキャッシュするなど)。あなたが何をするかによって、DB内の各エントリを正規化された形式に保つことができ、サイトがヒットしたときに簡単なDBクエリができるようにすることさえできます。まだ遅すぎる場合は、DBクエリを数分間キャッシュすることもできます。これはすべてあなたが何をするかによって決まります。最も長くかかる部分から始めて、キャッシュが最も効果的です。 – hakre

関連する問題