分布式系統(tǒng)在互聯(lián)網時代,尤其是大數(shù)據時代到來之后,成為了每個程序員的必備技能之一。分布式系統(tǒng)從上個世紀80年代就開始有了不少出色的研究和論文,我在這里只列舉最近15年范圍以內我覺得有重大影響意義的15篇論文(15 within 15)。
創(chuàng)新互聯(lián)公司專注于成都做網站、網站設計、網頁設計、網站制作、網站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
1. The Google File System: 這是分布式文件系統(tǒng)領域劃時代意義的論文,文中的多副本機制、控制流與數(shù)據流隔離和追加寫模式等概念幾乎成為了分布式文件系統(tǒng)領域的標準,其影響之深遠通過其5000+的引用就可見一斑了,Apache Hadoop鼎鼎大名的HDFS就是GFS的模仿之作;
2. MapReduce: Simplified Data Processing on Large Clusters:這篇也是Google的大作,通過Map和Reduce兩個操作,大大簡化了分布式計算的復雜度,使得任何需要的程序員都可以編寫分布式計算程序,其中使用到的技術值得我們好好學習:簡約而不簡單!Hadoop也根據這篇論文做了一個開源的MapReduce;
3. Bigtable: A Distributed Storage System for Structured Data:Google在NoSQL領域的分布式表格系統(tǒng),LSM樹的最好使用范例,廣泛使用到了網頁索引存儲、YouTube數(shù)據管理等業(yè)務,Hadoop對應的開源系統(tǒng)叫HBase(我在前公司任職時也開發(fā)過一個相應的系統(tǒng)叫BladeCube,性能較HBase有數(shù)倍提升);
4. The Chubby lock service for loosely-coupled distributed systems:Google的分布式鎖服務,基于Paxos協(xié)議,這篇文章相比于前三篇可能知道的人就少了,但是其對應的開源系統(tǒng)zookeeper幾乎是每個后端同學都接觸過,其影響力其實不亞于前三篇;
5. Finding a Needle in Haystack: Facebook's Photo Storage:facebook的在線圖片存儲系統(tǒng),目前來看是對小文件存儲的最好解決方案之一,facebook目前通過該系統(tǒng)存儲了超過300PB的數(shù)據,一個師兄就在這個團隊工作,聽過很多有意思的事情(我在前公司的時候開發(fā)過一個類似的系統(tǒng)pallas,不僅支持副本,還支持Reed Solomon-LRC,性能也有較多優(yōu)化);
6. Windows Azure Storage: a highly available cloud storage service with strong consistency:windows azure的總體介紹文章,是一篇很好的描述云存儲架構的論文,其中通過分層來同時保證可用性和一致性的思路在現(xiàn)實工作中也給了我很多啟發(fā);
7. GraphLab: A New Framework for Parallel Machine Learning:CMU基于圖計算的分布式機器學習框架,目前已經成立了專門的商業(yè)公司,在分布式機器學習上很有兩把刷子,其單機版的GraphChi在百萬維度的矩陣分解都只需要2~3分鐘;
8. Resilient Distributed Datasets: A Fault-Tolerant Abstraction for
In-Memory Cluster Computing:其實就是 Spark,目前這兩年最流行的內存計算模式,通過RDD和lineage大大簡化了分布式計算框架,通常幾行scala代碼就可以搞定原來上千行MapReduce代碼才能搞定的問題,大有取代MapReduce的趨勢;
9. Scaling Distributed Machine Learning with the Parameter Server:百度少帥李沐大作,目前大規(guī)模分布式學習各家公司主要都是使用ps,ps具備良好的可擴展性,使得大數(shù)據時代的大規(guī)模分布式學習成為可能,包括Google的深度學習模型也是通過ps訓練實現(xiàn),是目前最流行的分布式學習框架,豆瓣的開源系統(tǒng)paracell也是ps的一個實現(xiàn);
10. Dremel: Interactive Analysis of Web-Scale Datasets:Google的大規(guī)模(近)實時數(shù)據分析系統(tǒng),號稱可以在3秒相應1PB數(shù)據的分析請求,內部使用到了查詢樹來優(yōu)化分析速度,其開源實現(xiàn)為Drill,在工業(yè)界對實時數(shù)據分析也是比價有影響力;
11. Pregel: a system for large-scale graph processing: Google的大規(guī)模圖計算系統(tǒng),相當長一段時間是Google PageRank的主要計算系統(tǒng),對開源的影響也很大(包括GraphLab和GraphChi);
12. Spanner: Google's Globally-Distributed Database:這是第一個全球意義上的分布式數(shù)據庫,Google的出品。其中介紹了很多一致性方面的設計考慮,簡單起見,還采用了GPS和原子鐘確保時間最大誤差在20ns以內,保證了事務的時間序,同樣在分布式系統(tǒng)方面具有很強的借鑒意義;
13. Dynamo: Amazon’s Highly Available Key-value Store:Amazon的分布式NoSQL數(shù)據庫,意義相當于BigTable對于Google,于BigTable不同的是,Dynamo保證CAP中的AP,C通過vector clock做弱保證,對應的開源系統(tǒng)為Cassandra;
14. S4: Distributed Stream Computing Platform:Yahoo出品的流式計算系統(tǒng),目前最流行的兩大流式計算系統(tǒng)之一(另一個是storm),Yahoo的主要廣告計算平臺;
15. Storm @Twitter:這個系統(tǒng)不多說,開啟了流式計算的新紀元,幾乎是所有公司流式計算的首選,絕對值得關注;
大數(shù)據時代數(shù)據管理方式研究
1數(shù)據管理技術的回顧
數(shù)據管理技術主要經歷了人工管理階段、文件系統(tǒng)階段和數(shù)據庫系統(tǒng)階段。隨著數(shù)據應用領域的不斷擴展,數(shù)據管理所處的環(huán)境也越來越復雜,目前廣泛流行的數(shù)據庫技術開始暴露出許多弱點,面臨著許多新的挑戰(zhàn)。
1.1 人工管理階段
20 世紀 50 年代中期,計算機主要用于科學計算。當時沒有磁盤等直接存取設備,只有紙帶、卡片、磁帶等外存,也沒有操作系統(tǒng)和管理數(shù)據的專門軟件。該階段管理的數(shù)據不保存、由應用程序管理數(shù)據、數(shù)據不共享和數(shù)據不具有獨立性等特點。
1.2 文件系統(tǒng)階段
20 世紀 50 年代后期到 60 年代中期,隨著計算機硬件和軟件的發(fā)展,磁盤、磁鼓等直接存取設備開始普及,這一時期的數(shù)據處理系統(tǒng)是把計算機中的數(shù)據組織成相互獨立的被命名的數(shù)據文件,并可按文件的名字來進行訪問,對文件中的記錄進行存取的數(shù)據管理技術。數(shù)據可以長期保存在計算機外存上,可以對數(shù)據進行反復處理,并支持文件的查詢、修改、插入和刪除等操作。其數(shù)據面向特定的應用程序,因此,數(shù)據共享性、獨立性差,且冗余度大,管理和維護的代價也很大。
1.3數(shù)據庫階段
20 世紀 60 年代后期以來,計算機性能得到進一步提高,更重要的是出現(xiàn)了大容量磁盤,存儲容量大大增加且價格下降。在此基礎上,才有可能克服文件系統(tǒng)管理數(shù)據時的不足,而滿足和解決實際應用中多個用戶、多個應用程序共享數(shù)據的要求,從而使數(shù)據能為盡可能多的應用程序服務,這就出現(xiàn)了數(shù)據庫這樣的數(shù)據管理技術。數(shù)據庫的特點是數(shù)據不再只針對某一個特定的應用,而是面向全組織,具有整體的結構性,共享性高,冗余度減小,具有一定的程序與數(shù)據之間的獨立性,并且對數(shù)據進行統(tǒng)一的控制。
2大數(shù)據時代的數(shù)據管理技術
大數(shù)據(big data),或稱巨量資料,指的是所涉及的資料量規(guī)模巨大到無法透過目前主流軟件工具,在合理時間內達到擷取、管理、處理、并整理成為幫助企業(yè)經營決策更積極目的的資訊。大數(shù)據有 3 個 V,一是大量化(Volume),數(shù)據量是持續(xù)快速增加的,從 TB級別,躍升到 PB 級別;二是多樣化(Variety),數(shù)據類型多樣化,結構化數(shù)據已被視為小菜一碟,圖片、音頻、視頻等非結構化數(shù)據正以傳統(tǒng)結構化數(shù)據增長的兩倍速快速創(chuàng)建;三是快速化 (Velocity),數(shù)據生成速度快,也就需要快速的處理能力,因此,產生了“1 秒定律”,就是說一般要在秒級時間范圍內給出分析結果,時間太長就失去價值了,這個速度要求是大數(shù)據處理技術和傳統(tǒng)的數(shù)據挖掘技術最大的區(qū)別。
2.1 關系型數(shù)據庫(RDBMS)
20 世紀 70 年代初,IBM 工程師 Codd 發(fā)表了著名的論文“A Relational Model of Data for Large Shared DataBanks”,標志著關系數(shù)據庫時代來臨。關系數(shù)據庫的理論基礎是關系模型,是借助于集合代數(shù)等數(shù)學概念和方法來處理數(shù)據庫中的數(shù)據,現(xiàn)實世界中的實體以及實體之間的聯(lián)系非常容易用關系模型來表示。容易理解的模型、容易掌握的查詢語言、高效的優(yōu)化器、成熟的技術和產品,使得關系數(shù)據庫占據了數(shù)據庫市場的絕對的統(tǒng)治地位。隨著互聯(lián)網 web2.0 網站的興起,半結構化和非結構化數(shù)據的大量涌現(xiàn),傳統(tǒng)的關系數(shù)據庫在應付 web2.0 網站特別是超大規(guī)模和高并發(fā)的 SNS(全稱 Social Networking Services,即社會性網絡服務) 類型的 web2.0 純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題。
2.2 noSQL數(shù)據庫
順應時代發(fā)展的需要產生了 noSQL數(shù)據庫技術,其主要特點是采用與關系模型不同的數(shù)據模型,當前熱門的 noSQL數(shù)據庫系統(tǒng)可以說是蓬勃發(fā)展、異軍突起,很多公司都熱情追捧之,如:由 Google 公司提出的 Big Table 和 MapReduce 以及 IBM 公司提出的 Lotus Notes 等。不管是那個公司的 noSQL數(shù)據庫都圍繞著大數(shù)據的 3 個 V,目的就是解決大數(shù)據的 3個 V 問題。因此,在設計 noSQL 時往往考慮以下幾個原則,首先,采用橫向擴展的方式,通過并行處理技術對數(shù)據進行劃分并進行并行處理,以獲得高速的讀寫速度;其次,解決數(shù)據類型從以結構化數(shù)據為主轉向結構化、半結構化、非結構化三者的融合的問題;再次,放松對數(shù)據的 ACID 一致性約束,允許數(shù)據暫時出現(xiàn)不一致的情況,接受最終一致性;最后,對各個分區(qū)數(shù)據進行備份(一般是 3 份),應對節(jié)點失敗的狀況等。
對數(shù)據的應用可以分為分析型應用和操作型應用,分析型應用主要是指對大量數(shù)據進行分類、聚集、匯總,最后獲得數(shù)據量相對小的分析結果;操作型應用主要是指對數(shù)據進行增加、刪除、修改和查詢以及簡單的匯總操作,涉及的數(shù)據量一般比較少,事務執(zhí)行時間一般比較短。目前數(shù)據庫可分為關系數(shù)據庫和 noSQL數(shù)據庫,根據數(shù)據應用的要求,再結合目前數(shù)據庫的種類,所以目前數(shù)據庫管理方式主要有以下 4 類。
(1)面向操作型的關系數(shù)據庫技術。
首先,傳統(tǒng)數(shù)據庫廠商提供的基于行存儲的關系數(shù)據庫系統(tǒng),如 DB2、Oracle、SQL Server 等,以其高度的一致性、精確性、系統(tǒng)可恢復性,在事務處理方面仍然是核心引擎。其次,面向實時計算的內存數(shù)據庫系統(tǒng),如 Hana、Timesten、Altibase 等通過把對數(shù)據并發(fā)控制、查詢和恢復等操作控制在內存內部進行,所以獲得了非常高的性能,在很多特定領域如電信、證券、網管等得到普遍應用。另外,以 VoltDB、Clustrix 和NuoDB 為代表的 new SQL 宣稱能夠在保持 ACDI 特性的同時提高了事務處理性能 50 倍 ~60 倍。
(2)面向分析型的關系數(shù)據庫技術。
首先,TeraData 是數(shù)據倉庫領域的領頭羊,Teradata 在整體上是按 Shared Nothing 架構體系進行組織的,定位就是大型數(shù)據倉庫系統(tǒng),支持較高的擴展性。其次,面向分析型應用,列存儲數(shù)據庫的研究形成了另一個重要的潮流。列存儲數(shù)據庫以其高效的壓縮、更高的 I/O 效率等特點,在分析型應用領域獲得了比行存儲數(shù)據庫高得多的性能。如:MonetDB 和 Vertica是一個典型的基于列存儲技術的數(shù)據庫系統(tǒng)。
(3)面向操作型的 noSQL 技術。
有些操作型應用不受 ACID 高度一致性約束,但對大數(shù)據處理需要處理的數(shù)據量非常大,對速度性能要求也非常高,這樣就必須依靠大規(guī)模集群的并行處理能力來實現(xiàn)數(shù)據處理,弱一致性或最終一致性就可以了。這時,操作型 noSQL數(shù)據庫的優(yōu)點就可以發(fā)揮的淋漓盡致了。如,Hbase 一天就可以有超過 200 億個到達硬盤的讀寫操作,實現(xiàn)對大數(shù)據的處理。另外,noSQL數(shù)據庫是一個數(shù)據模型靈活、支持多樣數(shù)據類型,如對圖數(shù)據建模、存儲和分析,其性能、擴展性是關系數(shù)據庫無法比擬的。
(4)面向分析型的 noSQL 技術。
面向分析型應用的 noSQL 技術主要依賴于Hadoop 分布式計算平臺,Hadoop 是一個分布式計算平臺,以 HDFS 和 Map Reduce 為用戶提供系統(tǒng)底層細節(jié)透明的分布式基礎架構?!禜adoop 經典實踐染技巧》傳統(tǒng)的數(shù)據庫廠商 Microsoft,Oracle,SAS,IBM 等紛紛轉向 Hadoop 的研究,如微軟公司關閉 Dryad 系統(tǒng),全力投入 Map Reduce 的研發(fā),Oracle 在 2011 年下半年發(fā)布 Big Plan 戰(zhàn)略計劃,全面進軍大數(shù)據處理領域,IBM 則早已捷足先登“,沃森(Watson)”計算機就是基于 Hadoop 技術開發(fā)的產物,同時 IBM 發(fā)布了 BigInsights 計劃,基于 Hadoop,Netezza 和 SPSS(統(tǒng)計分析、數(shù)據挖掘軟件)等技術和產品構建大數(shù)據分析處理的技術框架。同時也涌現(xiàn)出一批新公司來研究Hadoop 技術,如 Cloudera、MapRKarmashpere 等。
3數(shù)據管理方式的展望
通過以上分析,可以看出關系數(shù)據庫的 ACID 強調數(shù)據一致性通常指關聯(lián)數(shù)據之間的邏輯關系是否正確和完整,而對于很多互聯(lián)網應用來說,對這一致性和隔離性的要求可以降低,而可用性的要求則更為明顯,此時就可以采用 noSQL 的兩種弱一致性的理論 BASE 和 CAP.關系數(shù)據庫和 noSQL數(shù)據庫并不是想到對立的矛盾體,而是可以相互補充的,根據不同需求使用不同的技術,甚至二者可以共同存在,互不影響。最近幾年,以 Spanner 為代表新型數(shù)據庫的出現(xiàn),給數(shù)據庫領域注入新鮮血液,這就是融合了一致性和可用性的 newSQL,這種新型思維方式或許會是未來大數(shù)據處理方式的發(fā)展方向。
4 結束語
隨著云計算、物聯(lián)網等的發(fā)展,數(shù)據呈現(xiàn)爆炸式的增長,人們正被數(shù)據洪流所包圍,大數(shù)據的時代已經到來。正確利用大數(shù)據給人們的生活帶來了極大的便利,但與此同時也給傳統(tǒng)的數(shù)據管理方式帶來了極大的挑戰(zhàn)。
大數(shù)據技術龐大復雜,基礎的技術包含數(shù)據的采集、數(shù)據預處理、分布式存儲、NoSQL數(shù)據庫、數(shù)據倉庫、機器學習、并行計算、可視化等范疇
查詢引擎:Phoenix、Shark、Pig、Hive等
流式計算:storm、Twitter Rainbird等
迭代計算:Apache Hama、Apache Giraph、HaLoop等
離線計算:Hadoop MapReduce、Berkeley Spark等
鍵值存儲:LevelDB、RocksDB、HyperDex、Voldemort等
表格存儲:OceanBase、Amazon SimpleDB、Cassandra、HBase等
文件存儲:CouchDB、MongoDB、HDFS等
資源管理:Twitter Mesos、Hadoop Yarn
傳統(tǒng)數(shù)據庫仍舊會有一席之地,至于NewSQL的優(yōu)勢又是什么,簡單和大家說說:
首先關于“中間件+關系數(shù)據庫分庫分表”算不算NewSQL分布式數(shù)據庫問題,國外有篇論文pavlo-newsql-sigmodrec,如果根據該文中的分類,Spanner、TiDB、OB算是第一種新架構型,Sharding-Sphere、Mycat、DRDS等中間件方案算是第二種(文中還有第三種云數(shù)據庫,本文暫不詳細介紹)。
基于中間件(包括SDK和Proxy兩種形式)+傳統(tǒng)關系數(shù)據庫(分庫分表)模式是不是分布式架構?我覺得是的,因為存儲確實也分布式了,也能實現(xiàn)橫向擴展。但是不是“偽”分布式數(shù)據庫?從架構先進性來看,這么說也有一定道理。
“偽”主要體現(xiàn)在中間件層與底層DB重復的SQL解析與執(zhí)行計劃生成、存儲引擎基于B+Tree等,這在分布式數(shù)據庫架構中實際上冗余低效的。為了避免引起真?zhèn)畏植际綌?shù)據庫的口水戰(zhàn),本文中NewSQL數(shù)據庫特指這種新架構NewSQL數(shù)據庫。
NewSQL數(shù)據庫相比中間件+分庫分表的先進在哪兒?畫一個簡單的架構對比圖:
傳統(tǒng)數(shù)據庫面向磁盤設計,基于內存的存儲管理及并發(fā)控制,不如NewSQL數(shù)據庫那般高效利用;
中間件模式SQL解析、執(zhí)行計劃優(yōu)化等在中間件與數(shù)據庫中重復工作,效率相比較低;
NewSQL數(shù)據庫的分布式事務相比于XA進行了優(yōu)化,性能更高;
新架構NewSQL數(shù)據庫存儲設計即為基于paxos(或Raft)協(xié)議的多副本,相比于傳統(tǒng)數(shù)據庫主從模式(半同步轉異步后也存在丟數(shù)問題),在實現(xiàn)了真正的高可用、高可靠(RTO30s,RPO=0);
NewSQL數(shù)據庫天生支持數(shù)據分片,數(shù)據的遷移、擴容都是自動化的,大大減輕了DBA的工作,同時對應用透明,無需在SQL指定分庫分表鍵。
文檔數(shù)據庫
源起:受Lotus Notes啟發(fā)。
數(shù)據模型:包含了key-value的文檔集合
例子:CouchDB, MongoDB
優(yōu)點:數(shù)據模型自然,編程友好,快速開發(fā),web友好,CRUD。
圖數(shù)據庫
源起: 歐拉和圖理論。
數(shù)據模型:節(jié)點和關系,也可處理鍵值對。
例子:AllegroGraph, InfoGrid, Neo4j
優(yōu)點:解決復雜的圖問題。
關系數(shù)據庫
源起: E. F. Codd 在A Relational Model of Data for Large Shared Data Banks提出的
數(shù)據模型:各種關系
例子:VoltDB, Clustrix, MySQL
優(yōu)點:高性能、可擴展的OLTP,支持SQL,物化視圖,支持事務,編程友好。
對象數(shù)據庫
源起:圖數(shù)據庫研究
數(shù)據模型:對象
例子:Objectivity, Gemstone
優(yōu)點:復雜對象模型,快速鍵值訪問,鍵功能訪問,以及圖數(shù)據庫的優(yōu)點。
Key-Value數(shù)據庫
源起:Amazon的論文 Dynamo 和 Distributed HashTables。
數(shù)據模型:鍵值對
例子:Membase, Riak
優(yōu)點:處理大量數(shù)據,快速處理大量讀寫請求。編程友好。
BigTable類型數(shù)據庫
源起:Google的論文 BigTable。
數(shù)據模型:列簇,每一行在理論上都是不同的
例子:HBase, Hypertable, Cassandra
優(yōu)點:處理大量數(shù)據,應對極高寫負載,高可用,支持跨數(shù)據中心, MapReduce。
數(shù)據結構服務
源起: ?
數(shù)據模型:字典操作,lists, sets和字符串值
例子:Redis
優(yōu)點:不同于以前的任何數(shù)據庫
網格數(shù)據庫
源起:數(shù)據網格和元組空間研究。
數(shù)據模型:基于空間的架構
例子:GigaSpaces, Coherence
優(yōu)點:適于事務處理的高性能和高擴展性
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關系型的數(shù)據庫。隨著互聯(lián)網web2.0網站的興起,傳統(tǒng)的關系數(shù)據庫在應付web2.0網站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據庫的產生就是為了解決大規(guī)模數(shù)據集合多重數(shù)據種類帶來的挑戰(zhàn),尤其是大數(shù)據應用難題,包括超大規(guī)模數(shù)據的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據)。這些類型的數(shù)據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關系型數(shù)據庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結構化數(shù)據
結構化查詢語言(SQL)
數(shù)據和關系都存儲在單獨的表中。
數(shù)據操縱語言,數(shù)據定義語言
嚴格的一致性
基礎事務
ACID
關系型數(shù)據庫遵循ACID規(guī)則
事務在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據庫原本的一致性約束。
I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數(shù)據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數(shù)據就不受未提交事務的影響。比如現(xiàn)有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數(shù)據庫上,即使出現(xiàn)宕機也不會丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預定義的模式
鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據庫
最終一致性,而非ACID屬性
非結構化和不可預知的數(shù)據
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據一致更新,所有數(shù)據變動都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區(qū)容錯性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。
定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。
CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,
因此,根據 CAP 原理將 NoSQL 數(shù)據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/p>
CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點。
而由于當前的網絡硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。
所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統(tǒng)能同時保證這三點。
說明:C:強一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據庫
AP:大多數(shù)網站架構的選擇
CP:Redis、Mongodb
注意:分布式架構的時候必須做出取舍。
一致性和可用性之間取一個平衡。多余大多數(shù)web應用,其實并不需要強一致性。
因此犧牲C換取P,這是目前分布式數(shù)據庫產品的方向。
4. 當下NoSQL的經典應用
當下的應用是 SQL 與 NoSQL 一起使用的。
代表項目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設備,也很貴的。
難點:
數(shù)據類型多樣性。
數(shù)據源多樣性和變化重構。
數(shù)據源改造而服務平臺不需要大面積重構。