내 노트북에 7.0-4를 사용하여 테스트 케이스를 만들려고했습니다. 그것은 내게는 꽤 빠른 것처럼 보입니다.보세요. 당신이하고있는 것과는 다른 곳을보십시오. 내 생각에 귀하의 쿼리는 많은 트리플을 반환하며 병목 현상이 발생합니다. 일치하는 트리플은 매우 빠르지 만 많은 수를 돌려주는 것은 비교적 느릴 수 있습니다.
먼저 taskbot을 사용하여 몇 가지 트리플을 생성합시다.
(: insert test documents with taskbot :)
import module namespace tb="ns://blakeley.com/taskbot"
at "src/taskbot.xqm" ;
import module namespace sem="http://marklogic.com/semantics"
at "MarkLogic/semantics.xqy";
tb:list-segment-process(
(: Total size of the job. :)
1 to 1000 * 1000,
(: Size of each segment of work. :)
500,
(: Label. :)
"test/triples",
(: This anonymous function will be called for each segment. :)
function($list as item()+, $opts as map:map?) {
(: Any chainsaw should have a safety. Check it here. :)
tb:maybe-fatal(),
let $triples := $list ! sem:triple(
sem:iri("subject"||xdmp:random()),
sem:iri("predicate"||xdmp:random(19)),
"object"||xdmp:random(49),
sem:iri('graph'||xdmp:random(9)))
return sem:rdf-insert($triples)
,
(: This is an update, so be sure to commit each segment. :)
xdmp:commit() },
(: options - not used in this example. :)
map:new(map:entry('testing', '123...')),
(: This is an update, so be sure to say so. :)
$tb:OPTIONS-UPDATE)
이제는 taskbot이 작업 서버에서 대부분의 작업을 수행합니다. 따라서 ErrorLog.txt
을 모니터링하거나 CPU가 다운 될 때까지 기다렸다가 트리플 카운트가 1M을 기다리십시오.
count(cts:triples()),
count(cts:triples((), sem:iri("predicate0"))),
count(cts:triples((),(), "object0")),
count(
cts:triples((),(),(),(),(), cts:collection-query("graph0")))
=>
1000000
49977
19809
100263
당신은 술어, 객체, 및 수집에 대해 다른 수를 얻을 수 있습니다 : 그 후, 이제 우리가로드 된 것을 볼 수 있도록 데이터가 무작위로 생성 된 것을 기억한다. 그러나 쿼리를 사용해 봅시다.
count(
cts:triples(
(), sem:iri("predicate0"), "object0",
(),(), cts:collection-query("graph0")))
, xdmp:elapsed-time()
결과 :
100
PT0.004991S
나에게 꽤 빨리 보인다 : 5-MS. 데이터가 무작위로 생성 되었기 때문에 다른 수를 얻을 수도 있지만 가까운 수이어야합니다.
큰 결과 집합을 사용하면 속도가 느려집니다. 예를 들어,
count(
cts:triples(
(),(),(),
(),(), cts:collection-query("graph0")))
, xdmp:elapsed-time()
=>
100263
PT0.371252S
count(cts:triples())
, xdmp:elapsed-time()
=>
1000000
PT2.906235S
count(cts:triples()[1 to 1000])
, xdmp:elapsed-time()
=>
1000
PT0.002707S
볼 수 있듯이 응답 시간은 대략 O (n)이며 세 배수입니다. 사실 그것은 O (n)보다 조금 나아졌지만, 그 야구장에서. 어쨌든 cts:collection-query
은 문제가 아닙니다.
MarkLogic의 정식 버전 번호는 무엇입니까? – mblakele
"성능이 저조한"것은 무엇을 의미합니까? 몇 가지 숫자를 들어 봅시다. 얼마나 많은 트리플이 데이터베이스에 있습니까? 얼마나 많은 주제가 일치합니까? 얼마나 많은 객체와 일치합니까? 컬렉션과 일치하는 항목은 몇 개입니까? 샘플 쿼리는 어느 정도 걸립니까? – mblakele