MarkLogic - 摄取和协调性能调整

MarkLogic - Ingest and Harmonize performance tuning

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

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

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

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

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

3) 还有其他方法可以提高协调步骤的性能吗?

提前致谢!

关于 1)

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

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

关于 2)

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

还要考虑 IO 速度。 MarkLogic 只能在存储允许的情况下以尽可能快的速度写入磁盘。更多的森林,以及拥有森林的集群中的更多节点会有所帮助。

关于 3)

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

尝试一下我上面给出的建议,您可能会觉得是否还有改进的余地,但通常最大的收获在于代码本身。

HTH!