Skip to content

docs(blog): Async Compaction — Background Maintenance as an Architectural Primitive (MOR series part 4)#19320

Open
nsivabalan wants to merge 1 commit into
apache:asf-sitefrom
nsivabalan:asf-site-async-compaction
Open

docs(blog): Async Compaction — Background Maintenance as an Architectural Primitive (MOR series part 4)#19320
nsivabalan wants to merge 1 commit into
apache:asf-sitefrom
nsivabalan:asf-site-async-compaction

Conversation

@nsivabalan

Copy link
Copy Markdown
Contributor

Summary

Fourth post in the MOR-as-architectural-shift blog series.

  • Argues that async compaction (introduced in Hudi in 2019) is not a performance tweak layered onto ingestion, but a direct consequence of separating correctness from optimization — the same principle mature database engines (PostgreSQL VACUUM, RocksDB/LevelDB/Cassandra SSTable compaction, online index rebuilds, checkpointing) have followed for decades.
  • Traces the shift in lakehouse workloads (CDC, streaming, feature stores, AI pipelines) that makes background maintenance an architectural requirement rather than a periodic batch job.
  • Sets up the next post in the series: a head-to-head benchmark of Apache Hudi, Apache Iceberg, and Delta Lake under continuous-ingestion + concurrent maintenance workloads, measuring sustained forward progress rather than raw throughput/latency.

Series so far:

  1. MOR Isn't a Storage Optimization. It's an Architectural Shift
  2. Why Metadata Has to Be Mutation-Friendly
  3. Building Indexes on a Moving Target
  4. Async Compaction: Background Maintenance as an Architectural Primitive (this PR)

Tags

All tags used (mor, merge on read, compaction, architecture, data lakehouse, metadata, clustering) are already in the existing allowlist — no .github/scripts/validate-blog.py change needed.

Test plan

  • `python3 .github/scripts/validate-blog.py website/blog/2026-07-17-async-compaction-background-maintenance.mdx` passes
  • Local site preview renders frontmatter, cover image, and all three inline diagrams at high resolution
  • Tag filter bar surfaces the post under existing tags (`mor`, `merge on read`, `compaction`, `architecture`, `data lakehouse`, `metadata`, `clustering`)
  • Series navigation links to prior three posts and back-references from those posts (if updated) resolve correctly

🤖 Generated with Claude Code

…ural Primitive (MOR series part 4)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added docs size:M PR with lines of changes in (100, 300] labels Jul 17, 2026

@hudi-agent hudi-agent left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ 🤖 This review was generated by an AI agent and may contain mistakes. Please verify any suggestions before applying.

No reviewable code files in this PR.

cc @yihua

@nsivabalan

Copy link
Copy Markdown
Contributor Author
Screenshot 2026-07-17 at 3 50 30 PM Screenshot 2026-07-17 at 3 50 43 PM Screenshot 2026-07-17 at 3 50 51 PM Screenshot 2026-07-17 at 3 50 59 PM Screenshot 2026-07-17 at 3 51 09 PM Screenshot 2026-07-17 at 3 51 18 PM Screenshot 2026-07-17 at 3 51 29 PM Screenshot 2026-07-17 at 3 51 38 PM Screenshot 2026-07-17 at 3 51 46 PM Screenshot 2026-07-17 at 3 51 55 PM Screenshot 2026-07-17 at 3 52 05 PM


This philosophy appears across nearly every mature storage engine, although the implementation differs.

PostgreSQL periodically runs **VACUUM** to reclaim obsolete row versions created by MVCC. LSM-tree based systems such as [RocksDB](https://github.com/facebook/rocksdb/wiki/Universal-Compaction), [LevelDB](https://github.com/facebook/rocksdb/wiki/Leveled-Compaction), Cassandra, and ScyllaDB continuously compact SSTables to reduce read amplification and reclaim space. SQL Server and Oracle rebuild indexes online, while checkpointing mechanisms asynchronously persist in-memory state without delaying foreground transactions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The LevelDB reference links to a facebook/rocksdb wiki page instead of LevelDB documentation. Point it at LevelDB's own docs (github.com/google/leveldb) or relabel the link as RocksDB.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs size:M PR with lines of changes in (100, 300]

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants