0

データベースに画像を保存するアプリケーションがあります。パフォーマンスのために、これが最善の方法ではないことがわかりました。

データベースからすべての「ブロブ」の抽出を開始し、それらを(仮想フォルダーを介して)データフォルダーに追加しました

問題は、既に 8000 個の BLOB が保存されていることです。それらを "data/< blobid >/< blobname.extension >" のようなフォルダーに配置すると、このフォルダーには管理可能な多くのフォルダーが含まれます。

ファイルを最適に保存するにはどうすればよいでしょうか。「data/< year >/< month >/< day >/< blobid >/< name >」のように作成日でグループ化します。また、ファイルがデータベースのツリーに保存されていることも付け加えておく必要があります。そのツリー構造をファイルシステムにマップする必要があるかどうか疑問に思っていましたが、唯一の問題は、ブランチを移動できることです。つまり、ファイルシステム上のブランチを移動する必要があります。

どんな助けでも大歓迎です。

グルツ、M

4

4 に答える 4

7

使用しているSQLServerのバージョンは何ですか?2008を使用している場合は、FILESTREAMデータ型を使用して画像を保存できるためです。これは、ファイルストアに保存するのと同じくらい効率的ですが、関連する煩わしさはありません。SQL Server2008Filestreamを使用したトラクションの取得を参照してください。

于 2009-11-09T14:27:24.230 に答える
1

簡単な戦略は、最初の [数] 桁に従ってグループ化することです。例えば:

1/
    2/
        123.blob
        129.blob
    5/
        151.blob
2/
    0/
        208.blob

そうすれば、ディレクトリ内に 10 個を超えるサブディレクトリが存在しないことがわかります。もちろん、(ディレクトリの) レベルを増減したり、レベルごとに桁数を増やしたりすることもできます。

より複雑で動的なシステムでは、必要に応じてサブレベルを作成できます。特定のディレクトリ内の BLOB の数が事前に設定された最大数を超えた場合、別の 10 個のサブディレクトリを作成してファイルを移動します。

于 2009-11-09T14:46:07.320 に答える
1

BLOB データ用のほとんどのファイル システムでは、多数のサブディレクトリが設定されます。たとえば、ID が 1 ~ 10000 の場合、次のようになります。

00/
    00/
    01/
    02/
        00020.blob
        00021.blob
        ...
    ...
01/
02/
03/
...

もう 1 つ質問があります。BLOB として管理するのがなぜそんなに悪いことなのですか?

于 2009-11-09T14:47:36.217 に答える
0

関連するツリー構造にファイルを保存する必要がありますか? そうでない場合は、ファイルに /YOURFOLDER/blobid_blobname.extension という名前を付けることができます。このようにして、アップロード フォルダーは、データ構造を模倣するのではなく、純粋にデータのリポジトリとして機能します。

于 2009-11-09T14:40:10.133 に答える