SQL是什么?、NoSQL又是什么?業(yè)務(wù)系統(tǒng)如何數(shù)據(jù)庫技術(shù)選型呢?
來源:北大青鳥總部
2020年09月07日 13:57
摘要:
SQL是什么?、NoSQL又是什么?業(yè)務(wù)系統(tǒng)如何數(shù)據(jù)庫技術(shù)選型呢?
隨著云計(jì)算、大數(shù)據(jù)、物聯(lián)網(wǎng)時(shí)代的到來,越來越多的網(wǎng)民涌入互聯(lián)網(wǎng),越來越多的應(yīng)用系統(tǒng)需要支撐海量數(shù)據(jù)存儲(chǔ),還需要隨著業(yè)務(wù)需求滿足高并發(fā)、高可靠、高擴(kuò)展性等要求,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)不能完全滿足需求了,因此NoSQL應(yīng)運(yùn)而生。
那么 SQL是什么 ?、 NoSQL又是什么 ? 業(yè)務(wù)系統(tǒng)如何數(shù)據(jù)庫技術(shù)選型呢 ?
NoSQL!= NO SQL,而是NotOnlySQL,作為關(guān)系型數(shù)據(jù)庫的補(bǔ)充而出現(xiàn)。關(guān)系型數(shù)據(jù)庫即采用了關(guān)系模型來組織的數(shù)據(jù)庫,簡(jiǎn)單來說,就是二維表格模型,包含關(guān)系(表名)、元組(二維表中的一行)、屬性(二維表中的一列)、域(屬性的取值范圍)、關(guān)鍵字(唯一能標(biāo)識(shí)元組的屬性)、關(guān)系模式(表結(jié)構(gòu),對(duì)關(guān)系的描述)等概念。以一個(gè)用戶信息表來說,用戶信息表就是整個(gè)關(guān)系,元組就是姓名、性別、年齡、電話、地域組成的一行記錄,屬性則是單獨(dú)的地域列、年齡列等,域就是地域是中國(guó)全省市等,關(guān)鍵字就是用戶ID、能唯一標(biāo)識(shí)這個(gè)用戶,關(guān)系模式就是這整個(gè)表,包含姓名、性別、年齡、電話、地域?qū)傩浴?/div>
對(duì)于 關(guān)系型數(shù)據(jù)庫 來說,一直非常流行的原因有如下四個(gè):1、強(qiáng)事務(wù)一致性,數(shù)據(jù)庫的ACID(原子性、一致性、隔離性、持久性)保障了所有記錄的數(shù)據(jù)全是準(zhǔn)確的,對(duì)于早期互聯(lián)網(wǎng)來說,大家都不完全信任看不到摸不著的東西,所以這個(gè)特點(diǎn)非常重要;
2、容易理解,二維表的結(jié)構(gòu)非常貼合現(xiàn)實(shí)世界。
3、使用方便,通用的sql語言使得操作關(guān)系型數(shù)據(jù)庫非常方便;
4、容易維護(hù),在設(shè)計(jì)的時(shí)候采用了實(shí)體完整性、參照完整性等理念,減少了數(shù)據(jù)冗余和數(shù)據(jù)不一致。常用的關(guān)系型數(shù)據(jù)庫有Mysql、Oracle等。
然而隨著互聯(lián)網(wǎng)海量數(shù)據(jù)的增加,關(guān)系型數(shù)據(jù)庫也產(chǎn)生了 瓶頸 ,具體表現(xiàn)如下:
1、無法應(yīng)對(duì)高并發(fā)的讀寫請(qǐng)求,關(guān)系型數(shù)據(jù)庫是以行結(jié)構(gòu)來存儲(chǔ)的,比如我們想獲取某個(gè)地域的用戶名單,需要按行讀取,再獲取其中的用戶名字這一屬性,對(duì)于磁盤的IO消耗非常大;
2、無法彈性伸縮,關(guān)系型數(shù)據(jù)庫無法像webserver那樣簡(jiǎn)單的通過增加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能,對(duì)于數(shù)據(jù)庫海量劇增的今天、服務(wù)需要24小時(shí)提供的企業(yè)來說,這非常難受;
3、不再需要事務(wù)強(qiáng)一致性、讀寫實(shí)時(shí)性,早期這是關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn),而隨著互聯(lián)網(wǎng)業(yè)務(wù)覆蓋范圍的廣泛,用戶可以接受一定的延遲、一定的錯(cuò)誤。
因此 NoSQL關(guān)系型數(shù)據(jù)庫 出現(xiàn)了,作為關(guān)系型數(shù)據(jù)庫的補(bǔ)充,再根據(jù)互聯(lián)網(wǎng)時(shí)代的需求不同,可以分為:
1、支持高性能并發(fā)讀寫的Key-Value數(shù)據(jù)庫,如Redis;
2、支持海量數(shù)據(jù)訪問的文檔數(shù)據(jù)庫,如MongoDB、CouchDB;
3、支持大數(shù)據(jù)存儲(chǔ)和分析的列式數(shù)據(jù)庫,如HBase;
4、支持全文搜索的搜索引擎數(shù)據(jù)庫,如ElasticSearch。