當前位置:首頁 » 編程語言 » sql資料庫走什麼協議
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql資料庫走什麼協議

發布時間: 2023-05-23 10:18:27

1. sql資料庫中事務的並發控制問題 克服兩階段封鎖協議的問題是採用變體嚴格兩階段封鎖協議或者強兩階段

嚴格兩階段封鎖協議不僅要求封鎖是兩階段,還要求事務持有的所有排他鎖必須在事務提交後方可釋放。這個要求保證未提交事務所寫的任何數據在該事務提交之前均已排他方式加鎖,防止了其他事務讀這些數據。

強兩階段封鎖協議。它要求事務提交之前不釋放任何鎖。在該條件下,事務可以按其提交的順序串列化。

2. sql sever

SQL Server是微軟公司開發的一個關系資料庫管理系統,以Transact_SQL作為它的資料庫查詢和編程語言。T-SQL是結構化查詢語言SQL的一種,支持ANSI SQL-92標准。

SQL Server 採用二級安全驗證、登錄驗證及資料庫用戶帳號和角色的許可驗證。SQL Server 支持兩種身份驗證模式:Windows NT身份驗證和SQL Server 身份驗證。7.0版支持多種類型的角色,"角色"概念的引入方便了許可權的管理,也使許可權的分配更加靈活。

SQL Server為公共的管理功能提供了預定義的伺服器和資料庫角色,可以很容易為某一特定用戶授予一組選擇好的許可許可權。 SQL Server可以在不同的操作平台上運行,支持多種不同類型的網路協議如TCP/IP、IPX/SPX、Apple Talk等。SQL Server在伺服器端的軟體運行平台是Windows NT、Windows9x,在客戶端可以是Windows3.x、Windows NT、Windows9x,也可以採用其它廠商開發的系統如Unix、Apple Macintosh等。

微軟的SQL Server是一項完美的客戶/伺服器系統。SQL Server需要安裝在Windows NT的平台上,而Windows NT可以支持Intel 386,Power PC,MIPS,Alpha PC和RISC等平台,它使SQL Server具備足夠的威力和功能。

這里所有的文章所採用的資料庫應用程序都是基於SQL Server之上的,採用ODBC及標準的SQL查詢,可以非常簡單的移植到任何一個支持ODBC的資料庫之上,如:Oracle,Informix,Db2和Access,在閱讀有關ASP資料庫編程技術之前,要確認你至少熟悉一種資料庫管理系統,並可以使用標準的SQL查詢語言操作資料庫。

SQL Server提供伺服器端的軟體,這部分需要安裝在NT Server上,SQL Server的用戶端則可以安裝在許多用戶端PC系統中,Windows可以讓用戶端進行資料庫的建立,維護及存取等操作,SQL Server可以最多定義32767個資料庫,每個資料庫中,可以定義20億個表格,每個表格可以有250個欄位,每個表格的數據個數並沒有限制,每一個表格可以定義250個索引,其中有一個可以是Clustered索引。

SQL Server所使用的資料庫查詢語言稱為Transact-SQL,它是SQL Server的核心,Transact-SQL強化了原有的SQL關鍵字以進行數據的存取,儲存及處理等功能,Transact-SQL擴充了流程式控制制指定,可以使你方便的編寫功能強大的存儲過程,他們存放在伺服器端,並預先編譯過,執行速度非常塊,觸發是一種特殊的存儲過程,用來確保SQL Server資料庫引用的完整性,你可以建立插入,刪除和更新觸發以控制相關的表格中對數據列的插入,刪除和更新,你還可以使用規則(Rule),預設(default)以及限制(Constraints),來協助將新的數值套用到表格中去!

SQL SERVER的特點與評價

上手容易

話分兩頭,如果您的企業至今還未購置資料庫,其中一個主要的原因可能就是認為它不好上手,那麼,從SQLServer開始吧。畢竟,大多數的中小企業日常的數據應用是建立在Windows平台上的。由於SQLServer與Windows界面風格完全一致,且有許多"向導(Wizard)"幫助,因此易於安裝和學習,有關SQLServer的資料、培訓隨處可得,並且目前國內具有MCDBA認證的工程師不在少數。

從另一個角度來講,學習SQLServer是掌握其他平台及大型數據,如Oracle,Sybase,DB/2的基礎。因為這些大型資料庫對於設備、平台、人員知識的要求往往較高,而並不是每個人都具備這樣的條件,且有機會去接觸它們。但有了SQLServer的基礎,再去學習和使用它們就容易多了。IT行業的實踐經驗充分證明了這一點。

