验证是否使用了hazelcast索引

时间:2016-07-18 21:03:24

标签: java scala hazelcast hazelcast-imap

我使用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和调试级别会显示这些消息。任何帮助深表感谢!提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这是一个很好的问题!

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

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