Hibernate Shards

Hibernate Shards由Google员工2007年贡献给Hibernate社区,Shard本意是segment或者partition,shard正好也是Google内部术语,同样的命名也出现在MongoDB中。

 

在大数据量的应用中,DB很容易成为应用的瓶颈,单表在随着数据量的不断增加,性能会出现急剧的下降,这个时候对数据的切分成为必然。常用的数据切分方式有:

垂直切分(VerticalPartition/Sharding):将业务逻辑相关的一些数据存储在同一数据库中,将低耦合的各模块直接的数据区分开。

水平切分(HorizontalPartition/Sharding):将同一表中的数据拆分到不同的数据库中。

 

不太严格的讲,对于海量的数据,如果是因为表多个数据多,一般适合使用垂直切分,即把关系紧密(比容同一模块)的表切分出来放在同一server上。如果表不多,但是单表数据量非常大,这个适合使用水平切分,将表中的数据以某种规则切分到不同的server上。

 

这里介绍的Hibernate Shards是建立在Hibernate Core之上,通过增加水平切分技术的支持,封装和最小化数据库水平分片复杂度的框架,简言之,我们使用hibernate为多个数据库的使用提供一个统一的视图。

 

Hibernate Shards的3个核心是:

ShardAccessStrategy:分片的访问策略,即在查询结果确定在一个shard集之后,对这个shard集的访问策略,默认的实现有序列式(SequentialShardAccessStrategy)和并发访问方式(ParallelShardAccessStratery)。

 

ShardSelectionStrategy:决定在哪个shard上创建对象的时候调用,可以通过实现该接口来确定分片的规则,例如hash等。

 

ShardResolutionStrategy:查找指定对象时,根据它来确定该对象所在的shard,通常与ShardSelectionStrategy相对应。

 

主键生成策略:在分片的情况之下需要做到主键在全局情况下的唯一,具体的生成策略可以在应用中自己实现,也可以使用Hibernate Shards提供的策略:ShardedUUIDGenerator,该策略中自动包含了Shard Id,查找时可以更快的确定shard。

 

扩展的问题:有人说Hibernate Shards对于增加新的shard没有任何支持,需要应用自己来处理。不过貌似Hibernate Shards对于二次分片(Resharding)提供了虚拟分片(Virtual Shards),只是对于将物理分片上的数据进行迁移时,因为应用的复杂度问题,没有作处理。

 

HibernateShards存在的问题也比较多,附件中的文档有详细的介绍。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值