兼容性良好

由於今天Windows操作系統佔領著主導地的位,選擇SQLServer一定會在兼容性方面取得一些優勢。另外,SQLServer2000除了具有擴展性,可靠性以外,還具有可以迅速開發新的網際網路系統的功能。尤其是它可以直接存貯XML數據,可以將搜索結果以XML格式輸出等特點,有利於構建了異構系統的互操作性,奠定了面向互聯網的企業應用和服務的基石。這些特點在.NET戰略中發揮著重要的作用。

電子商務

在使用由MicrosoftSQLServer2000關系資料庫引擎的情況下,XML數據可在關系表中進行存儲,而查詢則能以XML格式將有關結果返回。此外,XML支持還簡化了後端系統集成,並實現了跨防火牆的無縫數據傳輸。你還可以使用HypertextTransferProtocol(超文本傳輸協議,HTTP)來訪問SQLServer2000,以實現面向SQLServer2000資料庫的安全Web連接和無須額外編程的聯機分析處理(OLAP)多維數據集。

數據倉庫

MicrosoftSQLServer2000非常明顯的改進就是增加了OLAP(聯機分析處理)功能,這可以讓很多中小企業用戶也可以使用數據倉庫的一些特性進行分析。OLAP可以通過多維存儲技術對大型、復雜數據集執行快速、高級的分析工作。數據挖掘功能能夠揭示出隱藏在大量數據中的傾向及趨勢,它允許組織或機構最大
限度的從數據中獲取價值。通過對現有數據進行有效分析,這一功能可以對未來的趨勢進行預測。

增強的在線商務

MicrosoftSQLServer2000簡化了管理、優化工作,並且增強了迅速、成功的部署在線商務應用程序所需的可靠性和伸縮性。其中,用以提高可靠性的特性包括日誌傳送、在線備份和故障切換群集。在伸縮性方面的改進包括對多達32顆CPU和64GBRAM的支持。通過自動優化和改進後的管理特性--諸如數據文件尺寸的自動管理、基於向導的資料庫拷貝、自動內存管理和簡化的故障切換群集安裝與管理,在線商務應用程序能夠被迅速部署並有效管理。

利於構築"敏捷性商務"

所謂"敏捷性商務"就是能夠打破內部和外部的商業界限,對迅速改變的環境做出快速反應。。微軟已經與關鍵的合作夥伴建立起了戰略關系,創造出了能夠與許多供應商的產品實現整合的解決方案,因而企業用戶並不需要做出"要麼完全接受,要麼全部不要"的承諾。在部署解決方案的過程中,企業用戶不一定要拆除原有的設備從頭。敏捷商務讓企業用戶能夠充分利用現有的系統,自主決定所需的硬體和軟體解決方案以及由誰來提供,伸縮自如、游刃有餘。

-------------------------------------
現在的資料庫:oracle 如日中天
sybase 情況不妙
sqlserver 馬馬忽忽

3. 分庫分表 VS newsql資料庫

最近與同行 科技 交流,經常被問到分庫分表與分布式資料庫如何選擇,網上也有很多關於中間件+傳統關系資料庫(分庫分表)與NewSQL分布式資料庫的文章,但有些觀點與判斷是我覺得是偏激的,脫離環境去評價方案好壞其實有失公允。

本文通過對兩種模式關鍵特性實現原理對比,希望可以盡可能客觀、中立的闡明各自真實的優缺點以及適用場景。

首先關於「中間件+關系資料庫分庫分表」算不算NewSQL分布式資料庫問題,國外有篇論文pavlo-newsql-sigmodrec,如果根據該文中的分類,Spanner、TiDB、OB算是第一種新架構型,Sharding-Sphere、Mycat、DRDS等中間件方案算是第二種(文中還有第三種雲資料庫,本文暫不詳細介紹)。

基於中間件(包括SDK和Proxy兩種形式)+傳統關系資料庫(分庫分表)模式是不是分布式架構?我覺得是的,因為存儲確實也分布式了,也能實現橫向擴展。但是不是"偽"分布式資料庫?從架構先進性來看,這么說也有一定道理。"偽"主要體現在中間件層與底層DB重復的SQL解析與執行計劃生成、存儲引擎基於B+Tree等,這在分布式資料庫架構中實際上冗餘低效的。為了避免引起真偽分布式資料庫的口水戰,本文中NewSQL資料庫特指這種新架構NewSQL資料庫。

NewSQL資料庫相比中間件+分庫分表的先進在哪兒?畫一個簡單的架構對比圖:

這些大多也是NewSQL資料庫產品主要宣傳的點,不過這些看起來很美好的功能是否真的如此?接下來針對以上幾點分別闡述下的我的理解。

這是把雙刃劍。

CAP限制

想想更早些出現的NoSQL資料庫為何不支持分布式事務(最新版的mongoDB等也開始支持了),是缺乏理論與實踐支撐嗎?並不是,原因是CAP定理依然是分布式資料庫頭上的頸箍咒,在保證強一致的同時必然會犧牲可用性A或分區容忍性P。為什麼大部分NoSQL不提供分布式事務?

那麼NewSQL資料庫突破CAP定理限制了嗎?並沒有。NewSQL資料庫的鼻主Google Spanner(目前絕大部分分布式資料庫都是按照Spanner架構設計的)提供了一致性和大於5個9的可用性,宣稱是一個「實際上是CA」的,其真正的含義是 系統處於 CA 狀態的概率非常高,由於網路分區導致的服務停用的概率非常小 ,究其真正原因是其打造私有全球網保證了不會出現網路中斷引發的網路分區,另外就是其高效的運維隊伍,這也是cloud spanner的賣點。詳細可見CAP提出者Eric Brewer寫的《Spanner, TrueTime 和CAP理論》。

完備性

兩階段提交協議是否嚴格支持ACID,各種異常場景是不是都可以覆蓋?

2PC在commit階段發送異常,其實跟最大努力一階段提交類似也會有部分可見問題,嚴格講一段時間內並不能保證A原子性和C一致性(待故障恢復後recovery機制可以保證最終的A和C)。完備的分布式事務支持並不是一件簡單的事情,需要可以應對網路以及各種硬體包括網卡、磁碟、CPU、內存、電源等各類異常,通過嚴格的測試。之前跟某友商交流,他們甚至說目前已知的NewSQL在分布式事務支持上都是不完整的,他們都有案例跑不過,圈內人士這么篤定,也說明了 分布式事務的支持完整程度其實是層次不齊的。

但分布式事務又是這些NewSQL資料庫的一個非常重要的底層機制,跨資源的DML、DDL等都依賴其實現,如果這塊的性能、完備性打折扣,上層跨分片SQL執行的正確性會受到很大影響。

性能

傳統關系資料庫也支持分布式事務XA,但為何很少有高並發場景下用呢? 因為XA的基礎兩階段提交協議存在網路開銷大,阻塞時間長、死鎖等問題,這也導致了其實際上很少大規模用在基於傳統關系資料庫的OLTP系統中。

NewSQL資料庫的分布式事務實現也仍然多基於兩階段提交協議,例如google percolator分布式事務模型,

採用原子鍾+MVCC+ Snapshot Isolation(SI),這種方式通過TSO(Timestamp Oracle)保證了全局一致性,通過MVCC避免了鎖,另外通過primary lock和secondary lock將提交的一部分轉為非同步,相比XA確實提高了分布式事務的性能。

但不管如何優化,相比於1PC,2PC多出來的GID獲取、網路開銷、prepare日誌持久化還是會帶來很大的性能損失,尤其是跨節點的數量比較多時會更加顯著,例如在銀行場景做個批量扣款,一個文件可能上W個賬戶,這樣的場景無論怎麼做還是吞吐都不會很高。

雖然NewSQL分布式資料庫產品都宣傳完備支持分布式事務,但這並不是說應用可以完全不用關心數據拆分,這些資料庫的最佳實踐中仍然會寫到,應用的大部分場景盡可能避免分布式事務。

既然強一致事務付出的性能代價太大,我們可以反思下是否真的需要這種強一致的分布式事務?尤其是在做微服務拆分後,很多系統也不太可能放在一個統一的資料庫中。嘗試將一致性要求弱化,便是柔性事務,放棄ACID(Atomicity,Consistency, Isolation, Durability),轉投BASE(Basically Available,Soft state,Eventually consistent),例如Saga、TCC、可靠消息保證最終一致等模型,對於大規模高並發OLTP場景,我個人更建議使用柔性事務而非強一致的分布式事務。關於柔性事務,筆者之前也寫過一個技術組件,最近幾年也涌現出了一些新的模型與框架(例如阿里剛開源的Fescar),限於篇幅不再贅述,有空再單獨寫篇文章。

HA與異地多活

主從模式並不是最優的方式,就算是半同步復制,在極端情況下(半同步轉非同步)也存在丟數問題,目前業界公認更好的方案是基於paxos分布式一致性協議或者其它類paxos如raft方式,Google Spanner、TiDB、cockcoachDB、OB都採用了這種方式,基於Paxos協議的多副本存儲,遵循過半寫原則,支持自動選主,解決了數據的高可靠,縮短了failover時間,提高了可用性,特別是減少了運維的工作量,這種方案技術上已經很成熟,也是NewSQL資料庫底層的標配。

當然這種方式其實也可以用在傳統關系資料庫,阿里、微信團隊等也有將MySQL存儲改造支持paxos多副本的,MySQL也推出了官方版MySQL Group Cluster,預計不遠的未來主從模式可能就成為 歷史 了。

需要注意的是很多NewSQL資料庫廠商宣傳基於paxos或raft協議可以實現【異地多活】,這個實際上是有前提的,那就是異地之間網路延遲不能太高 。以銀行「兩地三中心」為例,異地之間多相隔數千里,延時達到數十毫秒,如果要多活,那便需異地副本也參與資料庫日誌過半確認,這樣高的延時幾乎沒有OLTP系統可以接受的。

資料庫層面做異地多活是個美好的願景,但距離導致的延時目前並沒有好的方案。 之前跟螞蟻團隊交流,螞蟻異地多活的方案是在應用層通過MQ同步雙寫交易信息,異地DC將交易信息保存在分布式緩存中,一旦發生異地切換,資料庫同步中間件會告之數據延遲時間,應用從緩存中讀取交易信息,將這段時間內涉及到的業務對象例如用戶、賬戶進行黑名單管理,等數據同步追上之後再將這些業務對象從黑名單中剔除。由於雙寫的不是所有資料庫操作日誌而只是交易信息,數據延遲隻影響一段時間內數據,這是目前我覺得比較靠譜的異地度多活方案。

另外有些系統進行了單元化改造,這在paxos選主時也要結合考慮進去,這也是目前很多NewSQL資料庫欠缺的功能。

Scale橫向擴展與分片機制

paxos演算法解決了高可用、高可靠問題,並沒有解決Scale橫向擴展的問題,所以分片是必須支持的。NewSQL資料庫都是天生內置分片機制的,而且會根據每個分片的數據負載(磁碟使用率、寫入速度等)自動識別熱點,然後進行分片的分裂、數據遷移、合並,這些過程應用是無感知的,這省去了DBA的很多運維工作量。以TiDB為例,它將數據切成region,如果region到64M時,數據自動進行遷移。

分庫分表模式下需要應用設計之初就要明確各表的拆分鍵、拆分方式(range、取模、一致性哈希或者自定義路由表)、路由規則、拆分庫表數量、擴容方式等。相比NewSQL資料庫,這種模式給應用帶來了很大侵入和復雜度,這對大多數系統來說也是一大挑戰。

這里有個問題是NewSQL資料庫統一的內置分片策略(例如tidb基於range)可能並不是最高效的,因為與領域模型中的劃分要素並不一致,這導致的後果是很多交易會產生分布式事務。 舉個例子,銀行核心業務系統是以客戶為維度,也就是說客戶表、該客戶的賬戶表、流水表在絕大部分場景下是一起寫的,但如果按照各表主鍵range進行分片,這個交易並不能在一個分片上完成,這在高頻OLTP系統中會帶來性能問題。

分布式SQL支持

常見的單分片SQL,這兩者都能很好支持。NewSQL資料庫由於定位與目標是一個通用的資料庫,所以支持的SQL會更完整,包括跨分片的join、聚合等復雜SQL。中間件模式多面向應用需求設計,不過大部分也支持帶拆分鍵SQL、庫表遍歷、單庫join、聚合、排序、分頁等。但對跨庫的join以及聚合支持就不夠了。

NewSQL資料庫一般並不支持存儲過程、視圖、外鍵等功能,而中間件模式底層就是傳統關系資料庫,這些功能如果只是涉及單庫是比較容易支持的。

NewSQL資料庫往往選擇兼容MySQL或者PostgreSQL協議,所以SQL支持僅局限於這兩種,中間件例如驅動模式往往只需做簡單的SQL解析、計算路由、SQL重寫,所以可以支持更多種類的資料庫SQL。

SQL支持的差異主要在於分布式SQL執行計劃生成器,由於NewSQL資料庫具有底層數據的分布、統計信息,因此可以做CBO,生成的執行計劃效率更高,而中間件模式下沒有這些信息,往往只能基於規則RBO(Rule-Based-Opimization),這也是為什麼中間件模式一般並不支持跨庫join,因為實現了效率也往往並不高,還不如交給應用去做。

存儲引擎

傳統關系資料庫的存儲引擎設計都是面向磁碟的,大多都基於B+樹。B+樹通過降低樹的高度減少隨機讀、進而減少磁碟尋道次數,提高讀的性能,但大量的隨機寫會導致樹的分裂,從而帶來隨機寫,導致寫性能下降。NewSQL的底層存儲引擎則多採用LSM,相比B+樹LSM將對磁碟的隨機寫變成順序寫,大大提高了寫的性能。不過LSM的的讀由於需要合並數據性能比B+樹差,一般來說LSM更適合應在寫大於讀的場景。當然這只是單純數據結構角度的對比,在資料庫實際實現時還會通過SSD、緩沖、bloom filter等方式優化讀寫性能,所以讀性能基本不會下降太多。NewSQL數據由於多副本、分布式事務等開銷,相比單機關系資料庫SQL的響應時間並不佔優,但由於集群的彈性擴展,整體QPS提升還是很明顯的,這也是NewSQL資料庫廠商說分布式資料庫更看重的是吞吐,而不是單筆SQL響應時間的原因。

成熟度與生態

分布式資料庫是個新型通用底層軟體,准確的衡量與評價需要一個多維度的測試模型,需包括發展現狀、使用情況、社區生態、監控運維、周邊配套工具、功能滿足度、DBA人才、SQL兼容性、性能測試、高可用測試、在線擴容、分布式事務、隔離級別、在線DDL等等,雖然NewSQL資料庫發展經過了一定時間檢驗,但多集中在互聯網以及傳統企業非核心交易系統中,目前還處於快速迭代、規模使用不斷優化完善的階段。

相比而言,傳統關系資料庫則經過了多年的發展,通過完整的評測,在成熟度、功能、性能、周邊生態、風險把控、相關人才積累等多方面都具有明顯優勢,同時對已建系統的兼容性也更好。

對於互聯網公司,數據量的增長壓力以及追求新技術的基因會更傾向於嘗試NewSQL資料庫,不用再考慮庫表拆分、應用改造、擴容、事務一致性等問題怎麼看都是非常吸引人的方案。

對於傳統企業例如銀行這種風險意識較高的行業來說,NewSQL資料庫則可能在未來一段時間內仍處於 探索 、審慎試點的階段。基於中間件+分庫分表模式架構簡單,技術門檻更低,雖然沒有NewSQL資料庫功能全面,但大部分場景最核心的訴求也就是拆分後SQL的正確路由,而此功能中間件模式應對還是綽綽有餘的,可以說在大多數OLTP場景是夠用的。

限於篇幅,其它特性例如在線DDL、數據遷移、運維工具等特性就不在本文展開對比。

總結

如果看完以上內容,您還不知道選哪種模式,那麼結合以下幾個問題,先思考下NewSQL資料庫解決的點對於自身是不是真正的痛點:

如果以上有2到3個是肯定的,那麼你可以考慮用NewSQL資料庫了,雖然前期可能需要一定的學習成本,但它是資料庫的發展方向,未來收益也會更高,尤其是互聯網行業,隨著數據量的突飛猛進,分庫分表帶來的痛苦會與日俱增。當然選擇NewSQL資料庫你也要做好承擔一定風險的准備。

如果你還未做出抉擇,不妨再想想下面幾個問題:

如果這些問題有多數是肯定的,那還是分庫分表吧。在軟體領域很少有完美的解決方案,NewSQL資料庫也不是數據分布式架構的銀彈。相比而言分庫分表是一個代價更低、風險更小的方案,它最大程度復用傳統關系資料庫生態,通過中間件也可以滿足分庫分表後的絕大多數功能,定製化能力更強。 在當前NewSQL資料庫還未完全成熟的階段,分庫分表可以說是一個上限低但下限高的方案,尤其傳統行業的核心系統,如果你仍然打算把資料庫當做一個黑盒產品來用,踏踏實實用好分庫分表會被認為是個穩妥的選擇。

很多時候軟體選型取決於領域特徵以及架構師風格,限於筆者知識與所屬行業特點所限,以上僅為個人粗淺的一些觀點,歡迎討論。

4. c#訪問資料庫用的是什麼協議

