问题标签 [batch-insert]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1071 浏览

sql-server - 提高大型数据集的 SSIS 包插入/删除速度(或者这样可以吗?)

我对 SSIS 很陌生,我们有一个客户需要处理相当大的数据集。

一张表有超过 1.9 亿行。每个月,他们都会用 CSV 文件(大约 40GB 大小)中的数据替换这些数据。这是作为 SSIS 包中的一个步骤完成的。

现在他们只想在某个日期(CSV 文件中的最小日期)之后替换数据,因此他们不会一直发送 1997 年的数据,而是只发送 2010 年及以后的数据。我们处理这个问题的方法是:

  1. 截断“temp_table” (SQL 语句任务)
  2. 从“data.csv” (平面文件源)读取所有数据
    • 组播
      1. 将所有数据插入“temp_table” (OLE DB 目标)
        • 这是分批完成的,每批 75k 行
      2. 将变量“minDate”设置为“data.csv” (脚本组件)中的最小日期值
  3. 删除“destination_table”中日期值大于“minDate”的所有行(SQL 语句任务)
    • 这是分批完成的,每批 100k 行
  4. 将所有行从“temp_table”插入到“destination_table” (OLE DB 源 -> OLE DB 目标)
    • 这是分批完成的,每批 75k 行

使用这种方法,我们以 60k 行/秒的平均速率将数据插入“temp_table”。

“destination_table”中的删除阶段删除约 40k 行/秒,第二个插入阶段(从“temp_table”到“destination_table”)以约 80k 行/秒的速度运行。

这是这种工作的平均速度吗?是不是太慢了?你会做些什么来改进它?

TL;博士

我们使用 SSIS 以每分钟约 4-5 百万行的速度将数据插入 MSSQL 数据库表,并以每分钟约 250 万行的速度删除数据。这可以接受吗?

0 投票
1 回答
145 浏览

java - 垃圾收集似乎在 java 中不起作用

下面的方法有 2 个 for 循环。firstloop 迭代 36000 次,inner forloop 迭代 24 次,所以插入记录的总数将是 864000 条。代码执行运行近 3.5 小时并终止。(记录插入失败) 仅进行 Session 关闭和事务提交在外部 for 循环结束之后。执行时发现RAM消耗近6.9GB

我附上了最后几行 GC 日志来指示内存分配

17034.595:[Full GC(人体工程学)[Psyounggen:979968K-> 979964K(1862144K)] 2.1041939 secs] [Times: user=8.61 sys=0.00, real=2.11 secs]

17036.699:[Full GC(人体工程学)[Psyounggen:979968K-> 979964K(1862144K)] 1.5930338 secs] [Times: user=9.39 sys=0.00, real=1.59 secs] 17038.292: [Full GC (Ergonomics) [PSYoungGen: 979968K->979964K(1862144K)] [ParOldGen: 5576158K->5676158K(565K1)] >6556122K(7438336K), [元空间: 23195K->23195K(1071104K)], 1.9376959 secs] [Times: user=8.51 sys=0.00, real=1.94 secs]

17040.230:[Full GC(人体工程学)[Psyounggen:979968K-> 830418K(1862144K)] 2.9929302 secs] [Times: user=17.97 sys=0.00, real=3.00 secs]

堆 PSYoungGen 总计 1862144K,已使用 889367K [0x0000000715d80000, 0x00000007bdc80000, 0x00000007c0000000)

eden space 979968K, 90% used [0x0000000715d80000,0x000000074c205e48,0x0000000751a80000) from space 882176K, 0% used [0x0000000787f00000,0x0000000787f00000,0x00000007bdc80000) to space 885760K, 0% used [0x0000000751a80000,0x0000000751a80000,0x0000000787b80000) ParOldGen total 5576192K, used 5576027K [0x00000005c1800000 , 0x0000000715d80000, 0x0000000715d80000) object space 5576192K, 99% used [0x00000005c1800000,0x0000000715d56d38,0x0000000715d80000) Metaspace used 23223K, capacity 23502K, committed 24064K, reserved 1071104K class space used 2443K, capacity 2537K, committed 2560K, reserved 1048576K

