Nosql

列族的意義何在?

  • March 9, 2017

我已經看到像RocksDB這樣的 NoSQL 數據庫系統提供了一個稱為列族的特性。我相信我理解這個概念指的是什麼,但是使用它們的實際(實際)好處是什麼?我認為它們至少可以在某些情況下提高查找性能,或者鍵值整體的空間局部性?然而,據我所知,它似乎不會影響數據庫訪問的實際語義。它是否正確?有什麼我想念的嗎?

我剛剛從RocksDB FAQ中發現了一些有趣的資訊。(RocksDB 是一個 KV 儲存。)

以下是一些相關的摘錄。

問:列族有什麼用途?

A:使用列族最常見的原因:(1)在數據的不同部分使用不同的壓縮設置、比較器、壓縮類型、合併運算符或壓縮過濾器;(2) 刪除列族以刪除其數據;(3) 一個列族儲存元數據,另一個列族儲存數據。

Q:在多列族和多rocksdb數據庫中儲存數據有什麼區別?

答:主要區別在於備份、原子寫入和寫入性能。使用多個數據庫的優點:數據庫是備份或檢查點的單位。將數據庫複製到另一台主機比列族更容易。使用多個列族的優點: (1) 寫入批處理在一個數據庫上跨多個列族是原子的。使用多個 RocksDB 數據庫無法實現這一點。(2) 如果您向 WAL 發出同步寫入,過多的數據庫可能會損害性能。

問:我有不同的鍵位。我應該用前綴分隔它們,還是使用不同的列族?

答:如果每個鍵空間都相當大,最好將它們放在不同的列族中。如果可以小一點,那麼應該考慮將多個鍵空間打包到一個列族中,避免維護太多列族的麻煩。

引用自:https://dba.stackexchange.com/questions/166159