Hazelcast:是否需要查询缓存索引?

Hazelcast: is Index on query Cache required?

短代码示例:

HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);

IMap<Integer, Integer> clientMap = client.getMap(mapName);
clientMap.addIndex("user.id", false);

QueryCache<Integer, Integer> cache = clientMap.getQueryCache(cacheName);
cache.addIndex("user.id", false);

索引应该添加到缓存和 IMap 还是只添加到两者之一?

QueryCache 或支持 IMap 不需要索引,但根据您的用例,索引可能有助于提高解决方案的性能。例如:

  • 如果查询缓存的 Predicate 可以利用索引,地图上的索引可能会缩短初始填充 QueryCache 所花费的时间。您可以查看 this trivial benchmark 来比较初始化 QueryCache 所花费的时间(在我的本地地图被索引时,初始查询缓存填充速度快几个数量级,但显然是 YMMV)。

  • 如果您的用例涉及过滤查询缓存(例如通过 QueryCache.values(Predicate)),那么 QueryCache 上的索引将有助于加快您的查询速度。尽管如此,考虑到这是以 QueryCache 中更昂贵的写入为代价的,因为索引维护的开销。