第 1 章架构

1.1. 概述

Hibernate Shards 是 Hibernate Core 的一个扩展,旨在将分片(水平分割)数据的复杂性封装起来,并将其减到最低。从概念上讲,Hibernate Shards 可以划分为两个区域,你需要了解这两个区域才能成功使用。这两个区域是

  • 通用分片逻辑

  • 应用程序特定分片逻辑

我们依次讨论这些区域。

1.2. 通用分片逻辑

Hibernate Shards 的主要目标是让应用程序开发人员能够使用标准 Hibernate Core API 查询和处理分片数据集。这样一来,那些使用 Hibernate 但尚未需要分片的现有应用程序就可以在达到这一阶段时轻松采用我们的解决方案,而无需进行重大重构。此外,对于那些熟悉 Hibernate、需要分片并从头开始的应用程序开发人员来说,这种方法可以让他们在短时间内实现生产力,因为无需熟悉新的工具集。有了这个目标在心,毫无疑问,Hibernate Shards 主要包含你已经了解并且喜爱的许多 Hibernate Core 接口的分片感知实现。

大多数与 Hibernate 相关的应用程序代码主要与 Hibernate Core 提供的四个接口进行交互

  • org.hibernate.Session

  • org.hibernate.SessionFactory

  • org.hibernate.Criteria

  • org.hibernate.Query

Hibernate Shards 提供了这四个接口的分片感知扩展,以便你的代码无需了解它正在与分片数据集进行交互(当然,除非你有明确的原因公开此事实)。分片感知扩展如下

  • org.hibernate.shards.session.ShardedSession

  • org.hibernate.shards.ShardedSessionFactory

  • org.hibernate.shards.criteria.ShardedCriteria

  • org.hibernate.shards.query.ShardedQuery

我们为这四个分片感知接口提供的实现充当分片引擎,了解如何将你的应用程序特定分片逻辑应用到你的各种数据存储中。我们不期望应用程序开发人员需要编写大量代码,这些代码已知与这些接口交互,因此,如果你发现自己声明或传递 Sharded 实例,请后退一步,看看是否可以使用父接口代替。

1.3. 应用程序特定分片逻辑

每个使用 Hibernate Shards 的应用程序都有自己的规则,说明数据如何在各个分片中分布。与其尝试预测所有这些规则(一项实际上注定会失败的努力),我们反而提供了一组接口,你可以在这些接口的后面对应用程序的数据分发逻辑进行编码。这些接口是

  • org.hibernate.shards.strategy.selection.ShardSelectionStrategy

  • org.hibernate.shards.strategy.resolution.ShardResolutionStrategy

  • org.hibernate.shards.strategy.access.ShardAccessStrategy

您为此三个界面提供的实现加上您选择的 ID 生成实现(分片策略章节中对此有更多论述)组成了应用程序的分片策略。前一节中描述的分片引擎知道如何使用您提供的分片策略。

为了帮助您迅速上手,Hibernate Shards 附带了一些简单的界面实现。我们期望它们有助于您的原型设计或实际应用程序开发的早期阶段,但我们也期望,迟早大多数应用程序都会提供自己的实现。

有关分片策略的详细信息,请参阅同名章节。

1.4. 系统要求

Hibernate Shards 与 Hibernate Core 有相同的系统要求,另外限制是 Java 1.5 或更高版本。