私はJavaアプリケーションを構築しようとしています。これは、200MBを超える可能性のあるビデオファイルを格納および取得するリモートデータベースに接続します。これらのファイルをLONGBLOBとしてMySQLに直接格納/取得できます。一般に提供される1つの解決策は、ファイルシステムにファイルを保存し、データベースにロケーションファイルを保存して、サーバーから直接提供することです。
私の問題は、私はストレージに非常に慣れていないため、どのようにそれを実行するかについて完全に確信が持てないことです。ビデオファイルが要求されたら、フロントエンドにFTP接続してから、その接続を介してそのビデオを配信する必要がありますか?または、ファイルシステムからプルするように言ったとき、人々は通常他のことについて話しているのですか?
MySQLを呼び出すためにJavaおよびJDBCを使用しています。
いいえ、ファイルをファイルシステムに直接保存し、相対パスを保存します。これにはいくつかの利点があります:
Last-Modified/ETag
およびIf-Modified-Since/If-None-Match
ヘッダーによるネイティブHTTPキャッシングにより、クライアントリソースを節約1、ファイルがファイルシステムに保存されている場合は、それらが公に利用可能なディレクトリにあることを確認する必要があります(もちろん、そうである必要があります)。次に、これらのファイルをパスからファイルシステムから直接提供します。
アプリケーションが/home/dyslexit/www
にあるとします。ここで、www
はブラウザから公開されているディレクトリです。 www
ディレクトリ内に、新しいディレクトリを作成します。 uploads
。これも公開されており、ファイルの保存に使用されます。その後、アプリケーションのクライアントにファイルを提供する場合、URI:https://domain.com/uploads/videos/my-video.mp4
を提供するのと同じくらい簡単で、サーバー上の実際の/home/dyslexit/www/uploads/videos/my-video.mp4
ファイルに変換されます。
ただし、構造を直接コピーする必要はありません。ファイルが要求されたときにHDDから直接ファイルを提供する代わりにそれを必要とする場合は、代わりに、リクエストをリクエストしているユーザーの権限を確認するスクリプトにリクエストを転送し、リソースへのアクセスまたはそれらへの転送を許可されていない場合はアクセスを拒否することができますファイルはそれぞれどこかに配置されます。
1 これは、ファイルをデータベースに格納するが、追加のセットアップとカスタムヘッダー操作が必要な場合にも実装できます。ファイルシステムから直接ファイルを提供する場合、これはほとんどがネイティブです。
どちらの方法でも、データストレージシステムを作成するなど、ビジネス目標が実際にファイルを保存することではない場合、それはビジネスの副次的な効果にすぎません(Facebookのようなアプリケーションでビデオが必要だとしましょう)。 Amazon S3など、この機能専用のサードパーティシステムにファイルストレージを完全に外部委託することをお勧めします。