MarkLogic 集群如何加载和管理数据

How data is loaded and managed by a MarkLogic cluster

请问这个集群是如何加载数据的,是否需要手动分别加载数据到每个节点?或者 marklogic 是否能够在集群本身之间管理和传输数据,所以我需要做的就是将数据加载到单个节点中?

对于marklogic理解和平衡某些forests/databases之间的数据有一定的要求吗?例如需要林和数据库共享相同的名称或 XDBC 服务器共享相同的端口号?最后想请教一下,有没有办法提高数据摄取吞吐量?我试图通过一次将数据泵入所有 3 个节点来做到这一点,但这导致其他两个节点出现错误。因此,我返回使用单个节点来抽取数据,目前 运行 已使用 CPU 的 100%。

从此处的评论中提取的问题:

数据库把数据存储在森林里,哪里有森林,哪里就有数据分布。因此,如果您在两台主机上都有一个带有林的数据库,它会自动平衡两台主机之间的数据。您可以使用分配策略更改数据库如何确定将哪些数据放置在哪个林中,默认为 bucket

再平衡没有一定的要求。应用服务器和林被分配给特定的数据库,因此它们已经链接在一起。

因此,提取到应用服务器的数据将写入指定的数据库。然后,该数据库将确定将数据放置在哪些森林中。这有时可能会导致一个集群主机上的森林比另一台集群主机上的森林变得更大,此时数据库将决定将一些数据重新分配给分配给同一数据库的其他森林,这些森林可能在也可能不在同一数据库上主持人。

提高摄取吞吐量的方法有很多,但最常见的方法如下:

  • 增加宿主的受限资源。这意味着如果您 CPU 受限,请添加核心;如果您的内存受限,请添加内存;等等
  • 增加涉及的主机数量。通过负载平衡或多个摄取管道。

由于您使用的是 MLCP,它会检索集群中的林主机列表,并且默认情况下会在整个集群中分配工作。有一些选项,请参阅 here

要查看作品是否正在分发,您可以在管理员中查看 UI:配置 -> 群组 --> 默认 --> 应用服务器 --> [您的摄取应用服务器],点击状态 选项卡和 显示更多 按钮。它应该列出所有主机,以及集群中每个主机正在处理的请求数。如果一个主机数量明显高于其他主机,则工作可能无法正确分配。

一旦数据被摄取,它就会在整个森林中得到平衡。它不会是完全相同的文档数量,也不会使用相同的 space。服务器将决定森林何时太小或太大,并相应地移动文档。重新平衡可能会占用大量资源,因此服务器会尝试权衡将数据保留在原地与将其移动到另一个林的成本。

如果您主要摄取到单个节点,您可能还会在该节点上看到更大的森林,出于上述原因,服务器会权衡移动数据与保留数据的成本。

索引也会影响磁盘的大小,特别是当文档大小多种多样时,由于文档类型的原因,一些森林最终可能会比其他森林拥有更大的索引。

还有许多其他因素会影响每个节点使用的 spaced。一是删除片段的数量;这些片段已被标记为删除,但尚未从森林中合并。如果森林看到大量摄取 activity,或者合并优先级降低,它可能会导致一些森林比其他森林大很多,直到它有机会合并删除的片段。

您提到您尝试摄取所有三个节点,但没有成功。不知道你是如何摄取数据的,也不知道你遇到的确切错误,很难说为什么它对你不起作用,但这通常是 MarkLogic 的使用方式。

MarkLogic 提供许多免费课程,包括点播和讲师指导。我建议花几个小时 MarkLogic Fundamentals. Check out mlu.marklogic.com for a list of other courses as well. You can also check out the MarkLogic Concepts Guide,这很好地概述了 MarkLogic 的工作原理。