问题标签 [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.
sql-server - 提高大型数据集的 SSIS 包插入/删除速度(或者这样可以吗?)
我对 SSIS 很陌生,我们有一个客户需要处理相当大的数据集。
一张表有超过 1.9 亿行。每个月,他们都会用 CSV 文件(大约 40GB 大小)中的数据替换这些数据。这是作为 SSIS 包中的一个步骤完成的。
现在他们只想在某个日期(CSV 文件中的最小日期)之后替换数据,因此他们不会一直发送 1997 年的数据,而是只发送 2010 年及以后的数据。我们处理这个问题的方法是:
- 截断“temp_table” (SQL 语句任务)
- 从“data.csv” (平面文件源)读取所有数据
- 组播
- 将所有数据插入“temp_table” (OLE DB 目标)
- 这是分批完成的,每批 75k 行
- 将变量“minDate”设置为“data.csv” (脚本组件)中的最小日期值
- 将所有数据插入“temp_table” (OLE DB 目标)
- 组播
- 删除“destination_table”中日期值大于“minDate”的所有行(SQL 语句任务)
- 这是分批完成的,每批 100k 行
- 将所有行从“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 万行的速度删除数据。这可以接受吗?
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。
为什么垃圾收集没有正常进行?代码中的错误是什么?
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。
我究竟做错了什么?
mysql - UPDATE 子句中 VALUES(col_name) 函数的性能
问题是关于数据库的SQL
遗留代码MySQL
。
众所周知,在执行INSERT ... ON DUPLICATE KEY UPDATE
语句时,VALUES(col_name)
函数可用于从 INSERT 部分引用列值,而不是在那里传递确切的值:
我的遗留代码包含许多参数化样式的巨大插入(它们用于批量插入):
问题是:如果我将所有这些查询更改为使用VALUES(col_name)
函数(UPDATE
部分),它会提高批量插入的性能吗?
jdbc
我的查询是使用驱动程序从 java 代码执行的。所以,我猜,对于长文本值,它应该显着减少查询的大小。MySQL
自己呢?一般来说,它真的会让我提高速度吗?
java - 使用 Java API 在 Google Cloud Storage 中批量插入?
根据文档,可以使用 HTTP 批量插入到 Google Cloud Storage 服务。但是如何使用 Java API 做到这一点?我似乎找不到任何文档或示例。
neo4j - 如何计算在 Neo4j 的一个批处理中可以执行的优化操作量?
我正在编写一个进程,它应该向 Neo4j 输入许多节点\属性\关系。我怎么知道我可以添加到一批中的优化\最大数量是多少?
谢谢你
python - 如何使用 Python 在 Neo4J 上进行批量插入
我有一个插入许多节点和关系的代码:
但是插入需要这么多天。如何在此代码中批量插入以减少插入时间?我读了这篇文章http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/但它是用 Java 编写的。
mongodb - perl MongoDB batch_insert - 可以作为 upsert 完成吗?
perl,mongodb 2.4.9,perl MongoDB 0.702.1
当我执行
$collection->batch_insert(\@array)
时,它工作正常,但是在这种情况下有什么办法可以做 upsert 吗?
java - 使用 spring NamedParameterJdbcTemplate insertbatch 方法,插入具有内部对象的对象
我正在使用 Spring-boot 和 Oracle,我想使用NamedParameterJdbcTemplate
insertbatch
方法将新记录插入到我的数据库表中。
但我object(ProductMarket)
有object(Market)
我需要的价值(getMarket().getId())
我怎么知道SqlParameterSource
从内部获取市场ID Object
?
mysql - Ruby on Rails 在单个查询中更新多条记录
嗨,我有一个 Rails 应用程序,我想在单个查询中创建多个记录
这是我的代码
我得到的错误是mysql语法中的错误
我知道我想要它(“用户名”),(“用户名”),但我无法实现它有人可以告诉我如何实现这种格式的值