我需要比较两个csv文件,每个文件大约有500000到900000行(是的,它们很大),我想知道哪种是最好的方法。
我需要做什么
我可以尝试将每个CSV文件存储在JAVA列表中,并创建一个数据库(使用SQLite)并显示最终结果(差异和删除的行),然后对该数据库进行查询,例如仅从一个城市中进行选择,从某些日期/小时或代码(甚至是所有这些都在同一时间,最终用户将使用复选框或组合框在界面中应用过滤器)
每个CSV文件看起来都与此类似
CITY; CODE; DATETIME; Quantity
city1; city_1_code_1; DD/MM/YYYY hh:mm:ss; 2500
我不确定哪种方法是执行此性能的最佳方法。我应该将数据保留在内存中,仅使用列表进行比较吗?如果不是,使用SQLite足以做到这一点?还是我应该使用其他东西?我是否错过了执行此操作的更好方法?
我正在使用JavaFX进行开发,结果应该显示在表格中(这完全不是问题,只是为了让您了解上下文)
预先感谢,如果您需要了解任何信息,请告诉我
答案 0 :(得分:1)
在测试性能之前,您永远无法确定,但是SQLite似乎可以轻松处理一百万行。一些Stack Overflow用户似乎可以在much larger data sets上工作。
从可维护性的角度来看,使用具有适当索引的数据库是足够快的方法。如果它不能满足您的需求,那么您可以考虑其他更复杂的方法。
如果决定使用内存中列表,则可以考虑使用Java生态系统中可用的高性能集合库之一。我不推荐任何东西,但您可以看看例如here得到一个想法。尽管如此,除非您经常在整个集合中进行操作,否则SQLite方法可能仍然会更快(再次,测试是关键)。
最后,一个中间的方法是使用in-memory database。