為什麼 Cassandra 的寫速度比 MySQL 快?


一般意義上的說哪個快沒有太大意義,如scalarize 所說,限定條件很多,cassandra 還有一個數據安全策略,比如共有N個數據節點,指定在寫入操作保證成功的節點數量為 任一/一半以上/全部節點,這個策略涉及網路I/O,對寫入速度影響較大。


不能這麼比較的,架構都不一樣,實現的功能也不完全一樣,換句說:是不同類的東西,解決的問題有重疊部門。

NoSQL應用場景及Cassandra架構分析,鏈接:http://www.mysqlops.com/2011/06/13/nosql-cassandra-architecture.html


Cassandra 的寫速度比 MySQL 快的兩大根本原因

1、cassandra沒有sql解析層,這是個大塊

2、cassandra採用memstable+sstable的模型,最大化的提高數據的寫入性能,磁碟操作只有順序寫。

nosql產品的數據寫入buffer非常大, nosql用數據安全換取高性能, 其實沒有絕對的優勢,看你的產品具體需求


SQL類關係型資料庫雖然不是每次寫都轉為隨機寫磁碟,而是以page為單位加合併調度的方式減少了隨機寫,但是從根本上講是無法避免隨機寫的。LSM類型的nosql則通過log的方式完全避免了隨機寫,同時並沒有犧牲數據安全,因為根據需要可以保證每次log都是落盤的。


沒有可比性,不同的產品側重點不同。Cassandra沒有複雜的邏輯結構,寫入比較簡單,MySQL不同,它是真正RDBMS,邏輯結構複雜,如果把MySQL改成這種k/v方式的來處理,速度不見得慢。


說Cassandra 的寫速度比 MySQL快,只是一種想當然的誤解...

磁碟技術發展幾十年了,一直是計算機系統的瓶頸. nosql有什麼法寶嗎?能比傳統資料庫寫的快嗎?顯然沒有,除非優化寫入的方式,合併寫的操作,這顯然是另外的範疇了.我們考慮的是伸縮性,不要片面誇大了它的寫入性能.


其實這個問題就是為什麼NoSQL產品在有些應用上由於RDBMS產品,由於RDBMS產品處理每個請求的時候,要做解釋、優化、事務、鎖管理等等一系列操作,損失了很多性能。但是往往一些對性能要求非常高的應用,比如微博、Feed等,是不需要這些操作的,NoSQL產品就是由於去掉了這些操作性能上有了很大的提高


單機的cassandra不一定比mysql快吧。這個問題還是要看具體的應用場景


cassandra幾乎所有的磁碟寫入都是串列的,沒有隨機寫入操作,具體可以看官網的介紹

mysql如果更新數據,需要隨機寫入,更新索引也需要隨機寫操作

cassandra設計上是犧牲讀性能來獲取更好的寫入性能。


先是記錄commitlog,完事直接丟內存裡面,後面有非同步線程去做刷磁碟。


http://wiki.apache.org/cassandra/Durability 描述了cassandra的寫入機制。大概來說:Cassabdra先寫入commit log文件,這個動作只是append而沒有隨機定址,所以很快。默認設置下cassandra每CommitLogSyncPeriodInMS將寫入的內容fsync到硬碟,所以如果機器掛了你就可能損失這段時間內寫入的數據。之後Cassandra才把新內容寫入到內存里的memstable,如果內存不夠了就溢出到硬碟上的sstable。

在客戶端最開始請求寫入cassandra時,cassandra在證數據寫到commit log硬碟上之前就讓客戶端返回了,所以可能在某些情況下顯得很快吧。


前幾個月perconaserver提供nosql介面了.

handlersocket據說不錯。


這個命題要成立,還需要許多限定條件,比如數據設計、數據量、存儲介質和架構,等等。

即使雙方面臨相同的條件,結論也並不一定都一樣,因為雙方的設計場景和目標不同。

一般簡單測試都會得出 cassandra 快的結論,最大的原因是 cassandra 不是關係型資料庫。


第一 非同步寫,先寫commit log,然後非同步(memtable 滿後)到磁碟

第二 順序寫,無論是commit log,sstable,都是順序寫

第三 只添加不更新刪除,數據用版本號和刪除標識來確定最新狀態,這個也是為什麼sstable能夠順序寫的根本。磁碟文件的定期重整,回收垃圾版本。

詳細見 http://www.ragezz.org/blog/topic/512.html


不知道是否正確,cassandra 應該是google bigtable的facebook的一種解決方案,他是基於列的。它寫到的是內存中而不是永久磁碟,所以你感覺會快,當他的內存滿的時候就會flush到磁碟。


說沒有mysql解析層的那個說法。。。

在cassandra guide book這本書中說cassandra馬上要推出自己的CQL語言。


推薦閱讀:

如何評價SequoiaDB巨杉資料庫?
2000年之後資料庫的發展歷史怎樣?
有哪些分散式資料庫書籍或論文比較好?
MongoDB和MySQL如何搭配使用?
知乎為什麼不使用 NoSQL 資料庫?

TAG:資料庫 | Cassandra | MySQL | 資料庫性能 | NoSQL | HandlerSocket |