0

我对大型数据库的结果集有疑问。(MySQLDB,Java 1.7)

任务是将一列的所有条目转换为另一个数据库。(例如将每个数字除以三并将它们写入另一个数据库)

由于数据库包含大约 70 列和几百万行,我的第一种方法是获取 SELECT * 并按列解析结果集。

不幸的是,我发现无法以这种方式解析它,因为指定的方式打算逐行遍历它(while(rs.next()) {} 等)。

我不喜欢这种方式,因为它会创建 70 个大型数组,我每次只有一个来减少内存使用。

所以这是我的主要问题:

  1. 有办法吗?
  2. 我应该为每一列创建一个查询并解析它们(一次一个数组,但有 70 个查询)还是
  3. 我是否应该获取整个 ResultSet 并逐行解析,将它们写入 70 个数组?

提前问候和感谢!

4

2 回答 2

2

为什么不只是分页您的查询?一次拉出“n”行,执行转换,然后将它们写入新数据库。

这意味着您不会在一次查询/迭代中提取所有内容,然后一次性编写全部内容,并且您不会遇到逐行工作的低效率。

我的另一条评论也许是过早的优化。您是否尝试过加载整个数据集,并查看需要多少内存。如果它是 10 甚至 100 兆的数量级,我希望 JVM 能够轻松处理。

我假设您的转换需要在 Java 中完成。如果您可以在 SQL 中执行此操作,那么完全在数据库中执行此操作可能会更有效。

于 2012-12-28T09:40:24.343 回答
0

你为什么不只用mysql来做呢。

使用这个查询:

create table <table_name> as select <column_name_on_which_you_want_transformation>/3 from <table name>;
于 2012-12-28T09:41:54.173 回答