2016-06-20 13 views
5

मेरे पास अलग-अलग दस्तावेज़ों के हिस्से के रूप में संग्रहीत अप्रबंधित ट्रिपल हैं जिन्हें मैं अपनी सामग्री डीबी में संग्रहीत कर रहा हूं। अनिवार्य रूप से प्रत्येक दस्तावेज़ एक व्यक्ति का प्रतिनिधित्व करता है, और परिभाषित ट्रिपल व्यक्ति के प्रबंधक के लिए दस्तावेज़ यूआरआई निर्दिष्ट करता है। मैं पाराचार में उनके नीचे एक प्रबंधक और उनके नीचे के सभी लोगों के बीच पथ की लंबाई निर्धारित करने के लिए SPARQL का उपयोग करने की कोशिश कर रहा हूं।क्या SPARQL क्वेरीज़ को अनुकूलित करने का कोई तरीका है?

दस्तावेज़ में ट्रिपल तरह

<sem:triple xmlns:sem="http://marklogic.com/semantics"> 
    <sem:subject>http://rdf.abbvienet.com/infrastructure/person/10740024</sem:subject> 
    <sem:predicate>http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager</sem:predicate> 
    <sem:object>http://rdf.abbvienet.com/infrastructure/person/10206242</sem:object> 
</sem:triple> 

मैं पदानुक्रम में निम्नलिखित SPARQL क्वेरी, जो एक प्रबंधक वापस जाने के लिए इस्तेमाल किया जा सकता, उन्हें नीचे aperson पाया है देखो, और नोड्स की संख्या दूर वे कर रहे हैं ।

select ?manager ?leaf (count(?mid) as ?distance) { 
    BIND(<http://rdf.abbvienet.com/infrastructure/person/10025613> as ?manager) 
    ?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid . 
    ?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+ ?manager . 
} 
group by ?manager ?leaf 
order by ?manager ?leaf 

यह काम करता है, लेकिन बहुत धीमी है, यहां तक ​​कि इस मामले में जहां पदानुक्रम पेड़ मैं देख रहा हूँ एक या दो स्तर नीचे है में, चारों ओर 15s। मेरे पास 63,139 डीबी में इस प्रकार के प्रबंधक ट्रिपल हैं।

+0

यह 'पत्थर' द्वारा नहीं होना चाहिए क्योंकि आपके पास 'प्रबंधक' के लिए केवल एक बाध्यकारी है। – scotthenninger

उत्तर

6

मुझे लगता है कि सबसे बड़ी समस्या BIND() होने जा रही है - MarkLogic 8 आपके द्वारा उपयोग किए जा रहे पैटर्न को अनुकूलित नहीं करता है। क्या आप ?manager वैरिएबल का उपयोग करने वाले स्थानों में अपने स्थिरता को प्रतिस्थापित करने का प्रयास कर सकते हैं यह देखने के लिए कि क्या इससे बड़ा अंतर आता है? यानी .:

select ?leaf (count(?mid) as ?distance) { 
    ?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid . 
    ?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+ 
    <http://rdf.abbvienet.com/infrastructure/person/10025613> . 
} 
group by ?leaf 
order by ?leaf 

StackOverflow इस तरह प्रदर्शन सवालों के जवाब देने के लिए एक महान जगह है, के रूप में यह वास्तव में एक बातचीत जहाँ हम एक साथ काम करने में आपकी मदद की जरूरत है नहीं है। हो सकता है कि आप इस तरह के प्रश्न के लिए support या MarkLogic developer mailing list से संपर्क करने का प्रयास कर सकते हैं?

+0

जगह के बाध्य के बिना, यह एक बहुत तेज़ निष्पादन है। धन्यवाद। –

+0

बस एक और टिप्पणी। यदि मैं 'sem: sparql' कॉल में बाध्य पैरामीटर सेट करता हूं तो यह भी तेज़ है। यह केवल धीमा है जब मैं सीधे SPARQL में बांधता हूं। –

संबंधित मुद्दे