【问题标题】:ResultSet Memory结果集内存
【发布时间】:2011-07-11 13:59:28
【问题描述】:

我有 10 万条记录的 ResultSet,每条记录有 5 个单元格,其中 2 个是 int 数据类型,3 个是 Varchar (100) 数据类型

我的问题是当从 java 程序执行查询时,如何为这些数据类型的结果集分配内存

特别是 varchar 数据类型是所有 varchar(100) 单元格具有相同的 100 个字符的内存,或者它取决于每个 varchar(100) 单元格包含的数据

例如说我在 varchar(100) 上有两个单元格的以下记录

---------------------- | "ABC" | | “pqrstuv” | ----------------------

这里的内存大小是 10 个字符还是 200 个字符?

问候

【问题讨论】:

  • ResultSet 所需的内存可能取决于实际数据而不是数据库中字段的大小。但严格来说,这是 JDBC 驱动程序的一个属性,您必须向它询问一个特定的
  • Joachim Sauer 感谢您的回复我正在使用 oracle 数据库 10g 和 oracle 类型 4 瘦 jdbc 驱动程序〜这个呢,它是数据依赖还是类型?

标签: java jdbc resultset


【解决方案1】:

“varchar”类型用于可变长度字符串。因此,您的字符串只会将空间量作为字符串中实际的字符数(在您的示例中为 10 个字符)。如果您将这些字段定义为“char”(固定长度),那么它们每个将占用 100 个字符。

【讨论】:

    【解决方案2】:

    大多数 JDBC 驱动程序支持结果集的分页。这意味着一次只加载一部分结果。内部使用的内存量不太重要,因为它永远只是数据的一个子集。如果您保留所有记录,则使用的数据量更为重要。当您保留一个字符串时,它将使用每个字符 1-2 个字节(加上一些开销),具体取决于您的 JVM。

    无论哪种方式,除非您有移动设备,否则所使用的内存与您拥有的内存相比可能非常小。

    【讨论】:

    • thnx peter 实际上我有并发环境,我的结果集在某些情况下是巨大的 100k(记录)或更多,我必须在 .txt 文件中写入,而我只有 1gb 的内存
    • 这大约是 10 美元的内存。 ;) 如果您随时处理数据,您应该能够使用比这更少的内存。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2012-02-07
    • 2011-07-02
    相关资源
    最近更新 更多