在向大家详细介绍Hibernate Shard三种策略之前,首先让大家了解下Hibernate Shard简介,然后全面介绍Hibernate Shard三种策略。
目前创新互联已为上1000+的企业提供了网站建设、域名、虚拟主机、网站托管运营、企业网站设计、山城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1. Hibernate Shard简介
Hibernate Shard多数据库水平分区解决方案。Hibernate 的一个扩展,用于处理多数据库水平分区架构。由google工程师 2007年 捐献给 Hibernate社区。
目前版本: 3.0.0 beta2, 未发GA版。
条件:Hibernate Core 3.2, JDK 5.0
2. 水平分区原理
一个库表如 Order 存在于多个数据库实例上。按特定的分区逻辑,将该库表的数据存储在这些实例中,一条记录的主键 PK,在所有实例中不得重复。
水平分区在大型网站,大型企业应用中经常采用。目的出于海量数据分散存储,分散操作,分散查询以便提高数据处理量和整体数据处理性能。使用:google工程师的设计还是非常好的,完全兼容 Hibernate本身的主要接口。
Java代码
- org.hibernate.Session
- org.hibernate.SessionFactory
- org.hibernate.Criteria
- org.hibernate.Query
因此程序员开发变化不大,甚至不需要关心后台使用了分区数据库。程序迁移问题不大。而且配置上比较简明。
3. Hibernate Shard三种策略:
◆ShardAccessStrategy, 查询操作时,到那个分区执行。
默认提供两个实现:顺序策略:SequentialShardAccessStrategy, 每个query按顺序在所有分区上执行。
平行策略:ParallelShardAccessStrategy, 每个query以多线程方式并发平行的在所有分区上执行。此策略下,需要使用线程池机制满足特定的性能需要,java.util.concurrent.ThreadPoolExecutor.
◆ShardSelectionStrategy, 新增对象时,存储到哪个分区。
框架默认提供了一个轮询选择策略 RoundRobinShardSelectionStrategy, 但一般不这样使用。
通常采用“attribute-based sharding”机制,基于属性分区。一般是用户根据表自己实现一个基于属性分区的策略类ShardSelectionStrategy ,例如,以下WeatherReport基于continent属性选择分区:
Java代码
- public class WeatherReportShardSelectionStrategy implements ShardSelectionStrategy {
- public ShardId selectShardIdForNewObject(Object obj) {
- if(obj instanceof WeatherReport) {
- return ((WeatherReport)obj).getContinent().getShardId();
- }
- throw new IllegalArgumentException();
- }
◆ShardResolutionStrategy, 该策略用于查找单个对象时,判断它在哪个或哪几个分区上。
默认使用 AllShardsShardResolutionStrategy ,可以自定义例如:
Java代码
- public class WeatherReportShardResolutionStrategy
extends AllShardsShardResolutionStrategy {- public WeatherReportShardResolutionStrategy(List
shardIds) { - super(shardIds);
- }
- public List
selectShardIdsFromShardResolutionStrategyData( - ShardResolutionStrategyData srsd) {
- if(srsd.getEntityName().equals(WeatherReport.class.getName())) {
- return Continent.getContinentByReportId(srsd.getId()).getShardId();
- }
- return super.selectShardIdsFromShardResolutionStrategyData(srsd);
- }
- }
当前标题:HibernateShard三种策略剖析
分享地址:http://www.shufengxianlan.com/qtweb/news40/554040.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联