1

我有一个 500 MB 的聚合 XML 文件,mlcp 摄取需要 30 秒(大约 80,000 个文档),协调需要大约 6 分钟(在加载到最终数据库之前将每个 XML 文档转换为 JSON)。

协调工作遵循常规数据中心模式(收集器、内容、作者等)

我有 50 个这样的文件要处理并寻找优化运行时间的方法。

1) 有没有一种方法可以启动 mlcp 加载并为多个文件并行协调(在同一个工作中)?

2)在协调工作中,我尝试使用 -PbatchSize 和 -PthreadCount 参数,但它们对批量大小和 6 个线程计数没有超过 500 的影响。如何通过增加这两个值来提高性能?需要任何服务器级别的设置吗?是否有任何其他参数可以帮助提高性能?

3)任何其他替代方案来提高协调步骤的性能?

提前致谢!

4

1 回答 1

0

关于 1)

您可以将输入流的 MLCP 指向一个目录,而不仅仅是一个文件,它应该在一次运行中处理子树中的所有文件。输入流程完成后,您可以开始协调,协调的收集器应该拾取所有可用的文件。

但是,如果您想并行加载,您可能不应该一次性加载所有内容。调整您的 MLCP 摄取以添加一个额外的集合,指示一些导入编号或只是聚合文件的文件名。调整您的收集器以采用(可选?)额外参数,以减少该导入编号或聚合文件名。然后,您运行一个聚合的导入,并在完成后为其启动协调。无需等待此操作完成,您对第二个聚合执行相同操作。其余的则一一对应。

关于2)

增加数字并不能保证会提高速度。如果 Harmonize 相对较重,则使用较小的批量和较小的线程数可能会更好。查看内存和cpu负载。仅当它们低于 90% 时才增加。一旦达到顶峰,进一步增加将无济于事。在这种情况下,水平扩展(向集群添加额外的节点)将是唯一的解决方案。

还要考虑 IO 速度。MarkLogic 只能以存储允许的速度写入磁盘。更多的森林,以及拥有森林的集群中的更多节点对此有所帮助。

关于 3)

考虑分析您的协调代码。导入听起来相当快。30 秒内 80k 文档非常不错,但协调速度要慢得多。也许那里有一些低效的步骤。

尝试我上面给出的建议可能会让您感觉是否还有改进的空间,但通常最大的收获可以在代码本身中找到。

于 2019-02-23T20:40:46.177 回答