聊聊大数据框架的数据更新策略: COW,MOR,MOW

这篇具有很好参考价值的文章主要介绍了聊聊大数据框架的数据更新策略: COW,MOR,MOW。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大数据框架下,常用的数据更新策略有三种:

COW: copy-on-write, 写时复制;

MOR: merge-on-read, 读时合并;

MOW: merge-on-write, 写时合并;

hudi等数据湖仓框架,常用的是前两种实现数据更新。而Doris则主要用后两种更新数据。

COW

在数据写入的时候,复制一份原来的拷贝,在其基础上添加新数据,创建数据文件的新版本。新版本文件包括旧版本文件的记录以及来自传入批次的记录(全量最新)。

正在读数据的请求,读取的是最近的完整副本,这类似Mysql 的MVCC的思想。

在java的类库中就有一个CopyOnWriteArrayList,而linux的fork子进程的内部机制也是通过COW实现。可以说,COW是比较常用的数据更新方案。

MOR

新插入的数据存储在delta log 中,定期再将delta log合并进行parquet数据文件(也可以理解为base文件)。读取数据时,会将delta log跟base文件做merge。

以Apache Doris中Merge On Read更新机制在Aggregate数据模型中的实现逻辑为例:

  1. 当数据写入 Doris 时,首先会进入内存中的 MemTable。
  2. 当 MemTable 达到一定大小后,会触发刷新(Flush)操作,将内存中的数据写入到磁盘上的 Segment 文件中。这个过程会生成一个新的 Segment 文件,并更新元数据中的文件列表。
  3. 当用户执行查询操作时,Doris 会根据查询条件读取相关的 Segment 文件。在读取数据的同时,Doris 会检查这些数据是否需要与 MemTable 中的数据进行合并。

这个merge的过程一般是多路归并排序的实现:查询时将重复的 Key 排在一起,并进行聚合操作,其中高版本 Key 的会覆盖低版本的 Key,最终只返回给用户版本最高的那一条记录。

hudi中,数据表的存储类型主要是MOR,参考: Hudi-表的存储类型及比较

MOW

将被覆盖和被更新的数据进行标记删除,同时将新的数据写入新的文件。在查询的时候, 所有被标记删除的数据都会在文件级别被过滤掉,读取出来的数据就都是最新的数据,消除掉了读时合并中的数据聚合过程,并且能够在很多情况下支持多种谓词的下推。

别的大数据框架我没有查到相关的信息,这个的应用主要是在Doris的Unique数据模型中,即通过MOW实现了Unique数据模型下的数据更新。

Doris的MOW的实现方案是: Delete + Insert。即在数据写入时通过一个主键索引查找到被覆盖的 Key,将其标记为删除。 参考自微软的 SQL Server 在 2015 年 VLDB 上发表的论文《Real-Time Analytical Processing with SQL Server》中提出的方案。

Delete + Insert

这篇论文提出了数据写入时将旧的数据标记删除(使用一个 Delete Bitmap 的数据结构),并将新数据记录在 Delta Store 中,查询时将 Base 数据、Delete Bitmap、Delta Store 中的数据 Merge 起来以得到最新的数据。整体方案如下图所示

聊聊大数据框架的数据更新策略: COW,MOR,MOW

其优点是,任何一个有效的主键只存在于一个地方(要么在 Base Data 中,要么在 Delta Store 中),这样就避免了查询过程中的大量归并排序的消耗,同时 Base 数据中的各种丰富的列存索引也仍然有效。

简单来讲,Merge-On-Write 的处理流程是:

  1. 对于每一条 Key,查找它在 Base 数据中的位置(rowsetid + segmentid + 行号)
  2. 如果 Key 存在,则将该行数据标记删除。标记删除的信息记录在 Delete Bitmap中,其中每个 Segment 都有一个对应的 Delete Bitmap
  3. 将更新的数据写入新的 Rowset 中,完成事务,让新数据可见(能够被查询到)
  4. 查询时,读取 Delete Bitmap,将被标记删除的行过滤掉,只返回有效的数据

总结

之所以会有这篇文章,主要是想总结一下大数据框架下常用的(准实时/实时)数据更新的常用解决方案,毕竟解决方案是通用的,只是实现方式会有差异。

关于更详细的内容与实现,请参考:

