Cassandra 和 Spark 資料處理一窺
Apache Cassandra 資料庫近來引起了很多的興趣,這主要源於現代雲端軟體對於可用性及效能方面的要求。
那麼,Apache Cassandra 是什麼?它是一種為高可用性及線性可擴充套件性優化的分散式的聯機交易處理 (OLTP) 資料庫。具體說到 Cassandra 的用途時,可以想想你希望貼近使用者的系統,比如說讓我們的使用者進行互動的系統、需要保證實時可用的程式等等,如:產品目錄,物聯網,醫療系統,以及移動應用。對這些程式而言,下線時間意味著利潤降低甚至導致其他更壞的結果。Netfilix 是這個在 2008 年開源的專案的早期使用者,他們對此專案的貢獻以及帶來的成功讓這個專案名聲大噪。
Cassandra 於2010年成為了 Apache 軟體基金會的頂級專案,並從此之後就流行起來。現在,只要你有 Cassadra 的相關知識,找工作時就能輕鬆不少。想想看,NoSQL 語言和開源技術能達到企業級 SQL 技術的高度,真讓人覺得十分瘋狂而又不可思議的。這引出了一個問題。是什麼讓它如此的流行?
因為採用了亞馬遜發表的 Dynamo 論文中率先提出的設計,Cassandra 有能力在大規模的硬體及網路故障時保持實時線上。由於採用了點對點模式,在沒有單點故障的情況下,我們能倖免於機架故障甚至全網中斷。我們能在不影響使用者體驗的前提下處理資料中心故障。一個能考慮到故障的分散式系統才是一個沒有後顧之憂的分散式系統,因為老實說,故障是遲早會發生的。有了 Cassandra, 我們可以直面殘酷的生活並將之融入資料庫的結構和功能中。
我們能猜到你現在在想什麼,“但我只有關係資料庫相關背景,難道這樣的轉變不會很困難嗎?”這問題的答案介於是和不是之間。使用 Cassandra 建立資料模型對有關係資料庫背景的開發者而言是輕車熟路。我們使用表格來建立資料模型,並使用 CQL ( Cassandra 查詢語言)來查詢資料庫。然而,與 SQL 不同的是,Cassandra 支援更加複雜的資料結構,例如巢狀和使用者自定義型別。舉個例子,當要儲存對一個小貓照片的點贊數目時,我們可以將整個資料儲存在一個包含照片本身的集合之中從而獲得更快的順序查詢而不是建立一個獨立的表。這樣的表述在 CQL 中十分的自然。在我們照片表中,我們需要記錄名字,URL以及給此照片點贊過的人。
在一個高效能系統中,毫秒級處理都能對使用者體驗和客戶維繫產生影響。昂貴的 JOIN 操作制約了我們通過增加不可預見的網路呼叫而擴容的能力。當我們將資料反正規化化使其能通過儘可能少的請求就可獲取時,我們即可從磁碟空間成本的降低中獲益並獲得可預期的、高效能應用。我們將反正規化化同 Cassandra 一同介紹是因為它提供了很有吸引力的的折衷方案。
很明顯,我們不會侷限於對於小貓照片的點贊數量。Canssandra 是一款為高併發寫入優化的方案。這使其成為需要時常吞吐資料的大資料應用的理想解決方案。實時應用和物聯網方面的應用正在穩步增長,無論是需求還是市場表現,我們也會不斷的利用我們收集到的資料來尋求改進技術應用的方式。
這就引出了我們的下一步,我們已經提到了如何以一種現代的、價效比高的方式儲存資料,但我們應該如何獲得更多的動力呢?具體而言,當我們收集到了所需的資料,我們應該怎樣處理呢?如何才能有效的分析幾百 TB 的資料呢?如何才能實時的對我們所收集到的資訊進行反饋,並在幾秒而不是幾小時的時間利作出決策呢?Apache Spark 將給我們答案。
Spark 是大資料變革中的下一步。 Hadoop 和 MapReduce 都是革命性的產品,它們讓大資料界獲得了分析所有我們所取得的資料的機會。Spark 對效能的大幅提升及對程式碼複雜度的大幅降低則將大資料分析提升到了另一個高度。通過 Spark,我們能大批量的處理計算,對流處理進行快速反應,通過機器學習作出決策,並通過圖遍歷來理解複雜的遞迴關係。這並非只是為你的客戶提供與快捷可靠的應用程式連線(Cassandra 已經提供了這樣的功能),這更是能洞悉 Canssandra 所儲存的資料,作出更加合理的商業決策並同時更好地滿足客戶需求。