There are applications that need something in between - great performance but some of those features, too. In our case, the motivation were internal caches in Hibernate Second Level Cache. Therefore Infinispan 8.0.1.Final brings the simple cache - alternative implementation of the AdvancedCache interface optimized for maximum performance when you need just the basics.
The table below shows which features are available in simple cache:
| Feature | Availability |
|---|---|
| Basic map-like API | ✔ |
| Cache listeners (non-clustered) | ✔ |
| Expiration | ✔ |
| Eviction | ✔ |
| Security | ✔ |
| JMX access | ✔ |
| Statistics | ✔ |
| Transactions | ✘ |
| Invocation batching | ✘ |
| Persistence (cache stores and loader) | ✘ |
| Map Reduce Framework | ✘ |
| Distributed Executors Framework | ✘ |
| Custom interceptors | ✘ |
| Indexing (querying) | ✘ |
| Compatibility (embedded/server) | ✘ |
| Store as binary | ✘ |
Configuring simple cache is as simple as adding one attribute to the XML configuration:
While configuration schema allows to set up the unsupported features, doing so results in an exception when the cache is created.
You can also configure simple cache programmatically:
So, what kind of performance improvement can you expect? We had run basic (single-threaded) benchmark using JMH and this is what we got:
| Implementation | get() (operations/s) | put() (operations/s) | ||||
|---|---|---|---|---|---|---|
| ConcurrentHashMap | 128,354,135 | ± | 2,178,755 | 33,980,088 | ± | 28,487 |
| Simple cache | 86,969,897 | ± | 738,935 | 14,044,642 | ± | 14,280 |
| Local cache | 17,280,018 | ± | 361,910 | 2,267,850 | ± | 44,814 |
This gives us about 5✕ speedup for reads and 6✕ for writes. Your mileage may vary, but it's certain that simple cache provides substantial performance benefits.
So, if your use-case allows it, try out simple cache and let us know. It's as simple as one configuration attribute!
No comments:
Post a Comment