1. 程式人生 > >資料庫種類發展史和大資料下的資料庫(NoSQL)

資料庫種類發展史和大資料下的資料庫(NoSQL)

本文側重於大資料下的NoSQL資料庫特點,在介紹NoSQL資料庫之前,需要簡單介紹下資料庫種類的發展史,有因有果的邏輯才能被大家所認可嘛。

       計算機剛剛興起的年代,是沒有專門儲存資料的庫的,基本上所有的資料資訊都是以檔案的形式存取,也就是無庫,所以當時計算機也是比較冷的行業,畢竟剛剛起步嘛,沒有系統的標準來規範這些業務標準。後來漸漸有了層次狀資料庫網狀資料庫,但這些資料庫還是不能被大規模的商業化,只有極個別有實力的公司可能會採用這種資料庫方式儲存企業內部的相關資訊,而且維護起來相當麻煩,歸根結底還是標準的問題,比如對資料庫讀寫的標準等等,這些標準就不一一細說,造成了很大的企業成本開銷。基於標準這一緣故,直到上世紀80年代,關係

型資料庫統一了規範,很快發展成了主流的資料庫儲存模式。資料庫的具體發展可參考此網址:http://www.cbdio.com/BigData/2016-02/24/content_4651751.htm

       關係型資料庫具有的優勢直到現在也是無可替代的,例如關係型資料庫擅長小量資料的讀寫儲存、擅長複雜的SQL操作、支援事務機制等等,所以到現在出現了很多的關係型資料庫,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及Access資料等等,各有優缺點。

       但是到了大資料時代,人們更多的資料和物聯網加入的資料已經超出了關係資料庫的承載範圍。剛開始解決大資料時代的高併發的訪問請求一般都是採用的叢集同步資料的方式處理,什麼意思呢?就是將資料庫分成了很多的小庫,每個資料庫的資料內容是不變的,都是儲存了源資料庫的資料副本,通過同步或者非同步方式保證資料的一致性,每個庫設定特定的讀寫方式,比如資料庫a負責查詢,資料庫b負責增加等等以此類推,將業務在物理層面上進行了分離,但是這種方式依舊存在一定的負載壓力的問題,企業公司的資料在不斷的擴增中,後面就採用分庫分表的方式解決,對讀寫負載進行分離,但是這種實現依舊存在不足,有如下幾點:

1.底層的叢集建立相當的複雜;

2.資料庫一般採用的非同步方式複製資料,當主庫壓力較大時會帶來較大的延遲,使得主備切換可能會丟失一部分更新的資料,這種情況就需要人工介入恢復,代價高昂;

3.擴容問題,當需要增加叢集時,一般會對整個叢集重新分割槽,對資料重新劃分,比較複雜,容易出錯;

4.資料動態遷移的問題。意思就是在配置叢集之前,很多企業不能預測後面的叢集分佈情況,可能會導致有的庫負載重有的反而輕,在運營的過程中可能會對叢集進行修改,這個過程也是人工介入,對每個節點進行重新分配。

      過度階段的人們根據經驗總結髮展出了NoSQL(Not Only SQL)資料庫。NoSQL資料庫是大資料下資料庫的統一簡稱,和關係型資料庫一樣,只是一個象徵性意義的詞彙,本身並不是資料庫

,英文解釋為“Not Only SQL”(不僅僅是SQL),意思就是在SQL上衍生出來的,相當於SQL的補充,但為了做區別故稱為NoSQL資料庫。NoSQL資料可以大致分為4種類型:列族資料庫(BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB等等)、鍵值資料庫(Redis、SimpleDB、Scalaris、Memcached等等)、文件資料庫(MongoDB、CouchDB、Perservere、Terrastore、RavenDB等等)、圖資料庫(Neo4J、InfoGrid、OrientDB、GraphDB)。

但現在很多大企業在運營時,並不是僅僅只使用一種資料庫,而是多種資料庫一起混合協調,將整個系統達到最優,也因此產生了NewSQL資料庫,其實就是混合型資料庫架構的統一叫法,它是為了將關鍵業務和非關鍵業務進行一統管理。關係型資料庫、NoSQL和NewSQL資料庫的大致關係如下圖(注:OldSQL是指傳統的關係型資料庫):

好了說了這麼多,一張圖便可以將目前市場主流的資料庫型別的關係表達清楚,如圖:


總結:關係型資料庫和NoSQL資料庫各有優缺點,彼此之間無法取代。在應用場景上,關係型資料庫適用於電信、銀行等關鍵性業務系統,保證強事務一致性,而NoSQL資料庫適用於網際網路企業、傳統企業等的非關鍵性業務(例如資料分析)。