मुझे खेद है कि आप परिणामों को पुन:पेश नहीं कर सकते। हालांकि, मैकबुक एयर (1.8 गीगाहर्ट्ज i7, 4 जीबी रैम) पर 2 जीबी हीप के साथ, जीसीआर कैश, लेकिन कैश की कोई वार्मिंग नहीं, और कोई अन्य ट्यूनिंग नहीं, समान आकार के डेटासेट (1 मिलियन उपयोगकर्ता, प्रति व्यक्ति 50 मित्र) के साथ। , मैं बार-बार 1.9.2 पर ट्रैवर्सल फ्रेमवर्क का उपयोग करके लगभग 900 एमएस प्राप्त करता हूं:
public class FriendOfAFriendDepth4
{
private static final TraversalDescription traversalDescription =
Traversal.description()
.depthFirst()
.uniqueness( Uniqueness.NODE_GLOBAL )
.relationships( withName( "FRIEND" ), Direction.OUTGOING )
.evaluator( new Evaluator()
{
@Override
public Evaluation evaluate( Path path )
{
if ( path.length() >= 4 )
{
return Evaluation.INCLUDE_AND_PRUNE;
}
return Evaluation.EXCLUDE_AND_CONTINUE;
}
} );
private final Index<Node> userIndex;
public FriendOfAFriendDepth4( GraphDatabaseService db )
{
this.userIndex = db.index().forNodes( "user" );
}
public Iterator<Path> getFriends( String name )
{
return traversalDescription.traverse(
userIndex.get( "name", name ).getSingle() )
.iterator();
}
public int countFriends( String name )
{
return count( traversalDescription.traverse(
userIndex.get( "name", name ).getSingle() )
.nodes().iterator() );
}
}
साइफर धीमा है, लेकिन कहीं भी उतना धीमा नहीं है जितना आप सुझाव देते हैं:लगभग 3 सेकंड:
START person=node:user(name={name})
MATCH (person)-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->(friend)
RETURN count(friend)
सादर
इयान