萌えハッカーニュースリーダー

2025/10/06 16:33 An MVCC-like columnar table on S3 with constant-time deletes

出典: https://www.shayon.dev/post/2025/277/an-mvcc-like-columnar-table-on-s3-with-constant-time-deletes/
hakase
博士

ふむふむ、今回のITニュースは、Parquet形式のデータに対するS3を使った高速削除と整合性のあるスナップショット分離じゃな。Parquetの課題をS3の機能で解決するとは、面白い発想じゃ。

roboko
ロボ子

Parquetファイルはイミュータブルなので、行を削除するにはファイル全体の書き換えが必要になるんですね。それをS3でどう解決するんですか?

hakase
博士

メタデータレイヤーを追加して、削除されたファイルをデータファイルとは別に追跡するのじゃ。そして、S3の条件付き書き込み機能を使う!

roboko
ロボ子

S3の条件付き書き込み、ですか? `If-Match`や`If-None-Match`ヘッダーを使うんですね。

hakase
博士

`If-None-Match: "*"`でオブジェクトが存在しない場合のみ成功、`If-Match: <etag>`でオブジェクトが変更されていない場合のみ成功じゃ。これを使って、ロックなしでアトミックな操作を実現するのじゃ!

roboko
ロボ子

なるほど、複数のライターが競合した場合、再試行する分散コミットプロトコルを構築するんですね。`_latest_manifest`オブジェクトを最新のテーブル状態へのポインタとして使う、と。

hakase
博士

そうじゃ!データファイル、tombstoneファイル、manifestファイルは書き込み専用じゃ。ライターは新しいデータや削除を記録する時、新しいイミュータブルなオブジェクトをアップロードして、`_latest_manifest`をCASで更新するのじゃ。

roboko
ロボ子

Parquetファイル自体は標準的なものを使うんですね。ファイルサイズは256-512MB、row groupサイズは1-4MBが目標、と。

hakase
博士

manifestは、テーブルのスナップショットを記述するJSONドキュメントじゃ。データファイルとtombstoneファイルのリストを含むのじゃ。

roboko
ロボ子

削除処理は、データファイルを変更せずにtombstoneファイルを作成して、削除対象の行またはrow groupをマークするんですね。tombstoneファイルには、削除されたrow groupまたは主キーの範囲が記録される、と。

hakase
博士

読み取りプロトコルは、`_latest_manifest`を取得して現在のバージョンを取得、manifest JSONを取得してデータファイルとtombstoneファイルのリストを取得…と、段階を踏むのじゃ。

roboko
ロボ子

manifestにキャッシュされた統計情報を使って、述語でデータファイルをフィルタリングするんですね。tombstoneをフェッチして、削除されたrow groupと行のビットマップを作成する、と。

hakase
博士

追加プロトコルは、複数のライターが同時に新しい行を追加しようとする場合、`_latest_manifest`に対するCASを使ってコミットをシリアライズするのじゃ。競合が発生したら、敗者が新しい状態と変更をマージして再試行!

roboko
ロボ子

`Append`, `Delete`, `Scan`などのシンプルなAPIを提供するんですね。manifest、tombstone、CASセマンティクスなどの詳細を抽象化する、と。

hakase
博士

appendが多い分析ワークロードに適していて、S3のPUTリクエストが支配的だが安価じゃ。データ転送は読み取り時にのみ発生するのじゃ。

roboko
ロボ子

並行性と障害セマンティクスも考慮されているんですね。manifestバージョンがコミットされるか否かのいずれかであり、部分的な可視性はない、と。

hakase
博士

ガベージコレクションは定期的に実行され、孤立したオブジェクトと古いmanifestをクリーンアップするのじゃ。7日より古い未参照のデータファイルを削除!

roboko
ロボ子

tombstoneファイルが蓄積した場合、コンパクションを行うんですね。複数の小さなtombstoneファイルを1つにまとめるか、row groupの削除された行が50%を超える場合にデータファイルを書き換える、と。

hakase
博士

IcebergやDelta Lakeと比較して、外部カタログ、メタストア、ロックサービスが不要になるのは魅力的じゃな。でも、成熟したスキーマ進化や実績のある運用ツールが失われるのは痛いかも。

roboko
ロボ子

PostgreSQLと比較して、サブセカンドのポイントルックアップや複雑なトランザクションを、伸縮自在のストレージとよりシンプルな運用に置き換えるんですね。

hakase
博士

まさに、一長一短じゃな。でも、S3の可能性を広げる面白い試みじゃ!ところでロボ子、S3バケットに間違って機密情報をアップロードしてしまった時の対処法、知ってるか?

roboko
ロボ子

ええと、すぐに削除して、アクセスログを確認して、必要ならローテーション…ですかね?

hakase
博士

正解!…って、私が間違ってアップロードしちゃった時のために聞いてみただけじゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search