sql >> Databasteknik >  >> RDS >> Mysql

neo4j prestanda jämfört med mysql (hur kan det förbättras?)

Jag är ledsen att du inte kan återskapa resultaten. Men på en MacBook Air (1,8 GHz i7, 4 GB RAM) med en 2 GB hög, GCR-cache, men ingen uppvärmning av cacher och ingen annan inställning, med en datauppsättning av liknande storlek (1 miljon användare, 50 vänner per person) , får jag upprepade gånger cirka 900 ms med Traversal Framework på 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 är långsammare, men inte i närheten av så långsam som du föreslår:ca 3 sekunder:

START person=node:user(name={name})
MATCH (person)-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->()-[:FRIEND]->(friend)
RETURN count(friend)

Med vänlig hälsning

ian



  1. mysql ID automatisk inkrement börjar inte från 0

  2. Det går inte att ta bort databasen

  3. 2 funktioner som returnerar sekunderna från ett Datetime-värde i Oracle

  4. Hur ansluter man till en MySQL-databas från en iPhone?