1

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

4

2 回答 2

1

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

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

于 2016-07-18T21:27:51.313 回答
0

这是个好问题!

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

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

于 2016-07-19T08:02:26.237 回答