For Faster Hazelcast Queries

Here some tips on improving Hazelcast query performance:

1- Add indexes for queried fields. For queries with ranges (gt, lt, between) you can use ordered index.

IMap imap = Hazelcast.getMap("employees");
// ordered, since we have ranged queries for this field
imap.addIndex("age", true); 
// not ordered, because boolean field cannot have range
imap.addIndex("active", false);

2- Set optimizeQuery = true, in map config. By enabling this flag, Hazelcast will cache a deserialized (object) form, and use it when necessary. Disadvantage of this approach is memory overhead of cached object.

MapConfig mapConfig = config.getMapConfig(“mapName”);  
mapConfig.setOptimizeQueries(true);

3- Object “in memory format”: By default Hazelcast stores objects in their serialized form. This is an optimization: an extra serialization step is skipped for remote operations. But if the majority of a map’s operations is query; then you can consider changing in-memory-format to object. With object format, queries will be run on directly objects, getting rid of de-serialization. Disadvantage of this approach: The remote get operations from this map will have a serialization step.

MapConfig mapConfig = config.getMapConfig(“mapName”);  
mapConfig.setInMemoryFormat(InMemoryFormat.OBJECT);

Note: If you use 3rd approach (in-memory-format=OBJECT) then no need for optimizeQuery setting (2nd one) because objects will be already stored in deserialized.