但是,如果我关闭会话并为每 24 次迭代再次打开,则记录插入成功,所需时间为 55 分钟。但 RAM 利用率约为 3GB。

为什么垃圾收集没有正常进行?代码中的错误是什么?

0 投票
1 回答
271 浏览

java - 尝试批量插入具有自动生成 ID 的对象时出现 NonUniqueObjectException

我正在尝试批量插入一个List对象。我将 ID 配置为自动生成。以前我有以下内容:

我的插入查询如下:

我也batch_size设置了正确的属性值。以上工作正常,但是,最近我将代码更改为基于注释,并且我有以下内容:

当我现在运行它时,插入会抛出一个org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session

我一直在尝试按照此处此处的方式理解此错误,但无法解决我的问题。据我所知,在这个session.flush()/clear()阶段发生了一些事情,导致序列生成器回收一个已经使用过的 ID。

我究竟做错了什么?

0 投票
1 回答
98 浏览

mysql - UPDATE 子句中 VALUES(col_name) 函数的性能

问题是关于数据库的SQL遗留代码MySQL

众所周知,在执行INSERT ... ON DUPLICATE KEY UPDATE语句时,VALUES(col_name)函数可用于从 INSERT 部分引用列值,而不是在那里传递确切的值:

我的遗留代码包含许多参数化样式的巨大插入(它们用于批量插入):

问题是:如果我将所有这些查询更改为使用VALUES(col_name)函数(UPDATE部分),它会提高批量插入的性能吗?

jdbc我的查询是使用驱动程序从 java 代码执行的。所以,我猜,对于长文本值,它应该显着减少查询的大小。MySQL自己呢?一般来说,它真的会让我提高速度吗?

0 投票
1 回答
878 浏览

java - 使用 Java API 在 Google Cloud Storage 中批量插入?

根据文档,可以使用 HTTP 批量插入到 Google Cloud Storage 服务。但是如何使用 Java API 做到这一点?我似乎找不到任何文档或示例。

0 投票
1 回答
24 浏览

neo4j - 如何计算在 Neo4j 的一个批处理中可以执行的优化操作量?

我正在编写一个进程,它应该向 Neo4j 输入许多节点\属性\关系。我怎么知道我可以添加到一批中的优化\最大数量是多少?

谢谢你

0 投票
1 回答
1844 浏览

python - 如何使用 Python 在 Neo4J 上进行批量插入

我有一个插入许多节点和关系的代码:

但是插入需要这么多天。如何在此代码中批量插入以减少插入时间?我读了这篇文章http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/但它是用 Java 编写的。

0 投票
1 回答
255 浏览

mongodb - perl MongoDB batch_insert - 可以作为 upsert 完成吗?

perl,mongodb 2.4.9,perl MongoDB 0.702.1

当我执行 $collection->batch_insert(\@array)时,它工作正常,但是在这种情况下有什么办法可以做 upsert 吗?

0 投票
1 回答
1081 浏览

java - 使用 spring NamedParameterJdbcTemplate insertbatch 方法,插入具有内部对象的对象

我正在使用 Spring-boot 和 Oracle,我想使用NamedParameterJdbcTemplate insertbatch方法将新记录插入到我的数据库表中。

但我object(ProductMarket)object(Market)我需要的价值(getMarket().getId())

我怎么知道SqlParameterSource从内部获取市场ID Object

0 投票
2 回答
828 浏览

mysql - Ruby on Rails 在单个查询中更新多条记录

嗨,我有一个 Rails 应用程序,我想在单个查询中创建多个记录

这是我的代码

我得到的错误是mysql语法中的错误

我知道我想要它(“用户名”),(“用户名”),但我无法实现它有人可以告诉我如何实现这种格式的值