您现在的位置是:首页 > 网络趣梗网络趣梗

insert_update和insert区别(es insert update性能比较)

2022-09-02 02:38:13网络趣梗0人已围观

简介  insert_update和insert区别(es insert update性能比较),新营销网红网本栏目通过数据整理汇集了insert_update和insert区别(es insert update性能比较)相关信息,下面一起看看

  insert_update和insert区别(es insert update性能比较),新营销网红网本栏目通过数据整理汇集了insert_update和insert区别(es insert update性能比较)相关信息,下面一起看看。

  今天在测试中间件的时候,突然想到以前的一些思路也可以借鉴。这一块的内容还是挺有意思的。我来简单剧透一下。如何把drop操作转换成alter操作,如何把alter操作转换成DML操作,其实都是设计上的一些经验法则。今天我要讲另一个,如何把一个更新操作转换成一个插入操作。

  先说问题的背景。最近在测试一个业务的时候,业务的并发性很高。在应用架构转换中,根据模型的特点,我们最终降低了事务的维度。本来这个操作和改进带来的好处是显而易见的。结果,在压力测试期间遇到了明显的问题。程序的逻辑是

   1)根据id检查对应的userid是否存在。

   2.1)如果有更新,

   2.2)如果不存在,插入。

  看起来这个逻辑已经很清晰了,但是在程序高并发的情况下,在步骤1和步骤2之间发生了一些并发导致的副作用。假设线程1的步骤1的判断userid不存在,在插入的瞬间,线程2也执行同样的插入操作,毫秒级会发生主键冲突,比较频繁。从业务架构来说,其实可以有更好的解决方案,但是在数据库层面能做什么呢?

  其实我们也可以想一些办法。MySQL中有两种类型的语句可以支持这种动态逻辑,一种是replace,另一种是insert on duplicate。

  所以,既然这两种方法有相似的功能,那就一定有区别。

  一般来说,replace原则开销最高的是delete insert,而duplicate上insert开销最高的是select update。两者看起来都差不多,相对来说,on duplicate更推荐。

  其实insert duplicate的方式只涉及一个DML,而且从索引维护的角度来看,主键的情况下,不需要索引维护,而replace操作本质上是delete insert中的两个DML,从索引的角度来看维护索引的成本更高。

  而在userid存在的情况下,insert on duplicate的更新逻辑和简单更新性能如何?

  我们可以写一个程序来模拟测试。

  首先,我们可以导出一个数据列表,假设我们有一个文件data.txt

  在重复语句上生成insert

   cat data.txt

   head -100000

  awk -F,{ print insert into dbo _ grw _ match time(userid,grwid,value,moddate,crtdate) values(,$1,$2-1,$3,\ $4 \,\ $ 5 \)on duplicate key update value=values(value),mod date=now();} tmp_data.localhost2

  生成更新语句

   cat data.txt

  tail -100000

  awk -F,{ print update dbo _ grw _ match time set value=$ 3-1,moddate=\ $4 \,crtdate=\ $5 \其中userid=$1,grwid=$2 } tmp_data.localhost3

  经过多次测试,在数据量为10万的情况下,insert on duplicate key的结果基本稳定在99秒,update的结果稳定在89秒。十万量级下,相差10秒。我们来换算一下。

   update方法可以在1毫秒内写入1.1行数据,而insert on duplicate方法基本相同,都是在1毫秒内。

  选择100000/89/1000;

   -

  

   100000/89/1000

  

   -

  

   1.12359551

  

   -

  选择100000/99/1000;

   -

  

   100000/99/1000

  

   -

  

   1.01010101

  

   -

   0.1行数据的差异其实是很低的比例,更新操作与select的逻辑同时存在。按照这个业务场景,insert on duplicate的性能明显优于update。

  后续会对线上系统的压力进行更详细的测试,可以持续关注。

  相关十大巅峰网游小说(十大公认网游小说推荐)

  百度网盘登录入口(百度网盘共享群的正确使用方法)

  恶人传(《恶人传》以暴制暴成救赎)

  百度网盘登录入口(百度网盘安装方法)

  番禺中学排名(番禺区热门学校盘点)

  道路标志(完整且有插图的交通安全标志)

  哪个是苹果的序列号(iPhone序列号识字)

  故宫太和殿介绍(故宫太和殿为什么叫金殿)

  东营人均gdp(全国人均GDP前15名城市)

  鲁振原型(鲁镇传奇的原型)

  硫酸铜是什么颜色(硫酸铜的用途和危害)

  小米平板4参数(小米平板4参数全曝光)

  更多insert_update和insert区别(es insert update性能比较)相关信息请关注本文章,本文仅仅做为展示!

Tags: 网络趣事  

很赞哦! ()

随机图文

留言与评论 (共有 条评论)
验证码:

本栏推荐