Doris update 更新效率问题: 高并发、大数据量修改场景下 快速支持数据更新update的解决办法推荐下呢?或者有没有其他更新方案推荐?

Viewed 79

update 更新效率 单条100ms ,串行化执行。40w 数据 可能要耗时 10 小时。如何快速更新doris 表中数据。

参考:https://doris.incubator.apache.org/zh-CN/docs/3.0/data-operate/update/unique-update-concurrent-control/
UPDATE 并发控制
默认情况下,并不允许同一时间对同一张表并发进行多个 UPDATE 操作。

主要原因是,Doris 目前支持的是行更新,这意味着,即使用户声明的是 SET v2 = 1,实际上,其他所有的 Value 列也会被覆盖一遍(尽管值没有变化)。

这就会存在一个问题,如果同时有两个 UPDATE 操作对同一行进行更新,那么其行为可能是不确定的,也就是可能存在脏数据。

但在实际应用中,如果用户自己可以保证即使并发更新,也不会同时对同一行进行操作的话,就可以手动打开并发限制。通过修改 FE 配置 enable_concurrent_update,当该配置值设置为 true 时,更新命令将不再提供事务保证。

1 Answers

通过数据导入(INSERT INTO )实现高效的数据更新。
一:全列更新 :将update 换成 INSERT INTO 数据导入方式,带上唯一键。
做法:先查出来再,再设置需要修改的列。 最后insert into 导入进去最终版本数据。
备注:改成导入的话,一个批次就写完了,秒级完成的。一个批次可以支持1Gb级别的数据量导入doris
https://help.aliyun.com/document_detail/2666563.html?scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%402666563.S_BB2%40bl%2BRQW%40ag0%2BBB1%40ag0%2Bos0.ID_2666563-RL_%E9%83%A8%E5%88%86%E5%88%97-LOC_doc%7EUND%7Eab-OR_ser-PAR1_212a5d4017378563047457318d199a-V_4-P0_1-P1_0&spm=a2c4g.11186623.d_help_search.i1
二:部分列更新:
DDL 设置 : enable_insert_strict的值为false
做法

SET enable_unique_key_partial_update = true;
insert into tableA(a,b,c) select * from tableB;
SET enable_unique_key_partial_update = false;

https://ask.selectdb.com/questions/D1p62/doris2-1-6-bu-fen-lie-geng-xin-chang-jing-hou-mian-de-geng-xin-hui-fu-gai-zhi-qian-de-geng-xin