【数据湖与开放表格式】行级删除与 Merge-on-Read

💡 原文中文,约21600字,阅读约需52分钟。
📝

内容提要

在Iceberg中,数据文件不可变,删除行可通过写时复制(CoW)和读时合并(MoR)两种方式实现。CoW重写整个文件,写放大高;MoR则写删除标记,适合高频删除。V3引入删除向量(DV),提高了删除效率。选择CoW或MoR取决于删除频率和读写性能需求。实验表明,CoW在删除时重写大量数据,而MoR需定期合并以避免性能下降。

🎯

关键要点

  • 在Iceberg中,数据文件不可变,删除行通过写时复制(CoW)和读时合并(MoR)两种方式实现。

  • CoW重写整个文件,写放大高,而MoR则写删除标记,适合高频删除。

  • V3引入删除向量(DV),提高了删除效率。

  • 选择CoW或MoR取决于删除频率和读写性能需求。

  • 实验表明,CoW在删除时重写大量数据,而MoR需定期合并以避免性能下降。

🔎

延伸解读

CoW与MoR的选择依据

在选择使用CoW(写时复制)还是MoR(读时合并)时,用户需考虑删除操作的频率和数据读取的性能需求。CoW适合低频删除场景,因其在写入时会重写整个文件,确保读取时的高效性。而MoR则适合高频删除,虽然写入时开销较小,但读取时需要合并删除标记,可能导致性能下降。

删除向量的优势

Iceberg V3引入的删除向量(DV)显著提高了删除效率。与V2的独立删除文件相比,DV通过位图编码被删行的位置,减少了读取时的开销。用户在设计数据湖时,应优先考虑使用V3的DV,以便在高频删除场景中保持良好的性能表现。

删除操作的成本分析

CoW和MoR在删除操作中的成本表现截然不同。CoW在删除时需要重写大量数据,写放大效应显著,而MoR则通过写入小的删除标记来降低写入成本,但在读取时需要合并删除信息,可能导致性能下降。因此,用户应根据具体的使用场景进行合理选择。

延伸问答

Iceberg中如何实现行级删除?

在Iceberg中,行级删除通过写时复制(CoW)和读时合并(MoR)两种方式实现。CoW重写整个文件,而MoR则写删除标记,适合高频删除。

CoW和MoR的主要区别是什么?

CoW在写入时重写整个文件,写放大高;而MoR则只写删除标记,读时需要合并,适合高频删除场景。

什么是删除向量(DV),它有什么优势?

删除向量(DV)是V3中引入的,用于提高删除效率。它通过位图编码被删行的位置,减少了读端的开销。

选择CoW或MoR时需要考虑哪些因素?

选择CoW或MoR时需考虑删除频率和读写性能需求。CoW适合低频删除,而MoR适合高频删除。

实验结果显示CoW的写放大有多大?

实验表明,CoW在删除时重写大量数据,写放大可达文件行数的量级,例如删除1行可能重写1000行。

MoR在读时的性能如何影响?

MoR在读时需要定期合并删除标记,随着删除的累积,读性能会下降,因此必须依赖compaction来维护性能。

🏷️

标签

➡️

继续阅读