Read / write performance dramatically degrades with concurrent queries

There's for sure something wrong here. Getting 8/10 req/s out of this configuration is close to nothing. A target throughput of 500-600 req/s should be easy to reach.

id(x) should not cause any issues. It's a O(1) operation that basically performs a seek operation on your IO subsystem.

Couple of questions to understand the issue better:

  • What's the cardinality? How many Cards does a Persona have? Are there "superpresonas" with a huge number of cards?
  • How many properties to you store on your Card nodes?
  • Can you check using htop (or similar) how busy your CPUs are going while you increase the load?
  • Did you do any config changes with respect to bolt serverside pool sizes?
  • Can you rule out network latency of being an issue? Are your clients based in the same physical location than your server?
  • Do you have any heap extensive operations (large writes, heavy read operations like ORDER BY, DISTINCT, ...) ? If not I think heap of 24G might be too large.

On a different notice: if you're on AWS and use Ubuntu, consider enabling ENA, see Enable enhanced networking with the Elastic Network Adapter (ENA) on Linux instances - Amazon Elastic Compute Cloud. For the given issue I suspect this won't make a big difference, but worth a try.