2009-08-30 22 views
0

悪いタイトルを残して申し訳ありません。ダウンロードしたファイルを保存する最も良い方法は何ですか?

私はウェブページを保存しています。私は現在、1つのXMLファイルをインデックスとして使用しています。 1つの要素には、ファイル作成日(UTC)、完全なURL(問合せ文字列およびそれ以外)が含まれています。また、ヘッダは別のファイルにあり、名前は同じですが特殊な拡張子が付いています。

ただし、40k(ヘッダーを含む)ファイルになると、XMLは3.5 MBになりました。最近、私はまだXMLファイルを保存して、新しいエントリを追加して読んでいました。しかし今、私はそれを記憶に残し、しばらくの間それを保存します。

ページをリクエストすると、XMLファイルのXPathを使用してURLが検索されます。エントリがある場合、ファイルパスが返されます。

ディレクトリ構造が です。\ www.host.com/ randomFilename.randext

だから私はより良い方法を探しています。

イム思考:あたり

  • 1つのXMLファイル。ドメイン(サブドメインを含む)。しかし、私はこれが面倒かもしれないと思う。
  • SVNを使用しています。私はちょうどそれをテストしましたが、私は大きなリポジトリに経験がありません。 svnを実行すると、ダウンロードごとに "パスをファイル"に追加し、完了したらコミットします。
  • カスタムファイルシステムを作成します。ここで、必要なものすべてを含めることができます。 POSTデータ。
  • URLからファイル名を生成し、何らかの形でクエリー文字列をフラット化しますが、大きなクエリーストリングはOSによって拒否される可能性があります。ヘッダーを付けておくと、それぞれの異なるクエリ文字列にマップされた複数のファイルを追跡する必要があります。面倒。そして私はそれがあまりにも遅く実行することを望んでいません。

複数のプログラムインスタンスは、異なるコンピュータ上で読み取り/書き込み操作を実行します。

私はディレクトリ/ファイルの方法に従うと、私は理論的にはその間にレイヤーを追加することができるので、それはその場でDotNetZipを使用します。しかし、再度、クエリ文字列。

私はちょうど方向または経験をここで探しています。

これらのファイルの履歴を保存する機能があるので、ローカルファイルが上書きされないようにすることができます。その後、どのバージョンを(日付別に)選ぶことができます。それは私がSVNを試した理由です。

答えて

0

リレーショナルデータベースまたはバージョンコントロールシステムをお勧めします。

データベースにファイル自体を格納するために、SQL Server 2008の新しいFILESTREAM機能を使用することができます。

+0

また、MySQLにはBLOB型があり、データベース内にバイナリデータを格納するためにも使用できます。 – Fiarr

0

2つのデータストアを使用します.1つはrawファイル用、もう1つはインデックス用です。

フラットファイルを格納するには、Berkeley DBが良い選択だと思います。キーはmd5やその他のハッシュ関数で生成できますし、ファイルの内容を圧縮してディスク領域を節約することもできます。

インデックスの場合、リレーショナルデータベースまたはLuceneのような高度なテキスト検索エンジンを使用できます。

関連する問題