2016-06-17 14 views
5

Wir verwenden HTTP-Endpunkt für Leseabfragen so weit und planen, auf Java-Bolt-Treiber zu verschieben. Aber in anfänglichen Tests wird beobachtet, dass der Schraubentreiber langsamer als der HTTP-Endpunkt ist. Folgendes ist der Java-Treibercode, den wir verwenden.neo4j Bolt-Treiber ist langsamer als HTTP-Endpunkt

Treiberinstanz auf Anwendungskontextebene erstellt: Driver neo4jReadDriver = GraphDatabase.driver ("bolt: //xyz.com" AuthTokens.basic ("Neo4j", "Neo4j"), Config.build () .withMaxSessions (20) .toConfig());

Anwendungscode zur Ausführung Abfrage:

Session session = neo4jReadDriver .session(); 

    StatementResult result = session.run("MATCH(p:GOE) return count(p) as cnt"); 


    while (result.hasNext()) 
    { 
     Record record = result.next(); 
     System.out.println("Total number of GOEs:"+ record.get("cnt").asInt()); 

    } 
    result.consume(); 
    session.close(); 
    driver.close(); 

Diese Abfrage konsequent nimmt die doppelte Zeit als HTTP-Endpunkt. Die meiste Zeit bei driver.getSession(). Mache ich etwas falsch hier? Wie erhalten Sie einen hohen Durchsatz mit dem bolt java-Treiber, während gleichzeitig Benutzer Leseabfragen ausführen?

+1

Ähnliche Ausgabe, aber mit. NET-Treiber. – MSRS

Antwort

3

Es ist nicht klar in Ihrer Beschreibung, welche Aspekte von Bolt Sie mit welchen Aspekten von HTTP vergleichen und welche Metriken Sie messen. Maximaler Durchsatz? Individuelle Abfrage Latenz? Und für welche Arbeitsbelastung? Haben Sie in Ihren Tests die Cache-Erwärmung berücksichtigt?

Angesichts der Tatsache, dass Bolt Stateful und HTTP statusless ist, gibt es keinen Wert bei der Aufnahme und Freigabe von Sessions in Ihren Messungen; In der Tat wird dies Ihre Lesungen verzerren. Vergleichen Sie stattdessen nur die Abfrage- und Ergebnisteile.

+0

Nigel, ich vergleiche die Zeit, die ich für eine Abfrage verarbeitet habe. Die Zeit, die verglichen wird, umfasst das Öffnen einer Sitzung, das Ausführen der Abfrage und das Schließen der Sitzung. Der Abfrage- und Ergebnisteil ist für BOLT und auch für HTTP gleich und der Datenbank-Cache ist aufgewärmt. Die Beobachtung ist das Öffnen und Schließen einer Sitzung für jede Abfrage ist Overhead, wenn sie mit dem HTTP-Endpunkt verglichen wird. Gibt es eine Möglichkeit, es zu vermeiden? –