SQL or NoSQL——雲計算環境中該選擇誰?

來源:互聯網
上載者:User
關鍵字 資料模型 擴展 是否 選擇 複雜

NoSQL和SQL之間真正的差異是什麼? 實質上,是因為不同的訪問模式導致了NoSQL和SQL可擴充性和性能上的不同。

NoSQL只允許資料在受限的預定義模式訪問。 例如DHT (Distributed Hash Table)通過hashtable API訪問。 其他NoSQL資料服務訪問模式同樣受限。 因此可擴充性和性能結構是可預測和可靠的。

而在SQL中,訪問模式預先是不知道的,SQL是一種通用語言,允許資料以各種方式訪問,程式師也對SQL語句的執行能力控制有限。

換句話說,在SQL中,資料模型不執行特定的工作方式與資料。 強調建立資料完整性、簡潔性、標準化和抽象化。 這對於所有大型複雜的應用極為重要。

為什麼是NoSQL

NoSQL提供的方法對於SQL資料庫來說有巨大的優勢。 因為它允許應用程式擴展的新的水準。 新的資料服務基於真正可擴展的結構和體系構建雲、構建分散式。 這對於應用開發來說是非常有吸引力的。 無需DBA,無需複雜的SQL查詢。

這是不小的問題,一個好程式師自由選擇一個資料模型,使用熟悉的工具寫應用程式,減少對他人的依賴于,並測試和優化的代碼,而不做猜測或一個黑盒(DB)的計數。

這些都是NoSQL運動的所有主要優勢,但NoSQL也非萬能,具體而言,資料模型的選擇、介面規範以及當前面臨的新業務比如移動業務資料的處理問題,都是NoSQL無法回避的。

NoSQL絕非萬能

資料模型

如果沒有一個統一的、定義良好的資料模型,無論採用何種技術都有缺陷。

SQL的資料模型定義了高度結構化的資料結構,以及對這些結構之間關係的嚴格定義。 在這樣的資料模型上執行的查詢操作會比較局限,而且可能會導致複雜的資料遍歷操作。 但是資料結構的複雜性及查詢的複雜性,會導致系統產生如下的一些限制:比如當資料量增長到一台機器已經不能容納,我們需要將不同的資料表分佈到不同的機器;如果你的結構化資料並沒有那麼強,或者對每一行資料的要求比較靈活, 那可能關聯式的資料模型就太過嚴格了;再有,使用簡單的查詢語言可能會導致應用層的邏輯更複雜,但是這樣可以將存儲系統的工作簡單化,讓它只需要回應一些簡單的請求。

此外,NoSQL資料庫並非是唯一適合存儲大量資料或大型資料,顯然,通過良好的分區設計,SQL資料庫也可以獲得極好的擴充性。

介面和交互操作問題

不可否認,NoSQL的資料服務介面還有待規範。 比如DHT,這是一個簡單的介面,但仍舊沒有標準的語義。 每個DHT服務都使用其自己的一套介面。 另一個大問題是不同的資料結構,如 DHT和binary tree,只是作為一個例子,共用資料物件。 所有這些服務中,指標沒有內在的語義。 事實上,這些服務中,處理互通性是開發者的職責,這一點很很重要,尤其是當需要資料被多個服務訪問時。 一個簡單的例子:後臺工作由JAVA實現,Web服務類工作由PHP實現,資料可以被輕易地從兩個域訪問資料嗎? 顯然,人們可以使用Web服務作為前端資料訪問層,但是,NoSQL有可能讓事情變得更複雜,並降低了業務敏捷性,靈活性和性能,同時增加了開發工作量。

移動業務

在移動業務領域,需要一套工具,這套工具不僅要有可擴充性,而且還易於管理並且穩定,並在雲上有一個固定的設置伺服器。 當系統出現問題的時候,可以不需要通過判斷整個系統或開發平臺來診斷問題,而是通過遠端存取——這正是運維經理們所要面對的問題,但是在目前NoSQL所能提供的服務功能來看,很難實現,即便是Amazon的託管環境。

SQL和NoSQL如何結合?

總而言之,在NoSQL和SQL的選擇上,需要瞭解到以下內容:

資料模型及操作模型:你的應用層資料模型是行、物件還是文檔型的呢? 這個系統是否能支援你進行一些統計工作呢?

可靠性:當你更新資料時,新的資料是否立刻寫到持久化存儲中去了? 新的資料是否同步到多台機器上了?

擴充性:你的資料量有多大,單機是否能容下? 你的讀寫量求單機是否能支援?

分區策略:考慮到你對擴充性,可用性或者持久性的要求,你是否需要一份資料被存在多台機器上? 你是否需要知道資料在哪台機器上,以及你能否知道。

一致性:你的資料是否被覆制到了多台機器上,這些分佈在不同點的資料如何保證一致性?

事務機制:你的業務是否需要ACID的事務機制?

單機性能:如果你打算持久化的將資料存在磁片上,哪種資料結構能滿足你的需求(你的需求是讀多還是寫多)? 寫操作是否會成為磁碟瓶頸?

負載可評估:對於一個讀多寫少的應用,諸如回應使用者請求的web應用,我們總會花很多精力來關注負載情況。 你可能需要進行資料規模的監控,對多個使用者的資料進行匯總統計。 你的應用場景是否需要這樣的功能呢?

使用NoSQL架構實現SQL資料庫?

使用NoSQL的基礎架構實現SQL資料庫是一個很好的解決方案。 一個SQL資料庫是可擴展、易管理,雲就緒、高度可用的,完全建立在NoSQL的基礎結構(分散式)上,但仍然提供SQL資料庫的所有優勢,如互通性,定義良好的語義以及更多。

這種混合結構也許不如純粹的NoSQL的服務,但足以滿足需要更穩定系統、可擴充性和雲服務的80%的市場需求。

這種解決辦法還允許很容易地遷移現有的應用到雲環境,從而保護相關組織在這些應用上所付出的巨大的投資。

在我看來,構建于NoSQL基礎之上的SQL資料庫,可以為那些在其成長期間期望靈活、高效的客戶提供最高的價值。

(責任編輯:admin)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.