Benchmarking Data Grids: Apache Ignite vs Hazelcast, Part I
Join the DZone community and get the full member experience.
Join For FreeYardstick Framework
Transparency
In the interest of full disclosure, I should also mention that I am one of the committers for Apache Ignite project. However, to the best of my ability, I try to stay away from any opinions and simply state the discovered facts here.
Hardware
Benchmarks
In this benchmark we attempt to compare Data Grid basic cache operations and transactions only. Both, Ignite and Hazelcast have many other features that you can find out on their respective websites.After some tweaking and tuning, here is what I found about Ignite and Hazelcast:
- Both, Apache Ignite and Hazelcast, support distributed data grids (i.e. distributed partitioned caches). In short, they can be viewed as distributed partitioned key-value in-memory stores.
- Both, Apache Ignite and Hazelcast, implement JCache (JSR 107) specification
- Both are fairly easy to configure and introduce minimal dependencies into the project.
- Both have redundancy and failover. In the benchmarks, we configure both products with 1 primary and 1 backup copies for each key stored in cache.
- Apache Ignite and Hazelcast have different configuration properties, but it is possible to configure them in the same way for the benchmark.
- Both have support for ACID transactions. Ignite allows to set OPTIMISTIC or PESSIMISTIC mode for transactions, but I could not find the same in Hazelcast. I believe Hazelcast supports PESSIMISTIC mode only.
- The querying capabilities of both products are very different. I will be benchmarking them in the nearest future and will describe them in my next blog.
Basic Atomic Operations
The code used for the benchmark execution can be found on GitHub:
- Apache Ignite: IgnitePutBenchmark and IgnitePutGetBenchmark.
- Hazelcast: HazelcastPutBenchmark and HazelcastPutGetBenchmark.
Result:
We found that both Ignite and Hazelcast exhibit about the same performance with Ignite being about 4% to 7% faster on most of the runs.
Here are the graphs produced by Yardstick:
Basic Transaction Operations
We compared basic transactional puts and puts-and-gets into the cache.The code used for the benchmark execution can be found on GitHub:
- Apache Ignite: IgnitePutTxBenchmark and IgnitePutGetTxBenchmark.
- Hazelcast: HazelcastPutTxBenchmark and HazelcastPutGetTxBenchmark.
Result:
The performance difference for transactions was much bigger, with Ignite transactions outperforming Hazelcast transactions by about 35% to 45%.
Here are the graphs produced by Yardstick:
Published at DZone with permission of Dmitriy Setrakyan, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments