Chronicle Map
HikariCP
Our great sponsors
Chronicle Map | HikariCP | |
---|---|---|
4 | 33 | |
2,680 | 19,369 | |
0.7% | - | |
8.5 | 6.5 | |
4 days ago | 24 days ago | |
Java | Java | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Chronicle Map
-
GC, hands off my data!
I decided to start with an overview of what open-source options are currently available. When it comes to the implementation of the on-heap cache mechanism, the options are numerous – there is well known: guava, ehcache, caffeine and many other solutions. However, when I began researching cache mechanisms offering the possibility of storing data outside GC control, I found out that there are very few solutions left. Out of the popular ones, only Terracotta is supported. It seems that this is a very niche solution and we do not have many options to choose from. In terms of less-known projects, I came across Chronicle-Map, MapDB and OHC. I chose the last one because it was created as part of the Cassandra project, which I had some experience with and was curious about how this component worked:
-
Off-heap memory in Java
Chronicle-Map: Chronicle Map is an in-memory, key-value store, designed for low-latency, and/or multi-process applications.
-
Solution for hash-map with >100M values
I've wrangled data sets in the ~600gb range using nothing but plain old Java and a few beefy boxes. This can all be kept in memory, but you have to go off-heap. You can use Chronicle Map and Chronicle Values to model this data and work with it off-heap in a way that's still very clean and object oriented. 128gb of RAM is cheap these days, whether you're in the cloud or not.
HikariCP
-
Java virtual threads caused a deadlock in TPC-C for PostgreSQL
Looks like HikariCP is also awaiting fixes for this https://github.com/brettwooldridge/HikariCP/pull/2055
- About Pool Sizing
- HikariCP maximumPoolSize based on AWS ECS number of tasks
-
Writing to db
I have used hikari and exposed to do this in the past with postgres, although other dialects are supported.
-
A Tale of Two Connection Pools
I found one suggestion from the author of HikariCP on how to address this, which I implemented and it worked. However, there are additional classes involved, and it feels a little clunky and hard to follow.
-
Spring boot change password runtime
Not really, you can change some things in spring boot but doing so will typically trigger a refresh which is less reliable than restarting but still causes a large performance hit. You could probably do it with hikari if you really needed to but it's inadvisable to build your application around this mechanic.
-
Help with bungeecord server
# https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
-
Currently load testing a Django API I don’t get good results, Help me brainstorm this
Not familiar with Python but this thread about a Java connection pool might be interesting: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
-
Should I use diesel ORM if performance is the most important thing?
Whatever you choose, presuming your app is database heavy, I highly recommend spending time on DB schema design to make all queries as short as possible, avoid relying on transactions, and keep your connection pool tiny. For reference: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
-
Art of README
You reminded me of the HikariCP library and it’s documentation: Clear and simple with references to other libraries trying to accomplish the same thing. It is not in the closure space though.
What are some alternatives?
MapDB - MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.
c3p0 - a mature, highly concurrent JDBC Connection pooling library, with support for caching and reuse of PreparedStatements.
Redisson - Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...
spring-boot-r2dbc - An example implementation of Spring Boot R2DBC REST API with PostgreSQL database.
JetBrains Xodus - Transactional schema-less embedded database used by JetBrains YouTrack and JetBrains Hub.
Vibur DBCP - Vibur DBCP - concurrent and dynamic JDBC connection pool
H2 - H2 is an embeddable RDBMS written in Java.
JDBI - The Jdbi library provides convenient, idiomatic access to relational databases in Java and other JVM technologies such as Kotlin, Clojure or Scala.
Jedis - Redis Java client
Flyway - Flyway by Redgate • Database Migrations Made Easy.
Speedment - Speedment is a Stream ORM Java Toolkit and Runtime
jOOQ - jOOQ is the best way to write SQL in Java