Tôi xin lỗi bạn không thể tạo lại kết quả. Tuy nhiên, trên MacBook Air (1.8 GHz i7, RAM 4 GB) với heap 2 GB, bộ nhớ đệm GCR, nhưng không có bộ nhớ đệm nóng lên và không có điều chỉnh nào khác, với tập dữ liệu có kích thước tương tự (1 triệu người dùng, 50 bạn bè mỗi người) , Tôi liên tục nhận được khoảng 900 mili giây bằng cách sử dụng Khung truyền tải trên 1.9.2:
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() );
}
}
Cypher chậm hơn, nhưng không chậm như bạn đề xuất:khoảng 3 giây:
START person=node:user(name={name})
MATCH (person)-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->(friend)
RETURN count(friend)
Trân trọng
ian