我有一个500 MB的汇总XML文件,要花费30秒进行mlcp接收(大约80,000个文档),大约需要6分钟进行协调(将每个XML文档转换为JSON,然后再加载到FINAL DB)。
协调工作遵循常规的数据集线器模式(收集器,内容,编写器等)
我有50个此类文件要处理,并在寻找优化运行时间的方法。
1)有什么办法可以启动mlcp负载并并行协调多个文件(在同一作业中)?
2)在协调作业中,我尝试使用-PbatchSize和-PthreadCount参数,但它们对于批处理大小和6个线程数的影响不超过500。如何通过增加这两个值来提高性能?需要任何服务器级别的设置吗?还有其他参数可以帮助改善性能吗?
3)还有其他替代方法可以提高协调步骤的性能吗?
预先感谢!
答案 0 :(得分:0)
关于1)
您可以将输入流的MLCP指向一个目录,而不只是一个文件,并且它应该一次运行处理子树中的所有文件。输入流程完成后,您可以开始协调,协调器的收集器应选择所有可用文件。
但是,如果您希望并行化加载,则可能不应该一次加载全部。调整您的MLCP摄取以添加额外的集合,该集合指示一些导入号或仅显示聚合文件的文件名。调整收集器以使用一个(可选的?)额外参数,该参数会缩小为该导入编号或聚合文件名。然后,您运行一个聚合的导入,并在完成后对其启动协调。无需等待完成,就可以进行第二次汇总。剩下的一个一一的Dito。
关于2)
不能保证增加数字会加快速度。如果谐调相对较重,则使用较小的批处理大小和较小的线程数可能会更好。查看内存和cpu负载。仅当它们低于90%时才增加。一旦达到顶峰,进一步增加将无济于事。在这种情况下,横向扩展(将额外的节点添加到群集中)将是唯一的解决方案。
还要考虑IO速度。 MarkLogic只能在存储允许的范围内快速写入磁盘。更多的森林以及群集中拥有森林的群集中的更多节点都在其中提供帮助。
关于3)
考虑对您的协调代码进行性能分析。导入听起来相当快。在30秒内提供80k个文档非常不错,但是协调速度却慢得多。也许其中有一些效率低下的步骤。
按照我上面给出的建议进行操作可能会使您感到有改进的余地,但是通常可以从代码本身中找到最大的收获。
HTH!