JDBC has been the de-facto standard for accessing relational databases for a long time. Times are however changing. In cloud environments the pay-per-use model is popular. If you can use resources more efficiently, you can save money! In addition, when running applications at cloud-scale, the number of concurrent requests which hit your services can skyrocket. Can JDBC handle such concurrency efficiently? Answer: No. The time has come to look beyond JDBC!
For services, reactive frameworks are becoming more popular. These frameworks can make more efficient use of resources due to their non-blocking nature, especially at high concurrency. Now with R2DBC relational databases can also be accessed using a reactive API! This means more efficient use of CPU and memory and better response times and throughput at high concurrency.
A tempting story but there are of course many questions
- Is R2DBC mature enough to implement?
- Which R2DBC drivers are available?
- Is framework support available?
- What do you need to do in order to implement R2DBC?
- Does it improve performance enough to make the switch worthwhile?
- Do I need to have a completely non-blocking stack to benefit from using R2DBC?
To answer these questions and more, I’ve created several implementations using R2DBC and JDBC with Spring Web MVC and Spring WebFlux and put them to the test. I looked at how to implement R2DBC and measured resource usage, throughput, and responsetimes. Interested in the results? Hint: R2DBC is pretty cool!