2017-02-23 163 views
0

我没有得到我期望使用Apache Ignite DataGrid的性能。我尝试了一些配置更改,但此时不知道如何调查性能瓶颈,并且正在寻求专家帮助。Apache Ignite缓存放置并得到缓慢

我正在使用Apache Ignite来缓存使用包装类的字节数组,我调用ByteArray。我的测试代码尝试通过调用多个投入并基于多个来自另一个进程的基准来测试缓存性能。我试过在同一个节点和不同节点上运行get过程。我还创建了一个使用Java HashMap作为缓存的基准性能规格,这具有更好的性能(Put为10000x)。

现在,在同一个节点上,我得到以下内容: Hashmap缓存,同一个节点:放2600 MB/s;获得300 MB /秒 点燃相同的节点缓存:将0.4 MB /秒;得到2.0 MB /秒 点燃缓存,2个节点:放0.3 MB /秒;得到0.7 MB/s

我在复制模式下运行这些,但我看到类似的分区模式的结果。我运行多次测试并平均时间。我的节点有25GB内存,我的测试消耗约1GB。我已经配置VM使用最大10GB。

在此先感谢您对此问题的任何见解。

回答

1

首先,将Ignite性能与HashMap进行比较并没有多大意义。 Ignite是一个分布式和可扩展的系统,而HashMap甚至不是线程安全的。

事实上,您使用HashMap作为基线,这让我认为您的测试是单线程的。如果您尝试从多个线程/客户端查询Ignite,我相信您会注意到更好的吞吐量。

另请注意,使用Ignite意味着通过网络发送数据。速度受到限制。

+0

我明白你在说什么线程和Ignite的分布式特性,但我创建了'HashMap'的例子,纯粹是为了在我的节点上获得原始性能(并在我的基准代码中发现错误)。 Ignite计时有2个客户端(同一节点和2个节点的情况),这是我得到低性能的地方。我想知道我是否正确使用Ignite。我的需要是在N个节点上进行一系列放置,然后在这些节点上进行。 Ignite是否是正确的工具,我能期待MB/s的性能如何? – Sumit

+0

就是这一点。您正在比较本地非线程安全映射与暗示网络通信的分布式集群。这是绝对无效的比较。无论您做什么,都应该尽量减少通过网络传输的数据量,例如通过使用亲和力搭配:https://apacheignite.readme.io/docs/affinity-collocation。至于确切的吞吐量数字,几乎没有限制,因为可以通过添加更多节点来扩展Ignite。 –