我有一个场景,其中
=====================
我正在考虑如何设计它
- 阅读文件(nio)
- 读取文件的线程可以将这些块保存到JMS队列中
- 创建代表n个服务器的n个线程(数据将被发送到该服务器)。然后n并行运行的线程可以一次拾取一个块。通过向服务器发送请求来执行该块。
你能否建议以上是否正常,或者你看到任何缺陷:)。如果你能提出更好的方法/技术来做到这一点,那就太好了。
谢谢!
更新了:我写了一个程序,用20m记录读取该文件,使用Apache Commons IO(文件迭代器)我以块的形式读取文件(时间10行)。它在1.2秒内读取文件。这有多好?我应该想到去nio吗? (当我确实把日志打印出来时,花了大约26秒!)
答案 0 :(得分:3)
2000万条记录实际上不是那么多,所以首先我会尝试正常处理它,你可能会觉得性能很好。
之后你将需要衡量一切。
您需要顺序读取磁盘以获得良好的速度,因此必须是单线程的。
您不希望磁盘读取等待网络或等待磁盘读取的网络,因此将读取的数据丢弃到队列中是一个好主意。为了获得最佳性能,您可能需要大于一行的块大小。测量不同块大小的性能,以便查看。
您可能会发现网络发送速度比磁盘读取速度快。如果是这样,那么你就完成了,如果没有,那么在那时你可以启动更多从队列读取的线程并用它们进行测试。
所以你的调整因素是:
确保您针对各种组合测量大小适中的数据,以找到最适合您情况的数据。
答案 1 :(得分:1)
我相信您可以批量记录而不是一次发送一个。考虑到服务器需要处理的数据量,您可以避免不必要的网络跳跃。