Apache Ignite性能

问题描述 投票:0回答:1

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

  1. 从缓存中读取(SELECTINNER JOIN(主键上有2个表)和一个简单的WHERE子句(较小的表上的日期列))
  2. 在循环中,进行一些计算(乘法)并将结果写回缓存。

#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不是很多)

如果你能告诉我我需要实现或检查的任何配置,那会很棒吗?谢谢!

performance ignite in-memory-database
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.