Java开发2.0: 使用Hibernate Shards进行切分 - 编程入门网
,Hibernate Shards 需要一个决定首个切分、第二个切分及后续切分的机制。Hibernate Shards 无需确定查询什么(这是 Hibernate Core 和基础数据库需要做的),但是它确实意识到,在获得答案之前可能需要对多个切分进行查询。因此,Hibernate Shards 提供了两种极具创意的逻辑实现方法:一种方法是根据序列机制(一次一个)对切分进行查询,直到获得答案为止;另一种方法是并行访问策略,这种方法使用一个线程模型一次对所有切分进行查询。
为了使问题简单,我将使用序列策略,名称为 SequentialShardAccessStrategy。我们将稍后对其进行配置。 ShardSelectionStrategy 当创建一个新对象时(例如,当通过 Hibernate 创建一个新 Race 或 Runner 时),Hibernate Shards 需要知道需将对应的数据写入至哪些切分。因此,您必须实现该接口并对切分逻辑进行编码。如果您想进行默认实现,有一个名为 RoundRobinShardSelectionStrategy 的策略,它使用一个循环策略将数据输入切分中。 对于赛跑应用程序,我需要提供根据比赛距离进行切分的行为。因此,我们需要实现 ShardSelectionStrategy 接口并提供依据 Race 对象的 distance 采用 selectShardIdForNewObject 方法进行切分的简易逻辑。(我将稍候在 Race 对象中展示。) 运行时,当在我的域对象上调用某一类似 save 的方法时,该接口的行为将被深层用于 Hibernate 的核心。 清单 1. 一个简单的切分选择策略
Java开发2.0: 使用Hibernate Shards进行切分(3)时间:2010-10-26 IBM Andrew Glover如您在 清单 1 中所看到的,如果持久化对象是一场 Race,那么其距离被确定,而且(因此)选择了一个切分。在这种情况下,有两个切分:0 和 1,其中切分 1 中包含 10 英里以上的比赛,切分 0 中包含所有其他比赛。 如果持久化一个 Runner 或其他对象,情况会稍微复杂一些。我已经编码了一个逻辑规则,其中有三个原则: 一名 Runner 在没有对应的 Race 时无法存在。 如果 Runner 被创建时参加了多场 Races,这名 Runner 将被持久化到寻找到的首场 Race 所属的切分中。(顺便说一句,该原则对未来有负面影响。) 如果还保存了其他域对象,现在将引发一个异常。 然后,您就可以擦掉额头的热汗了,因为大部分艰难的工作已经搞定了。随着比赛应用程序的增长,我所使用的逻辑可能会显得不够灵活,但是它完全可以顺利地完成这次演示! Shar |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |