對此,前Google工程師,Milo(本地商店搜索引擎)創(chuàng)始人Ted Dziuba最近發(fā)表標題驚人的博客“I Can't Wait for NoSQL to Die”,對NoSQL的適用范圍進行了分析。他認為,
成都創(chuàng)新互聯(lián)是專業(yè)的金堂縣網(wǎng)站建設(shè)公司,金堂縣接單;提供成都做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行金堂縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
NoSQL也會帶來一連串的新問題,并不會成為主流,無法取代關(guān)系型數(shù)據(jù)庫。
他的理由是:Cassandra等NoSQL數(shù)據(jù)庫在使用上并不方便,比如,修改column family定義時就需要重啟。而且NoSQL更適合Google那樣的規(guī)模,而一般的互聯(lián)網(wǎng)公司都不是Google,早早地去考慮Google那樣的規(guī)模的可擴展性,純粹是浪費時間,存在巨大的商業(yè)風(fēng)險。
他還透露,即使在Google,AdWords這樣的關(guān)鍵產(chǎn)品也是基于MySQL實現(xiàn)的。
他在文中最后表示,NoSQL當然死不了,但是
它最終會被邊緣化,就像Rails被NoSQL邊緣化一樣
Dziuba的文章因為言辭激烈,在社區(qū)里引起了強烈反應(yīng)。
SQL數(shù)據(jù)庫陣營贊同者大有人在。craigslist工程師、著名的MySQL專家Jeremy Zawodny表示,在讀此文的時候,不時會心一笑。他說,
NoSQL運動只是軟件不斷進化進程中的正?,F(xiàn)象
。關(guān)系型數(shù)據(jù)庫也會繼續(xù)發(fā)展,MySQL社區(qū)不斷推出的XtraDB或InnoDB插件, PBXT, Drizzle都是證據(jù)。各種技術(shù)競爭的結(jié)果是,我們獲得了更多解決問題的選擇。
drizzle項目開發(fā)者Eric Day也表示,NoSQL有很多值得學(xué)習(xí)的,但是目前大部分實際項目的最佳選擇還是關(guān)系型數(shù)據(jù)庫。
NoSQL陣營當然不會坐視不理,Cassandra項目組的Eric Evans表示,Dziuba提到Cassandra修改column family定義的問題其實很容易解決。而且,NoSQL并不是要取代MySQL,事實上Twitter仍然在用MySQL。如果關(guān)系型數(shù)據(jù)庫能夠承擔負荷,那就用好了;如果不行,請考慮NoSQL。
而德國知名博客Code Monkeyism則嘲笑Dziuba看起來并沒有用MySQL做過真實項目,因為MySQL如果沒有memcache,基本上無法應(yīng)付網(wǎng)站項目。他認為,NoSQL將使SQL數(shù)據(jù)庫邊緣化,而且一個重要理由恰恰是可以節(jié)省DBA的開銷。
digg的前任首席架構(gòu)師現(xiàn)在也在創(chuàng)業(yè)的Joe Stump說,自己現(xiàn)在的創(chuàng)業(yè)項目就是用NoSQL,而且列舉了一系列問題挑戰(zhàn)SQL陣營。
基本含義NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關(guān)系型的數(shù)據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。NoSQLNoSQL數(shù)據(jù)庫的四大分類鍵值(Key-Value)存儲數(shù)據(jù)庫這一類數(shù)據(jù)庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù)。Key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單、易部署。但是如果DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。[3] 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.列存儲數(shù)據(jù)庫。這部分數(shù)據(jù)庫通常是用來應(yīng)對分布式存儲的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.文檔型數(shù)據(jù)庫文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相類似。該類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級版,允許之間嵌套鍵值。而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高。如:CouchDB, MongoDb. 國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB,已經(jīng)開源。圖形(Graph)數(shù)據(jù)庫圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型,并且能夠擴展到多個服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標準的查詢語言(SQL),因此進行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。[2] 如:Neo4J, InfoGrid, Infinite Graph.因此,我們總結(jié)NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1、數(shù)據(jù)模型比較簡單;2、需要靈活性更強的IT系統(tǒng);3、對數(shù)據(jù)庫性能要求較高;4、不需要高度的數(shù)據(jù)一致性;5、對于給定key,比較容易映射復(fù)雜值的環(huán)境。
大數(shù)據(jù)時代下,DBA該何去何從
數(shù)據(jù)庫管理員(DBA)的職能已擴展到數(shù)據(jù)管理、基礎(chǔ)架構(gòu)管理以及工作負載和SLA管理上。作為大數(shù)據(jù)戰(zhàn)略的一部分,DBA的角色又是如何變化的呢?
數(shù)據(jù)管理
* 為成為數(shù)據(jù)管理專家而努力。雖然SQL數(shù)據(jù)庫可以擴展以處理大數(shù)據(jù),但數(shù)據(jù)庫并不是最優(yōu)解決方案。DBA正在預(yù)算方面做努力,在預(yù)算范圍內(nèi),以最低的成本滿足SLA。
* 出現(xiàn)數(shù)據(jù)ops概念。數(shù)據(jù)管理和數(shù)據(jù)治理。數(shù)據(jù)操作是團隊的一部分,在收集和創(chuàng)建數(shù)據(jù)時共享目標、協(xié)作工作。使用自動化來擠壓延遲、采取最合適的敏捷方案以提高提高效率。
* 管理、治理和軟件交付。維護數(shù)據(jù)庫模型和模式。在大數(shù)據(jù)中,從定義明確的轉(zhuǎn)換到應(yīng)用程序和工程師之間的協(xié)同工作,一切都是具有探索性的。
* 雖然開發(fā)人員認為不需要數(shù)據(jù)管理,但為了后續(xù)的分析數(shù)據(jù),DBA們?nèi)孕枰M行數(shù)據(jù)管理。
* DBA從管理數(shù)據(jù)庫轉(zhuǎn)變?yōu)榭缍鄠€系統(tǒng)的數(shù)據(jù)工程師。他們關(guān)注的是數(shù)據(jù)如何從一個數(shù)據(jù)庫轉(zhuǎn)移到另一個數(shù)據(jù)庫、數(shù)據(jù)的消耗、數(shù)據(jù)的調(diào)整以及數(shù)據(jù)流程的管理,對于數(shù)據(jù)自動分配和執(zhí)行來說這些都至關(guān)重要。
* DBA已經(jīng)不再是單單只關(guān)注像SQLServer和Oracle這樣的個人產(chǎn)品,而是必須要處理好企業(yè)大數(shù)據(jù)實施方案的執(zhí)行問題。
基礎(chǔ)架構(gòu)和平臺
DBA的角色已經(jīng)被推到第一線上。對IT棧的演變負責?;A(chǔ)設(shè)施和平臺的認定范圍變的更大。
*這是一個不容忽視的大挑戰(zhàn),應(yīng)用程序所使用的數(shù)據(jù)庫技術(shù)不再歸于DBA的控制范圍內(nèi)。遷移到云上的比重越大,DBA的控制范圍就越小。數(shù)據(jù)越來越多,同時也在不斷推出新的數(shù)據(jù)庫。管理數(shù)據(jù)基礎(chǔ)設(shè)施、提出大數(shù)據(jù)的解決喝整合方案、掌握如何歸檔和處理災(zāi)難恢復(fù)的技能。AWS似乎將云中的數(shù)據(jù)庫選項綁定到了DBA上。DBA仍然需要在備份、災(zāi)難恢復(fù)和海量存儲上多費心思。值得在備份和存儲方面進行更具戰(zhàn)略性的思考。
DBA比以往更重要,因此他們也需要學(xué)習(xí):如何有效地集成存儲在RDBMS系統(tǒng)中的遺留數(shù)據(jù),同時大數(shù)據(jù)技術(shù)也是必不可少的。
* 由于大數(shù)據(jù)改變了數(shù)據(jù)架構(gòu),DBA的存在可能需要不是立竿見影的,但確實是實實在在的。新技術(shù)為數(shù)據(jù)管理提供了新的契機,使DBA和數(shù)據(jù)模式打開了一個新時代。
* 事實上,沒有數(shù)據(jù)模式和Hadoop的NoSQL平臺,以及支持它的一系列工具,會越來越多地部署在企業(yè)中?,F(xiàn)在開發(fā)人員在數(shù)據(jù)本身的設(shè)計上有更多的影響力。
* 這在擴大DBA的專業(yè)范圍上起到了推動作用:必須學(xué)習(xí)NoSQL系統(tǒng)的機制和操作;掌握管理Hadoop集群的能力;實施“無需存儲數(shù)據(jù)存儲數(shù)據(jù)”的方法。
* 而且,NoSQL的靈活性是以數(shù)據(jù)完整性為代價,這種模型的難度更高。目前,許多公司的網(wǎng)絡(luò)應(yīng)用程序的數(shù)據(jù)完整性已經(jīng)給靈活性讓位了。
* DBA必須適應(yīng)設(shè)計和開發(fā)的風(fēng)格變化。DBA也需要運行幾個關(guān)系系統(tǒng),并且認真學(xué)習(xí)NoSQL技術(shù),對指導(dǎo)公司做出的部署負責。將來可能會劃分出幾種類型的DBA:局限于技術(shù)的;傳統(tǒng)的管理員;努力學(xué)習(xí)并適應(yīng)管理大數(shù)據(jù)的新技術(shù)和工具的。
* DBA始終是整個軟件開發(fā)流程的一部分。在目前的環(huán)境中,更是需要所有的DBA都參與到整個開發(fā)過程中,尤其是規(guī)劃、范圍界定和原型設(shè)計部分。DBA能為企業(yè)提供有關(guān)數(shù)據(jù)基礎(chǔ)設(shè)施功能、所需變更成本、潛在性能影響以及總體容量規(guī)劃等項目的具體信息。
*鑒于對數(shù)據(jù)的使用要求,更多特定數(shù)據(jù)平臺范圍之外的技術(shù)正被用于實施解決方案。DBA不僅僅要專注于SQL、DDL等,還要掌握JavaScript、Java、.NET等技術(shù)。DBA會越來越精通應(yīng)用容器化和系統(tǒng)容器化(Docker、Rkt、Linux容器等)。DBA壓力會越來越大,一旦與其他角色聯(lián)系到一起,數(shù)據(jù)及其管理都是穿插著多條生命線,因此需要掌握的技術(shù)就不斷增加。
成功采用大數(shù)據(jù)策略的企業(yè),早已經(jīng)把DBA轉(zhuǎn)變?yōu)樾滦蛿?shù)據(jù)基礎(chǔ)管理員,包括NoSQL數(shù)據(jù)庫和Hadoop在內(nèi)。與開發(fā)數(shù)據(jù)管理邏輯的數(shù)據(jù)開發(fā)人員、處理和準備數(shù)據(jù)的數(shù)據(jù)科學(xué)家以及業(yè)務(wù)線上的數(shù)據(jù)分析人員相結(jié)合,DBA是操作大數(shù)據(jù)戰(zhàn)略的重要部分。現(xiàn)在,DBA依賴于更智能的工具,這些工具可以管理并報告各種數(shù)據(jù)庫和技術(shù)框架的數(shù)據(jù)基礎(chǔ)架構(gòu)和流程。
工作負載和SLA
* 工作結(jié)構(gòu)消失了。有類型更為廣泛的問題需要解決。要實現(xiàn)混合的環(huán)境在流和批處理中交付新的工作負載,同時又能跟得上變化。
* 現(xiàn)在,有許多不在數(shù)據(jù)庫中管理數(shù)據(jù),而是將數(shù)據(jù)組織成超級管理數(shù)據(jù)的數(shù)據(jù)生態(tài)系統(tǒng)一部分的做法。了解通信、鏈接的速度、安全性以及如何將來源匯集在一起。
* 比起以往,現(xiàn)在有更多的技術(shù)管理。理解并管理一個數(shù)據(jù)倉庫的技術(shù)方法有10到20種。為了能給問題選擇出正確的技術(shù),便于管理,規(guī)模較大的企業(yè)正在考慮將搜索、NoSQL、Hadoop和GPU技術(shù)標準化。
* 從一個擁有數(shù)據(jù)庫領(lǐng)域知識的系統(tǒng)管理員,到現(xiàn)在需要掌握處理數(shù)據(jù)集成、非結(jié)構(gòu)化數(shù)據(jù)、自然語言處理、文檔存儲和統(tǒng)計。工具集可以能夠簡化工作。關(guān)系數(shù)據(jù)庫不會有大的進展,但大數(shù)據(jù)存儲會有新變化。
1. 大數(shù)據(jù)時代,DBA的角色發(fā)生了重大變化。在很長一段時間里,DBA僅僅只是一個系統(tǒng)管理員。他們的確有SQL知識、知道該如何優(yōu)化SQL,以及對構(gòu)建數(shù)據(jù)庫的理解,但他們并沒有主動參與到數(shù)據(jù)庫系統(tǒng)里數(shù)據(jù)的特定用途上。
2. 大數(shù)據(jù)DBA對數(shù)據(jù)和非關(guān)系數(shù)據(jù)模型的應(yīng)用程序有更深入的了解,并且必須具備執(zhí)行數(shù)據(jù)集成的知識,這些數(shù)據(jù)集超出了用于商業(yè)智能(BI)應(yīng)用的傳統(tǒng)提取——轉(zhuǎn)換——加載過程(ETL)。
NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的
SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
NoSQL(NoSQL
= Not Only SQL
),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關(guān)系型的數(shù)
據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。
從這一新興技術(shù)中選擇一款正確的NoSQL數(shù)據(jù)庫是非常具有挑戰(zhàn)性的。比一下網(wǎng)建議在選擇時考慮以下因素:
并發(fā)控制
并
發(fā)控制指的是當多個用戶同時更新運行時,用于保護數(shù)據(jù)庫完整性的各種技術(shù)。并發(fā)機制不正確可能導(dǎo)致臟讀、幻讀和不可重復(fù)讀等此類問題。并發(fā)控制的目的是保
證一個用戶的工作不會對另一個用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當用戶和其他用戶一起操作時,所得的結(jié)果和她單獨操作時的結(jié)果是
一樣的。在另一些情況下,這表示用戶的工作按預(yù)定的方式受其他用戶的影響。
封鎖
就是事務(wù)T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。
封鎖是一次只允許一個用戶讀取或修改的一種機制,是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)。
MVCC
Multi-Version Concurrency Control多版本并發(fā)控制,維持一個數(shù)據(jù)的多個版本使讀寫操作沒有沖突。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進行熱備份。
ACID
指
數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久
性(Durability)。一個支持事務(wù)(Transaction)的數(shù)據(jù)庫系統(tǒng),必需要具有這四種特性,否則在事務(wù)過程(Transaction
processing)當中無法保證數(shù)據(jù)的正確性,交易過程極可能達不到交易方的要求。
None
一些系統(tǒng)不提供原子性。
鏡像
數(shù)據(jù)庫鏡像是DBMS根據(jù)DBA的要求,自動把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上,每當主數(shù)據(jù)庫更新時,DBMS會自動把更新后的數(shù)據(jù)復(fù)制過去,即DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
鏡像分為同步和異步。
數(shù)據(jù)存儲
指的是數(shù)據(jù)的物理特性怎樣被存儲在數(shù)據(jù)庫中。
磁盤 數(shù)據(jù)被存儲在硬盤驅(qū)動器里;
GFS或谷歌文件系統(tǒng)是一個由谷歌開發(fā)的專有的分布式文件系統(tǒng);
Hadoop是Apache軟件框架,免費許可下支持數(shù)據(jù)密集型分布式應(yīng)用程序;
RAM隨機存儲器;
插件 可以添加外部插件;
Amazon S3通過Web服務(wù)接口提供存儲;
BDB:BDB
全稱是 “Berkeley DB”,它是MySQL具有事務(wù)能力的表類型,由Sleepycat
Software開發(fā)。BDB表類型提供了MySQL用戶長久期盼的功能,即事務(wù)控制能力。在任何RDBMS中,事務(wù)控制能力都是一種極其重要和寶貴的功
能。事務(wù)控制能力使得我們能夠確保一組命令確實已經(jīng)全部執(zhí)行成功,或者確保當任何一個命令出現(xiàn)錯誤時所有命令的執(zhí)行結(jié)果均被退回。
實現(xiàn)語言
實現(xiàn)語言會影響數(shù)據(jù)庫的發(fā)展速度。典型的NoSQL數(shù)據(jù)庫是用低級語言如C / C + +編寫的。另一方面,那些更高層次的語言如Java,使自定義更容易。
實現(xiàn)語言有:C, C++, Erlang, Java, Python
特性
考慮下列哪一個特點對你的數(shù)據(jù)庫是最重要的:
持久性
可用性
一致性
分區(qū)容忍性
證書類型
下面這些許可證是一個不同的開放源碼許可的形式:
GPL:通用公共許可證
BSD:伯克利軟件分發(fā)
MPL:Mozilla公共許可證
EPL:Eclipse公共許可證
IDPL:最初的開發(fā)者的公共許可證
LGPL:較寬松通用公共許可證
存儲類型
存儲類型是NoSQL數(shù)據(jù)庫最大的不同,是決定使用哪款數(shù)據(jù)庫的一個首要指標。
關(guān)鍵字:支持get、put和刪除操作
按列存儲:相對于傳統(tǒng)的按行存儲,數(shù)據(jù)集成容易多了
面向文件系統(tǒng):存儲像是JSON或XML這樣的結(jié)構(gòu)化文件,很容易就能從面向?qū)ο筌浖蝎@取數(shù)據(jù)。
1、數(shù)據(jù)bai存儲方式不同。
關(guān)系型和非關(guān)系型數(shù)據(jù)庫的主要差異是數(shù)據(jù)存儲的方式。關(guān)系型數(shù)據(jù)天然就是表格式的,因此存儲在數(shù)據(jù)表的行和列中。數(shù)據(jù)表可以彼此關(guān)聯(lián)協(xié)作存儲,也很容易提取數(shù)據(jù)。
與其相反,非關(guān)系型數(shù)據(jù)不適合存儲在數(shù)據(jù)表的行和列中,而是大塊組合在一起。非關(guān)系型數(shù)據(jù)通常存儲在數(shù)據(jù)集中,就像文檔、鍵值對或者圖結(jié)構(gòu)。你的數(shù)據(jù)及其特性是選擇數(shù)據(jù)存儲和提取方式的首要影響因素。
2、擴展方式不同。
SQL和NoSQL數(shù)據(jù)庫最大的差別可能是在擴展方式上,要支持日益增長的需求當然要擴展。
要支持更多并發(fā)量,SQL數(shù)據(jù)庫是縱向擴展,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的數(shù)據(jù)集就更快了。
因為數(shù)據(jù)存儲在關(guān)系表中,操作的性能瓶頸可能涉及很多個表,這都需要通過提高計算機性能來客服。雖然SQL數(shù)據(jù)庫有很大擴展空間,但最終肯定會達到縱向擴展的上限。而NoSQL數(shù)據(jù)庫是橫向擴展的。
而非關(guān)系型數(shù)據(jù)存儲天然就是分布式的,NoSQL數(shù)據(jù)庫的擴展可以通過給資源池添加更多普通的數(shù)據(jù)庫服務(wù)器(節(jié)點)來分擔負載。
3、對事務(wù)性的支持不同。
如果數(shù)據(jù)操作需要高事務(wù)性或者復(fù)雜數(shù)據(jù)查詢需要控制執(zhí)行計劃,那么傳統(tǒng)的SQL數(shù)據(jù)庫從性能和穩(wěn)定性方面考慮是你的最佳選擇。SQL數(shù)據(jù)庫支持對事務(wù)原子性細粒度控制,并且易于回滾事務(wù)。
雖然NoSQL數(shù)據(jù)庫也可以使用事務(wù)操作,但穩(wěn)定性方面沒法和關(guān)系型數(shù)據(jù)庫比較,所以它們真正閃亮的價值是在操作的擴展性和大數(shù)據(jù)量處理方面。
傳統(tǒng)數(shù)據(jù)庫仍舊會有一席之地,至于NewSQL的優(yōu)勢又是什么,簡單和大家說說:
首先關(guān)于“中間件+關(guān)系數(shù)據(jù)庫分庫分表”算不算NewSQL分布式數(shù)據(jù)庫問題,國外有篇論文pavlo-newsql-sigmodrec,如果根據(jù)該文中的分類,Spanner、TiDB、OB算是第一種新架構(gòu)型,Sharding-Sphere、Mycat、DRDS等中間件方案算是第二種(文中還有第三種云數(shù)據(jù)庫,本文暫不詳細介紹)。
基于中間件(包括SDK和Proxy兩種形式)+傳統(tǒng)關(guān)系數(shù)據(jù)庫(分庫分表)模式是不是分布式架構(gòu)?我覺得是的,因為存儲確實也分布式了,也能實現(xiàn)橫向擴展。但是不是“偽”分布式數(shù)據(jù)庫?從架構(gòu)先進性來看,這么說也有一定道理。
“偽”主要體現(xiàn)在中間件層與底層DB重復(fù)的SQL解析與執(zhí)行計劃生成、存儲引擎基于B+Tree等,這在分布式數(shù)據(jù)庫架構(gòu)中實際上冗余低效的。為了避免引起真?zhèn)畏植际綌?shù)據(jù)庫的口水戰(zhàn),本文中NewSQL數(shù)據(jù)庫特指這種新架構(gòu)NewSQL數(shù)據(jù)庫。
NewSQL數(shù)據(jù)庫相比中間件+分庫分表的先進在哪兒?畫一個簡單的架構(gòu)對比圖:
傳統(tǒng)數(shù)據(jù)庫面向磁盤設(shè)計,基于內(nèi)存的存儲管理及并發(fā)控制,不如NewSQL數(shù)據(jù)庫那般高效利用;
中間件模式SQL解析、執(zhí)行計劃優(yōu)化等在中間件與數(shù)據(jù)庫中重復(fù)工作,效率相比較低;
NewSQL數(shù)據(jù)庫的分布式事務(wù)相比于XA進行了優(yōu)化,性能更高;
新架構(gòu)NewSQL數(shù)據(jù)庫存儲設(shè)計即為基于paxos(或Raft)協(xié)議的多副本,相比于傳統(tǒng)數(shù)據(jù)庫主從模式(半同步轉(zhuǎn)異步后也存在丟數(shù)問題),在實現(xiàn)了真正的高可用、高可靠(RTO30s,RPO=0);
NewSQL數(shù)據(jù)庫天生支持數(shù)據(jù)分片,數(shù)據(jù)的遷移、擴容都是自動化的,大大減輕了DBA的工作,同時對應(yīng)用透明,無需在SQL指定分庫分表鍵。