【数据湖与开放表格式】对象存储语义与代价
内容提要
本文讨论了对象存储(如S3)与POSIX文件系统的关键差异,强调对象存储的强一致性、重命名操作的高成本及条件写的重要性。对象存储不支持原子重命名,导致重命名变为逐个复制和删除,增加了成本。此外,列出对象的代价随对象数量线性增长,影响数据处理效率。条件写(如If-None-Match)为原子提交提供了支点,解决了并发写入的问题。整体上,文章探讨了对象存储在数据湖架构中的局限性及其对表格式设计的影响。
关键要点
-
对象存储(如S3)与POSIX文件系统的主要差异在于对象存储的语义与文件系统相差甚远,许多在POSIX上理所当然的操作在S3上要么很贵,要么根本不存在。
-
对象存储不支持原子重命名,重命名操作变为逐个复制和删除,导致成本显著增加。
-
列出对象的代价随对象数量线性增长,影响数据处理效率,尤其在大表上表现明显。
-
条件写(如If-None-Match)为原子提交提供了支点,解决了并发写入的问题,确保只有一个写入成功。
-
对象存储的强一致性保证了写入后立即可读,但不提供快照隔离和并发互斥。
-
对象存储的不可变性要求数据文件只能新写而不能修改,影响了数据更新和删除的方式。
延伸解读
对象存储的局限性
对象存储(如S3)与传统POSIX文件系统在操作语义上存在显著差异,尤其在重命名和列出对象的效率上。重命名操作需通过逐个复制和删除实现,导致成本显著增加,而列出对象的代价随对象数量线性增长,这对大规模数据处理造成了挑战。
强一致性与并发写入
虽然S3自2020年起提供强一致性,确保写入后立即可读,但在并发写入时仍然存在问题。多个客户端同时写入同一对象时,只有最后一个成功,无法实现真正的并发控制。条件写(如If-None-Match)为原子提交提供了支点,解决了这一问题。
条件写的应用
条件写(如If-None-Match和If-Match)在对象存储中为实现原子提交提供了重要支持。通过这些条件请求,用户可以确保只有在特定条件满足时才进行写入,从而避免并发冲突。这一特性使得在对象存储上进行复杂的事务处理成为可能。
延伸问答
对象存储与POSIX文件系统的主要区别是什么?
对象存储使用扁平的键值映射,而POSIX文件系统提供真实的目录树和inode,支持原子重命名等操作。
为什么对象存储的重命名操作成本高?
对象存储不支持原子重命名,重命名变为逐个复制和删除,导致成本显著增加。
条件写在对象存储中有什么作用?
条件写提供了原子提交的支点,确保只有一个写入成功,解决了并发写入的问题。
对象存储的强一致性有什么特点?
对象存储提供强读写一致性,写入后立即可读,但不提供快照隔离和并发互斥。
列出对象的代价如何影响数据处理效率?
列出对象的代价随对象数量线性增长,尤其在大表上表现明显,影响数据处理效率。
对象存储的不可变性对数据更新有什么影响?
对象存储的不可变性要求数据文件只能新写而不能修改,影响了数据更新和删除的方式。