gpt4 book ai didi

java - 性能方面功能的优化实现

转载 作者:行者123 更新时间:2023-12-02 02:40:19 25 4
gpt4 key购买 nike

我有一个项目列表和一个存储有关产品及其项目数据的信息的 map 。数据库中有大约 15 万个项目和大约 20 万个产品(每个产品大约有 1000 到 2000 个映射到它的项目)。

我需要一个函数来计算每个项目出现的产品数量。这是我已经实现的函数:

public Map<Integer, Integer> getProductsNumberForItem(List<Item> itemsList,
Map<Integer, Map<Item, Integer>> itemsAmount) {
Map<Integer, Integer> result = new HashMap<>();
for (Item i : itemsList) {
int count = 0;
for (Map<Item, Integer> entry : itemsAmount.values()) {
if (entry.containsKey(i)) {
count++;
}
}
result.put(i.getID(), count);
}
return result;
}

它在我的测试数据库上运行良好,该数据库的数据量很小,但是当我在真实数据上运行它时,它花费了太多时间(例如:它已经运行了一个小时,但仍未完成)。从逻辑的角度来看,很明显,我基本上执行了太多操作,但不确定如何优化。

如有任何建议,我们将不胜感激。

最佳答案

你有两种方法:

  • 最高效:在数据库中执行的查询中进行计算。
    使用 count() 聚合和 group by 子句,您应该会得到更好的结果,因为整个处理将由专门设计/优化的 DBMS 执行。

  • 效率较低,但您可以尝试一下:像现在一样检索数据并使用多线程。
    使用 Java 8 parallelStream(),您也许可以获得可接受的结果,而无需自己处理同步的麻烦。

关于java - 性能方面功能的优化实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com