爲何企業依賴於 NoSQL

若是你關注大數據科技動向,你對 NoSQL 必定不陌生,NoSQL 是一個分佈式數據庫。在過去時間,數據存儲一直關係型數據庫天下,有着良好的控制併發操做、事務功能。雖然RDBMS很優秀,可是隨着時間的推移就出現了兩個關係數據庫解決不了的問題:快速增加的數據規模和日漸複雜的數據模型。結果,咱們看到了 NoSQL 數據庫的興起。數據庫

1、關係數據庫不足服務器

實際上,從 1979 年 Oracle 發佈了第一個版本,這些數據庫被設計爲在單個服務器上運行,而且越大越好。並且增長這些數據庫容量的惟一方法是升級服務器處理器、內存和存儲,數據存儲代價不斷升高。隨着互聯網的數據呈指數級增加和 Web 應用程序的興起,數據模型日漸複雜,關係數據庫難以支撐,NoSQL 數據庫也由此孕育而生。在 2006 年穀歌發佈了 Bigtable 研究論文,在 2007 年亞馬遜發佈了 Dynamo 研究論文。而這些新的數據庫旨在知足新一代企業要求:須要敏捷開發並支持任意規模運做。數據結構

2、敏捷開發架構

當今是以體驗爲中心的數字經濟,企業如何保持競爭力,那麼必須進行創新。因爲這項創新的核心是現代 Web、移動和物聯網應用程序的開發,所以開發人員必須高頻提供應用程序和服務。速度和敏捷性都相當重要,由於這些應用程序的發展速度遠遠超過 ERP 等傳統應用程序。而關係數據庫是卻不能很好知足於它,由於它們的固定數據模型不能很好地支持敏捷開發。併發

敏捷開發的核心原則是適應不斷變化的應用程序需求:當需求發生變化時,數據模型也會發生變化,這是關係數據庫的難以克服的問題,由於關係數據庫的模型是固定的,並預先定義好的。所以,當要更改數據模型,開發人員不得不修改當初設定好的數據庫結構,以適應新的需求。這會減慢或中止開發,不只由於它是一個手動,耗時的過程,並且還會影響其餘應用程序和服務。分佈式

相比之下,NoSQL 文檔 數據庫徹底完美支持這點,由於它是無模式的,沒有強制定義數據必須建模。相反,它遵循應用程序和服務。使用 NoSQL,數據模型由應用程序模型定義。應用程序和服務將數據建模做爲對象。memcached

3、如何支持任意規模運做性能

爲了支持以指數增加的用戶和數據 - 數百到數千到數百萬用戶,以及千兆字節到數TB的數據操做,應用程序和服務不得不進行擴展以保持性能,而且必須有效地運行。大數據

對於擴展關係數據庫而言,這是一個問題,例如,使用 Oracle ,使用 RAC 技術進行擴展就須要大量組件,昂貴且不徹底可靠。所以,有效擴展和按需擴展的能力是一項挑戰。它會變得愈來愈昂貴,由於必須購買更大更強的服務器以容納更多用戶和更多數據。此外,若是必須使數據庫脫機以執行硬件升級,則可能致使停機。設計

然而,分佈式 NoSQL 數據庫利用廉價硬件進行擴展, 只需添加更多服務器便可添加更多資源。擴展能力使企業可以經過如下方式更有效地擴展:

一、不須要爲知足部署而買相對稱的硬件

二、利用較便宜的硬件進行拓展;

三、按需擴展,無需停機。

4、NoSQL 常見存儲方式

NoSQL 常見有三種存儲方式:鍵值存儲、面向文檔的數據庫和麪向列的數據庫。接下來講明這幾種存儲方式以及數據庫表明。

鍵值存儲

表明:Redis、memcached

鍵值存儲是 NoSQL 最多見存儲方式,經過 key-value 形式保存數據,高速訪問數據。並且根據保存時效也分爲臨時性、永久性和二者兼備。

面向文檔的數據庫

表明:MongoDB、CouchDB

面向文檔的數據庫數據結構要求不是很嚴格,不定義表結構並且可使用複雜的查詢條件

面向列的數據庫

表明:HBase

面向列的數據庫以列爲單位進行存儲,這裏的列式存儲其實說的是列族存儲,它將數據表存儲爲數據列而非行的形式。列族存儲優點:快速查詢,易拓展,但功能相對侷限。

5、NoSQL 對於事務的支持?

在這裏有一個誤區,因爲分佈式事務須要分佈式協做,因此彷佛必須在性能可擴展性和分佈式事務支持之間進行權衡。

耶魯大學的一名副教授 Daniel Abadi 認爲這個想法是錯的,可拓展的分佈式系統也是能夠實現事物。他提出了一個新的權衡策略,具體是在公平性、隔離性和吞吐量(FIT)三者之間進行取捨。
換句話說,有兩種方法構建出具有分佈式事務吞吐量的可擴展系統:

一、放棄隔離性

當放棄隔離性,一個事物是不會跟其餘事物有衝突,就無需等待協做就能夠完成了。並且也有一類數據約束能夠確保在弱隔離下正確性。

二、放棄公平性

經過設定分佈式協做的順序最小化二者之間的時間重疊,從而減輕兩者之間的相互影響,在此公平下找到最合適時間進行協做。

6、小結

構建和運行這些大規模交互式應用程序建立了一組新的技術要求。新的技術架構須要比以往更加靈活,而且須要一種可以適應史無前例的規模、速度和數據可變性的實時數據管理方法。關係數據庫沒法知足這些新要求,這就使得 NoSQL 逐漸流行起來。

相關文章
相關標籤/搜索