【问题标题】:dividing a huge file using threads使用线程分割一个巨大的文件
【发布时间】: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


【解决方案1】:

我建议使用 MySQL。创建一个表; ID、纬度、经度、路径。编写一个脚本来插入所有数据。然后像select path from table where lat = x and long = y这样解析数据

【讨论】:

  • 我可以插入整个文件而不是插入它的路径吗?比如:创建一个表; ID、纬度、经度、文件.xml
猜你喜欢
  • 2016-01-30
  • 2011-04-07
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多