This can be desirable if data in multiple column families must be consistent with each other. For example, imagine there is one metadata column family meta_cf
, and a data column family data_cf
. Every time we write a new record to data_cf
, we also write its metadata to . meta_cf
and data_cf
must be flushed atomically. Database becomes inconsistent if one of them is persisted but the other is not. Atomic flush provides a good guarantee. Suppose at a certain time, kv1 exists in the memtables of meta_cf
and kv2 exists in the memtables of data_cf
. After atomically flushing these two column families, both kv1 and kv2 are persistent if the flush succeeds. Otherwise neither of them exist in the database.
It’s easy to enable/disable atomic flush as a DB option. To open the DB with atomic flush enabled,
In the case automatic flushes triggered internally by RocksDB, we currently flush all column families in the database for simplicity.