hazelcast 具有多个过滤器的谓词 API

问题描述 投票:0回答:1

我们目前正在评估 hazelcast 是否满足我们的需求(以及获得许可证的可能性)。在其中一个测试设置中,我们有一个 iMap,其“值”如下所示:

class Market {
 
     boolean useable;
     long idA;
     long idB;
     long idC;
   
}

我们正在尝试使用 Predicates API 对其发出查询:

Predicate<Long, Market> predicate = Predicates.and(
        Predicates.equal("useable",true),
        Predicates.in("idA", idsA.toArray(Long[]::new)),
        Predicates.in("idB", idsB.toArray(Long[]::new)),
        Predicates.in("idC", idsC.toArray(Long[]::new)));

这些

idsA
idsB
idsC
的值很少,最多可达5个;该映射中有大约 500_000 个条目,跨 3 个节点(我们使用紧凑序列化器)。我们尝试为这些创建各种索引,以下是一些:

        - type: HASH
          attributes:
            - useable
          
        - type: HASH
          attributes:
            - idA

        - type: HASH
          attributes:
            - idB
   
        - type: HASH
          attributes:
            - idC

另一种选择是我们这样做的时候:

        - type: HASH
          attributes:
            - useable

        - type: SORTED
          attributes:
            - idA
            - idB
            - idC

虽然我们确实在管理控制台中看到这些索引被命中,但响应很慢,因此我们尝试启用:

config.setProperty(ClusterProperty.QUERY_PREDICATE_PARALLEL_EVALUATION.getName(), "true");

和:

hazelcast:
  executor-service:
    "hz:query":
      pool-size: 64

但是它们都没有带来任何显着的性能提升,简单的:

wrk  -t50 -c50 -d60s "http://localhost:8080/markets"

显示:

  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.06s   350.08ms   1.98s    69.28%

平均 1 秒太大了。

在进行分析之前,我们的索引选择是否正确?

hazelcast hazelcast-imap
1个回答
0
投票

我们拍摄了一些火焰图并使用异步分析器进行分析,并且索引对于我们拥有的数据量来说表现得很好。我们还启用了这些:

  @Bean
  HazelcastConfigCustomizer predicatesParallelExecutor() {
    return hzInstanceConfig -> {
      hzInstanceConfig.setProperty(ClusterProperty.QUERY_PREDICATE_PARALLEL_EVALUATION.getName(), "true");
      hzInstanceConfig.setProperty(ClusterProperty.CLIENT_ENGINE_THREAD_COUNT.getName(), "50");
      hzInstanceConfig.setProperty(ClusterProperty.CLIENT_ENGINE_QUERY_THREAD_COUNT.getName(), "50");
    };
  }

结果仍然很糟糕。我们以紧凑反序列化为主。

© www.soinside.com 2019 - 2024. All rights reserved.