当前位置: 首页 > 知识库问答 >
问题:

提高Spring数据摄取速度

夏法
2023-03-14

我们有一个物联网应用程序,可以接收Kafka上的数据,并将其保存在rdbms中。我们使用的数据库(MemSql)每秒支持20000多个插入。但我的常规存储库。保存方法我每秒只能实现50次插入。我编写了一个简单的代码,正在高速网络aws ec2实例上进行测试

void saveA(){
    for(int i=0;i<1000;i++){
       A obj = new A();
       aRepository.save(obj);
    }
}

这需要20秒才能完成。我希望达到每秒约1000k的插入。如何提高这种摄取速度?我应该创建一个大小为1000的线程池并从单独的线程调用save吗?在这种情况下,我需要关心像spring.datasource.tomcat这样的属性。最大活动以增加池中的连接数?spring data会自动为每个线程从池中选择一个单独的连接吗?我无法进行批量插入,因为我一次只能从Kafka读取一个数据,还因为可能有一些重复数据需要捕获为DataIntegrityViolationException并更新。

共有1个答案

堵鸿光
2023-03-14

您没有描述您正在保存的对象有多复杂,但是听起来您有相当简单的对象,即每次保存操作的插入比率接近1,并且您似乎也没有进行太多的更新,如果有的话。

如果是这种情况,我建议放弃JPA并直接使用JDBC(使用JdbcTemboard

原因是 JPA 为使典型的 JPA 流程正常工作做了很多事情:加载实体图,操作它,然后将其刷新回数据库。但是你没有这样做,所以JPA可能没有多大帮助,让你的生活变得艰难,因为你需要调整JPA和JDBC。

首先使用 JdbcTemplate 直接执行插入。

下一步是执行批插入。你可以写,你不能这样做,但我不明白为什么你不能在将行写入数据库之前收集几行。

 类似资料:
  • 我正在使用 从 Azure 存储 Blob 下载文件 (~100MB)。 我的问题是实际下载文件需要相当长的时间(大约10分钟)。我之前使用的fetch()比这个还要慢(大约15-20分钟)。关于如何加快下载速度,你们有什么建议吗?我的网速不是问题,因为直接下载文件或使用Azure Storage Explorer(1.12.0,AzCopy 10.3.3)不到两分钟。 我还尝试使用azure s

  • 与malloc'相同大小的内存和手动读取整个文件到malloc'区域相比,这有什么不同?

  • 本文向大家介绍mysql技巧:提高插入数据(添加记录)的速度,包括了mysql技巧:提高插入数据(添加记录)的速度的使用技巧和注意事项,需要的朋友参考一下 问题描述: 普通台式机,采集数据,表中已经有>1000万数据量。 采集回来的数据插入表中的时候很慢,每条约100毫秒。 解决方法: 1、加大mysql配置中的bulk_insert_buffer_size,这个参数默认为8M bulk_inse

  • 本文向大家介绍python中提高pip install速度,包括了python中提高pip install速度的使用技巧和注意事项,需要的朋友参考一下 pip install命令默认是用的是python官方源,由于一些客观原因,连接速度很慢,甚至超时中断,到时很多模块安装不上,甚是苦恼! 怎么办? 使用国内镜像源,将以下命令完成拷贝出来,粘贴至记事本中,保存为bat文件,双击执行该批处理文件。 然

  • 我需要从全球网格中提取特定节点集的数据,这些节点由纬度/经度坐标给出(大约5000-10000)。这些数据是水力参数的时间序列,例如波高。 全球数据集是巨大的,所以它被分成许多NetCDF文件。每个NetCDF文件大约5GB,包含整个全球网格的数据,但只针对一个变量(例如波高)和一年(例如2020年)。假设我想在某个位置提取6个变量的完整时间序列(42年),我需要提取数据形式为6x42=252个N

  • 1背景 在本文中,我们将描述如何将地图点与光栅相关联。我的问题是,如果函数st_worldtorastercoordx(rast,geom)在光栅对象中有超过10000*10000个像素,我们如何提高速度。此问题与中间件PostGIS光栅对象相关。 2 创建路测数据点对象 2.1 创建点对象字段 在前面的对象中,我们使用水壶中间件将驱动测试数据文件上传到Postgres-SQL数据库中。在数据库中