2009-08-26 11 views
0

私のWebアプリケーションは、Webサーバー上のディスク上のXMLファイルに製品情報を格納します。これは、いくつかの製品に当てはまる場合はまったく問題ありませんが、大量のファイルが問題を引き起こす可能性があると私は心配しています。ウェブサーバー上でのデータファイルの格納方法

だから、20,000個の製品があるとします。これは、ディレクトリ内に20,000個のXMLファイルがあることを意味します。私はWebサーバーのディスクストレージインフラストラクチャに精通していないので、アクセス速度の大幅な低下や過剰なディスクの断片化など、多くのファイルが問題を引き起こしますか?ストレージサーバーも断片化しているのですが、断片化はサーバー上で心配する必要がありますか?

私はxmlファイルを個別に保つことをお勧めします.HTML経由で静的コンテンツとして直接アクセスできるため、より高速なアクセス速度とキャッシュが得られます。代わりに、大きなバイナリデータファイルを作成し、そのファイル内に各製品データxmlをバイナリモードで格納してから、サーバー側スクリプトを使用してその大きなデータファイルからxmlを抽出します。 (はい、データベースに保存することはできますが、それは私が興味を持っているケースではありません)

+0

断片化とアクセス速度が問題になる程度は、保存するファイルシステムによって異なります。 Unix/Windowsですか?どのようなタイプのファイルシステムを使用していますか? –

+0

さて、私の主なターゲットは古典的な共有ホスティングアカウントです。私のアプリケーションはPHPなので、ほとんどの場合、マシンはUnixになります。 ファイルはそれぞれ25-50KBと小さく、おそらく100KB以下の小さいファイルです。負荷や使用量に関しては、平均ロードや中間レベル、高レベルの場合はおそらく選択肢がなく、単にそれらのファイルをデータベーステーブルに格納すると思っています。 –

答えて

-1

ファイルのサイズはどのくらいですか? 1秒あたり何ヒットですか?各ファイルの相対的な人気は?ディスクは何本ですか?どれくらいのRAM? RAIDを使用していますか?

基本的にはそれに依存します。

+0

これは解答の試みでもありません。異なるシナリオについて説明してみてください。 –

+0

私の主張は無回答です - これは非常に主観的な質問です。いくつかのアプローチを試さなければ意味のある結果が達成されないほど多くの要因に依存します。 – nfm

0

Berkeley DB XMLデータベースシステムを見てください。 DBのすべてのACIDの利点を得ながら、ネイティブXMLを維持することができます。

ディスクIOは、最もコストのかかる操作の1つです。

リンク:http://www.oracle.com/database/berkeley-db/xml/index.html

+0

提案していただきありがとうございます。これは、私が大きなファイルにファイルを保存すると言ったときに私が言及していたものです。オラクルのソリューションは本当に便利ではありません。私のコードでは、PHPの標準的なインストールの他に、サーバーの要件はありません。 もしあれば、Oracle XML DBと同じ目標を達成できる純粋なPHPソリューションがあれば興味があります。それ以外の場合、私は自分自身のラメのバージョンを書く必要があります。 –

0

良いアイデア任意の特定のディレクトリにあるファイルやディレクトリの数を制限します。

XMLファイルごとに固有の識別子がある場合は、その識別子を使用するフォルダ構造を作成することをお勧めします。

00 \ 01 \ 23 \のProduct.xml

\

製品および製品019384はに格納されている:

製品000123に格納されている01 \ 93 \ 84 \製品\

製品。 xml

これは、特定のフォルダ内のアイテム数を100に減らすことができます。これはかなり合理的です。

希望に役立ちます。

0

多くの製品をお持ちの場合は、何らかのデータベースシステムを使用することを強くお勧めします。あなたの主な関心事がキャッシュされている場合は、caching methodsがあり、データベース駆動型システムで静的なパフォーマンスを提供します。さらに、あなたの会社が管理する製品が20,000個あるところにいる場合は、データベーステーブルの管理が最も不安です;

+0

私は、キャッシングが本当に重要な問題ではないので、最初からデータベースを使用するのが最善の解決策であることを知り始めました。 –

+0

ええ、それはあなたがかなり少数の製品を持っている間におそらくそれを行うべきです。この方法では、インポートのオーバーヘッドは小さく抑えられます。 –

0

データベースがあります。外部依存関係が必要ない場合は、sqliteを使うことができます。これはphpに組み込まれており、現在のバージョンのphpではデフォルトで有効になっています。

基本となるデータストアは、通常は単一ファイルです。

関連する問題