把最近尝试由innodb转为infinidb时,建表语句遇到的问题罗列一下。
Server version: 5.1.39 Calpont InfiniDB 4.0.1-1
- 去掉所有AUTO_INCREMENT子句,包括列定义中的,以及创建表语句结尾的AUTO_INCREMENT=1234。
- 去掉所有KEY、UNIQUE KEY、PRIMARY KEY子句
- 去掉所有分区定义(infinidb有自动分区,可以按列值的范围来清理)
- timestamp换成datetime(也意味着timestamp自动更新日期的属性不能使用了)
- time类型不支持,换成datetime的话,可能需要应用修改
- 列定义中的CHARACTER SET utf8 COLLATE utf8_unicode_ci不支持,要去掉
- 日期时间类型的非法日期不能做作为default值,比如DEFAULT '0000-00-00 00:00:00',以及'2013-00-00 00:00:00',都会报错
-
varchar NOT NULL DEFAULT ''不允许,因为字符串类型中,''与NULL被认为是相同的
本次使用的是直接下载的二进制版本,不支持innodb。目前想到的策略是小表采用myisam,大表使用infinidb,尽量避免修改应用。
同时使用两个引擎,需要看一下文档中的Cross-Engine Table Access,貌似要配置,我还没试。
再者,如果是用infinidb做出一个slave的话,可能要注意mysql5.6的binlog_checksum参数。主库如果是mysql5.6的话,要把binlog_checksum设置成none。因为infinidb使用的mysql版本较低,不支持这个特性。
压缩比:貌似infinidb没有在这方面专门下功夫,但由于没有了索引,infinidb还是比较节省空间的。本次测试与innodb占用空间的比大约是1:3
delete、insert、update是支持的