データベース内にファイルを格納するのは効率的ではないかもしれませんが、SQL Serverのようなデータベースには、データベースファイル自体に配置するのではなく、実際にローカルファイルシステムにファイルを格納するFileStreamsの概念があります。
私の意見では、これはプロジェクトにとって悪い考えです。
アップロードされたすべてのファイルを同じ単一のファイル内に保存する場合にデータベースが抱える問題とまったく同じ問題が発生します...そのため、一部のファイルはバイナリ/ラージオブジェクトではこれから離れ、代わりに代替方法をサポートしています。
対処しなければならない問題には、次のものがあります。
- 新しくアップロードされたドキュメントを保存するために、バッキングファイルに追加のディスク容量を割り当てます。
- ストレージから「ファイル」を完全に削除し、バッキングファイルのサイズを変更/圧縮します。
- マルチユーザーアクセス/ロック。
- 障害回復。ドライブで不良ブロックに遭遇し、それがバッキングファイルをホースでつなぐ場合など。
- トランザクションサポート。
項目1と2を使用すると、データストアに「ファイル」を書き込むのにかかる時間が長くなります。アイテム3、4、および5は、ネットワークファイルシステムですでにサポートされているため、ホイールを再作成するだけです。
つまり、独自のファイルシステムを作成するか、独自のDBMSを作成する必要があります。どちらも、実際のアプリケーションの99%で「グッドプラクティス」とは見なしません。あなたの目標がSeagateで働くことであるなら、それは価値があるかもしれません。しかし、それでも彼らはおそらくあなたを面白く見ているでしょう。
ファイルストレージの最も効率的な方法に本当に興味がある場合は、SANアレイを購入し、データベース内のファイル/場所へのポインタを保持したまま、SANアレイにファイルをプッシュするだけです。バックアップが簡単で、ファイルをすばやく保存できます。開発者が独自のファイルシステムの作成方法を理解するのに時間を費やすよりもはるかに安価であり、将来の開発者が100%サポートして理解できることは確かです。