對於大部分系統來說,mapdb(而且新版本還依賴於kotlin,增加了不少額外的jar)並無太大價值,而且增加了成本。但是如果一級緩存巨大例如數以十GB級別,或占據了整個JVM的1/2以上,mapdb的價值就會體現出來。正如其官網介紹:
MapDB provides Java Maps, Sets, Lists, Queues and other collections backed by off-heap or on-disk storage. It is a hybrid between java collection framework and embedded database engine.
使用MapDB存儲map后,jvm gc的壓力就會大大減少(在大數據中,gc甚至可能停頓超過1分鍾,沒看錯,導致應用完全無響應)。但是因為堆外存儲的都是字節形式,所以會增加序列化和反序列化的資源消耗,這個時候二進制而非json的序列化算法就非常重要了,包括性能以及大小,如flatbuffer、kryo。所以,更好的做法是常用的在堆內存儲、不常用的在堆外存儲,可能這個時候ehcache就是一種更好的選擇。
具體使用可參考:http://www.mapdb.org/down/mapdb-manual-20.pdf,https://labs.consol.de/java-caches/,https://hazelcast.com/resources/benchmark-infinispan/