在MySQL被Oracle收購後,業內對這個開源資料庫的議論就從未停止,對於PostgreSQL將取而代之成為最人氣開源資料庫的聲音也從未停歇。 然而從DB-Engines排行榜來看,PostgreSQL與MySQL之間的差距遠不只是「幾層樓」那麼高(PostgreSQL得分不到MySQL的零頭)。 著眼整個排行榜上的193個資料庫,我們會發現NoSQL資料庫已占大半江山,榜上有名的傳統關聯式資料庫管理系統僅余75個。
上圖為9月份最新的排行,在Oracle穩坐頭把交椅的同時,MySQL與Microsoft SQL Server的2、3之爭也從未停止。 然而撇開關系型資料庫,我們會發現NoSQL的人氣已獲得長足增長——在2013年1月,MongoDB的得分還不到100,Cassandra的得分也只有30多,同時Cassandra更是闊別了幾個月後再臨前10!
Cassandra最初由Facebook開發,以Amazon專有的完全分散式資料庫Dynamo為基礎,結合了Google BigTable的列存儲類型,很多方面都可以稱之為Dynamo 2.0,而後又成為Apache頂級專案。 Cassandra開源不久後,就得到了眾多公司的親睞,其中甚至包括了Twitter這樣的重量級使用者,然而在不久後卻消失在Twtter,甚至是原作者Facebook的主流產品中。
即使一度被拉下神壇,Cassandra仍然有眾多的支援者,其中更包括了著名資料開源軟體公司DataStax,而Cassandra能一直穩壓HBase(高貴的血統, 與Hadoop天然集成)長期霸佔列存儲第一更是其優越性的強有力證明。
Cassandra能重回Top 10與其2.0版本的發佈完全是分不開的,DataStax CTO兼聯合創始人Jonathan Ellis對其做出了總結:
三大重量級更新
羽量級事務:輕量事務可以確保類似關聯式資料庫提供的序列化隔離等級的操作線性一致性,防止並行請求之間發生衝突。
CQL提升:CQL(Cassandra Query Language)增強游標等功能,加強了索引支援。
支援觸發器:觸發器可以將性能關鍵代碼推動到接近它所處理資料的地方,簡化與Storm這樣事件驅動型框架的集成。
其它相關更新
性能優化
在集群列上的追蹤統計允許清除讀路徑中不必要的SStable
Single-pass compaction大致可以讓大型分片壓縮速度翻倍,同時還會減少JVM heap與GC上的影響
在壓縮性能下降時,分級壓縮會執行L0上的size-tiered壓縮。 可以抑制性能上升之前的讀性能惡化,同時新版本還顯著的提升了LCS SStable體積
對於仍然使用Thrift的應用程式,基於LMAX Disrupto的半非同步及半同步伺服器將大幅減少Thtift的開銷
通過提高堆外記憶體性能實現更快的partition index查詢及緩存讀取
通過從CRC32切換到Adler checksums實現更快速的壓縮資料讀取
堆外分派的JEMalloc支援
移除partition級別的布隆篩檢程式提升性能——消除布隆篩檢程式在每個操作上的反序列化和減少GC翻滾。
大掃除
取消對pre-1.2.5 SStable及pre-1.2.9模式的相容,已更新到最新版本的1.2.9
取消SuperColumns,通過複合組成替代。 SuperColumn API被保留,經轉換後被透明的反向相容(點擊查看詳情)
潛在風險countPendingHints JMX調用被Hints Created標準取代,既高性能而且能被週期性監控, 同時還消除了OOM節點的可能
堆內分片緩存被移除,只餘下堆外選項
預設Vnode,為非vnode集群提供的舊token範圍代碼消失。 當不使用vnode節點時,手動的指定一個token或者是隨機選取。
移除備用記憶體負載邏輯。 這一點是讓運營人員有適當的動手空間,來應對不適當架構導致的堆負載,但是它永遠都不可能如我們所想的那麼可靠。 而當下這個重要的儲存引擎中繼資料被移到堆外,記憶體不足可能會提前爆發。
操作關注
需求JAVA7
分級壓縮的分級資訊被保存到sstable的中繼資料中——每個SStable都清楚資訊的所在,因此不再需要單獨的清單。 這將讓分級壓縮更穩定,並且快照更簡單。
通過可選的row preheating來避免核心頁面緩存丟失
為了更穩定及透明,流被重寫
流支援舊版本的SStable意味著在修復前不需要手動跨集群運行upgradesstables, 從而你可以批量的載入快照。