数据库分表用hibernate做多表映射没必要
公司是做工程机械GPS的,GPS终端会定时(2不等分钟)上传信息(包括经纬度,机械工作参数等等),机械一多,时间一长,导致保存信息的表数据量巨大,几千万条,查询速度很慢,所以就考虑对那个数据表进行分表,每月一个表,因项目持久层框架用的hibernate,这几天就一直查这方面的资料,基本上就两种 1:DefaultNamingStrategy ,2:hibernate拦截器
可能是本人比较笨,两个都没测试成功,但是做到最后,发现没必要这样做。说一下我的实现方法吧。
起一个定时器,每个月28号自动创建一个数据表,以表名加下划线和下个月份命名(例如:2012年7月28号创建一个名为xxx_201208的数据表),在DAO里用session的createSQLQuery()方法创建表,建表语句是纯sql。
终端上传的数据,根据时间算出表名,存入该表即可。
以后查询的时候就需要指定要查那个月的数据,如果查询的数据较多,可能会查询好几个表,然后对数据做汇总,查询语句也是用createSQLQuery(),用纯sql语句,返回的结果是List<Object[]>, Object[]里是各个字段数据。
这样的话,只写一个bean就行了,都不用写hbm,这样做好像又回到jdbc的方式了,但不失为一种解决办法。欢迎大家提意见。