有一點背景 - 這個問題涉及一個項目運行在一個小的EC2實例上,即將遷移到一箇中型項目。主要組件是Django,MySQL和大量使用python和java編寫的自定義分析工具,這些工具可以提升重量。同一臺機器也在運行Apache。從MySQL切換到Cassandra - 優點/缺點?
數據模型看起來像下面這樣 - 大量的實時數據通過各種網絡傳感器進行流式處理,理想情況下,我希望建立一個長輪詢方法,而不是每15分鐘進行一次當前輪詢(計算統計信息和寫入數據庫本身的限制)。一旦數據進入,我將原始版本存儲在MySQL中,讓分析工具在這些數據上鬆動,並將統計數據存儲在另外的幾個表中。所有這些都是使用Django呈現的。
關係的特點,我需要 -
- 排序[SliceRange在Cassandra的API似乎satisy這種]由多個表之間
- 多對多關係
- 集團[卡桑德拉SuperColumns似乎做以及一對多]
- 獅身人面像在這給了我一個很好的全文引擎,所以這也是必要的。 [開卡珊德拉,在Lucandra項目似乎滿足這種需要]
我的主要問題是,數據讀取非常慢(和寫是不是很燙兩種)。我現在不想在它上面投入大量金錢和硬件,我更喜歡隨着時間的推移輕鬆擴展的東西。縱向擴展MySQL在這個意義上(或便宜)並不是微不足道的。
所以基本上,在已經讀了很多關於NOSQL的,都像MongoDB的,卡桑德拉和伏地魔嘗試,我的問題是,
在中等EC2實例,我會獲得任何好處讀/寫轉移到像Cassandra? This article(pdf)絕對似乎表明這一點。目前,我會說每分鐘寫幾百次就是常態。對於讀取 - 由於數據每5分鐘更改一次,緩存失效必須很快發生。在某些時候,它也應該能夠處理大量的併發用戶。即使創建了索引,MySQL在大型表上進行一些連接也會導致應用程序性能下降 - 大約32k行的內容需要超過一分鐘的時間才能呈現。 (這也可能是EC2虛擬化I/O的人爲因素)。表格大小約爲4-5百萬行,並且大約有5個這樣的表格。
鑑於CAP定理和最終一致性,每個人都在討論如何在多個節點上使用Cassandra。但是,對於剛開始增長的項目,是否有意義 部署單節點cassandra服務器?是否有任何警告?例如,它可以替代MySQL作爲Django的後端嗎? [這是推薦?]
如果我換班,我猜我必須重寫應用程序的部分做更多的「administrivia」,因爲我必須做多個查找來獲取行。
難道任何意義,只是使用MySQL作爲一個鍵值存儲,而不是一個關係引擎,並與去?這樣我就可以利用大量穩定的API以及穩定的引擎(並根據需要去關聯)。 (從Friendfeed的佈雷特·泰勒的帖子在這 - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
任何見解從誰做了一個轉變的人將不勝感激!
謝謝。
我很好奇,如果你最終轉向卡桑德拉。我已經在從php和asp.net切換到django的路線上,但我不確定現在從mssql和mysql遷移到Cassandra是否爲時過早。我還有每秒數百條記錄進來。 – avatar 2011-04-26 16:49:26
@itgorilla - 我使用cassandra進行非常具體的任務,現在它運行良好。我意識到將它用於「移動」數據庫可能不是一個好主意,我的結果驗證了(我同意下面的codemonkey的答案)。所以如果你想要真正快速的寫入,搜索和非規範化的數據,並且你想擴展,Cassandra是一個不錯的選擇。 (最上面的數字會說,幾分鐘寫一分鐘!) – viksit 2011-05-07 19:09:42
看看這個Django Cassandra項目,如果你有興趣: https://github.com/vaterlaus/django_cassandra_backend – Alex 2011-01-24 23:42:49