- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个外部 api,一个用于下载,另一个用于从数据库表 [postgresql] 上传数据。 table 很大。随着时间的推移,我们观察到服务器缓慢地继续占用内存但不会删除太多内存,它会抛出错误并退出 [有时 linux 会关闭它]。我检查了内存转储,但无法找出与我的代码相关的任何内容。我不使用任何本地缓存或类似的东西。但是今天我得到了这个-
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.sql.Timestamp.toString(Timestamp.java:350)
at java.lang.String.valueOf(String.java:2994)
at org.jooq.impl.AbstractParam.name(AbstractParam.java:107)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:81)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:77)
at org.jooq.impl.Val.<init>(Val.java:63)
at org.jooq.impl.DSL.val(DSL.java:15157)
at org.jooq.impl.Tools.field(Tools.java:1092)
at org.jooq.impl.Tools.fields(Tools.java:1226)
at org.jooq.impl.BatchSingle.executePrepared(BatchSingle.java:231)
at org.jooq.impl.BatchSingle.execute(BatchSingle.java:182)
at org.jooq.impl.BatchCRUD.executePrepared(BatchCRUD.java:159)
at org.jooq.impl.BatchCRUD.execute(BatchCRUD.java:100)
对于获取,我使用普通的fetch
函数,为了将数据转储到数据库中,我使用JOOQ 的batchInsert
和batchUpdate
方法。 JOOQ 有什么好的做法来处理大量数据吗?我错过了什么吗?
最佳答案
fetch()
和 batchInsert()
/batchUpdate()
都会缓冲您的内容,即您的结果和/或绑定(bind)变量。使用 jOOQ 时不推荐使用这种方法。让我们分别看一下这两个操作:
对于大量读取,您应该避免使用 fetch()
,因为这会从您的数据库中获取所有记录,并在使用它们之前将它们存储在内存中。在大多数情况下,这是比保持打开的游标/资源(JDBC 的方式)更好的方法,但在结果很大的情况下,这是禁止的。相反,您应该使用 fetchLazy()
或 fetchStream()
:
// Using fetchLazy():
try (Cursor<Record> cursor = query.fetchLazy()) {
...
}
// Using fetchStream():
try (Stream<Record> stream = query.fetchStream()) {
...
}
不要忘记使用 try-with-resources 来确保所有资源,例如 ResultSet
和 PreparedStatement
在您完成时关闭。
请注意还有 ResultQuery.fetchSize()
, 这允许 specifying the JDBC fetch size以防止 PostgreSQL JDBC 驱动程序也缓冲太多行。
您不应该在任何数据库中一次性写入大量插入内容。除了您可能遇到的客户端内存问题之外,还存在与不断增长的 UNDO/REDO 日志相关的服务器端问题的风险。理想情况下,您应该通过微调将写入分成小块:
jOOQ 知道 Loader
API 来导入 CSV/JSON/array 数据并负责上述微调。它记录在这里:
http://www.jooq.org/doc/latest/manual/sql-execution/importing
关于java - JOOQ 从大表 : good practise 取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793911/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗?Update the question,所以它是 Stack Overflow 的 on-topic。 已关闭10 年前
人们在使用 nServiceBus/msmq 时如何处理安全问题?考虑例如消息加密、消息签名(验证?)等 你怎么知道消息不是从其他人发送到队列的。或者有人篡改了消息。 最佳答案 您可以控制 MSMQ
我想使用 ruby 发出一个简单的 post 请求。起初我用 gem open-uri 试了一下。但是这个answer对一个问题说它不起作用。因此,我不想使用帖子中推荐的 rest-open-ur
我知道 C# 中析构函数和终结函数在含义和使用上的区别。 但是,通常“我应该...”的答案是“不要使用析构函数,而是使用 MSDN 中所示的处置模式”。埃里克·利珀特 writes相当strongly
我有一个外部 api,一个用于下载,另一个用于从数据库表 [postgresql] 上传数据。 table 很大。随着时间的推移,我们观察到服务器缓慢地继续占用内存但不会删除太多内存,它会抛出错误并退
这个问题在这里已经有了答案: How to make an element width: 100% minus padding? (15 个答案) 关闭 4 年前。
在我正在开发的包中,我需要定义一个新单位:相当于 100 英尺的飞行高度 (FL)。 units包提供了以下可能性: units::install_conversion_constant("FL",
我正在使用 Azure API 管理来记录和测试不同环境(例如开发、测试和生产)中的多个 Web 服务和端点。目前,我通过不同的 API 来分隔不同的环境。然后我对它们进行标记,以便更好地了解 API
我正在使用 Azure API 管理来记录和测试不同环境(例如开发、测试和生产)中的多个 Web 服务和端点。目前,我通过不同的 API 来分隔不同的环境。然后我对它们进行标记,以便更好地了解 API
我只想监视或处理与发送一些数据并正在监听操作的“事物”的交互。 例如,将服务器读取或生成的脉冲发送到所有连接和监听的客户端。 该数据不应存储在 Mongo 集合中,而只能作为 volatile 数据集
我正在开发一个基于扩展 API 的 chrome 扩展,我需要针对我自己的在线服务进行身份验证。我阅读了很多文档,我知道我需要使用 OAuth2 并且我可能应该使用 chrome.identity.l
假设一个应用程序读取数据文件,从用户获取一些输入(通过 GUI),从大型数据库获取附加数据并执行冗长的分析。 按照建议,我将耗时的部分(数据库管理和实际分析)删除到了 SwingWorker 实例中。
在附件中您可以找到一个客户端代码示例:处理 jQuery 简单 slider ,该 slider 可以通过手动拖动或通过消息流从服务器获取新值来更改其值。 在 Template.SLIDER.rend
几天来,我一直在努力为我的用例找到一个好的模式。我有一个非常复杂的响应式(Reactive)表单,充满了嵌套组件,一些字段是必需的,某些字段可能会在特定条件下出现,等等……这给维护代码带来了巨大的问题
摘自书中: 2.1.1。示例:无状态 Servlet在第一章中,我们列出了许多创建线程并从这些线程调用组件的框架,让您有责任使组件成为线程安全的。很多时候,线程安全要求不是源于直接使用线程的决定,而是
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
I have hibernate @OneToMany mapping I am getting the mentioned error. Does not understand the reason
因此,我正在开发一个非常小的 Web 组件,以作为更大的设计系统的一部分。 我对网络组件的使用有点陌生,但我知道这个特定的网络组件可以在一个布局中使用很多很多次。 此 Web 组件控制在传递给它的任何
我是一名优秀的程序员,十分优秀!