【问题标题】:CachedRowSet slower than ResultSet?CachedRowSet 比 ResultSet 慢?
【发布时间】:2011-10-06 10:04:32
【问题描述】:

在我的 java 代码中,我使用 select 语句访问一个 oracle 数据库表。 我收到很多行(大约 50.000 行),所以 rs.next() 需要一些时间来处理所有行。

using ResultSet, the processing of all rows (rs.next) takes about 30 secs

我的目标是加快这个过程,所以我更改了代码,现在使用CachedRowSet:

using CachedRowSet, the processing of all rows takes about 35 secs

我不明白为什么CachedRowSet 比普通的ResultSet 慢,因为CachedRowSet 一次检索所有数据,而ResultSet 每次调用rs.next 时都会检索数据。

下面是部分代码:

try {
    stmt = masterCon.prepareStatement(sql);
    rs = stmt.executeQuery();

    CachedRowSet crset = new CachedRowSetImpl();
    crset.populate(rs);

    while (rs.next()) {
        int countStar = iterRs.getInt("COUNT");
        ...
    }
} finally {
    //cleanup
}

【问题讨论】:

标签: java oracle cachedrowset


【解决方案1】:

CachedRowSet 将结果缓存在内存中,即您不再需要连接。因此它首先“慢”。

CachedRowSet 对象是缓存其数据行的容器 内存中的行,这使得可以在不总是运行的情况下进行操作 连接到它的数据源。

->http://download.oracle.com/javase/1,5.0/docs/api/javax/sql/rowset/CachedRowSet.html

【讨论】:

    【解决方案2】:

    CachedRowSet 与 postgres jdbc 驱动程序结合使用存在问题。

    CachedRowSet 需要知道列的类型,以便知道要创建哪些 java 对象 (天知道它在幕后还从 DB 中获取了什么!)。

    因此,它需要更多往返数据库以获取列元数据。 在非常大量的情况下,这成为一个真正的问题。 如果数据库位于远程服务器上,这也是一个真正的问题,因为网络延迟。

    我们多年来一直在使用CachedRowSet,并且刚刚发现了这一点。我们现在实现了我们自己的CachedRowSet,因为我们从来没有使用过它的任何花哨的东西。 我们为所有类型执行getString 并转换自己,因为这似乎是最快的方法。

    这显然不是获取大小的问题,因为 postgres 驱动程序默认获取所有内容。

    【讨论】:

      【解决方案3】:

      是什么让您认为ResultSet 会在每次调用rs.next() 时检索数据?它的工作原理完全取决于实现——如果它一次获取一个块,我不会感到惊讶;很可能是一个相当大的块。

      我怀疑您基本上看到了将所有数据复制到 CachedRowSet 和 然后 访问所有数据所需的时间 - 基本上您有一个额外的复制操作,没有任何目的。

      【讨论】:

        【解决方案4】:

        使用普通的 ResultSet,您可以通过 RowPrefetch 和 FetchSize 获得更多优化选项。

        这些优化了网络传输块和 while 循环中的处理,因此 rs.next() 始终有数据可以使用。

        FetchSize 的默认设置为 10(Oracle 最新版本),但据我所知,未设置 RowPrefetch。因此意味着网络传输根本没有优化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-10
          • 2013-10-15
          相关资源
          最近更新 更多