这算是首次开博了。从事IT这么多年一直没有写博的“好习惯”,以往碰到的问题,耗费的精力解决,但随时间都“磨灭”了。下决心开始写“时光记录”了。
为了满足项目最新分布式数据框架,主要目的水平切分,垂直切分,读写分离,可扩展数据架构。碰到都是“新”技术。
这次要整理Spring3.1.1和Mybatis3.1.1,使用 mybatis-spring-1.1.1。 编写的整合工程,使用Mybatis 动态代理生成DataMapper类型。注解测试类封装测试逻辑 ,包括查询、插入、删除逻辑。数据库使用的MySQL5.0。
测试工程的时候,问题就来了,查询功能没有问题,插入数据无效。
凭着经验分析,问题可能,
1.mybatis 配置问题。检查了org.mybatis.spring.SqlSessionFactoryBean,org.springframework.jdbc.datasource.DataSourceTransactionManager的配置没有问题,同时测试了重复插入数据时,也会报出主键冲突。说明数据是交给数据库引擎执行。
2.事务问题。基于上面的情况,考虑可能是事务的问题,网上查了相关资料,在spring自管理事务的情况没有发生过这种情,不太可能撞上“大运”。
事情到这时,几乎到了死胡同了,时间都耗费了好几个小时了。
后来想到,基于上面的结论,这跟应用框架应该没有关系,可能是数据库的问题。MySQL有很多存储引擎,以往的项目用MyISAM多,就检查了表的引擎属性,原来是InnoDB。改正过来,改正过来问题解决。
阿门,终于可以休息了。
附上Mysql 总结信息
Mysql 各种存储引擎的特性
特点 |
Myisam |
BDB |
Memory |
InnoDB |
Archive |
存储限制 |
没有 |
没有 |
有 |
64TB |
没有 |
事务安全 |
|
支持 |
|
支持 |
|
锁机制 |
表锁 |
页锁 |
表锁 |
行锁 |
行锁 |
B树索引 |
支持 |
支持 |
支持 |
支持 |
|
哈希索引 |
|
|
支持 |
支持 |
|
全文索引 |
支持 |
|
|
|
|
集群索引 |
|
|
|
支持 |
|
数据缓存 |
|
|
|
支持 |
|
索引缓存 |
|
|
支持 |
支持 |
|
数据可压缩 |
支持 |
|
|
|
支持 |
空间使用 |
低 |
低 |
不消耗空间 |
高 |
低 |
内存使用 |
低 |
低 |
中等 |
高 |
非常高 |
批量插入速度 |
高 |
高 |
高 |
低 |
非常高 |
支持外键 |
|
|
|
支持 |
|
最常用的存储引擎:
1. Myisam存储引擎:每个Myisam在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别为.frm(存储表定义)、.MYD(存储数据)、.MYI(存储索引)。数据文件和索引文件可以放置在不同目录,平均分布io,获得更快的速度。
2. InnoDB存储引擎:具有提交、回滚、奔溃恢复能力的事务安全。与Myisam相比,InnoDB的写效率差一些并且会占用更多的磁盘空间以保留数据和索引。
如何选择合适的引擎及常用存储引擎适用的环境:
1. Myisam:它是在Web、数据仓储和其他应用环境下最常使用的存储引擎。
2. InnoDB:用于事务处理应用程序,具有更多特性,包括ACID事务特性。
3. Memory:所有数据都存储在Ram中,在需要快速查找引用和其他类似数据环境下,可以极速访问。
4. Merge:允许Mysql DBA(数据库管理人)或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用他们。对于世界仓储等环境十分合适。