哪个更快:JDBC 还是 JNDI?

Posted

技术标签:

【中文标题】哪个更快:JDBC 还是 JNDI?【英文标题】:What is faster: JDBC or JNDI? 【发布时间】:2012-07-15 01:28:39 【问题描述】:

我有两个选项来配置我的应用程序数据库连接 - 一个是使用 JDBC,另一个是使用 JNDI。就这些连接类型与数据库的工作速度而言,最佳选择是什么。

我理解这是使用不同原理的两种不同类型的数据库连接(JDBC 是直接 db 连接,JNDI 是应用服务器端的数据库连接池配置)。但是还有其他一般的 JDBC/JNDI 优缺点可能比运行速度更重要吗?如果是,它们是什么?

【问题讨论】:

JNDI 是指在服务器上定义数据源? @ftom2: 是的,这就是我的意思——在应用服务器上配置 JNDI 数据源 JNDI和JDBC在性能上没有任何关系,因为JNDI返回了一些帮助应用开发者或应用服务器使用JDBC获取数据库连接的属性;用于数据库连接的低级 API。 【参考方案1】:

我敢打赌你的意思是选择

    在您的应用程序中手动创建数据源或 jdbc 连接,或者 在容器中设置数据源,应用通过JNDI查找数据源

如果是这种情况,请尽可能坚持使用 2。

选择的主要原因绝不是性能差异。坚持 2 的原因,大部分情况下,你需要 2 才能从容器中获得更高级的特性,例如分布式事务。

【讨论】:

【参考方案2】:

这是我发现的关于 JNDI 和 JDBC 的内容。

JNDI: 这是一种类似于电话簿的技术,用于远程搜索服务器和数据源上的名称。

JNDI 创建一个连接池。连接池是服务器上的一个环境,其中 JNDI 和数据库封装到其中以实现 Type4 连接。

JDBC: 一种 Java API,使 Java 程序能够执行 SQL 语句。 这允许 Java 程序与任何符合 SQL 的数据库进行交互。

JDBC 与 ODBC 类似,但专为 Java 程序设计,而 ODBC 与语言无关。

JDBC 由 Sun Microsystems 开发。 JNDI 更快更高效。

【讨论】:

再次;我已多次通知您在链接到您自己的网站时需要披露,但您一再未能这样做。【参考方案3】:

这个问题毫无意义。在什么方面更快?没有什么可以比较的。 JDBC 是关系数据库的通用接口。 JNDI 是命名系统的通用接口。很大概率是任何一个的效率都取决于与之通信的目标系统的 99%。在任何情况下,关系数据库和命名系统都满足完全不同的需求,这些需求在很大程度上是不可比的。通常使用 JNDI 来获取连接,然后使用 JDBC 来操作该连接。

【讨论】:

【参考方案4】:

是否使用连接池不影响应用程序代码。它不需要对应用程序进行任何代码更改,因为应用程序会查找先前注册的数据源的 JNDI 名称。如果数据源在 JNDI 注册期间指定了连接池实现(如 Creating a Data Source Using the DataDirect Connection Pool Manager 部分所述),则客户端应用程序可以通过连接池获得更快的连接。

【讨论】:

【参考方案5】:

前面的回答提到过,从技术上来说,使用Datasource和使用JDBC是一样的。

尽管如此,使用数据源通常是首选方式,因为这样您就可以让服务器管理您的数据库连接池。

【讨论】:

【参考方案6】:

真正的速度优势来自于能够重用数据库连接。

因此,您需要使用提供数据库连接池的方法,然后使用适当的技术进入池。根据实现,它可以是 JDBC(如果驱动程序本身支持的话)或 JNDI 或完全不同的东西。

如果您的应用程序在 Web 容器中运行,通常使用 JNDI 来允许在 Web 容器中而不是在您的应用程序中配置和管理池。

【讨论】:

【参考方案7】:

这个问题并不完全清楚。

JNDI 不是一种数据库连接。您可以使用 JNDI 查找 DataSource,它是连接工厂。不过,DataSource 是 JDBC API 的一部分,因此 JNDI 与 JDBC 一起工作,而不是这里的替代品。

您是在谈论针对数据库使用 JDBC 来获取目录信息,还是针对 LDAP 存储库使用 JNDI?

【讨论】:

【参考方案8】:

数据库连接总是使用 JDBC。使用 JNDI,您可以在目录服务中注册一个数据源,该目录服务可以通过其名称进行查找。因此 JDBC 和 JNDI 完全不同,不可互换。

【讨论】:

以上是关于哪个更快:JDBC 还是 JNDI?的主要内容,如果未能解决你的问题,请参考以下文章

哪个更快:多行还是多列?

哪个更快?组合查询还是多个查询?

get() 还是 merge() 哪个更快?

哪个更快,水平计数还是垂直计数?

ArrayList 还是 LinkedList 哪个运行得更快? [复制]

哪个更快? ++、+= 还是 x + 1?