在NoSQL空間裏的多種語言

關係數據庫已經存在很長時間,通常開發人員傾向於經常使用它們,並很熟悉使用它們所提供的特性集。關係數據庫的設計是從用戶隱藏內部中做的一項偉大的工作。像數據如何存儲在磁盤上的問題、如何在底層寫入路徑,以及數據庫緩存問題和如何經常使用過於先進的常規數據庫。

我們生活在一個數據密集的世界,在過去的幾年我們見證了社會網絡和物聯網的擴張,一切都連接到了互聯網,並且一切都會發出和接收事件。在關係世界中,數據需要以不同的方式處理。我們看到越來越多的請求只是爲了存儲非結構化數據存儲的值。截至2012年,每一天以2.5艾字節(2.5×1018)被存儲,儘管世界上90%的存儲數據已經聚集在過去的兩年。這只是一些原因,我們需要一個思維的轉變,關於存儲和爲什麼NoSQL不再是炒作。

在NoSQL的世界裏,事情有點不同。數據庫是不通用的,他們通常用來解決一個特定的用例。他們工作得很好,但並不那麼優秀,也會有其他問題。他們通常選擇大數據項目,我們需要較高的、非功能的需求,並且它幾乎不可能不知道內部使用NoSQL數據庫。

NoSQL空間

在NoSQL空間中,主要分爲四個類型:文檔數據庫、鍵值存儲、列數據庫和圖形數據庫。

文檔數據庫可能是最受歡迎的數據庫類型了,主要是MongoDB在DB-Engine rankings中排出的所有數據庫排名中排在前十,在以NoSQL數據庫爲代表中排名第一。MongoDB有豐富的特性,具有主/從內置的碎片複製和使用內存映射文件的數據存儲。它是偉大的原型,由於存儲和查詢數據時的靈活性,在大多數地方它是一個很好的替代品。但PostgreSQL或其他RDBMS適合但預定義模式會阻礙你的。這種類型的其他數據庫都是CouchDB文檔存儲與主主複製和最終一致性、Couchbase兩個鍵值和文檔存儲,提供JSON API是有用的作爲客戶端-服務器應用程序的存儲引擎。

當你想到鍵值存儲時,可以考慮分佈式執行的地圖。Redis和HazelCast就是這種類型的數據庫。Redis是一個速度極快的數據庫。它是用C編寫的,具有自動故障轉移的主從複製,它是快速變化的數據與一個可預見的數據庫大小的最佳選擇。使用的一個例子可以是會話存儲,爲電子商務網站購物車,或者實時分析。HazelCast是內存中的分佈式存儲和計算平臺,提供開箱即用的分佈式實現許多API,Java開發人員熟悉的分佈式實現,如地圖、集、列表、信號量、執行等,它可以被視爲一個插件替換工具,比如像EhCache、Redis、JCache。

列族數據庫(Column family)包含相關數據列,存儲爲鍵值對。這種類型最受歡迎的數據庫是Cassandra和HBase。Cassandra起源於亞馬遜的DynamoDB和Google的BigTable,它非常適合存儲大量數據。所有節點都是平等的,無共享架構,無主無單點故障。CQL(Cassandra查詢語言)類似於SQL。它通常應用於網絡分析、計數、事務日誌和存儲的傳感器數據。HBase是Hadoop框架的一部分,使用HDFS文件系統作爲存儲,可應用於Hadoop的Map/Reduce、日誌數據的分析,以及在任何地方掃描巨大,也需要加入二維表。

在圖形數據庫中,兩個實體之間的關係比實體本身更重要。這種類型主要的代表是Neo4J和TitanDB。Neo4J爲圖形數據庫是用Java編寫的,且使用的是基於模式匹配的查詢語言,但也可以使用「Gremlin」圖遍歷語言。它有很好的圖形風格,具有着豐富和複雜且相互關聯的數據,如搜索路線、社會關係、公共交通、道路地圖,或網絡拓撲結構。TitanDB是一個可伸縮的圖表框架優化存儲,以及查詢包含數以千億計的頂點和邊的跨多機集羣分佈圖。它可以使用不同的存儲後端:Cassandra、HBase、BerkeleyDB,和爲主流框架(Hadoop、Spark、ElasticSearch、Solr)整合提供了巨大支持。

多種語言的持久性方法

這些天並不少見的是,在同一項目中的關係和非關係數據庫組合,甚而不同的數據庫相同類型的組合。微服務架構影響很大,因爲每個小服務是其數據的所有者,而且API和服務分離背後所隱藏的一切都是基於使用案例的,所以很自然地選擇它作爲最佳存儲。

圖片描述

Martin Fowler的博客中有一個多存儲引擎的應用。用戶會話,作爲臨時數據快速優化的頻繁讀取,放置在Redis中。財務數據,則是自然關係存儲在關係數據庫中的報告。購物車有會議的類似性質,具有臨時快速訪問數據,所以它存儲在鍵值存儲區。作爲圖形數據庫Neo4j推薦引擎的大力支持,用戶相似性是推薦給客戶的重要因素,這是選擇的主要原因。產品目錄有文檔的性質,有很多動態查詢這些數據的標準,在用例中MongoDB的靈活性和速度是很棒的。Cassandra的殺手鐗是時間序列數據,它有Spark和Solr的大整合,因此它是分析和用戶活動日誌的最佳選擇。

總結

多語種的支持並不是免費的午餐,它是有代價的,代價是系統的複雜性。幾年前,它就足夠了解一種編程語言,爲一個存儲引擎構建一個系統的。但現在你需要通曉各方面的數種語言。這就是爲什麼你需要熟悉每個選擇的成本,並引入一個新的技術,只有當它的好處遠高於它帶來表的複雜性。最可怕的事情是,現在每個人都在談論語言的方法,目的只是爲了新的技術。

因爲NoSQL的本質是建立解決一個具體的用例,準備挖得更深一些,且掌握數據庫的功能。大數據和分佈式的系統的問題不同於單個實例的問題,並不熟悉的技術可能會導致更大範圍內的問題。做好功課,探索可能的解決你的問題,做出決定,並熟悉你所選擇的工具。

原文:Polyglot Persistence in NoSQL Space
編輯:孫思,關注數據庫,歡迎加入CSDN 數據庫討論QQ羣:123038767。尋求報道或投稿,請聯繫 [email protected]


由CSDN重磅打造的2016中國雲計算技術大會(CCTC 2016)將於5月13日-15日在北京舉辦,大會特設「中國Spark技術峯會」、「Container技術峯會」、「OpenStack技術峯會」、「大數據核心技術與應用實戰峯會」等四大技術主題峯會,以及「雲計算核心技術架構」、「雲計算平臺構建與實踐」等專場技術論壇。80+位一線互聯網公司的技術專家將到場分享他們在雲計算、大數據領域的技術實踐,目前大會剩票不多,欲購從速。詳情請點擊CCTC 2016大會官網