Какой вариант лучше использовать collection () или корневой элемент в cts: search в MarkLogic - PullRequest
0 голосов
/ 08 ноября 2018

В одном из моих проектов консультант MarkLogic посоветовал мне использовать collection() в cts:search, а в другом проекте консультанты ML порекомендовали использовать корневой элемент в cts:search. В обоих проектах у нас был одинаковый объем документов. Какой из них лучше по производительности?

Допустим, у нас есть документ (я беру небольшой документ, чтобы объяснить сценарий). Он имеет коллекцию под названием "демо":

<root>
<child1>ABC</child1>
<child2>DEF</child2>
<child3>GHI</child3>
<child4>JKL</child4>
</root>

Какой случай лучше / эффективнее:

cts:search(/root, cts:and-query((....some cts:queries..)))

cts:search(collection("demo"), cts:and-query((....some cts:queries..)))

Пожалуйста, помогите мне объяснить, какой из них лучше, чем другие.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Согласно документации MarkLogic «Реализация коллекций в MarkLogic предназначена для оптимизации производительности запросов для больших объемов документов». Таким образом, это означает, что вы можете определить разницу только в огромной базе данных.

Я попытался определить это на практике, поэтому я создал два XQuery, один с коллекцией и один с элементом, как вы предложили. Но я поставил xdmp:query-trace(fn:true()) на вершине XQuery. Я выполнил оба запроса один за другим и проанализировал файл журнала MarkLogic.

Если это элемент XQuery:

2018-11-12 15:16:58.448 Info: App-Services: at 5:12: xdmp:eval("declare namespace sem = &quot;http://marklogic.com/semantics&quo...", (), <options xmlns="xdmp:eval"><database>5310618057872024096</database>...</options>)
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Analyzing path for search: fn:collection()/sem:triples
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Step 1 is searchable: fn:collection()
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Step 2 is searchable: sem:triples
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Path is fully searchable.
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Gathering constraints.
2018-11-12 15:16:58.448 Info: App-Services: at 5:12: Step 2 contributed 1 constraint: sem:triples
2018-11-12 15:16:58.449 Info: App-Services: at 5:12: Search query contributed 1 constraint: cts:element-value-query(xs:QName("sem:object"), "taxonomy", ("lang=en"), 1)
2018-11-12 15:16:58.449 Info: App-Services: at 5:12: Executing search.
2018-11-12 15:16:58.464 Info: App-Services: at 5:12: Selected 65964 fragments to filter

а если это коллекция XQuery:

2018-11-12 15:20:07.871 Info: App-Services: at 5:11: xdmp:eval("declare namespace sem = &quot;http://marklogic.com/semantics&quo...", (), <options xmlns="xdmp:eval"><database>5310618057872024096</database>...</options>)
2018-11-12 15:20:07.871 Info: App-Services: at 5:11: Analyzing path for search: fn:collection("/triples")
2018-11-12 15:20:07.871 Info: App-Services: at 5:11: Step 1 is searchable: fn:collection("/triples")
2018-11-12 15:20:07.871 Info: App-Services: at 5:11: Path is fully searchable.
2018-11-12 15:20:07.871 Info: App-Services: at 5:11: Gathering constraints.
2018-11-12 15:20:07.871 Info: App-Services: at 5:11: Step 1 contributed 1 constraint: fn:collection("/triples")
2018-11-12 15:20:07.875 Info: App-Services: at 5:11: Search query contributed 1 constraint: cts:element-value-query(xs:QName("sem:object"), "taxonomy", ("lang=en"), 1)
2018-11-12 15:20:07.875 Info: App-Services: at 5:11: Executing search.
2018-11-12 15:20:07.891 Info: App-Services: at 5:11: Selected 65964 fragments to filter

Разница явно заметна. Если мы используем запрос к коллекции, MarkLogic выполняет практически все за один шаг «1», но если это запрос элемента, MarkLogic выполняет два этапа.

0 голосов
/ 08 ноября 2018

По показателю поиска они оба являются поисками с одним термином, поэтому производительность должна быть одинаковой.

Настоящее различие заключается в том, как вы хотите управлять своим контентом. В одном документе может быть несколько коллекций, поэтому вы можете разрезать один и тот же контент несколькими способами, но у вас может быть только один корневой элемент. Коллекции также позволяют абстрагироваться от деталей структуры документа: в одной коллекции может быть несколько разных корневых элементов.

...