Mysql
 sql >> база данни >  >> RDS >> Mysql

производителността на neo4j в сравнение с mysql (как може да се подобри?)

Съжалявам, че не можете да възпроизведете резултатите. Въпреки това, на MacBook Air (1,8 GHz i7, 4 GB RAM) с 2 GB купчина, GCR кеш, но без затопляне на кеш паметта и без друга настройка, с набор от данни с подобен размер (1 милион потребители, 50 приятели на човек) , многократно получавам приблизително 900 ms, използвайки Traversal Framework на 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 е по-бавен, но далеч не толкова бавен, колкото предлагате:приблизително 3 секунди:

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

Сърдечни поздрави

Ян



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Коя от тези 2 настройки на базата данни да избера?

  2. Използвайте LIMIT, за да разделите резултатите в MySQL заявка

  3. Преобразуване на MySQL в Doctrine Query Builder. Проблеми с IF и CONCAT. Или друг подход за подзаявки при избор

  4. Изпращане на HTML код чрез JSON

  5. #1221 - Неправилно използване на UPDATE и ORDER BY