其他驱动程序体系结构

某些 ODBC 驱动程序并不严格符合前面所述的体系结构。 这可能是因为驱动程序执行了传统 ODBC 驱动程序以外的其他职责,或者不是正常意义上的驱动程序。

用作中间组件的驱动程序

ODBC 驱动程序可以位于驱动程序管理器与一个或多个其他 ODBC 驱动程序之间。 当中间的驱动程序能够处理多个数据源时,它会充当将 ODBC 调用(或适当转换的调用)分发到其他实际访问数据源的模块的调度程序。 在此体系结构中,中间的驱动程序充当着驱动程序管理器的某些角色。

此类驱动程序的另一个示例是 ODBC 的间谍程序,可以截获并复制驱动程序管理器与驱动程序之间发送的 ODBC 函数。 该层可用于模拟驱动程序或应用程序。 对于驱动程序管理器,层就好像是驱动程序;对于驱动程序,层就好像是驱动程序管理器。

异构联接引擎

某些 ODBC 驱动程序基于查询引擎构建,用于执行异构联接。 在异构联接引擎的一个体系结构中(见下图),驱动程序对应用程序而言是一个驱动程序,但对于另一个驱动程序管理器实例来说,则是一个应用程序。 该驱动程序通过在驱动程序中为每个联接的数据库调用单独的 SQL 语句来处理应用程序的异构联接。

Architecture of a heterogeneous join engine

该体系结构为应用程序提供了一个通用接口,用于访问不同数据库中的数据。 它可以使用常见方法来检索元数据,例如有关特殊列(行标识符)的信息,并且可以调用常见目录函数来检索数据字典信息。 例如,通过调用 ODBC 函数 SQLStatistics,应用程序可以检索要联接的表上的索引的相关信息,即使表位于两个单独的数据库中。 查询处理器无需担心数据库如何存储元数据。

应用程序还具有对数据类型的标准访问权限。 ODBC 定义了特定于 DBMS 的数据类型映射到的常见 SQL 数据类型。 应用程序可以调用 SQLGetTypeInfo 来检索有关不同数据库上的数据类型的信息。

当应用程序生成异构联接语句时,此体系结构中的查询处理器会分析 SQL 语句,然后为每个要联接的数据库生成单独的 SQL 语句。 通过使用有关每个驱动程序的元数据,查询处理器可以确定最有效的智能联接。 例如,如果该语句将一个数据库中的两个表与另一个数据库中的一个表联接,那么查询处理器可以联接一个数据库中的两个表,然后再将结果与另一个数据库中的表联接。

服务器上的 ODBC

ODBC 驱动程序可以安装在服务器上,供一系列客户端计算机上的应用程序使用。 在此体系结构中(见下图),每个客户端上都安装了一个驱动程序管理器和一个 ODBC 驱动程序,服务器上则安装了另一个驱动程序管理器和一系列 ODBC 驱动程序。 这样,每个客户端都可以访问服务器上使用和维护的各种驱动程序。

Architecture of ODBC drivers on a server

这种体系结构的一个优点是,可以实现高效的软件维护和配置。 驱动程序只需在服务器这一个位置进行更新。 通过使用系统数据源,可以在服务器上定义数据源以供所有客户端使用。 不需要在客户端上定义数据源。 连接池可用于简化客户端连接到数据源的过程。

客户端上的驱动程序通常是一个非常小的驱动程序,用于将驱动程序管理器调用传输到服务器。 其占用空间明显小于服务器上功能齐全的 ODBC 驱动程序。 在这种体系结构中,如果服务器具有更多的计算能力,就可以释放客户端资源。 此外,还可以通过安装备份服务器和执行负载均衡来优化服务器使用,从而提高整个系统的效率和安全性。