gpt4 book ai didi

benchmarking - Hazelcast 与 Ignite 基准测试

转载 作者:行者123 更新时间:2023-12-03 21:44:34 25 4
gpt4 key购买 nike

我使用数据网格作为我的主要“数据库”。我注意到 Hazelcast 和 Ignite 查询性能之间存在巨大差异。我通过适当的自定义序列化和索引优化了我的数据网格使用,但 IMO 的差异仍然很明显。

由于这里没有人问这个问题,我将回答我自己的问题以供将来引用。这不是一个抽象的(学习)练习,而是一个真实世界的基准,它模拟了我在大型 SaaS 系统中的数据网格使用情况——主要是为了显示排序和过滤的分页列表。我主要想知道与原始无框架 Hazelcast 和 Ignite 使用相比,我的通用 JDBC 式数据网格访问层增加了多少开销。但由于我是将苹果与苹果进行比较,因此基准来了。

最佳答案

我在 GitHub 上查看了提供的代码,并有很多评论:

索引和连接

  • 可能最重要的一点是 Apache Ignite 索引比 Hazelcast 复杂得多。与 Hazelcast 不同,Ignite 支持 ANSI 99 SQL,因此您可以随意编写查询。
  • 最重要的是,与 Hazelcast 不同,Ignite 支持跨不同缓存或数据类型的组索引和 SQL JOIN。假设您有 Person 和 Organization 表,并且您需要选择为同一组织工作的所有人员。这在 Hazelcast 中不可能一步完成(如果我错了,请纠正我),但在 Ignite 中,这是一个简单的 SQL JOIN 查询。

  • 鉴于上述情况,Ignite 索引将需要更长的时间来创建,尤其是在您的测试中,您有 7 个索引。

    TestEntity 类中的修复

    在您的代码中,您存储在缓存中的实体 TestEntity 会在每次调用 getter 时重新计算 idSort、createdAtSort 和 modifiedAtSort 的值。当实体存储在索引树中时,Ignite 会多次调用这些 getter。对 TestEntity 类的简单修复提供了 4 倍的性能提升: https://gist.github.com/dsetrakyan/6bfe089d53f888448503

    堆测量不准确

    您测量堆的方式不正确。您至少应该在进行堆测量之前调用 System.gc() ,即使这样也不准确。例如,在下面的结果中,我使用您的方法得到了负堆大小。

    暖身

    每个基准测试都需要预热。例如,当我按照上面的建议应用 TestEntity 修复程序并执行缓存填充和查询 2 次时,我得到了更好的结果。

    MySQL 比较

    我认为将单节点数据网格测试与 MySQL 进行比较是不公平的,无论是对于 Ignite 还是 Hazelcast。数据库有自己的缓存,每当使用如此小的内存大小时,您通常会测试数据库内存缓存与数据网格内存缓存。

    每当对分区缓存进行分布式测试时,性能优势通常都会出现。这样,数据网格将在每个集群节点上并行执行查询,结果应该会更快地返回。

    结果

    这是我为 Apache Ignite 获得的结果。在我进行上述修复后,它们看起来好多了。

    请注意,我们第二次执行缓存填充和缓存查询时,我们获得了更好的结果,因为 HotSpot JVM 已预热。

    值得一提的是 Ignite 不缓存查询结果 .每次运行查询时,都是从头开始执行。
    [00:45:15] Ignite node started OK (id=0960e091, grid=Benchmark)
    [00:45:15] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=8.0GB]
    Starting - used heap: 225847216 bytes
    Inserting 100000 records: ....................................................................................................
    Inserted all records - used heap: 1001824120 bytes
    Cache: 100000 entries, heap size: 775976904 bytes, inserts took 14819 ms
    ------------------------------------
    Starting - used heap: 1139467848 bytes
    Inserting 100000 records: ....................................................................................................
    Inserted all records - used heap: 978473664 bytes
    Cache: 100000 entries, heap size: **-160994184** bytes, inserts took 11082 ms
    ------------------------------------
    Query 1 count: 100, time: 110 ms, heap size: 1037116472 bytes
    Query 2 count: 100, time: 285 ms, heap size: 1037116472 bytes
    Query 3 count: 100, time: 19 ms, heap size: 1037116472 bytes
    Query 4 count: 100, time: 123 ms, heap size: 1037116472 bytes
    ------------------------------------
    Query 1 count: 100, time: 10 ms, heap size: 1037116472 bytes
    Query 2 count: 100, time: 116 ms, heap size: 1056692952 bytes
    Query 3 count: 100, time: 6 ms, heap size: 1056692952 bytes
    Query 4 count: 100, time: 119 ms, heap size: 1056692952 bytes
    ------------------------------------
    [00:45:52] Ignite node stopped OK [uptime=00:00:36:515]

    我将使用更正后的代码创建另一个 GitHub 存储库,并在我清醒时将其发布在这里(咖啡不再有帮助)。

    关于benchmarking - Hazelcast 与 Ignite 基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932836/

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