我使用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和调试级别会显示这些消息。任何帮助深表感谢!提前谢谢。
答案 0 :(得分:1)
根据Hazelcast文档 - 管理部分。没有列出索引的统计对象。列出的统计信息MBean是不同的分布式对象。
同时,如果未触发索引,则这将导致密钥的顺序反序列化,并且如果我们也对值进行排队,则可能还会导致值。在内存中有足够的记录100 000+甚至更少,性能差异将更加明显。
答案 1 :(得分:1)
这是一个很好的问题!
如果在查询中使用与索引定义完全相同的嵌套属性路径,则可以100%确定将使用索引(如果谓词是IndexAware)。
为了根据经验进行测试,您可以对大型示例数据集(如1M条目)执行两个查询。让其中一个使用索引,另一个使用其他嵌套属性(具有相同的嵌套级别)。您将看到执行时间显着。