Bolt vs HTTP? Starting new transactions? Looking for concrete class?


(Awu) #1

Hi, thanks in advance for your help and guidance.

I have a graphdb running on a dev server through HTTP. When I run a query through the http driver, it is pretty quick.
On a different server running through Bolt, the query performance degrades.
Let's say for a result set of 10, the HTTP query is < 0.5s and for the Bolt server it is usually 1.5s but sometimes 2-3 seconds.

I'd like to narrow down to whether this is an issue in the protocol, the Neo4j server settings, or in my application.

The result on the Bolt server display the following in logs:

2018-10-05 16:58:42.173  INFO 9 --- [nio-3000-exec-9] o.n.o.drivers.bolt.request.BoltRequest   : Request: MATCH (e:Employee)-[rel:EMPLOYEE_OF]->(c:Company {cid:{0}})  RETURN e with params {0=Qym7Ez1o}
2018-10-05 16:58:42.173 DEBUG 9 --- [nio-3000-exec-9] o.n.ogm.drivers.bolt.driver.BoltDriver   : No current transaction, starting a new one
2018-10-05 16:58:42.173 DEBUG 9 --- [nio-3000-exec-9] o.n.ogm.drivers.bolt.driver.BoltDriver   : Native transaction: org.neo4j.driver.internal.ExplicitTransaction@6b1b6edc
2018-10-05 16:58:42.174 DEBUG 9 --- [nio-3000-exec-9] o.n.o.d.b.transaction.BoltTransaction    : Committing native transaction: org.neo4j.driver.internal.ExplicitTransaction@6b1b6edc
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.transaction.Transaction    : Thread 44: Commit transaction extent: 0
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.transaction.Transaction    : Thread 44: Committed
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.transaction.Transaction    : Thread 44: Close transaction extent: 0
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.transaction.Transaction    : Thread 44: Closing transaction
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.MetaData                   : looking for concrete class to resolve label: Employee
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.MetaData                   : concrete class found: com.hl.resources.graph.entity.NodeEmployee. comparing with what's already been found previously...
2018-10-05 16:58:42.179 DEBUG 9 --- [nio-3000-exec-9] org.neo4j.ogm.MetaData                   : Employee resolving class: com.hl.resources.graph.entity.NodeEmployee

where as on the HTTP request, the only line in the logs is:

2018-10-05 10:48:14.193  INFO 67195 --- [nio-8080-exec-1] o.n.o.drivers.http.request.HttpRequest   : Thread: 93, url: https://[[REDACTED]]:7474/db/data/transaction/commit, request: {"statements":[{"statement":"MATCH (e:Employee)-[rel:EMPLOYEE_OF]->(c:Company {cid:{0}})  RETURN e","parameters":{"0":"9m6vyvmn"},"resultDataContents":["graph"],"includeStats":false}]}

Some questions:

  1. Will changing the protocol from Bolt to HTTP help with the performance?
  2. What is causing the "No current transaction" log entry? Is that expected?
  3. What is contributing to the "looking for concrete class to resolve label" entry?

EDIT: I should add that if I change the development server to ping the same graph db but with Bolt, I do not get the same "no current transaction" and "looking for concrete class" messages.

2+3 bias me towards some setting in the graphdb that may not be the same as the development db (which is pretty much stock defaults).

Thanks again in advance for your help.


(Michael Hunger) #2
  1. Can you enable query logging and share the queries that are run for those?
  2. How much and what kind of data is returned from those queries?

Can you try to run it against the same server, so there is no difference in the environment.