我遇到有关大型数据库的Resultset的问题。 (MySQLDB,Java 1.7)
任务是将一列的所有条目转换为另一个数据库。 (例如,将每个数字除以3并将其写入另一个数据库)
由于数据库包含大约70列和几百万行,我的第一种方法是获取SELECT *并按列解析Resultset。
不幸的是我发现没有办法以这种方式解析它,因为指定的方式打算逐行遍历它(while(rs.next()){}等。
我不喜欢这种方式,因为它会创建70个大型数组,我每次只能使用一个来减少内存使用量。
所以这是我的主要问题:
提前问候和感谢!
答案 0 :(得分:2)
为什么不只是page your queries?拉出' n'一次一行,执行转换,然后将它们写入新数据库。
这意味着你不能在一次查询/迭代中完成任务,然后一次性编写整个批次,而且你没有逐行工作的低效率。
我的另一个评论可能是这是不成熟的优化。您是否尝试加载整个数据集,并查看需要多少内存。如果它的大小为10或甚至100的meg,我希望JVM能够轻松处理它。
我假设你的转型需要用Java完成。如果你可以在SQL中完成它,那么完全在数据库中完成它可能会更有效率。
答案 1 :(得分:0)
为什么不用mysql做。
使用此查询:
create table <table_name> as select <column_name_on_which_you_want_transformation>/3 from <table name>;