Apache Ignite的加权平均值需要多长时间?

时间:2016-08-02 10:25:28

标签: real-time benchmarking in-memory-database fork-join ignite

我目前正在针对近乎实时的应用程序对Appache Ignite进行基准测试,对于相对较小的样本量,简单操作似乎过于缓慢。 以下是设置详情和时间安排 - 请在底部查看2个问题。

设定:

  • 缓存模式:已分区
  • 服务器节点数:3
  • CPU:每个节点4个(12)
  • 堆大小:每节点2GB(6GB)

第一个用例是以不同的速率计算对象的两个字段的加权平均值。

第一种方法是运行SQL样式查询:

...
query = new SqlFieldsQuery("select SUM(field1*field2)/SUM(field2) from MyObject");
cache.query(query).getAll();
....

观察到的时间是:

缓存:500,000查询/秒:10
中位数:428ms,第90百分位数:13,929ms

缓存:500,000查询/秒:50
中位数:191,465ms,第90百分位数:402,285ms

显然,这会以极大的延迟(> 400 ms)排队,单个jvm(4个核心)上的简单加权平均计算需要6 ms。

第二种方法是使用IgniteCompute在节点间广播Callables并计算每个节点的加权平均值,在调用者处减少,延迟只是稍微好一些,吞吐量提高但仍处于无法使用的水平。

缓存:500,000查询/秒:10
中位数:408ms,90th百分位数:507ms

缓存:500,000查询/秒:50
中位数:114,155ms,第90百分位数:237,521ms

我在实验中注意到的一些事情:

  • 没有发生磁盘交换
  • CPU运行率高达400%
  • 查询分为两个不同的加权平均值(map reduce)
  • 条目在节点之间均匀分配
  • 每个堆大小约为500MB
  • 时不会触发垃圾收集

我的问题:

  1. 这些时间是预期还是有一些明显的设置我错过了?我无法找到类似操作的基准。
  2. 在不移动数据的情况下对ignite运行fork-join样式计算的建议方法是什么?

1 个答案:

答案 0 :(得分:0)

在Apache Ignite用户论坛上详细讨论了该主题:http://apache-ignite-users.70518.x6.nabble.com/Ignite-performance-td6703.html