之前不是特別明白列式存儲和行式存儲到底有什麼區別,對於忽然蹦出來的BigTable、HBase、Cassandra這些NoSQL數據庫憑什麼比MySQL集羣,Oracle在分析存儲上的強大?思來能夠這樣說說。數據庫
A. 存儲分佈式
傳統RDBMS以行單位作數據存儲(字段爲空則賦值爲‘NULL'),列式存儲數據庫以列爲單位作數據存儲。以下:spa
對於列式存儲來講,一行數據包含一個列或者多個列,每一個列一單獨一個cell來存儲數據。而行式存儲,則是把一行數據做爲一個總體來存儲。索引
另一個不得不提的是,列式存儲天生就是適合壓縮,由於同一列裏面的數據類型基本是相同,筆者在以前使用普通的gzip壓縮,200MB的字符串數據,通過壓縮以後只剩下8MB。固然gzip並不屬於增量壓縮,咱們能夠選擇增量壓縮的方式來知足一些數據的隨機查找。事務
B. 查詢ip
從查詢來講,行式存儲比較適合隨機查詢,而且RDBMS大多提供二級索引,在整行數據的讀取上,要優於列式存儲。可是,行式存儲不適合掃描,這意味着要查詢一個範圍的數據,行式存儲須要掃描整個表(由於這些記錄不是順序存儲的),在索引創建不當的狀況下,查詢大表(千萬數據)簡直是噩夢。字符串
列式存儲,最先接觸的可能不是所謂的BigTable,大多數之前的數據倉庫都是採用列式存儲。列式存儲通常行KEY,列KEY(不是列值)都是順序存儲,好比我要查詢一個時間段裏面,某個值的出現頻率,我可能只須要涉及到兩個列。集羣
在分析上,列式存儲要優於行式存儲,列式存儲的數據庫通常狀況下也強烈建議用戶按需查找,而不是整行數據去獲取。列式存儲在這方面減小了IO的壓力。數據類型
C. 結語im
沒有說誰比誰更優,在正真實戰的狀況,考慮實際狀況。好比傳統的RDBMS提供ACID原子操做和事務,在大多數列式存儲數據庫上是不具有的,大多數列式存儲數據庫對分佈式支持友好。
須要知道的是,列式存儲以及行式存儲在查詢和存儲上的本質,在技術選型上多點籌碼。