【问题标题】:How to manage additional processed data in MarkLogic如何在 MarkLogic 中管理额外处理的数据
【发布时间】:2020-06-04 06:43:44
【问题描述】:

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 元素的数据。然后用户将搜索类似的东西

  • qty1 >= minvalue AND qty1
  • qty2 >= minvalue AND qty2
  • qty3 >= minvalue AND qty3

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

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

【问题讨论】:

    标签: indexing marklogic data-processing


    【解决方案1】:

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

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

    HTH!

    【讨论】:

    • 您好 Grtjn,感谢您的快速回复。是否需要更改现有数据?我们可以在标题中的数据上创建元素范围索引吗?性能怎么样?
    • @ManishJoisar 标头只是一个 XML 文档,所以是的。
    • 整个信封可以是 XML 或 JSON,这取决于您最方便的方式。如果您有 XML 数据,请使用 XML 信封。性能是最佳的,因为片段/文档之间不需要连接。
    • 您必须以不同的方式存储原始数据,所以是的,您必须更改数据库中当前拥有的数据,但如果您使用我们的数据中心,则将其包装在信封中将是默认方法接近。
    • 您的原始数据以及您添加的任何额外内容将形成一个大文档,如果您确保保留原始数据,您可以非常轻松地从中提取原始数据。除非您使用范围查询或专注于特定部分的路径索引,否则索引将适用于整个信封。
    【解决方案2】:

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

    选项 1 和 2 都可以。

    属性文档已经存在,所以不添加片段,但是属性必须conform to the schema

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

    【讨论】:

    • 使用默认设置,不会创建属性片段。所以使用属性会使片段的数量增加一倍。
    • 属性遵循一定的格式是事实,但您会注意到您可以在内部推送很多内容,包括完整的 XML 树。请记住,它是 XML,因此插入二进制或 json 不太方便。
    • 如果您真的不想更改原始文档,并且您只有少量额外数据,请考虑使用隐藏元数据字段。
    • 在属性中添加了额外的数据并且搜索正在工作,所以现在的问题是,无论我们可以在原始文档上执行什么实现(搜索功能),我们也可以对属性执行相同的操作吗?
    • 在大多数情况下,我相信如此。 docs.marklogic.com/guide/app-dev/properties
    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2016-04-12
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多