【发布时间】:2014-02-27 11:00:29
【问题描述】:
我有一个场景,其中
- 必须读取具有特定格式、以 \n 分隔的巨大输入文件,它有近 2000 万条记录。
- 每条记录都必须通过以特定格式发送到服务器来读取和处理。
======================
我正在考虑如何设计它。
- 读取文件(nio)
- 读取文件的线程可以将这些块保存到 JMS 队列中。
- 创建代表 n 个服务器(数据要发送到的服务器)的 n 个线程。然后 n 个并行运行的线程可以一次获取一个块。通过向服务器发送请求来执行该块。
您能否建议上述是否可行,或者您是否发现任何缺陷:)。如果您能提出更好的方法/技术来做到这一点,那就太好了。
谢谢!
更新:我编写了一个程序来读取具有 20m 条记录的文件,使用 Apache Commons IO(文件迭代器)我以块的形式读取文件(一次 10 行)。它在 1.2 秒内读取文件。这有多好?我应该考虑去nio吗? (当我确实放了一个日志来打印这些块时,花了将近 26 秒!)
【问题讨论】:
-
你能进一步定义 HUGE 吗?我建议从最简单的单线程实现开始。您可能会对所取得的性能感到惊讶。
-
是的,该文件有将近 2000 万条记录,每条记录有 10 个逗号分隔的单词。
-
块是什么意思?
-
你应该小心并行化,因为它可能每次都会打开一个新连接,而且我猜你不想打开 100 多个与服务器的连接。
-
使用 n 个线程的整个想法是我必须拥有 n 个服务器。最重要的是,拥有 n 个线程意味着 n 个连接到 n 个服务器。但是我仍然需要考虑如何管理网络端..使用连接工厂或那里的东西..谢谢!
标签: java multithreading nio