为了账号安全,请及时绑定邮箱和手机立即绑定

ResultSet 是否应该在批处理中保持打开状态以避免多次提取查询

ResultSet 是否应该在批处理中保持打开状态以避免多次提取查询

MYYA 2023-03-17 16:47:11
我正在从 MariaDB 获取记录(大数据集,大约 100 万条记录),批量大小为 500(通过使用“限制”)。对于每次获取迭代,我都会打开和关闭连接。在我的同行评审中,我被建议获取一次结果集并通过迭代结果集本身进行批处理,即不关闭连接。第二种方法是正确的做法吗?编辑:在我批量获取 500 条记录后,我正在为每条记录更新一个字段并将其放在消息队列中。
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

Your program starts

    Connect to database

        do some SQL (selects/inserts/whatever)

        do some more SQL (selects/inserts/whatever)

        do some more SQL (selects/inserts/whatever)

        ...

    Disconnect from database

Your program ends

也就是说,在程序期间只要需要就保持连接打开。(即使你没有明确断开连接,程序的终止也会终止。在做网站时要注意这一点很重要——每个“页面”本质上都是一个单独的“程序”;无法保持数据库连接页之间。)


你还有另一个隐含的问题......“我应该一次抓取一批行,然后在客户端处理它们吗?” 答案是“视情况而定”。


如果可以在 SQL 中完成处理,那么在 SQL 中进行处理可能会更有效率。示例:总结一些数字。

如果您从一个表中获取一些行,然后对于这些行中的每一行,从另一个表中获取行...使用 SQL 会更有效率JOIN。

“批处理”可能不相关。客户端界面大概是


Fetch rows from a table (possibly all rows, even if millions)

Look at each row in turn.

请提供您将对百万行执行的具体操作,以便我们进行更具体的讨论。


轮询循环:


如果您每分钟只检查一次要执行的新任务,请务必每次都重新连接。


鉴于此,挂在池之间的结果集上没有意义。


查看完整回答
反对 回复 2023-03-17
?
慕森王

TA贡献1777条经验 获得超3个赞

是的,第二种方法是正确的做法。以下是一些原因:

  • 多次运行查询会产生开销。

  • 您正在使用的表中的基础数据可能会发生变化,并且单独的批次可能会不一致。

  • 您取决于结果的顺序,并且排序可能有重复。


查看完整回答
反对 回复 2023-03-17
?
四季花海

TA贡献1811条经验 获得超5个赞

打开和关闭数据库连接非常耗时。保持连接打开将节省大量时间。



查看完整回答
反对 回复 2023-03-17
  • 3 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信