首页 文章 精选 留言 我的

精选列表

搜索[增量式],共10000篇文章
优秀的个人博客,低调大师

Iceberg的V2格式

这是我的第102篇原创文章 【V1与V2简介】 Iceberg在V1的格式中定义了,如何使用不可变类型的文件(Parquet、ORC、AVRO)来管理大型分析型的表,包括元数据文件、属性、数据类型、表的模式,分区信息,以及如何写入与读取。 而在V2的格式中,在V1的基础上增加了如何通过这些类型的表实现行级别的更新与删除功能。其最主要的改变是引入了delete file记录需要删除的行数据,这样可以在不重写原有(数据)文件的前提下,实现行数据的更新与删除。 【行级别删除的原理】 1.DeleteFile的表示 在V1版本中,只有DataFile的概念,即记录添加到iceberg中的行数据集。而DeleteFile(删除文件)则记录的是被删除的行的数据集。 删除行数据的方式分为两种:Equality Deletes和Position Deletes。 所谓Equality Deletes就是等值删除,指定一个或多个列的值,其中包含该列值的每一行数据都被视为已删除。例如删除id=10的数据;而Position Deletes为位置删除,删除指定文件中指定位置的行数据。 在V2版本在清单列表文件中(snap-xxx.avro)中增加了一个字段content,以标识哪些文件是DataFile,哪些是DeleteFile。content的值,0表示数据文件、1表示删除数据文件。 对于这两种删除方式,在清单文件(xxx.avro)中,同样通过content字段来表示:0表示新增的文件、1表示Position deletes、2表示Equality deletes。 1)等值删除 在清单文件中,增加equality_ids字段标记进行等值比较的字段的ID集合。 同时,DeleteFile文件记录的内容,则是在删除时,自定义的schema,且至少包含进行等值比较的字段列的值。 2)位置删除 在DeleteData文件中固定列字段为file_path和pos,以及可选的row字段。其中file_path指定需要待删除的行数据所在的数据文件位置,而pos则指定待删除的行记录的起始位置 2.Sequence Nubmer(序号) 为实现行级别的删除而引入了删除文件,那么在数据读取时需要有方式来判断执行的先后顺序,比如对同一条记录,新增、删除、再新增,其先后顺序会直接导致数据的正确性。因此,引入了Sequence Number(序号)来标识数据的执行先后顺序。 序号随快照的产生而生成,并写入快照的元数据文件中(snap-xxx.avro);同时,本次快照所产生的清单文件(xx.avro)会直接继承(使用)快照对应的序号。而本次快照新创建的数据文件和删除文件,序号表示并记录在清单文件中(实际读取到内存后,会被替换为清单文件的序号), 而如果是以"exist"的方式出现在清单文件中(清单文件中status的值为0),则为以产生该文件的快照的序号写入到清单文件中。 【总结】 本文主要从文件格式上讲述了iceberg版本2中如何实现行级别的删除,具体为deletefile的表示。实际上,在读写的逻辑处理上还会有较多的约束和注意点,我们后面的文章再来重点讲述读写流程。 好了,这就是本文的全部内容,如果觉得本文对您有帮助,请点赞+转发,如果觉得有不正确的地方,也可以拍砖指点,最后,欢迎加我微信交流~ 本文分享自微信公众号 - 陈猿解码(gh_383bc7486c1a)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

TiDB 源码系列之沉浸式编译 TiDB

1.背景 最近刚学习完PCTP,对TiDB的各种读写有了粗略的了解,但是要想研究的更细节一些的东西, 肯定离不开学习源码,学习源码的话大家可以参考官方的TiDB源码系列文章,但是官方的文章 都是18年发的,可能会有些滞后,所以大家可以参考这个以及结合源码去学。 TiDB源码系列解读文章:官方源码解读博客地址 然而学习源码肯定编译调试源码是最有效的学习途径,经过这几天的学习,以及请教开发大佬, 成功编译了TiDB,所以分享给对源码感兴趣的小伙伴。 2.准备工具 Goland白嫖款一个(30天) TiDB 最新款源码tar包一份 Mac一台 3.源码下载 1.首先去github上下载源码:源码下载地址 2.选择自己想要看的版本:这里我以最新的5.4.0版本为例。 3.解压tar包 #1.打开终端 #2.到对应目录解压tar包 tar -xzvf tidb-5.4.0.tar.gz #解压后就会得到一个文件夹 4.编译软件下载配置 由于TiDB是使用的go语言编写的,所以我们使用goland进行编译。 1.下载一个30天白嫖版,有能力的可以直接购买付费版(支持正版) 下载地址:goland下载地址 选择适合自己的电脑系统的进行下载: 2.安装完成之后选择对应打开的项目。 3.找到自己刚才解压的TiDB源码文件夹,打开 4.打开后可能会出现很多的报错(如下图),但是问题不大,基本都是因为没有安装go的相关module导致的。 所需的gomodule可以在代码中的下面文件看到,可以看到目前都是红色,说明缺少对应的mod。 5.打开goland的设置,然后下载最新版的goroot,就会安装所需的module。 然后选择一个最新的版本下载就好。 然后在下面就会开始下载相关的依赖: 测试的时候发现只会下载一部分,所以剩下的缺少的可以点击图片中的从github sync。 下载完成之后就会全部变绿,至此环境我们就配置好了。 5.编译过程 经过上面的步骤,基本一切环境已经就绪,接下来我们就可以自己编译TiDB数据库。 1.但是会又有一个问题从哪开始运行? 这里还是要借助我开始说的官方源码系列:如何学习TiDB源码 作为一个非专业开发人员,只能借助官网提示去学习。 从我上面的地址,大家可以看到TiDB源码文件对应什么,以及从哪里开始。 2.从上面我们可以从官方博客知道从tidb-server/main.go运行 首先main.go里面的var就是我们系统的启动参数,大家可以修改对应的参数进行启动 然后下面找到main函数旁边的绿色按钮,大家可以选择debug模式或者直接运行,这里我选择Debug模式,可以看到更多的信息。 点击之后需要等待一会儿,屏幕下方会显示compiling.. 编译完之后,大家就可以在debug栏看到对应的信息: 可以看到[INFO] [server.go:246] ["server is running MySQL protocol"] [addr=0.0.0.0:4000]说明启动成功了。 3.去访问看看是否真正运行成功。 可以看到TiDB服务已经在运行, 使用MySQL命令行访问TiDB,可以看到已经O K,至此编译完成。 6.最后 运行成功后,大家后续就可以通过对不同的函数打断点,然后看自己的SQL会调用哪些代码中的哪些函数。函数的位置可以参考官方博客源码解析进行断点测试。 原文作者:@Jiawei 发表时间:2022/2/24 原文链接:https://tidb.io/blog/5be1e094

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册