【发布时间】:2015-08-07 15:27:56
【问题描述】:
我有一个包含超过 5 亿行的文本文件,其结构如下:
54517. lat:53.533459; lon:8.8005426; path:c:\brem_5.xml;
54518. lat:53.037579; lon:8.800404; path:c:\brem_5.xml;
54519. lat:53.03358275; lon:8.610994; path:c:\brem_5.xml;
54520. lat:53.027389; lon:8.797809; path:c:\brem_6.xml;
54521. lat:53.043866; lon:8.7971675; path:c:\brem_7.xml;
54522. lat:53.0311901; lon:8.794269; path:c:\brem_7.xml;
....
....
....
我正在编写一个给定“lat”和“lon”的方法,它应该返回路径。我想把这个巨大的文件分成“sec0,sec1,sec2,sec3,...,secn”的部分,然后为每个部分创建寻找“lat”和“lon”的线程,当一个线程返回路径,其他线程将被杀死。
我的问题是,我的方法有效吗?以及此类问题的最佳解决方案是什么。
【问题讨论】:
-
数据库可以更好地处理这类任务。
-
@biziclop 什么样的数据库?你能推荐我应该使用哪个数据库吗?
-
您可以尝试 SQL/SQLite,因为所有字段都相同(或者看起来如此)。如果文件不同部分的字段不同,那么 MongoDB 将是更好的选择。要回答您的原始问题,解析具有多个线程的文件是有效的,只要您知道 1 个线程开始和 1 个线程结束的位置并且您不修改文件。
-
@rmaik 如果你有足够的内存,你可以做一些事情,比如制作字典/地图/哈希。可能不是最好的,但尝试一下可能会很有趣。
-
在 java 文档下查看内置对象类型。 docs.oracle.com/javase/7/docs/api/java/util/Map.html - 在底部提供使用地图界面的对象列表。 5 亿行/条目可能有点多。
标签: java multithreading countdownlatch completable-future