में "सुपरनोड्स" मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो ग्राफ डेटाबेस (Titan) के साथ अच्छी तरह से काम कर सके, सिवाय इसके कि इसमें कई किनारों के साथ शीर्षकों के साथ समस्याएं हैं, यानी supernodes।टाइटन
टाइटन के लेखकों से ब्लॉग पोस्ट पर अंक के ऊपर सुपरनोड लिंक, समस्या को हल करने का एक तरीका बताते हुए। समाधान किनारों पर फ़िल्टर करके शिखर की संख्या को कम करने लगता है।
दुर्भाग्य से मैं groupCount
किनारों या शिखर के गुणों को देखना चाहता हूं। उदाहरण के लिए मेरे पास 1 मिलियन उपयोगकर्ता हैं और प्रत्येक उपयोगकर्ता एक देश से संबंधित है। मैं प्रत्येक देश में उपयोगकर्ताओं की संख्या को काम करने के लिए तेज़ groupCount
कैसे कर सकता हूं?
क्या मैं अब तक इस विस्तृत ग्रूवी लिपि में दिखाया जा सकता है की कोशिश की है: (टाइटन एक "सभी" नोड्स देखने नहीं होने की खातिर)
g = TitanFactory.open('titan.properties') // Cassandra
r = new Random(100)
people = 1e6
def newKey(g, name, type) {
return g
.makeType()
.name(name)
.simple()
.functional()
.indexed()
.dataType(type)
.makePropertyKey()
}
def newLabel(g, name, key) {
return g
.makeType()
.name(name)
.primaryKey(key)
.makeEdgeLabel()
}
country = newKey(g, 'country', String.class)
newLabel(g, 'lives', country)
g.stopTransaction(SUCCESS)
root = g.addVertex()
countries = ['AU', 'US', 'CN', 'NZ', 'UK', 'PL', 'RU', 'NL', 'FR', 'SP', 'IT']
(1..people).each {
country = countries[(r.nextFloat() * countries.size()).toInteger()]
g.startTransaction()
person = g.addVertex([name: 'John the #' + it])
g.addEdge(g.getVertex(root.id), person, 'lives', [country: country])
g.stopTransaction(SUCCESS)
}
t0 = new Date().time
m = [:]
root = g.getVertex(root.id)
root.outE('lives').country.groupCount(m).iterate()
t1 = new Date().time
println "groupCount seconds: " + ((t1 - t0)/1000)
मूल रूप से एक रूट नोड, कई से जुड़ा हुआ person
किनारों के माध्यम से country
संपत्ति है। जब मैं समूह मिल() को 1 मिलियन शिखर पर चलाता हूं, तो इसमें एक मिनट लगते हैं।
मुझे एहसास है कि टाइटन शायद प्रत्येक किनारे पर फिर से चल रहा है और गणना एकत्र कर रहा है, लेकिन क्या टाइटन या किसी अन्य ग्राफ डेटाबेस में यह तेजी से चलाने का कोई तरीका है? क्या इंडेक्स की गणना की जा सकती है, इसलिए इसे पार करना नहीं है? क्या मेरी अनुक्रमणिका सही है?