ado.net協議
Connection對象:與數據源建立連接,連接sql server7.0 或更新版本資料庫用SqlConnection,連接OLEDB數據源使用OledbConnection.
Command 對象:對數據源執行SQL命令並返回結果,SQL Server7.0或更新版本用SqlCommand,OLE DB數據源使用OledbCommand.
DataReader對象: 讀取數據源的數據,只能將數據源的數據從頭到尾依次讀出,Sql server7.0或以上版本使用SqlDataReader,Oledb數據源使用OledbReader
DataAdapter對象:對數據源執行操作並返回結果,在DataSet與數據源之間建立通信,將數據源中的數據寫入DataSet ,或根據DataSet中的數據必定數據源。Sql server7.0或以上版本使用SqlDataAdapter,Oledb 數據源使用OledbAdpater.
DataSet對象: 伺服器內存中的資料庫
DataView對象: 用於顯示DataSet中的數據

5. 能不能把SQL是網路會話層的協議解 釋得更專業一些

SQL全稱是「結構化查詢語言(Structured Query Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的資料庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。

SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的介面。它以記錄集合作為操縱對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語言可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的一個單獨事件只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。

SQL同時也是資料庫文件格式的擴展名。

SQL語言包含4個部分:

數據定義(DDL)語言(如CREATE, DROP,ALTER等語句)

數據操縱(DML)語言(INSERT, UPDATE, DELETE語句)

數據查詢語言(SELECT語句)

數據控制語言(如GRANT,REVOKE,COMMIT, ROLLBACK等語句)

取自"http://zh.wikipedia.org/wiki/SQL"
SQL(STructured Query Language)是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統。美國國家標准局(ANSI)與國際標准化組織(ISO)已經制定了 SQL 標准。ANSI 是一個美國工業和商業集團組織,發展美國的商務和通訊標准。ANSI 同時也是 ISO 和 International Electrotechnical Commission(IEC)的成員之一。ANSI 發布與國際標准組織相應的美國標准。1992年,ISO 和 IEC 發布了 SQL 的國際標准,稱為 SQL-92。ANSI 隨之發布的相應標準是 ANSI SQL-92。ANSI SQL-92 有時被稱為 ANSI SQL。盡管不同的關聯式資料庫使用的 SQL 版本有一些差異,但大多數都遵循 ANSI SQL 標准。SQL Server 使用 ANSI SQL-92 的擴展集,稱為 T-SQL,其遵循 ANSI 制定的 SQL-92 標准。

SQL 語言包括兩種主要程式設計語言類別的陳述式: 資料定義語言 (DDL)與資料操作語言 (DML)。下面我們將介紹這兩類語言。

6. NewSQL為何使傳統關系資料庫黯然失色

傳統資料庫仍舊會有一席之地,至於NewSQL的優勢又是什麼,簡單和大家說說:

首先關於「中間件+關系資料庫分庫分表」算不算NewSQL分布式資料庫問題,國外有篇論文pavlo-newsql-sigmodrec,如果根據該文中的分類,Spanner、TiDB、OB算是第一種新架構型,Sharding-Sphere、Mycat、DRDS等中間件方案算是第二種(文中還有第三種雲資料庫,本文暫不詳細介紹)。

基於中間件(包括SDK和Proxy兩種形式)+傳統關系資料庫(分庫分表)模式是不是分布式架構?我覺得是的,因為存儲確實也分布式了,也能實現橫向擴展。但是不是「偽」分布式資料庫?從架構先進性來看,這么說也有一定道理。

「偽」主要體現在中間件層與底層DB重復的SQL解析與執行計劃生成、存儲引擎基於B+Tree等,這在分布式資料庫架構中實際上冗餘低效的。為了避免引起真偽分布式資料庫的口水戰,本文中NewSQL資料庫特指這種新架構NewSQL資料庫。

NewSQL資料庫相比中間件+分庫分表的先進在哪兒?畫一個簡單的架構對比圖:

  • 傳統資料庫面向磁碟設計,基於內存的存儲管理及並發控制,不如NewSQL資料庫那般高效利用;
  • 中間件模式SQL解析、執行計劃優化等在中間件與資料庫中重復工作,效率相比較低;
  • NewSQL資料庫的分布式事務相比於XA進行了優化,性能更高;
  • 新架構NewSQL資料庫存儲設計即為基於paxos(或Raft)協議的多副本,相比於傳統資料庫主從模式(半同步轉非同步後也存在丟數問題),在實現了真正的高可用、高可靠(RTO<30s,RPO=0);
  • NewSQL資料庫天生支持數據分片,數據的遷移、擴容都是自動化的,大大減輕了DBA的工作,同時對應用透明,無需在SQL指定分庫分表鍵。