首页 文章

Apache Ignite性能

提问于
浏览
0

我正在批处理作业中执行一些计算时运行Ignite与存储过程性能的POC . 批处理作业具有以下步骤:

  • 从缓存中读取( SELECT ,带 INNER JOIN (主键上有2个表)和一个简单的 WHERE 子句(较小的表上的日期列))

  • 在循环中,进行一些计算(乘法)并将结果写回缓存 .

#1中返回的记录数与#2中写入的记录数成比例 . 与之相比,RDBMS是SQL Server .

我已经实现了使用Ignite进行读写操作的代码 . 我在存储过程中实现了相同的操作 . 当我运行测试时,我发现Ignite速度要慢得多:在220,000条记录中,这是运行整个作业的总时间:

  • SQL Server存储过程:9秒

  • 点燃:2小时40分钟

笔记:

  • 在单个服务器节点上,Ignite配置设置为 CacheAtomicityMode.TRANSACTIONALCacheMode.LOCAL . 事务边界在每个步骤之前和之后 .

  • 我确认结果是一样的,即 . 他们正在做同样的事情,没有编码问题

  • 本机有16GB RAM,CPU是i7

在运行测试之前,我已经预计Ignite会因开销而变慢,并且没有其他任何东西可以真正击败在数据库中运行的存储过程(例如,由于db优化) . 但是我感到惊讶的是,差异很大 . 此外,对于整个Ignite作业,我的CPU风扇正在不停地呼呼,这很奇怪,因为计算是一个简单的乘法,而缓存在RAM中(这是静默的) .

我还在 CacheMode.PARTITIONED 模式(2个服务器节点,其中一个远程,1个客户端)中运行该作业,数据集略小(145k记录) . 总运行时间为1小时8分钟 . 将此时间投影到220k记录(与初始设置相同)为1小时43秒(大约),这比 CacheMode.LOCAL 快,但仍然比这种音量的预期慢得多 . (220k不是很多)

如果您可以告诉我需要实施或检查的任何配置,那会很棒吗?谢谢!

1 回答

  • 0

    在Ignite中,存储过程具有计算网格任务的风格 . 您可以尝试根据任务重写测试用例吗?

    如果您正在使用事务,请记住SQL当前是非事务性的,因此您应该使用事务性put / get .

    我还认为你绝对应该使用 PARTITIONED ,因为这意味着你可以在保持可靠性的同时添加节点,而单服务器SQL无法提供 . 请记住,如果正在进行连接,则需要并置数据,这意味着通过关联键对齐数据 .

相关问题