编者荐语:
来自PowerData徐振超同学的精彩文章~
以下文章来源于数据极客圈 ,作者徐振超
[
数据极客圈 .
一入大数据深似海?别怕!“数据极客圈” 就是你的救生圈,走对圈子跟对人,趣析数据、畅聊趋势,快进圈子!
](#)
如今,不管是做电商、搞金融,还是做互联网运营,大家都知道数据就是公司的 “命根子”。数据不仅要准确,更得实时更新,这样领导们做决策才能又快又准。要是数据库更新数据不给力,业务发展肯定处处受限。Apache Doris 是最近非常火的开源实时数据仓库。不少大厂都在用它处理海量数据更新,靠着高性能和灵活的架构,在数据更新这块脱颖而出。接下来,咱们就深入了解下,Doris 究竟有哪些数据更新的 “绝招”,又是怎么操作的呢?
一、Doris 数据模型与更新基础
Doris 提供主键模型和聚合模型,适配不同业务场景的更新需求。
(一)主键模型
主键模型能确保记录唯一性,在用户画像数据场景应用广泛。以电商平台为例,平台需实时更新用户浏览偏好、购买记录等信息,同时保证每个用户仅有一条最新记录。主键模型包含 MoW(Merge-on-Write)和 MoR(Merge-on-Read)两种实现方式。MoW 在写入数据时就完成合并操作,查询时无需额外处理,查询性能比 MoR 快 5 - 10 倍,在高并发查询场景下,能有效降低查询延迟,提升系统响应速度。
(二)聚合模型
聚合模型适用于数据累加、平均等场景。以广告点击数据统计为例,当新的点击记录产生时,系统会自动将其与历史数据进行聚合计算,为广告投放效果分析提供实时数据支持,助力广告主及时调整广告策略,提升投放精准度。
二、Doris 数据更新方式
(一)UPDATE 语句
UPDATE 语句适合小规模、临时性的数据修改。比如在用户标签系统中,若需修正少量用户的标签信息,使用该语句十分便捷。不过,UPDATE 语句目前仅支持 UNIQUE KEY 模型,且只能更新 Value 列。示例如下:
-- 假设表user_profile包含user_id(主键)、user_label(标签列)等字段 UPDATE user_profile SET user_label = '新标签值' WHERE user_id = 123;
(二)基于导入的批量更新
对于大规模数据更新,基于导入的方式更具优势,而且该方式支持主键模型和聚合模型。Doris 支持 Stream Load、Broker Load、Routine Load、Insert Into等导入方式,在批量更新时,系统会自动采用 UPSERT 语义,确保数据一致性。
以 Stream Load 为例,在创建表时,若要开启 Merge-on-Write 部分列更新(Doris 2.1 后默认开启),需指定如下属性:
CREATE TABLE example_table ( id INT, value VARCHAR(20) ) ENGINE = olap UNIQUE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 3 PROPERTIES ( "enable_unique_key_merge_on_write" = "true" );
在使用 Stream Load 导入数据时,需添加相应的 header,并在 columns 中指定要导入的列:
curl --location-trusted -u root:123456 -T test_data.csv -h "format:csv" -h "column_separator:," -h "partial_columns:true" -h "columns:id, value" http://10.16.10.6:8030/api/demo/example_table/_stream_load
这种方式能显著提升更新效率,特别适合每日百万级广告数据的更新场景。
三、Doris vs OLTP:数据更新的优劣对比
(一)Doris 作为 OLAP,与 OLTP 相比在数据更新方面的劣势
单条记录更新性能欠佳:OLTP 数据库专为处理大量并发的事务性操作设计,借助行级锁机制,能快速定位并更新单条记录,响应时间可低至毫秒级。而 Doris 作为 OLAP 数据库,其架构侧重于海量数据的批量处理和复杂查询分析,单条记录更新时,需在列式存储结构中进行复杂的元数据管理与数据重组,导致效率较低。
事务支持精细化不足:OLTP 严格遵循 ACID 特性,对事务的原子性、一致性、隔离性和持久性提供全面且精细的支持。Doris 虽然在批量更新时采用 UPSERT 语义确保数据一致性,但在事务的隔离级别和回滚机制方面,缺乏 OLTP 数据库那样的精细化管理。
实时互动更新体验不足:在 OLTP 场景中,用户对数据更新的响应速度和实时性要求极高,OLTP 数据库能够迅速响应用户的更新请求,并即时反馈结果。而 Doris 在处理交互式更新时,由于其查询优化和数据存储机制并非针对此类场景设计,在更新响应速度和用户交互体验上存在差距。
(二)Doris 在数据更新方面的优势
海量数据批量更新性能优:Doris 凭借独特的存储结构和并行计算能力,以 Stream Load 导入方式为例,能将百万级广告数据的更新时间从数小时大幅缩短至几分钟,远超 OLTP 数据库在大规模数据更新场景下的表现。
数据模型灵活适配性强:主键模型中的 MoW 机制在写入时完成数据合并,提升查询性能;聚合模型能自动处理数据的累加、平均等操作,满足多元业务需求,相比 OLTP 单一的数据模型,Doris 的适配性更强。
列更新策略降本增效:从 Doris 2.0 版本开始,在 MoW 实现中支持部分列更新功能,类似 Excel 表格的单元格级更新,减少不必要的数据更新开销。在聚合模型中,通过 REPLACE\_IF\_NOT\_NULL 聚合函数实现增量更新,新数据仅覆盖旧数据中的非空值,降低数据更新和存储成本。
更新与分析查询融合佳:Doris 在更新数据的同时,能为复杂的分析查询提供强大支持。在金融行业的实时交易数据分析场景中,既能快速处理海量交易数据的更新,又能为风险评估和决策提供实时依据,实现数据更新与分析查询的高效结合。
四、使用场景示例
(一)实时动态更新
在广告或推荐系统中,需频繁更新用户标签表中的行为信息,以支持实时分析和决策。Doris 的部分列更新功能能快速响应这些更新需求,当用户在电商平台浏览某类商品后,系统可立即更新用户的浏览偏好标签,为用户推送相关商品推荐,提升用户购物体验和平台转化率。
(二)数据修正
在财务数据管理中,若发现某笔交易记录有误,可使用 Doris 的 UPDATE 语句或基于导入的批量更新功能,及时修正错误数据,确保财务报表的准确性。
(三)大宽表拼接
在企业数据仓库建设过程中,经常需要将来自不同业务系统的数据整合到一张大宽表中。使用 Doris 的部分列更新功能,可只更新变化的数据,将新数据准确合并到目标表中,避免全表数据重写带来的高成本,降低数据整合的时间和资源成本。
Doris 数据库在数据更新方面功能强大,能应对不同规模数据更新需求,为企业提供可靠的数据更新解决方案。若你还未体验,不妨一试,说不定让你眼前一亮~
往期推荐
[
](http://mp.weixin.qq.com/s?__b...
Apache Doris 湖仓一体:打破数据边界,解锁实时分析的终极答案
Doris vs ClickHouse 企业级实时分析引擎怎么选?
Doris的Stream Load那些事儿,你踩过哪些“坑”?
如何排查 Apache Doris 中 "Failed to commit txn" 导入失败问题?
完
●
数据极客圈子介绍
●
圈子1
Apache Doris社区是目前国内最活跃的开源社区(之一)。Apache Doris(Apache 顶级项目) 聚集了世界全国各地的用户与开发人员,致力于打造一个内容完整、持续成长的互联网开发者学习生态圈!
如果您对Apache Doris感兴趣,可以通过以下入口访问官方网站、社区论坛、GitHub和dev邮件组:
💡官网文档:https://doris.apache.org
💡社区论坛:https://ask.selectdb.com
💡GitHub:https://github.com/apache/doris
💡dev邮件组:mailto:dev@doris.apache.org
可以加作者微信(Faith\_xzc)直接进Doris官方社区群
圈子2
PowerData是由一群数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的数据开源社区。
社区整理了一份每日一题汇总及社区分享PPT,内容涵盖大数据组件、编程语言、数据结构与算法、企业真实面试题等各个领域,帮助您提升自我,成功上岸。
可以加作者微信(Faith\_xzc)直接进PowrData官方社区群
叮咚✨ “数据极客圈” 向你敞开大门,走对圈子跟对人,行业大咖 “唠” 数据,实用锦囊天天有,就缺你咯!快快关注数据极客圈,共同成长!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。