SQL借助於NewSQL開始回歸

2021-06-19 17:09:58 字數 1770 閱讀 4695

新一輪的資料庫開發風潮展現出了向sql回歸的趨勢,只不過這種趨勢並非是在更大、更好的硬體上(甚至不是在分片的架構上)執行傳統的關係型儲存,而是通過newsql解決方案來實現。

在市場被nosql(一開始叫做「no more sql」,後來改為「not only sql」)逐步蠶食後,近一段時間以來傳統的sql開始回歸。其中廣為傳頌的乙個解決方案就是分片,不過對於某些情況來說這還遠遠不夠。因此,人們推出了新的方式,有些方式結合了sql與nosql這兩種技術,還有些方式是通過改進關係型儲存的效能與可伸縮性來實現,人們將這些方式稱作newsql。google(nosql最初的支持者之一)構建了f1,這是乙個分布式的關係型資料庫,將bigtable的高可用性與可伸縮性與sql的「一致性和可用性」結合起來。google在***f1: a distributed sql database that scales(pdf)中是這樣介紹f1的:

這是由google構建的乙個容錯、分布式的oltp與olap資料庫,作為新的儲存系統用在google的adwords系統上。設計它的目標旨在替換掉分片的mysql實現,因為後者已經無法滿足日益增長的可伸縮性與可靠性的需求了。
memsql就是眾多的newsql解決方案中的乙個,這是個完全的記憶體解決方案,用於對結構化與半結構化(json)資料進行實時分析。它並沒有使用列式儲存,而是使用了「無鎖的skip列表與無鎖的hash tables」以實現更快的資料訪問,並且對非分片架構使用了並行處理,不會出現單點失敗的情況。

另乙個newsql解決方案是clustrixdb,這是個點對點的非分片的分布式資料庫,用於事務處理與實時分析。根據clustrix ceo robin purohit所述,他們的資料庫在twoo.com每天能夠處理4.4b個事務,21個節點(每個節點的配置是8核,48gb記憶體)的平均延遲為5到10毫秒,其構建方式是這樣的:

從頭開始構建的點對點分布式sql資料庫,沒有單獨的協調者(因此就不會出現單個的失敗點)。clustrixdb使用了分布式事務,事務使用了paxos的一致性協議。clustrixdb針對寫使用了2階段鎖,還使用了分布式的多版本併發控制,用於確保讀與寫不會互相干擾。這可以保證分布式環境下單個節點資料庫嚴格的acid屬性。

clustrixdb並沒有使用分片架構,這種方式也是唯一一種可以實現線性伸縮的架構。clustrixdb將原來只有資料倉儲中才擁有的用於實時分析的massively parallel processing (mpp)帶到了主流資料庫上。

我們也向twoo.com的ceo toon coppens提出了這樣乙個問題:為何最初的mysql分片解決方案無法滿足他們的要求,轉而去選擇乙個newsql呢:

我們花了一些時間了解

netlog.com的架構,他們擁有成百個mysql分片,重新平衡與管理這些分片的代價是非常高昂的,更不必說即時修改查詢或是在所有分片上建立新查詢時的不靈活性了,這種方式並不可取。我們希望乙個查詢就能將資料查出來。

雖然nosql提供了不錯的可伸縮性,但我們並不想將自己繫結在底層的資料表示上。我們希望在修改產品與特性需求時擁有完全的靈活性,同時又不必修改每天都在變化的**的資料層(clustrix提供了快速的變化,同時又能在高負載下執行良好,當然了,它還有其他很多優秀的特性)。

雖然nosql因其效能、可伸縮性與可用性而廣受讚譽,但其開發與資料重構的工作量要大於sql儲存。因此,有些人開始轉向了newsql,它將nosql的優勢與sql的能力結合了起來。最為重要的是使用能夠滿足需要的解決方案。

檢視英文原文:sql makes a comeback through newsql

C 不借助常規方法實現1 n的累加

方式一 利用建構函式和靜態變數 include include int sum 0 class add 靜態成員函式能否訪問靜態變數?可以 普通成員函式能否訪問靜態變數?可以 靜態成員函式不能訪問類的普通成員變數 static void test static int n int add n 0 i...

SQL中N 的作用

sql中n 的作用 declare sql nvarchar 4000 set sql n select totalrecords count from n sqlfullpopulate n a exec sp executesql sql,n totalrecords int output to...

SQL 計算N個月前,N個月後的方法

agenda 1.計算n個月前的日期 2.計算n個月後的日期 3.月末最後一天的情況 計算從日數多的月到日數較少的月 4.月末最後一天的情況 計算從日數少的月到日數較多的月 1 計算n個月前的日期 如果要計算n個月前的日期。使用dateadd函式,並且第二個引數n要指定為負數。指定n為負數 date...