精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (13)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-12
大数据量下,hibernate性能值的考验;
如果有跨月查询的情况,处理起来也有些麻烦,为什么不考虑用分区? |
|
返回顶楼 | |
发表时间:2011-01-12
finallygo 写道 建议还是不要分表的好,我之前就是采用分表的方式,现在发现在进行一些查询统计的时候挺悲剧的,所以建议还是分区比较好,如果你使用的是MYSQL 5.1以上的版本是支持HASH分区的,这样的话就可以不用经常修改数据库的分区了
hash分区,能增加按月查找的速度吗?这个没用过! |
|
返回顶楼 | |
发表时间:2011-01-12
最后修改:2011-01-12
daoger 写道 大数据量下,hibernate性能值的考验;
如果有跨月查询的情况,处理起来也有些麻烦,为什么不考虑用分区? 即然在考虑表分区了,问题显然在数据库上。 我的例子中不需要这样的功能。真需要可以做一个视图,跨月问题即可解决。分区考虑过,不用是因为不想人工维护分区。 |
|
返回顶楼 | |
发表时间:2011-01-12
如果查询所有的数据,还是有一定的屏景的吧,
|
|
返回顶楼 | |
发表时间:2011-01-12
最后修改:2011-01-12
海量数据查询,我想是要从需求和设计上来解决性问题的。
比如:要频繁的查询数据库表的条目数,对于大表,用count(*)就很慢。但是,如果做一个触发器,在表改变时自动计算表的条目数,把条目数存到另一个表中,这样查询就很快。 再优化代码,换框架,只要用count(*),是不可能比我说的方法更快的。 |
|
返回顶楼 | |
发表时间:2011-01-12
CREATE TABLE clients ( id INT, fname VARCHAR(30), lname VARCHAR(30), signed DATE )PARTITION BY HASH( MONTH(signed) ) PARTITIONS 12; 官方文档上按月分区的例子 |
|
返回顶楼 | |
发表时间:2011-01-12
最后修改:2011-01-12
finallygo 写道 CREATE TABLE clients ( id INT, fname VARCHAR(30), lname VARCHAR(30), signed DATE )PARTITION BY HASH( MONTH(signed) ) PARTITIONS 12; 官方文档上按月分区的例子 看了一下,这个应该可以。不过我用的是Oracle,不知Oracle有没有这个功能? 另外,有些特殊的分表策略数据库是不能完成的。比如,A B两个表,A存详细数据,B存的是剪裁数据,A和B在程序中对应的是一个持久化类。需要按需求查询不同的表。 |
|
返回顶楼 | |
发表时间:2011-01-12
最后修改:2011-01-12
这个倒也是个可行的办法。但我们一般是分库+表分区。
用的是Hibernate的 NamingStrategy接口,想通过它想办法在执行sql时,动态的改变持久化类和表的对应关系。后来发现不行。 另外想问一下,NamingStrategy为什么不行,你的是什么需求? 楼主你悲剧了,老被投隐。我觉得至多是个新手贴。哈哈。 |
|
返回顶楼 | |
发表时间:2011-01-12
peterwei 写道 这个倒也是个可行的办法。但我们一般是分库+表分区。
用的是Hibernate的 NamingStrategy接口,想通过它想办法在执行sql时,动态的改变持久化类和表的对应关系。后来发现不行。 另外想问一下,NamingStrategy为什么不行,你的是什么需求? 楼主你悲剧了,老被投隐。我觉得至多是个新手贴。哈哈。 NamingStrategy只在hibernate SessionFactory初始化时调用一次,以后就不再调用了。就算调用,想把查询日期传到NamingStrategy里也很困难,因为全局只有一个。这个功能要的急,当时想它要是好使,我用ThreadLocal传也行呀... 活着就是一种修行!哈哈 分库+分区怎么做,用一种感觉设计和维护上都简单呀? |
|
返回顶楼 | |
发表时间:2011-01-12
gdpglc 写道 peterwei 写道 这个倒也是个可行的办法。但我们一般是分库+表分区。
用的是Hibernate的 NamingStrategy接口,想通过它想办法在执行sql时,动态的改变持久化类和表的对应关系。后来发现不行。 另外想问一下,NamingStrategy为什么不行,你的是什么需求? 楼主你悲剧了,老被投隐。我觉得至多是个新手贴。哈哈。 NamingStrategy只在hibernate SessionFactory初始化时调用一次,以后就不再调用了。就算调用,想把查询日期传到NamingStrategy里也很困难,因为全局只有一个。这个功能要的急,当时想它要是好使,我用ThreadLocal传也行呀... 活着就是一种修行!哈哈 分库+分区怎么做,用一种感觉设计和维护上都简单呀? NamingStrategy分表是可行的,网上已经有很多例子了。我说的分库+分区,是指数据量很大的情况下,根据需求,例如先按省分库,然后每个省里再用表分区(分表当然也行)。当然这种数据量大的,跨区域查询总会是件比较麻烦的事。增删改就让路由程序调度好了。你1000万数据量,oracle里用表分区就够了。 |
|
返回顶楼 | |