HibernateShard基础分析

Hibernate Shard有很多值得学习的地方,这里我们主要介绍Hibernate Shard 提供了一种虚拟分区层,包括介绍Hibernate Shard 不支持垂直分区等方面。

创新互联建站是一家集网站建设,山海关企业网站建设,山海关品牌网站建设,网站定制,山海关网站建设报价,网络营销,网络优化,山海关网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

1.水平分区下的查询

对于简单查询Hibernate Shard可以满足。

水平分区下多库查询是一个挑战。主要存在于以下三种操作:
1) distinct因为需要遍历所有shard分区,并进行合并判断重复记录。
2) order by类似 1)
3) aggregation count,sim,avg等聚合操作先分散到分区执行,再进行汇总。

是不是有点类似于 MapReduce ? 呵呵。

Hibernate Shard 目前通过 Criteria 接口的实现对 聚合提供了较好的支持, 因为 Criteria 以API接口指定了 Projection 操作,逻辑相对简单。而HQL,原生 SQL 还不支持此类操作。

2. 再分区和虚拟分区

当数据库规模增大,需要调整分区逻辑和数据存储时, 需要再分区。

两种方式:
1)数据库数据迁移其他分区;
2)改变记录和分区映射关系。这两种方式都比较麻烦。尤其“改变记录和分区映射关系”,需要调整 ShardResolutionStrategy.

Hibernate Shard 提供了一种虚拟分区层。当需要调整分区策略时,只需要调整虚拟分区和物理分区映射关系即可。以下是使用虚拟分区时的配置创建过程:

Java代码

 
 
 
  1. Map, Integer> virtualShardMap = new HashMap, Integer>();  
  2. virtualShardMap.put(0, 0);  
  3. virtualShardMap.put(1, 0);  
  4. virtualShardMap.put(2, 1);  
  5. virtualShardMap.put(3, 1);  
  6. ShardedConfiguration shardedConfig =new ShardedConfiguration
    (prototypeConfiguration,configurations,strategyFactory,virtualShardMap);  
  7. return shardedConfig.buildShardedSessionFactory(); 

3.局限:

1)Hibernate Shard 不支持垂直分区, 垂直+水平混合分区。

2)水平分区下 查询功能受到一定限制,有些功能不支持。实践中,需要在应用层面对水平分区算法进行更多的考虑。

3)不支持跨分区的 关系 操作。例如:删除A分区上的 s 表,B分区上的关联子表 t的记录无法进行参照完整性约束检查。 (其实这个相对 跨分区查询的挑战应该说小的多,也许google工程师下个版本会支持,呵呵)

4)解析策略接口似乎和对象ID全局唯一性有些自相矛盾,AllShardsShardResolutionStrategy 的接口返回的是给定对象ID所在的 shard ID集合,按理应该是明确的一个 shard ID.

【编辑推荐】

  1. Hibernate专业知识介绍
  2. 讨论Hibernate和模型对象
  3. Hibernate查询缓存全面分析
  4. 概括Hibernate主键生成机制
  5. Hibernate Pager基础介绍

网页名称:HibernateShard基础分析
分享URL:http://www.shufengxianlan.com/qtweb/news7/271107.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联