在当今业务驱动的环境中,架构师和开发人员要实现数据联合解决方案的情况非常普遍。他们所面临的挑战通常受到一系列体系结构决策的影响,而后者实际上又受到技术、业务或合同方面约束的影响。此场景中包含多个此类常见约束。首先,支持项目的信息访问要求所必需的数据驻留在多个源中,必须对其进行集成,并作为单个结果向用户提供。其次,无法对目标数据源进行复制来满足访问需求。最后,解决方案必须在现有 SOA 内集成,并仍然支持传统的非 SOA 应用程序,如图 3 中所示。
正如问题说明中所述,此方法的目标是避免提供异类源的集成视图时出现数据冗余。数据联合服务器——即实现数据联合模式的组件——必须针对传统非 SOA 上下文提供标准查询接口。这可确保各种各样的传统数据库应用程序能够使用联合数据。联合服务器还必须提供查询优化功能,以最高效地响应请求。此上下文中数据的分发和异类性特征决定了必须重点强调如何最好地转换对集成视图的访问,以及如何分解和分布工作负载。支持对此集成视图的写访问时,联合服务器必须将各个源中的数据操作同步到逻辑工作单元中。这可确保满足事务的原子性、一致性、隔离和持久性 (ACID) 标准,且保证引用完整性。
除了针对传统上下文的这些目标外,此方法还必须适合在 SOA 中使用。这将允许企业内外的各个用户能够有效地重用集成视图。SOA 中的联合访问的潜在使用者是需要访问分布式信息的应用程序、门户和业务流程中的活动。例如,制造商可能定义从异类源检索实时库存信息的服务。内部应用程序和外包业务合作伙伴可以访问相同的服务,从而利用此联合访问的一致且最高效的实现。
在传统上下文和 SOA 上下文中,数据联合服务器提供了有效联接和处理来自异类源的信息的解决方案。此模式实现了处理分布式数据的同步实时集成方法。数据联合服务器负责接收定向到各种源的集成视图的查询。它会使用复杂的优化算法对其进行转换,从而将查询拆分为一系列子操作(称为查询划分与重写),然后对相应的源应用子操作,从每个源收集结果,组装集成结果,并最后将集成结果返回到原始查询。此处理序列将以同步的方式实时完成。
数据联合模式要求对集成视图范围内来自各个数据源的数据元素进行映射。例如,上面示例中提到的保单持有人姓名和地址等客户信息可以存储在一个数据库内的单个表中,也可以存储在另一个数据库内的多个表中。为了构建集成视图,需要将这些不同类型的表示形式映射到公共视图中。映射可以由相关人员手动执行,也可以采用基于各种映射算法(还会捕获任何必要的转换需求)的最新工具辅助完成。这就允许数据联合服务器接收对集成视图的查询和计算要执行的最优子操作数量和类型。
在 SOA 上下文中应用数据联合模式时,需要在 SOA 内将一组联合查询作为服务启用并注册。例如,用于检索保单持有人的关键结构化和非结构化信息(如姓名、地址、状态、索赔文档、维修费用预估和风险评级等)的集成视图可以作为服务启用,并在多个用户间共享。设计时的映射结果通常为联合视图,与关系数据库视图类似,可以随后在联合服务器上进行部署或创建。
数据联合服务器接收对集成视图的请求。根据映射定义,联合服务器将联合查询拆分为多个子操作。多个因素会对此步骤造成影响:
- 响应联合查询所必需的数据驻留在何处?
- 为了将异类源表示形式(如不同的数据类型、规范化模型与非规范化模型)转换为公共集成视图,必须执行哪些操作?
联合服务器使用映射信息来解决这些问题。还有很多其他因素会影响联合查询处理,这将要求使用映射规范之外的其他信息,如:
- 系统管理数据源支持哪些操作,哪些操作必须由联合服务器提供补偿机制?
- 在源中执行一系列操作与在联合服务器上执行这些操作的性能影响如何?联合服务器应将哪些操作委派给源,以便更好地利用源的功能、减少数据传输以及优化总体性能?
回答这些问题需要使用源系统及其查询处理功能方面的知识。为了处理后一个问题,联合服务器还必须使用一系列关于操作环境的信息以及源数据的统计数据。
联合服务器确定了所有子操作的非常好的执行策略后,将连接到数据源——包括结构化和非结构化信息的数据源——以检索相关数据(可能会使用源特定的接口)。根据总体查询执行计划,将随后对数据源执行各个子操作。将接收结果并聚合为集成视图的结果。然后会将此结果返回给使用者。
在 SOA 上下文中,使用者通过预定义的请求格式向联合服务器提交请求。联合服务器将请求转换为对应的 SQL 查询或视图定义,以支持服务。从此时开始,将执行与以上所述相同的查询分解、优化和执行步骤。SOA 中唯一的区别在于最后一步。联合服务器会将传统数据联合方法的结果转换为服务响应,并随后通过预定义的服务接口将其返回给服务使用者。
数据联合模式的功能可以通过使用数据相关的技术(如优化器或补偿)或自己开发的应用程序来实现。由于异类源上的查询优化的复杂性,行业非常好的实践是使用数据联合实现来利用大多数数据库管理系统提供的查询优化技术。