当前位置:网站首页>typeorm 批量插入数据优化和插入冲突操作
typeorm 批量插入数据优化和插入冲突操作
2022-08-09 13:26:00 【祥仔先生】
d本文主要记录一下批量插入数据的优化。
一、批量插入
首先能实现批量插入在typeorm中有save、insert和createQueryBuilder 这三种都可以。
根据官网上介绍的
You can create INSERT
queries using QueryBuilder
. Examples:
await dataSource
.createQueryBuilder()
.insert()
.into(User)
.values([
{ firstName: "Timber", lastName: "Saw" },
{ firstName: "Phantom", lastName: "Lancer" },
])
.execute()
This is the most efficient way in terms of performance to insert rows into your database. You can also perform bulk insertions this way.
这是一个非常搞笑的批量插入。但是我们发现如果我插入500条数据还会在操作日志中,还有跟着500条select 查询对应插入数据的id。加入我们不需要这个id的话 我们是可以关闭这个select的
entityManager
.createQueryBuilder()
.insert()
.into("user")
.values(users)
.updateEntity(false)
.execute();
或者save操作的时候增加参数{ reload: false }。
二、插入如果出现冲突的操作
有的时候在并发情况下插入数据会出现Duplicate entry '6' for key 'PRIMARY 主键冲突。
当然了 如果加分布式锁也会有一定影响。
- 加分布式锁也可能会影响消费者的消息处理速度。
- 消费者依赖于redis,如果redis出现网络超时,我们的服务就悲剧了。
如果对业务影响不是很大的话 可以考虑使用下面的语句。
await connection.createQueryBuilder()
.insert()
.into(Post)
.values(post2)
.onConflict(`("id") DO NOTHING`)
.execute();
await connection.createQueryBuilder()
.insert()
.into(Post)
.values(post2)
.onConflict(`("id") DO UPDATE SET "title" = :title`)
.setParameter("title", post2.title)
.execute();
对应的sql语句
INSERT INTO table (column_list)
VALUES (value_list)
ON DUPLICATE KEY UPDATE c1 = v1, c2 = v2,...;
边栏推荐
猜你喜欢
随机推荐
C#使用cersharp
Code of Conduct for Firefighters
记一次 ERROR scheduler.AsyncEventQueue: Dropping event from queue shared导致OOM
Badge of openharmony container components
响应式pbootcms模板家禽饲养类网站
C语言中常用的数组排序方法:冒泡排序、选择排序、插入排序、数组的移动(含代码详解)以及相关联系题
目标检测类间不平衡问题
【面试高频题】可逐步优化的链表高频题
Zero Basic Learning CANoe Panel Design Catalog
MySQL主从同步原理
微信实现扫码支付(native)
Flex for openharmony container components
响应式pbootcms模板建材家居类网站
RobotFramework 之 库与关键字
零基础学习CANoe Panel 设计目录
X264性能优化
RobotFramework 之 用户关键字
如何用vs新建Asp.net项目(Web页面)
蓝桥历届真题-蛇形填数
易语言获取cookie