验证是否使用了 hazelcast 索引

Validate if hazelcast indexes are used

我正在使用 Hz PredicateBuilder 通过查询嵌套对象的属性来查询 Hz 地图。在配置文件中也为嵌套字段创建了索引。

EntryObject e = new PredicateBuilder().getEntryObject();
Predicate idPredicate = e.get( "id" ).equal( id );
Predicate predicate = e.get( "rel.id" ).equal( rel.id).and(idPredicate);
return personMap.values( predicate );

其中rel是一个带有id属性的对象,是Person对象的一个​​属性。

 indexes = [
            {
              attribute = id
              isOrdered = false
            },
            {
              attribute = rel.id
              isOrdered = false
            }
          ]

正在返回正确的记录,但想确定此查询是否正在使用索引。有没有办法确保此查询正在使用索引? (任何信息性消息或其他信息)。之前使用过 DB2,调试级别显示了这些消息。任何帮助深表感谢!提前致谢。

根据 Hazelcast 文档 - 管理部分。没有列出 Indexes 的统计对象。列出的统计 MBean 是不同的分布式对象。

同时,如果未命中索引,这将导致键的顺序反序列化,如果我们也对值进行排队,则可能还会导致值反序列化。内存中有足够的记录 100 000+ 可能甚至更少,性能差异将更加明显。

这是个好问题!

如果您在查询中使用与在索引定义中完全相同的嵌套属性路径,那么您可以 100% 确定将使用索引(如果谓词是 IndexAware)。

为了根据经验对其进行测试,您可以对大型示例数据集(例如 1M 条目)执行两个查询。让其中一个使用索引,另一个使用其他一些嵌套属性(具有相同的嵌套级别)。您会看到执行时间相差 显着.