データベースがディスク上のファイルよりも本質的に安全だと考えるのは間違いです。結局、データベースはファイルです。また、通常はMySQLサーバをバストする方がシェルを介してマシンにアクセスする方が簡単です.MySQLはパスワードを使用し、適切に設定されていればシェルはSSH鍵のみを使用します。
その他の懸案事項は、データベースにバイナリデータをより多くロードするにつれて、適切にバックアップすることはかなり高価になることです。 MySQLは差分バックアップを非常にうまく行いません。一方、ディスク上のファイルは、rsync
のようなツールを使用して素早く効率的に複製します。
ファイルシステムは、驚くことではないが、大量の任意のバイナリデータを格納するのに非常に優れています。リレーショナルデータベースはそうではありません。さらに、オペレーティングシステムレベルでは、ファイルをディスクからできるだけ効率的にサービスを提供するために多くの作業が行われています。
- ファイルを開く:
はここでコンピュータがディスクからファイルを取得し、それをネットワークに送信するために行う必要がありますものです。
sendfile
のようなシステムコールを作成します。
- カーネルは、ディスクからの読み取り、ネットワークデバイスへの書き込みを処理します。
- オープンMySQLの接続をして認証:
ここでは、MySQLのようなデータベースからそれを送信するためにしなければならないものです。
SELECT file FROM tablename WHERE id=?
- のようなコマンドを作成し、MySQLバイナリプロトコルでエンコードし、ネットワーク接続を介してMySQLサーバに送信します。これはローカルでもリモートでもかまいません。遠隔の場合はさらにオーバーヘッドが関係します。
- サーバーはコマンドを受信して解読し、まずコマンドを解凍します。
- サーバーはコマンドを解析して解釈する必要があります。
- サーバーは、インデックスファイルと同様に問題のテーブルを開いて、そこでデータの場所を探します。
- 見つかったら、データはMySQLの行形式からデコードし、次にMySQLの結果形式で再エンコードする必要があります。
- そのデータは、ワイヤを介してクライアントに返送されます。
- クライアントは、結果セットを受信してデコードする必要があります。
- クライアントは、関連するバイナリ情報を抽出する必要があります。
- クライアントは、ネットワーク接続をバックアウトするために、そのデータを別のバッファにコピーする必要があります。
- カーネルは、そのデータをユーザ空間からカーネル空間に転送し、それをネットワークドライバに送る必要があります。
これはかなり多くの作業であり、ユーザスペースとカーネルスペースの境界を何度も超えているため、必須のコピーが多数含まれています。
ドキュメントストアが必要な場合は、MySQLのようなRDBMSではなくRiakのように見てください。