# RocksDB：列族

![`smart`](RocksDBColumnFamilies_aa_001_20220511.png)

----------------------------------------------------------------------------
RocksDB 是一个键值数据库，允许用户创建和管理多个称为列族的逻辑分区。每个列族存储一组独特的键值对，可以单独配置和管理。列族是在 RocksDB 3.0 版本中引入的，提供了一种逻辑分片数据库的方式，允许更有效和灵活地管理数据。

一个关键特性是列族支持跨多个列族的原子写入。这意味着你可以原子地执行跨多个列族的写操作，确保所有写入操作要么全部应用，要么全部不应用。这对于需要在多个列族中维护数据一致性的应用来说是非常有用的。

另一个重要的列族特性是它们提供了一个数据库中所有列族的一致视图。这意味着你可以查询和访问任何列族的数据，而数据将是一致的且最新的。

在实施方面，RocksDB中的列族共享一个写前日志（WAL）文件，但它们不共享MemTable或SSTable文件。这允许跨列族进行原子写入，同时也允许独立配置和管理每个列族。当列族被刷新时，将创建一个新的WAL日志文件，并将所有对所有列族的写入都写入此新文件。在所有列族都被刷新并且其数据被写入新日志文件之前，不会删除旧的WAL日志文件。这确保所有列族定期被刷新，并且在发生崩溃或其他故障时数据不会丢失。