我对大型数据库的结果集有疑问。 (MySQLDB,Java 1.7)
任务是将一列的所有条目转换到另一个数据库中。 (例如,将每个数字除以三并将它们写入另一个数据库)
由于数据库包含大约 70 列和几百万行,我的第一个方法是获取 SELECT * 并按列解析结果集。
不幸的是,我发现无法以这种方式解析它,因为指定的方式打算逐行遍历它(while(rs.next()) {} 等)。
我不喜欢这种方式,因为它会创建 70 个大数组,我每次只创建一个数组以减少内存使用。
这是我的主要问题:
- 有办法吗?
- 我应该为每一列创建一个查询并解析它们(一次一个数组,但 70 个查询)还是
- 我应该获取整个 ResultSet 并逐行解析它,将它们写入 70 个数组吗?
提前致以问候和感谢!
最佳答案
为什么不只是 page your queries ?一次取出“n”行,执行转换,然后将它们写入新数据库。
这意味着您不必在一次查询/迭代中提取所有内容,然后一次性写入所有内容,并且不会出现逐行工作的低效率情况。
我的其他评论是这也许是不成熟的优化。您是否尝试过加载整个数据集,并查看它会占用多少内存。如果它的数量级是 10 甚至 100 兆,我希望 JVM 能够轻松处理。
我假设您的转换需要在 Java 中完成。如果您可以在 SQL 中完成此操作,那么完全在数据库中完成此操作可能会更加高效。
关于java - 按列搜索结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14067378/