【问题标题】:Insert huge data into Oracle DB将海量数据插入 Oracle DB
【发布时间】:2019-02-06 11:14:23
【问题描述】:

我的设置 - Oracle DB 12.1C,带有 Hibernate 的 Spring 应用程序。

表:

create table war
(
  id      int generated by default as identity                  not null constraint wars_pkey primary key,
  t1_id   int references t1 (id) on delete cascade              not null,
  t2_id   int references t2 (id) on delete cascade              not null,
  day     timestamp                                             not null,
  diff    int                                                   not null
);

我想在表中插入 10 000 条记录。使用repository.saveAll(<data>) 需要70 秒,使用JpaTemplate.batchUpdate(<insert statements>) 需要68 秒。当我创建没有约束的新临时表时,需要 65 秒。

最好/最快的方法是什么,如何将这么多的记录插入 Oracle DB?不幸的是,CSV 不是一个选项。

【问题讨论】:

  • 10000 行现在绝对不被认为是“巨大的”。甚至不是“大”。这实际上是一个很小的数字
  • 您已经排除了可能是最快的选项(通过 SQL 加载器或外部表的 CSV)。那么,你希望这个速度有多快?您是否愿意忘记 Hibernate 并编写一些 Oracle SQL 或 PL/SQL?
  • @APC 很遗憾,我们不能使用 CSV,因为这是客户禁止的。我对几乎所有选项持开放态度 - 只需通过 JAVA/Kotlin 代码完成。
  • 那么这10000条记录是从哪里来的呢?大概不是一个用户在 GUI 中输入大量数据? (@a_horse_with_no_name 正确地说 10000 行对于数据库来说并不大,但输入量非常大)。
  • @APC 它是由我们的算法生成的 -> 它必须由 JVM 应用程序本身插入。

标签: oracle performance hibernate spring-data-jpa bulk-operations


【解决方案1】:

我的解决方案是重新设计我们的模型 - 我们使用 int_array 存储 diff -> 这比第一个解决方案快了近 10 倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 2012-01-10
    • 2016-01-25
    • 2022-01-20
    • 2019-05-02
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多