10x 查询性能提升,全新 Unique Key 的设计与实现

cow、mor与mow文章来源地址https://www.toymoban.com/news/detail-748866.html

到了这里,关于聊聊大数据框架的数据更新策略: COW,MOR,MOW的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis的缓存更新策略以及如何保证redis与数据库的数据一致性

    redis的缓存更新策略有这么几种: 1、由应用直接和redis以及数据库相连接:         查询数据时,应用去redis中查询,查不到的话再由应用去数据库中查询,并将查询结果放在redis;         更新数据时,由应用去触发redis数据的删除以及数据库的update。 2、应用只跟redi

    2024年02月13日
    浏览(57)
  • Redis 原理缓存过期、一致性hash、雪崩、穿透、并发、布隆、缓存更新策略、缓存数据库一致性

    redis的过期策略可以通过配置文件进行配置 redis会把设置了过期时间的key放在单独的字典中,定时遍历来删除到期的key。 1).每100ms从过期字典中 随机挑选20个,把其中过期的key删除; 2).如果过期的key占比超过1/4,重复步骤1 为了保证不会循环过度,导致卡顿,扫描时间上限

    2024年02月08日
    浏览(58)
  • vue3 使用UI框架reactive数据更新,视图不更新问题

    本篇主要记录两个问题,然而这两个问题又都可以对应同一种解法。废话少说,解决方法在最上面。推荐格式如下: 一定一定要再多包一层,不然就会遇到一些问题。(⊙﹏⊙)虽然这是一句废话。下面的内容过于基础且本篇只记录bug和解法,想要探求为什么的呢,还请自己去

    2024年02月12日
    浏览(35)
  • 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础类,比如封装了BaseEntity去集成,那么这样使用会出问题 方式二:on duplicate key (推荐) 4.注意 5.常见问题  插入数据时,我们经常会遇到这

    2024年02月04日
    浏览(88)
  • Spring 框架简介: 聊聊特性与模块

    在当今的软件开发领域中,Spring框架是一个备受推崇的开发框架,它以其强大的功能和灵活的设计而闻名于世。本文将简要介绍Spring框架的特性以及其主要模块,帮助读者更好地理解这个广泛应用的工具。 轻量级: Spring框架被设计为轻量级的框架,不会对应用程序引入过多

    2024年03月14日
    浏览(42)
  • 解密:GPT-4框架与训练过程,数据集组成,并行性的策略,专家权衡,推理权衡等细节内容

    大家好,我是微学AI,今天给大家解密一下GPT-4框架与训练过程,数据集组成,并行性的策略,专家权衡,推理权衡等细节内容。2023年3月14日,OpenAI发布GPT-4,然而GPT-4的框架没有公开,OpenAI之所以不公开GPT-4的架构,并不是因为存在对人类的潜在威胁,而是因为他们所建立的

    2024年02月16日
    浏览(43)
  • 聊聊 Java 集合框架中的Arrays

    Arrays 和 Collections 是分别操作数组和集合的两个工具类。今天就来对 Arrays 中的内容作个总结。 Arrays 类位于 java.util 包中。 Arrays 继承 Object Arrays 类中的静态方法可以对数组进行排序、查询、搜索等等操作。 1. Arrays.asList() 方法描述 该方法返回一个 ArrayList , 其返回的 ArrayList

    2024年01月21日
    浏览(45)
  • Android之 常用数据库框架整理

    一 简介 1.1 上节说了关系型数据库有以下几种: Oracle、Microsoft SQL Server、Microsoft Access、MySQL、SQLite 1.2 各自的领域也不一样 java,C#,php等用Oracle,Microsoft SQL Server,MySQL比较多。 移动端Android,IOS等用SQLite比较多 1.3 SQLite是一种轻量型数据库,有以下优点: 不需要一个单独的服

    2024年02月14日
    浏览(38)
  • 聊聊后端Web开发框架(Python)的简单使用

    后端 web 开发框架的技术如下: 页面渲染:客户端渲染页面(SPA)、服务端渲染页面(模板技术) 数据库连接技术:数据库连接池、数据访问 服务管理:接口、路由、权限 异步任务调度:异步、同步、回调 最早服务端会对页面进行渲染,随着发展,前端渲染与服务端分离开

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包