画像をデータベースに保存する必要がありますか? 多くの場合、イメージをデータベースではなくファイルシステムに保存することで、効率を大幅に向上させることができます。
データベースの外に画像を保存する
イメージをファイルシステムに保存すると、Web サーバー、または Amazon S3 やコンテンツ配信ネットワーク、memcached などのクラウド ホストから直接提供できます。
メタデータ
独自のデータベースでは、保存するのに適した情報 (IMHO) は、検索可能なファイル名 (ユーザーがその方法で検索する場合)、ピクセル寸法 (サイズで検索する場合、または画像の高さと幅を提供する場合) などの画像に関するメタデータです。 HTML で)、mime コンテンツ タイプ (役に立つ場合) など。
さまざまな種類の画像の説明については、各種類についてどのような種類の異なる情報を保存したいかによって異なります。
stiまたは複数のテーブル?
画像の種類は基本的に同じですか?[種類とは、Company、Profile、Machine などのようなものです] もしそうなら、列挙型フィールドを使用して、それらすべて (つまり、メタデータ) に対して 1 つのテーブルを使用します。データベースによっては、"company"、"profile" などの文字列名、または会社の場合は 1、プロファイルの場合は 2 などの int 定数を使用してこれを行うことができます。Django には継承を行う方法がいくつかあります。 . このパターン名は、Single Table Inheritance (STI) です。Django はこれを正確にサポートしていないと思いますが、検索すれば、実装方法の適切な範囲にたどり着くことができます。
あなたのイメージの種類は本質的に異なりますか? 画像のデータの種類が大きく異なる場合は、別のテーブルを使用してください。
私の知る限り、インデックスを持つ 1 つのテーブルを使用する場合と個別のテーブルを使用する場合の速度の違いは似ているはずです。どちらの場合も、画像行の範囲を見つけるための要求ごとに基本的に 1 つのルックアップがあるためです。確実にベンチマークできます。
干し草の山からの教訓
ちょっとしたコードを書く前に、Facebook がこれをどのように達成したかを読んでください。これは素晴らしい概要です。
http://www.facebook.com/note.php?note_id=76191543919