有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何提高从hazelcast读取数据的Get方法性能?

我有以下控制器:

@GetMapping("/v1/quotes")
public List<MyQuote> getQuotes() {
    return hazelcastMap.values().stream()
            .map(r -> new Quote(r))
            .collect(Collectors.toList());
}

大约需要330毫秒,但我需要改进它,以在100毫秒或更快的时间内执行请求

有没有提高绩效的方法


共 (1) 个答案

  1. # 1 楼答案

    人们普遍认为,流的效率略低于使用迭代器和/或循环的老式方法。但你不太可能从中得到300%以上的改善。你可能会得到10%或20%的改善。。。如果您正在转换内存中的正则Map。对于Hazelcast IMap,使用流与优化代码的开销将是微不足道的

    (您应该能够通过针对应用程序的分析和仔细的基准测试来验证这一点。)


    我认为您必须在系统设计中解决这个问题,或者可能通过Hazelcast调优来解决

    当前操作中的一些性能问题由IMapjavadoc暗示:

    Collection<V> values()

    Returns a collection clone of the values contained in this map.

    Warning: The collection is NOT backed by the map, so changes to the map are NOT reflected in the collection, and vice-versa.

    This method is always executed by a distributed query, so it may throw a QueryResultSizeExceededException if GroupProperty.QUERY_RESULT_SIZE_LIMIT is configured.

    问题是:

    • 调用values()时,IMap实现正在创建映射值的副本。然后,您将从该副本流式传输,而不是直接从IMap流式传输

    • values()操作正在执行分布式查询。我怀疑这是不可避免的。无论哪种方式,这都可能是你正在做的事情中最昂贵的部分