【问题标题】:The fastest JDBC driver最快的 JDBC 驱动程序
【发布时间】:2020-08-11 07:38:33
【问题描述】:

我在这里变得很困惑..

JDBC 驱动有 4 种类型:

  1. JDBC-ODBC 桥驱动程序(类型 1)
  2. JDBC 原生 API(类型 2)
  3. JDBC-Net 纯 Java(类型 3)
  4. 本机协议,纯 Java 驱动程序(类型 4)

但如果你在网上搜索最快的 JDBC 驱动程序,答案是: JDBC Net 纯 Java 驱动程序(类型 4)

JDBC-Net pure Java 不是类型 3 驱动程序吗?为什么答案将 JDBC-Net pure Java 和 type 4 放在一起?非常感谢!

【问题讨论】:

  • JDBC 驱动程序的速度是您最不关心的问题。您应该担心数据库的速度,并且可能更重要的是,考虑到预期的查询,您的模式的速度。离题。

标签: jdbc driver


【解决方案1】:

您的困惑源于这些名称都不是官方名称,JDBC 规范中定义的官方名称只是带有 n 的“Type n”是 1、2、3 或 4。看起来您的未命名来源试图为类型附加一个汇总名称,而这些名称只会导致混淆,因为您的不同来源为类型使用了不同的名称。

JDBC 4.3 规范将类型定义为:

9.1 驱动程序的类型

JDBC 驱动程序有许多可能的实现。这些 实现分类如下:

  • Type 1 — 将 JDBC API 实现为映射到另一个数据访问 API(例如 ODBC)的驱动程序。这种类型的驱动程序通常是 依赖于本机库,这限制了它们的可移植性。这 JDBC-ODBC Bridge 驱动程序是 Type 1 驱动程序的一个示例。
  • 类型 2 — 部分使用 Java 编程语言和部分使用本机代码编写的驱动程序。这些驱动程序使用本机客户端 特定于它们连接到的数据源的库。再次, 由于本机代码,它们的可移植性受到限制。
  • 类型 3 — 使用纯 Java 客户端并使用独立于数据库的协议与中间件服务器通信的驱动程序。这 然后中间件服务器将客户端的请求传递给数据 来源。
  • Type 4 — 纯 Java 驱动程序,通常使用网络协议或文件 I/O 与特定数据源进行通信。客户端 直接连接到数据源。

这些类型都不一定是最快的。鉴于从 java 代码到本机代码再返回的开销很小,对于相同的数据库系统,Type 4 驱动程序可能是最快的。类型 3 可能是最慢的,因为您从 Java 代码转到远程中间件服务器,然后该服务器将转换为特定于数据库的协议(可能使用另一个 JDBC 驱动程序!)到实际数据库。根据我的经验,类型 3 驱动程序非常罕见。

作为 Type 4 最快的反例,我维护了 Jaybird,它是 Firebird 的 JDBC 驱动程序。 Jaybird 提供了一个 Type 4 和两个 Type 2 实现(一个使用本地客户端库连接到远程 Firebird 服务器,一个在 Java 进程中提供 Firebird Embedded)。

一般来说,它的 Type 4 驱动程序对于 localhost 和远程连接是最快的,Jaybird Type 2 'Embedded' 驱动程序通常是最快的,因为它将在 Java 进程中托管数据库服务器,而不是网络开销或进程间通信。然而,在那种情况下,甚至不可能使用 Type 4 驱动程序(使用 Firebird Embedded 需要加载并与本机库对话),所以这是一个错误的比较。

Jaybird Type 2 'native' 驱动程序通常与 Jaybird Type 4 相当或稍慢,但它可能会更快地连接到同一主机上的 Firebird 服务器,因为它可能使用稍快的 IPC 协议而不是某些连接字符串的 TCP/IP,如果主机是 Windows。

无论如何,仅仅根据“哪种类型最快”来决定你的决定是没有用的,因为一些数据库供应商只提供类型 4 或类型 2 和类型 4,而例如类型 1 几乎已经死了,因为 Oracle 放弃了来自 Java 的 JDBC-ODBC 桥。类型 3 非常罕见,所以无论如何你都不太可能找到它。

一般来说,如果可以的话,我推荐选择Type 4,因为它通常最省事(例如Type 2 需要正确安装native library,配置你的应用程序来找到native library,等等)。但是,有时 Type 2 驱动程序可能会提供其他方式无法提供的功能(例如 Firebird Embedded)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 2013-10-25
    • 1970-01-01
    • 2013-08-12
    • 2012-08-26
    • 1970-01-01
    • 2020-05-22
    • 2017-06-17
    相关资源
    最近更新 更多