8

私たちはかなり前に、SQL Server 内にファイルを BLOB として保存できる「既製品」のアプリケーションを購入しました。ある部門がこの BLOB フィールドを頻繁に使用したため、過去 6 か月でデータベースのサイズが 2 倍以上になったことがわかりました。その結果、アプリケーションは非常に遅くなりました。

私は、データベースから blob フィールドを削除し、ファイルを実際のファイル システムに保存するという任務を負っています。残念ながら、アプリケーションはデータベース内のファイル タイプを保存しません。データベースに存在するファイルを読み取ることはできますが、ファイルを保存する拡張子がわかりません。アプリケーションのサポート デスクは、このバージョンのソフトウェアのサポートを終了しており、データの抽出について私たちに連絡することはありません。残念ながら、私たちは彼らのソース コードにアクセスできません。

どんな提案でも大歓迎です!前もって感謝します!

4

7 に答える 7

7

最初の数バイトを見て、最も一般的なファイルの種類を把握できます

http://www.garykessler.net/library/file_sigs.html

于 2009-06-16T22:11:50.503 に答える
2

任意のタイプとして保存しないでください。拡張子なしのファイルとして保存します。それが何であるかわからない場合は、偽造しないでください。保存したアプリが要求した場合は、データベースから返されるのと同じ方法でファイル システムから返します。バイナリデータとして。データベースは、バイナリ オブジェクトがどのようなデータ型であるかを気にしません。あなたもすべきではありません。

于 2009-06-16T22:12:32.153 に答える
2

TriD http://mark0.net/soft-trid-e.htmlを使用してみてください。

ファイルをスキャンし、拡張子を特定しようとします。

于 2009-06-16T22:13:54.867 に答える
1

UrlMon.dll で FindMimeFromData() 関数を使用できます (pinvoke を使用)。

例についてはこのページを、関数のドキュメントについてはこのMSDN ページを参照してください

于 2009-06-16T22:16:20.493 に答える
0

もう 1 つのオプションは、データベースを物理的に分割することです。blob フィールドを含むテーブルを、別のハードディスク/スピンドルに保存できる別のデータベース ファイルに保存できます。BLOB テーブルを含むディスクは、RAID 0 または RAID 10 にすることでさらに最適化できます。

これにより、物事がスピードアップする可能性があります。また、このアプローチにより、アプリケーション ロジックを変更する必要がなくなります。

于 2009-06-17T01:57:15.883 に答える
0

この情報が人間が判読できることをどのように判断しますか?

ファイル拡張子の目的は、ファイルを開くための特定のソフトウェアを関連付けて、.txt ファイルをダブルクリックしたときに notepad.exe がそれを処理できるようにすることです。

データベースの負荷を軽減するためにファイル システムにのみ書き込む場合は、特定の拡張子は必要ありません。ソフトウェアを関連付ける場合は、適切な拡張子を使用してください

于 2009-06-16T22:14:32.727 に答える
0

あなたの言葉で「...私は...を任されました...」-これは、データベースで何らかの最適化を実行することで解決できる問題ではありませんか? ソース コードがなく、サポートも提供されていないレガシー アプリケーションをハッキングすることは、できる限り避けたいことです。

ですから、ここで問題を見てください - アプリケーションの遅さ。では、なぜ遅いのでしょうか。データベースのインデックスでは解決できないことがありますか?

BLOB をファイルシステムに抽出する必要がある場合、なぜファイルの形式が関係するのでしょうか? 確かに、アプリケーションはファイルを取得するためにデータベースでクエリを実行するように設計されています.BLOBをファイルシステムに抽出すると、どのように役立つでしょうか?

余談ですが、私は通常、Unixfileコマンドを使用して、マジック ナンバーでファイルを識別します。

于 2009-06-17T06:06:46.533 に答える