如何在 MarkLogic 中管理其他已处理的数据



MarkLogic 9.0.8.2

我们在MarkLogic中有大约2000万条记录。

对于其中一个业务需求,我们需要为每个xml生成额外的数据,然后需要用户将搜索这些数据。

由于我们无法更改原始文档,因此需要输入管理其他数据的最佳方法。以下是我们想到的几个

  1. 创建单独的集合并将其他数据存储在具有相同唯一编号的单独 xml 中,即与原始 xml 相同。因此,当用户搜索它时,请在此集合中搜索,然后检索原始文档并发送回响应。
  2. 在原始文档属性中存储其他数据

我们还需要创建元素范围索引,以确保当最终用户在范围运算符中提供数据时它有效。

<abc>
<xyz>
<quan>qty1</quan>
<value1>1.01325E+05</value1>
<unit>Pa</unit>
</xyz>
<xyz>
<quan>qty2</quan>
<value1>9.73E+02</value1>
<value2>1.373E+03</value2>
<unit>K</unit>
</xyz>
<xyz>
<quan>qty3</quan>
<value1>1.8E+03</value1>
<unit>s</unit>
</xyz>
<xyz>
<quan>qty4</quan>
<value1>3.6E+03</value1>
<unit>s</unit>
</xyz>
</abc>

我们需要处理来自 value1 元素的数据。然后用户将搜索类似的东西

  • 数量1>= 最小值和数量1<=最大值
  • 数量2>= 最小值和数量2<=最大值
  • 数量3>= 最小值和数量3<=最大值

因此,当用户搜索 qty1 时,它应该只从值为 qty1 的元素中获取数据,依此类推。 所以想知道

  • 存储此类数据的最佳方法是什么
  • 我应该创建什么样的索引来实现这一点

我建议将原始数据包装在信封中,这允许在标题中添加额外的数据。它还允许在相关数据片段上创建规范视图,并将其存储为实例,并将其原始存储为"附件"(子属性,而不是附加的二进制文件(,或者保持实例原样,并将用于索引的规范值放在标题中。

有一篇关于该主题的冗长博客文章,非常详细地讨论了利弊:https://www.marklogic.com/blog/envelope-design-pattern/

哼!

Grtjn的答案是推荐的解决方案,因为将所有信息保留在文档本身中比必须使用属性查询两个文档的性能更高,但它需要对文档进行更改。

选项1和2都可以工作。

属性文档已存在,因此它不会添加片段,但属性必须符合架构。

创建 sidecar 文档提供了更大的灵活性,因为您正在创建新文档,因此会增加片段的数量。

最新更新