Skip to main content
Column families in RocksDB allow you to logically partition data within a single database instance while maintaining independent configuration and operational control for each partition.

What are Column Families?

A column family is a logical partition within a RocksDB database. Each column family:
  • Has its own LSM tree structure
  • Can have independent configuration (compression, compaction, etc.)
  • Shares the same Write-Ahead Log (WAL) for durability
  • Supports atomic writes across multiple column families
Think of column families as separate key-value stores within one database, but with the ability to write to multiple families atomically.

Creating Column Families

Opening a Database with Column Families

Every RocksDB database has at least one column family called “default”:
You must open ALL existing column families when opening a database. Use DB::ListColumnFamilies() to discover existing column families.

Listing Existing Column Families

Creating New Column Families

Reading and Writing Data

Writing to Column Families

Atomic Writes Across Column Families

Use WriteBatch for atomic writes across multiple column families:
All operations in a WriteBatch either succeed together or fail together, even across different column families.

Reading from Column Families

Iterating Over Column Families

Independent Configuration

Each column family can have different settings optimized for its data:
Optimize for high write throughput:

Use Cases

Store each tenant’s data in a separate column family:
Benefits: Independent compaction, easy tenant deletion, per-tenant statistics
Separate hot and cold data:
Optimize each data type separately:

Managing Column Families

Dropping Column Families

Dropping a column family marks it for deletion but doesn’t immediately free space. Files are deleted during compaction.

Getting Column Family Metadata

Dynamic Options

Change column family options at runtime:

Shared Resources

While column families have independent LSM trees, they share some resources:
  • Write-Ahead Log (WAL): All column families share the same WAL
  • Block Cache: Can be shared across column families
  • Compaction Threads: Background threads are shared
  • Rate Limiter: I/O rate limiting applies globally

Cleanup

Always properly destroy column family handles:
Column family handles must be destroyed before closing the database.

Best Practices

  1. Use column families for logical partitions with different access patterns
  2. Limit the number of column families (typically < 100) to avoid resource overhead
  3. Share block cache across column families to maximize cache efficiency
  4. Use atomic WriteBatch when consistency across families is required
  5. Monitor per-CF statistics to identify performance issues
  6. Always destroy handles before closing the database

Next Steps

LSM Tree Design

Understand the LSM structure behind column families

Compaction

Learn about per-CF compaction strategies

Write-Ahead Log

See how WAL works across column families

Performance Tuning

Optimize column family configurations