《在NoSQL空間里的多種語言》要點:
本文介紹了在NoSQL空間里的多種語言,希望對您有用。如果有疑問,可以聯(lián)系我們。
關(guān)系數(shù)據(jù)庫已經(jīng)存在很長時間,通常開發(fā)人員傾向于經(jīng)常使用它們,并很熟悉使用它們所提供的特性集.關(guān)系數(shù)據(jù)庫的設計是從用戶隱藏內(nèi)部中做的一項偉大的工作.像數(shù)據(jù)如何存儲在磁盤上的問題、如安在底層寫入路徑,以及數(shù)據(jù)庫緩存問題和如何經(jīng)常使用過于先進的常規(guī)數(shù)據(jù)庫.
我們生活在一個數(shù)據(jù)密集的世界,在過去的幾年我們見證了社會網(wǎng)絡和物聯(lián)網(wǎng)的擴張,一切都連接到了互聯(lián)網(wǎng),并且一切都會發(fā)出和接收事件.在關(guān)系世界中,數(shù)據(jù)需要以不同的方式處理.我們看到越來越多的哀求只是為了存儲非結(jié)構(gòu)化數(shù)據(jù)存儲的值.截至2012年,每一天以2.5艾字節(jié)(2.5×1018)被存儲,盡管世界上90%的存儲數(shù)據(jù)已經(jīng)聚集在過去的兩年.這只是一些原因,我們需要一個思維的轉(zhuǎn)變,關(guān)于存儲和為什么NoSQL不再是炒作.
在NoSQL的世界里,事情有點不同.數(shù)據(jù)庫是不通用的,他們通常用來辦理一個特定的用例.他們工作得很好,但并不那么優(yōu)秀,也會有其他問題.他們通常選擇大數(shù)據(jù)項目,我們需要較高的、非功能的需求,并且它幾乎不可能不知道內(nèi)部使用NoSQL數(shù)據(jù)庫.
NoSQL空間
在NoSQL空間中,主要分為四個類型:文檔數(shù)據(jù)庫、鍵值存儲、列數(shù)據(jù)庫和圖形數(shù)據(jù)庫.
文檔數(shù)據(jù)庫可能是最受歡迎的數(shù)據(jù)庫類型了,主要是MongoDB在DB-Engine rankings中排出的所有數(shù)據(jù)庫排名中排在前十,在以NoSQL數(shù)據(jù)庫為代表中排名第一.MongoDB有豐富的特性,具有主/從內(nèi)置的碎片復制和使用內(nèi)存映射文件的數(shù)據(jù)存儲.它是偉大的原型,由于存儲和查詢數(shù)據(jù)時的靈活性,在大多數(shù)地方它是一個很好的替代品.但PostgreSQL或其他RDBMS適合但預定義模式會阻礙你的.這種類型的其他數(shù)據(jù)庫都是CouchDB文檔存儲與主主復制和最終一致性、Couchbase兩個鍵值和文檔存儲,提供JSON API是有用的作為客戶端-服務器應用法式的存儲引擎.
當你想到鍵值存儲時,可以考慮分布式執(zhí)行的地圖.Redis和HazelCast就是這種類型的數(shù)據(jù)庫.Redis是一個速度極快的數(shù)據(jù)庫.它是用C編寫的,具有自動故障轉(zhuǎn)移的主從復制,它是快速變化的數(shù)據(jù)與一個可預見的數(shù)據(jù)庫大小的最佳選擇.使用的一個例子可以是會話存儲,為電子商務網(wǎng)站購物車,或者實時分析.HazelCast是內(nèi)存中的分布式存儲和計算平臺,提供開箱即用的分布式實現(xiàn)許多API,Java開發(fā)人員熟悉的分布式實現(xiàn),如地圖、集、列表、信號量、執(zhí)行等,它可以被視為一個插件替換工具,好比像EhCache、Redis、JCache.
列族數(shù)據(jù)庫(Column family)包括相關(guān)數(shù)據(jù)列,存儲為鍵值對.這種類型最受歡迎的數(shù)據(jù)庫是Cassandra和HBase.Cassandra起源于亞馬遜的DynamoDB和Google的BigTable,它非常適合存儲大量數(shù)據(jù).所有節(jié)點都是平等的,無共享架構(gòu),無主無單點故障.CQL(Cassandra查詢語言)類似于SQL.它通常應用于網(wǎng)絡分析、計數(shù)、事務日志和存儲的傳感器數(shù)據(jù).HBase是Hadoop框架的一部分,使用HDFS文件系統(tǒng)作為存儲,可應用于Hadoop的Map/Reduce、日志數(shù)據(jù)的分析,以及在任何地方掃描巨大,也需要加入二維表.
在圖形數(shù)據(jù)庫中,兩個實體之間的關(guān)系比實體本身更重要.這種類型主要的代表是Neo4J和TitanDB.Neo4J為圖形數(shù)據(jù)庫是用Java編寫的,且使用的是基于模式匹配的查詢語言,但也可以使用“Gremlin”圖遍歷語言.它有很好的圖形風格,具有著豐富和復雜且相互關(guān)聯(lián)的數(shù)據(jù),如搜索路線、社會關(guān)系、公共交通、道路地圖,或網(wǎng)絡拓撲結(jié)構(gòu).TitanDB是一個可伸縮的圖表框架優(yōu)化存儲,以及查詢包括數(shù)以千億計的頂點和邊的跨多機集群分布圖.它可以使用不同的存儲后端:Cassandra、HBase、BerkeleyDB,和為主流框架(Hadoop、Spark、ElasticSearch、Solr)整合提供了巨大支持.
多種語言的持久性辦法
這些天并不少見的是,在同一項目中的關(guān)系和非關(guān)系數(shù)據(jù)庫組合,甚而不同的數(shù)據(jù)庫相同類型的組合.微服務架構(gòu)影響很大,因為每個小服務是其數(shù)據(jù)的所有者,而且API和服務分離背后所暗藏的一切都是基于使用案例的,所以很自然地選擇它作為最佳存儲.
Martin Fowler的博客中有一個多存儲引擎的應用.用戶會話,作為臨時數(shù)據(jù)快速優(yōu)化的頻繁讀取,放置在Redis中.財務數(shù)據(jù),則是自然關(guān)系存儲在關(guān)系數(shù)據(jù)庫中的報告.購物車有會議的類似性質(zhì),具有臨時快速拜訪數(shù)據(jù),所以它存儲在鍵值存儲區(qū).作為圖形數(shù)據(jù)庫Neo4j推薦引擎的大力支持,用戶相似性是推薦給客戶的重要因素,這是選擇的主要原因.產(chǎn)品目錄有文檔的性質(zhì),有很多動態(tài)查詢這些數(shù)據(jù)的標準,在用例中MongoDB的靈活性和速度是很棒的.Cassandra的殺手锏是時間序列數(shù)據(jù),它有Spark和Solr的大整合,因此它是分析和用戶活動日志的最佳選擇.
總結(jié)
多語種的支持并不是免費的午餐,它是有代價的,代價是系統(tǒng)的復雜性.幾年前,它就足夠了解一種編程語言,為一個存儲引擎構(gòu)建一個系統(tǒng)的.但現(xiàn)在你需要通曉各方面的數(shù)種語言.這就是為什么你需要熟悉每個選擇的成本,并引入一個新的技術(shù),只有當它的好處遠高于它帶來表的復雜性.最可怕的事情是,現(xiàn)在每個人都在談論語言的辦法,目的只是為了新的技術(shù).
因為NoSQL的本質(zhì)是建立辦理一個具體的用例,準備挖得更深一些,且掌握數(shù)據(jù)庫的功能.大數(shù)據(jù)和分布式的系統(tǒng)的問題不同于單個實例的問題,并不熟悉的技術(shù)可能會導致更大范圍內(nèi)的問題.做好功課,探索可能的辦理你的問題,做出決定,并熟悉你所選擇的工具.
原文:Polyglot Persistence in NoSQL Space
編纂:孫思,關(guān)注數(shù)據(jù)庫,歡迎加入CSDN 數(shù)據(jù)庫討論QQ群:123038767.尋求報道或投稿,請聯(lián)系 sunsi@csdn.net
由CSDN重磅打造的2016中國云計算技術(shù)大會(CCTC 2016)將于5月13日-15日在北京舉辦,大會特設“中國Spark技術(shù)峰會”、“Container技術(shù)峰會”、“OpenStack技術(shù)峰會”、“大數(shù)據(jù)核心技術(shù)與應用實戰(zhàn)峰會”等四大技術(shù)主題峰會,以及“云計算核心技術(shù)架構(gòu)”、“云計算平臺構(gòu)建與實踐”等專場技術(shù)論壇.80+位一線互聯(lián)網(wǎng)公司的技術(shù)專家將到場分享他們在云計算、大數(shù)據(jù)領(lǐng)域的技術(shù)實踐,目前大會剩票不多,欲購趕快.詳情請點擊CCTC 2016大會官網(wǎng).
歡迎參與《在NoSQL空間里的多種語言》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9337.html