Java Apache Ignite缓存的放置和获取速度很慢
我没有从使用ApacheIgniteDataGrid中获得预期的性能。我尝试了一些配置更改,但目前不知道如何调查性能瓶颈,我正在寻求专家帮助 我使用ApacheIgnite来缓存字节数组,它使用一个我称为ByteArray的包装类。我的测试代码试图通过调用多个put,然后从另一个进程调用多个get来测试缓存性能。我尝试在同一个节点和不同的节点上运行get进程。我还使用JavaHashMap作为缓存创建了一个基线性能规范,这具有更好的性能(put为10000x) 现在,在同一个节点上,我得到以下信息:Java Apache Ignite缓存的放置和获取速度很慢,java,performance,caching,ignite,Java,Performance,Caching,Ignite,我没有从使用ApacheIgniteDataGrid中获得预期的性能。我尝试了一些配置更改,但目前不知道如何调查性能瓶颈,我正在寻求专家帮助 我使用ApacheIgnite来缓存字节数组,它使用一个我称为ByteArray的包装类。我的测试代码试图通过调用多个put,然后从另一个进程调用多个get来测试缓存性能。我尝试在同一个节点和不同的节点上运行get进程。我还使用JavaHashMap作为缓存创建了一个基线性能规范,这具有更好的性能(put为10000x) 现在,在同一个节点上,我得到以下信
Hashmap缓存,同一节点:放置2600MB/s;获得300 MB/s
点燃同一节点缓存:投入0.4MB/s;获得2.0 MB/s的速度
点燃缓存,2个节点:放置0.3 MB/s;获取0.7 MB/s
我在复制模式下运行了这些,但在分区模式下看到了类似的结果。我运行测试的多次迭代并平均计时。我的节点有25GB的内存,我的测试消耗约1GB的内存。我已将VM配置为使用10GB最大值。首先,将Ignite性能与
HashMap
进行比较没有多大意义。Ignite是一个分布式和可扩展的系统,而HashMap
甚至不是线程安全的
事实上,您使用了HashMap
作为基线,这让我认为您的测试是单线程的。如果您尝试从多个线程/客户机查询Ignite,我相信您会注意到更好的吞吐量
还要记住,使用Ignite意味着通过网络发送数据。您可能会受到其速度的限制。我理解您对线程和Ignite的分布式特性的看法,但我创建了
HashMap
示例纯粹是为了了解节点上的原始性能(并发现基准代码中的错误)。Ignite定时是针对2个客户端(相同节点和2个节点情况),这就是我性能低下的地方。我想知道我是否使用点火错误。我需要在N个节点上执行一系列的put,然后在这些节点上执行get。Ignite是正确的工具吗?我能期望以MB/s为单位的性能是什么?这就是重点。您将本地非线程安全映射与分布式集群进行比较,这意味着网络通信。这是绝对无效的比较。无论您做什么,都应该尽可能减少通过网络传输的数据量,例如通过使用关联搭配:。至于确切的吞吐量数字,实际上没有限制,因为Ignite可以通过添加更多节点来扩展。