2016-06-17 20 views
5

Stiamo utilizzando l'endpoint http per le query lette finora e stiamo pianificando di passare al driver java bolt. Ma nei test iniziali si è osservato che il driver del bullone è più lento del punto finale http. di seguito è riportato il codice del driver Java che stiamo utilizzando.Il driver del bullone neo4j è più lento del punto finale http

esempio driver creato a livello di contesto Applicazione: Driver neo4jReadDriver = GraphDatabase.driver ("bolt: //xyz.com", AuthTokens.basic ("Neo4j", "Neo4j"), Config.build () .withMaxSessions (20) .toConfig());

codice dell'applicazione per la query esecuzione:

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(); 

Questa query richiede costantemente il doppio del tempo rispetto http endpoint. La maggior parte del tempo impiegato su driver.getSession(). Sto facendo qualcosa di sbagliato qui? Come ottenere un throughput elevato utilizzando il driver java bolt con utenti concorrenti che eseguono le query di lettura?

+1

Problema simile ma con driver .net. – MSRS

risposta

3

Non è chiaro dalla descrizione quali aspetti di Bolt si stanno confrontando con quali aspetti di HTTP e quali metriche si stanno misurando. Massimo throughput? La latenza delle query individuali? E per quale carico di lavoro? Hai preso in considerazione il riscaldamento della cache nei test?

Dato che Bolt è statico e stateless HTTP, non vi è alcun valore nell'includere l'acquisizione e il rilascio delle sessioni nelle misurazioni; in effetti, questo distorce le tue letture. Invece, confronta solo la query e le parti dei risultati.

+0

Nigel, sto confrontando il tempo impiegato per elaborare una query. Il tempo a disposizione include l'apertura di una sessione, l'esecuzione della query e la chiusura della sessione. Solo la parte query e risultato è la stessa per BOLT e anche con HTTP e la cache del database viene riscaldata. L'osservazione si sta aprendo e chiudendo una sessione per ogni query è overhead rispetto al punto finale HTTP. C'è un modo per evitarlo? –