【问题标题】:JDBC retrieve Oracle data in chunksJDBC 以块的形式检索 Oracle 数据
【发布时间】:2016-07-12 18:12:03
【问题描述】:

我想使用 JDBC 从 Oracle 数据库中恢复数据,但使用 块。与 MySQL 等数据库相比,ORacle 不允许轻易 仅从查询中恢复行的子集。有什么建议吗?

应该可以使用 Java 8 API 流式传输 JDBC。

我尝试使用分页实现。但是,分页总是下载所有 结果到结果集中,你唯一避免的是映射。

我想检索 1'000'000 块中的 200'000'000 条记录。

【问题讨论】:

  • 显示您尝试过的代码。
  • “仅恢复行的子集”是什么意思? Oracle 绝对支持时间点恢复,将备份还原到某个点。

标签: java spring oracle performance jdbc


【解决方案1】:

我认为您的问题有两个问题。 1.如何处理非常大的结果集(在Oracle中)。 2. 如何进行分页(在Oracle中)。

Oracle 支持服务器端游标,因此当结果集非常大时,您实际上不需要分页。选择您需要的所有内容并为您的 JDBC 驱动程序指定 1 000 000 的 FET SIZE 就足够了。

如果你真的想在 Oracle 中使用分页(这是另一个问题)

您可以使用嵌套的选择语句和按行号分页。首先你选择你想要的。

select * 
  from ( select /*+ FIRST_ROWS(n) */ 
  a.*, ROWNUM rnum 
      from ( your_query_goes_here, 
      with order by ) a 
      where ROWNUM <= 
      :MAX_ROW_TO_FETCH ) 
where rnum  >= :MIN_ROW_TO_FETCH;

【讨论】:

  • 我按照您的建议使用带间隔的 oracle 查询,它非常慢,例如,当您想要循环 200'000'000 个 1'000'000 块中的条目时。跨度>
  • 是查询慢,还是迭代。你需要区分。如果是迭代,那么要么你的 fetch size 设置不正确要么你的网络很慢。
  • 当我们从 100'000 移动到 1'000'000 间隔时,我猜性能问题出在服务器端。然后,当我们观察到性能问题时,花几分钟来检索数据。
  • 您是否考虑过增加 oracle 服务器上的 RAM 以及缓冲区。
  • 我正在考虑为我的查询创建一种临时表(如临时视图),可以在分页期间重复使用。我还将增加机器的 RAM 和缓冲区。
猜你喜欢
  • 2017-06-24
  • 2011-03-31
  • 1970-01-01
  • 2021-01-21
  • 2013-07-07
  • 1970-01-01
  • 2016-08-11
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多