リレーショナルデータにデータベースを使用し、大きなバイナリBLOBをファイルシステムに格納することを選択した場合、どうすれば2つを統合できますか?このプロセスはどのように機能しますか?
私はデータベースが対応するblobへのディレクトリパス/リンクを保存する必要があることを知っていますが、誰かが詳細を教えてくれますか?たとえば、安全な/ tmpの場所でバイナリのウイルスチェックを最初に実行し、それを実際のストレージの場所に移動して、dbのパスを更新するシェルスクリプトが必要だと思います。ただし、オペレーティングシステムからこれを行うには、ディレクトリに変更があったかどうかを定期的に確認し、アクションを実行するスクリプトが必要です。 DB内からシェルスクリプトを実行することは可能ですか?
または、MySQL/Postgresでこのようなこと(ファイルシステムストレージと統合)を行うためのより良いツールはありますか?
「大物」プレーヤーは、画像を同じマシンに置くことすらしません。代わりに、「イメージサーバー」がグローバルに分散されており、読み取り専用イメージを送出するように最適化されています。彼らの場合、分散処理の利点は、時々生じる不整合(存在しないイメージへのリンク、またはその逆)を上回ります。さらに他のマシンは、ウィルスチェック、スケーリング、EXIFの除去などを処理します。
MySQLは4GBより大きいblobを保存できません(はい、できます(should)チャンクで保存できます)。 16MBでも、問題が発生する可能性があります(レプリケーション、チューニングなど)。
メタデータのスキャンがあり、行に大きなブロブがある場合、サーバーは多くの時間を牛のパティを踏み越えます。 「垂直分割」は、この問題を回避するためのアプローチです。 1つの実装では、サムネイルとメイン行のEXIFデータから始めました。結局、「牛のパテ」の問題を発見し、これらの2つのブロブを並列テーブルに入れるように変更しました。それは著しく速く走った。
どちらの方法でも実装しました。コインを投げて、どちらをするかを決めます。 6か月間の決定について考えてから、他のメカニズムへの変更を検討してください。その間、最小限の手間で変更できるようにコードを設計します。