【问题标题】:Should I be expecting the same performance as a standard Java Hashmap for in memory read/writes?我是否应该期望与标准 Java Hashmap 的内存读/写性能相同?
【发布时间】:2021-01-31 17:33:49
【问题描述】:

我的用例是我需要在映射中存储数百万个符号,其中键是字符串,即

“IBM”

并且值是一个json字符串,其中包含有关符号的信息,即

"{ "Symbol" : "IBM", "AssetType": "普通股", "Name": "国际商业机器公司",}"。

当使用持久的 ChronicleMap 来存储 2500 万个条目时,与标准 Java HashMap 相比,我的性能有些差。

一些球场数字...将 2500 万条记录插入 HashMap 大约需要 70 秒,而 ChronicleMap 需要大约 125 秒。从 HashMap 中读取所有条目需要 5 秒,而 ChronicleMap 需要 20 秒。

我将 averageKey/averageValue 设置为合理的设置,并且我慷慨地将条目大小设置为 5000 万,因为我看到其他帖子建议这样做。

我真的只是在问我的期望应该是什么?与普通的 HashMap 相比,上面的球场数字是否符合 ChronicleMap 应该具备的能力?

或者我将其视为普通的 HashMap 是错误的,实际上我输入的数据大小意味着我将在使用标准 HashMap 和 ChronicleMap 之间获得不同的性能?

【问题讨论】:

    标签: chronicle chronicle-map


    【解决方案1】:

    如果您要持久化数据,这似乎是合理的,HashMap 不会持久化。 ChronicleMap 具有更高的吞吐量。我会看看你使用了多少线程。

    ChronicleMap 不是普通的 HashMap,因为它在堆外存储数据的副本,因此对 GC 没有影响。但是,每种方式都有复制成本。理想情况下,您会将数据存储为 Java 对象而不是 JSon,但它仍然可以工作。

    【讨论】:

    • 谢谢 - 所以为了获得 ChronicleMap 的最佳性能,我应该尝试多个线程吗?以上结果来自单线程测试。
    • @trafalgar 这是一个并发映射,因此如果您使用与核心数量一样多的线程,您应该会获得更好的结果,根据您所做的事情,这个数字可能会翻倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2011-02-09
    相关资源
    最近更新 更多