カスタム検索

2009年6月15日月曜日

Grails+MySQL Clusterでのトラブル

Grails+MySQL Clusterでのハマったのでメモメモ
(Grailsじゃなくても起こる問題なんだけども)

開発環境時はMyISAMでうまく行っていたのですが、サーバへアップした時にテーブルが作成出来ずにエラーとなりました。
何度やっても特定のテーブルだけが作成されなかったのでMyISAMで作成したDBをダンプアウトしてSQLで流し込んでみたら「Row size too large」だとかなんとか・・・

Google先生に聞いてみたら以下で同様なトラブル事例が
http://forums.mysql.com/read.php?25,33433,33433

Clusterではサイズ指定されたフィールドが 8052バイトを超えるとNGらしいです。

UTF-8では1文字3バイトなのでGrailsのDomain上で、
Stringのフィールドをmapping指定せずに作った場合 varchar(255) で1フィールド辺り768バイト使用されます。
なのでString指定のフィールドを作る場合は極力mappingを指定するようにしましょう。


class Book {
static mapping = {
name type:”text”
}

String name
}

1 件のコメント:

Mikiya Okuno さんのコメント...

TEXTを使うとデータへのアクセスが2段階になるからちょっと性能落ちるべよ。アルファベットしか使わないカラムをlatin1にしたり、文字数を減らして8KBに収まるように工夫するのもアリだよ。