我正在编写这份工作,需要从文件中读取大量数据并对其进行处理。目前,我只是将它们保存到一个Set中,但是很明显它不起作用,在运行作业几分钟之后,它会发出:
“内存不足: java堆”错误。
现在让我担心的是,阅读仅仅是工作的开始,一旦我把所有的数据都输入进去,我就需要构建这个表来处理它,如果我连所有的数据都看不懂,该如何构建这个巨大的表呢?我最初的计划是使用谷歌番石榴的Table类,还有其他更好的选择吗?
发布于 2013-01-10 20:50:11
正如其他人所说,在不知道更多细节的情况下,这是很难回答的。由于您正在考虑使用一个集合来保存所有这些数据,听起来您不可能仅仅一行地处理它。“处理数据”可能需要表中的其他数据。
这意味着您需要某种类型的文件支持DB。如果您无法访问普通的关系数据库来处理这个问题,那么您可以考虑使用内存中的数据库,比如H2或JavaDB/Derby。这些类型的数据库运行在与应用程序相同的VM中,但如果您相应地进行配置,它们可以使用持久存储来备份大型表。
*编辑 *
下面是一些代码,这些代码可以使用类似于H2的东西来应用。(省略异常处理)
Connection connection = DriverManager.getConnection( "jdbc:h2:pruneDB");
Statement stmt = connection.createStatement();
stmt.execute("CREATE TABLE PERSON (USER_ID INT, ITEM_ID INT, BOOK_ID INT )");
stmt.close();此时,创建一个循环,读取数据行并将它们插入DB:
while( hasMoreRows() ) {
... read the three IDs you need into variables from your file ...
int bookId = someValueFromTheTextRow;
int userId = someOtherValueFromTheTextRow;
int itemId = yetAnotherValueFromTheTextRow;
// After this, just create a PreparedStatement object, bind your IDs to it, and perform an SQL
// insert into the DB table you created above
}一旦退出循环,现在就可以使用标准SQL从该表中选择删除项。
https://stackoverflow.com/questions/14266768
复制相似问题