mycat分布式mysql中间件(其他高级特性)

mycat其他特性使用与使用此场景



load data 标准语句:

load DATA local INFILE 'd:\88\qq.txt' IGNORE INTO TABLE test CHARACTER SET 'gbk' FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'(id,sid,asf) ; 
注意:导入时候必须加列枚举,而且是放在最后面。

配置默认节点:

<schema name="user" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" > ... </schema>


如上如果必须要分片的表只需要在schema里面配置默认节点,这样未配置的表都会走默认分片 dn1。


事务处理:

在用 spring 管理事务时候,特别是hibernate、jpa 这类框架,往往是有时候用@Transactional 这种声明注解,如果设置读写分离,会导致

都走了写节点,这时候要对read 操作不要配置事务,@Transactional (readonly=true) 也不行。


多个Mycat节点 负载:

在单个mycat压力大,从高可用或者负载角度来做多个mycat是正常的业务考虑,但是由于目前mycat(1.4及其之前)未做集群处理,可能如果单个

mycat做了主从切换,在多节点下可能会出现多写问题,即一个节点写主,另一个却写从,导致数据不一致问题,这时候需要注意主从的切换,建议

采用1.4的主从同步情况做切换,或者一个节点自动切换,另外节点手工切换,压力大一般部署(2-3个mycat即可)。


checkSQLschema="false" :

checkSQLschema 是将 sql中库过滤的例如:

select * from user.tuser t where ....;

默认为false 即不过滤,用默认逻辑库schema,如果应用跨schema操作,或者应用端加了database.table需要改成true,防止出现找不到表,因为,

默认库是发送后端。


联合主键与多分片维度:

联合主键不支持,强烈推荐用主键。

多分片字段拆分不支持。如果必须有,通过加一个冗余字段=多个字段 兼容。