SQLのバイナリデータアップロードにおける限界
MySQLではMyISAMテーブルにおいて1テーブルのデータサイズに限界がある。
Mysql3.22までは4G制限だったが、現在のMySQLでは 800万テラバイト(2^63 バイト)と実質限界が存在しない。
だがしかし、今度はOSのラージファイルサポートの問題があり、1テーブルにつき一般的なLinuxでは2Gの限界がある
http://dev.mysql.com/doc/refman/4.1/ja/table-size.html
- 以下サイトより引用
Linux-Intel 32-bit | 2 GB、LFS 使用の場合はそれ以上 |
Linux-Alpha | 8 TB(?) |
Solaris 2.5.1 | 2 GB(パッチにより 4GB まで可) |
Solaris 2.6 | 4 GB(フラグにより変更可能) |
Solaris 2.7 Intel | 4 GB |
Solaris 2.7 UltraSPARC | 512 GB |
が、これはあくまでMyISAMテーブルの場合。
じゃあ、大きなファイルはファイルとしてローカルにファイル保存するべきかといわれるとそうでもない。
InnoDBテーブルで保存すると8k〜64kbyteのデータベースページとして保存される。
これにより、ファイル数制限*8*84kbyteが上限となる。
http://dev.mysql.com/doc/refman/4.1/ja/innodb-restrictions.html
設定によって結構パフォーマンスがかわるようでしっかりやったほうがよさげ
http://mysql.holywar.net/doc/refman/5.1/ja/innodb-configuration.html
わかった事
- とりあえずMyISAMのテーブルにLBLOBを突っ込んだりはやめたほうがいい
- バイナリは単体で別テーブルをInnoDBとして作成し、保存したIDをMyISAMのテーブルに保存するのが良い
- acts_as_attachmentのセットアップ手順でMigrationするとちゃんとバイナリデータだけ別テーブルにInnoDBとして作成されるので安心。
以下にも情報あり
http://q.hatena.ne.jp/1164104844