0

他のテーブルは定期的に大きな BLOB を取得する必要がないため、foreign_key フィールドと BLOB 列だけで構成されるデータのテーブルがあります。

では、データ ブロブ自体の場合、その長さは重要でしょうか? たとえば、キャッシュされた Web ページを保存したい場合...ほとんどのページでは、BLOB の 65KB の制限で十分です...しかし、必然的に、100KB のデータを持つページが存在しますが、BLOB の次のサイズである MEDIUMBLOB は16MB:

http://dev.mysql.com/doc/refman/5.0/en/blob.html

データブロブ フィールドを BLOB から MEDIUMBLOB に変更すると、行の複数のレコードであれ、大規模なバッチ操作であれ、あらゆる種類の取得操作にどのような影響がありますか? 「サイズが 16MB のレコードを取得するのと、64KB のレコードを取得するのとでは、どのように異なるのでしょうか?」という意味ではありません。つまり、これらのフィールドの 90% には 60K のデータしかなく、残りは 65K の制限を超えている可能性があります。

これを尋ねる別の方法: 私が扱っているデータが、BLOB サイズの 50% のブロブと MEDIUMBLOB の 50% で構成されている場合、2 つのテーブルを作成し、そのようにデータを分離する必要がありますか? それとも、1 つの MEDIUMBLOB テーブルを作成し、そこにすべての小さな BLOB を格納することとほとんど違いはありませんか? (これにより、データベース アクセス コードが簡素化されます)

4

1 に答える 1

2

BLOB と MEDIUMBLOB の違いは、基本的に長さを 2 バイトまたは 3 バイトでエンコードすることです。それ以外の場合は、特定の行に格納したコンテンツの長さのみが格納されます。

したがって、列を MEDIUMBLOB として宣言する必要があります。

一部のクライアント データベース アクセス ライブラリ (PHP など) は、列が返す可能性のある最大の長さを保持するためにバッファーを事前に割り当てます。たとえば、LONGBLOB を取得しようとすると、PHP が爆発することがわかりました。これは、PHP の最大メモリ制限よりも大きい 4GB のバッファーが事前に割り当てられているためです。

于 2013-07-23T20:55:45.270 に答える