目前的实施 - 将原始文件分成等于服务器数量的文件。 确保每个服务器选择一个文件进行处理。 每个服务器将文件拆分为90个桶。 使用ForkManager来分叉90个进程,每个进程在一个桶上运行。 子进程将进行API调用。 合并子进程的输出。 合并每个服务器的输出。
Stats- 使用API调用下载的内容大小为40KB。 在2台服务器上,225k用户文件的上述过程在15分钟内运行。我的目标是在30分钟内完成1000万个文件。 (希望这听起来不太荒谬!)
我打算使用BerkeleyDB,但是找不到如何将BerkeleyDB文件转换为普通的ASCII文件。
答案 0 :(得分:3)
这对我来说听起来像是一次性操作。虽然我不理解30分钟的限制,但我从经验中得到了一些建议。
首先,正如我在评论中所说,您的瓶颈不会从您的文件中读取数据。它也不会将结果写回硬盘。瓶颈在于您的机器和远程机器之间的转移。您的设置听起来很复杂,但在这种情况下可能无法帮助您。
如果您正在访问网络服务,则有人正在运行该服务。有些服务器只能处理一定数量的负载。我已经把一家大型物流公司的开发环境服务器搞砸了,我在晚上运行了一个非常小的负载测试。通常情况下,这些东西都可以承受长期负荷,但不会造成短期,重负荷。
由于IT是通过各种协议(如Web服务或其他API)实现彼此交谈,因此您还应该考虑与运行此服务的人员交谈。如果您有业务关系,那很容易。如果没有,尝试找到一种方法来联系他们,并询问他们的服务是否能够处理这么多请求。你最终可能会将他们永久地排除在外,因为他们的管理员似乎试图DDOS他们。
我会问他们是否可以向他们发送文件(或数据的摘录,减少与处理相关的内容),这样他们就可以批量进行操作。这样,您可以删除用于处理Web响应所有内容的负载以及执行这些请求所需的时间。