MySQL

2012-03-16, mysql discuss

BLOB利用について考察

データベースのレコードに画像やファイルを保存したいケースがあります。その際に、「1.BLOB型のフィールドに入れる」或いは「2.任意のディレクトリに格納し、関連付ける」のか、どちらの方法を採用すべきでしょうか。

1.の場合、データベース内に情報が一元化されるため、バックアップやレプリケーションが容易であるというメリットがあります。反面、単に画像をhttpで配信したい場合でもヘッダやステータスコード(特に304)を自力で適切に返してあげる必要があるなど、通常の利用は面倒になるというデメリットもあります。

2.の場合、例えば格納先のディレクトリ名は別途定義しておいて、ファイル名、或いは拡張子などをレコードに格納することになります。メリット・デメリットは1.の場合と逆になり、バックアップの際などにはデータベースと別個に扱う必要が出てきます。また、全てのレコードに対してファイルが整合性を持って存在しているか等のチェックも必要になってくる場合があります。

結論は出ていません(ケースバイケースです、と言っても良いのですが、同じ事なので)。

ちなみに、MySQL5.1の場合、BLOB型にはサイズの制約があるので注意が必要です(どうやらこれはTEXT型にも同様に言える事のようです)。

BOLB 2 ^ 16 = 約65K
MEDIUMBLOB 2 ^ 24 = 約16M
LONGBLOB 2 ^ 32 = 約 4G

参考URL

この記事は役に立ちましたか?