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

使用Spring数据在数据库中创建数千行

东门清夷
2023-03-14

我有一个Spring Boot服务,我们有项目、贡献者以及项目和贡献者之间的多对多关系,这在JPA中被建模为3个独立的实体,项目、贡献者和项目贡献者。我正在使用Spring数据与Postgres中的DB进行交互。

在SQS的事件消耗之后,有时我们必须在DB中创建数千个项目及其贡献者。这些项目和贡献者由一些外部服务提供。

在我们必须创建1000个项目的场景中,每个项目平均有2个贡献者,我通过每个实体的Spring数据存储库保存方法对数据库进行以下调用。

1000次调用ProjectRespository.save()方法创建项目

2000个捐款人电话。save()方法创建贡献者

2000年调用Project贡献者Respository.save()方法将贡献者关联到项目

在创建贡献者之前,我甚至不计算这些,我必须发出一个查询来检查贡献者是否已经存在于数据库中。

这些都在@Transactional方法中。这个逻辑需要很长时间才能完成,我想知道在Spring Boot和Spring Data中执行类似操作的最佳方法是什么,以显著减少对DB的调用,从而创建上述对象。

共有1个答案

劳韬
2023-03-14

这听起来很适合批处理插入。简而言之,您可以在一次数据库往返中执行许多插入。批处理可由属性hibernate.jdbc.batch_size配置。值得注意的是,批处理只针对一个表。因此,表Project的5个插入,5个插入到贡献者,然后再次5个插入到项目,5个插入到贡献者,将分4个批处理完成。更好的做法是对Project执行10个插入,对贡献者执行10个插入,或者通过属性hibernate.order_inserts对插入进行排序。那么在前面提到的情况下,您只有2次数据库往返。您可以在https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/.下阅读更多信息

 类似资料:
  • 我正在尝试代码优先的方法来使用Spring、Boot和Hibernate创建数据库。 但是,我现在还做不到。 这是我的控制器

  • 问题内容: 我想使用Python创建Postgres数据库。 我收到以下错误: 我正在使用psycopg2进行连接。我不明白这是什么问题。我想做的是连接到数据库(Postgres): 然后创建另一个数据库: 这是我通常要做的,我想通过创建Python脚本来实现此自动化。 问题答案: 使用psycopg2扩展名ISOLATION_LEVEL_AUTOCOMMIT: 发出命令且不需要commit()或

  • 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 知道怎样输入命令,便可以访问数据库了。 假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检索数据来回答关于动物不同种类的问题。本节显示如何做到所有这些事情: ·创建数据库 ·创建数据

  • 问题内容: 我正在使用http://code.google.com/p/sqlite- jdbc/wiki/Introduction中 的SQLite驱动程序。 上述文档中显示的示例显示了如何连接现有数据库。 在我的应用程序中,我需要创建一个SQLite数据库。怎么做?创建具有扩展名的文件是否足够?还有一个叫做的函数。如果可以,如何使用?我用谷歌搜索,没有人给出明确的答案。 问题答案: 如果文件不

  • 使用H2, 如果数据库还不存在,则创建它。 但是,在Postgres中,不会创建不存在的数据库,因此会引发类似“DB不存在”的异常。有没有办法配置Postgres以按需创建不存在的数据库? 以下配置文件可用于重现此问题: 使用H2工作正常: 使用Postgres失败

  • Spring我是新的。我正在尝试使用H2数据库和JDBC(不是JPA/Hibernate)。 因此,使用Spring Initializr,当我添加这些依赖项时: 并将此属性设置为 true: testdb数据库<代码> mem: > < /代码创建了一个 但是当我将jpa依赖项改为: 数据库未创建,我收到以下错误消息: 因此,我想知道为什么它不能与JDBC一起工作,以及您是否知道一种使其工作的解