首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >db2 - Java数据归档中的Oracle rownum

db2 - Java数据归档中的Oracle rownum
EN

Stack Overflow用户
提问于 2010-04-14 00:03:11
回答 2查看 1.4K关注 0票数 1

我在java中有一个在db2和sybase之间移动数据的数据归档进程。仅供参考-这不是通过任何导入/导出过程完成的,因为在运行时每个表上都有几个可用的条件,因此这个过程是用java开发的。

现在,我为每个源和目标组合定义了单个DatabaseReader和DatabaseWriter,以便在多个线程中移动数据。我想我想进一步扩展它,我可以为每个源和目标组合定义多个DatabaseReaders和多个DatabaseWriters。

例如,如果源数据大约有100行,我定义了10个读取器和10个写入器,每个读取器将读取10行,并将它们提供给写入器。我希望根据服务器CPU、内存等资源的不同,进程能给我带来极致的性能。

但我猜问题在于这些源表没有主键,并且在多个集合中抓取行极其困难。

db2提供了rownum的概念,我想生活要简单得多,Oracle呢?如何使用db2实现此行为?有没有一种方法可以先获取10条记录,然后再获取下10条记录,依此类推?

有什么建议/想法吗?

Db2版本- DB2 v8.1.0.144修复包编号- 16 Linux

EN

回答 2

Stack Overflow用户

发布于 2010-04-29 12:56:32

如果我理解正确的话,您只是尝试以10行为一批的方式写入目标表。不需要将读取批处理为10行。

只需触发select语句,然后继续读取,直到数据用完。每隔10行,您就可以调用编写器。然而,大多数jdbc客户端都会在幕后执行这种优化,所以这可能不会比一次插入一行更好。

我怀疑nieve多线程实现是否会加快速度,因为目标数据库引擎无论如何都在做大部分工作,而且它将受到日志写入和锁定的约束,而多线程并没有帮助(或者使情况更糟!)。

据我所知,一个简单的单线程"select"/"insert“进程很容易就能胜过你的多线程程序。还有其他方法可以优化这个过程:

  1. 调整您的数据库客户端,以便对网络操作进行批处理。
  2. 检查您的“提交”处理,以便您在每100次左右的插入之后进行提交。
票数 0
EN

Stack Overflow用户

发布于 2010-04-15 13:03:07

DB2确实支持rownum概念。由于不知道您的数据库架构,下面是一个示例:

代码语言:javascript
复制
SELECT *
FROM (
  SELECT rownumber() OVER (order by column1, column2) AS number, column1, column2
  FROM mytable
) temp
WHERE number BETWEEN 20 AND 30

这里的子查询获取表中的每一行,并根据指定的顺序分配rownumber函数。“外部”查询可以使用行号来选择批处理中实际需要的行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2631124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档