關係型資料庫和非關係型資料庫的區別2

2021-07-25 18:59:37 字數 2595 閱讀 2097

關聯式資料庫和非關聯式資料庫的區別是,關聯式資料庫只有「表」這一種資料結構;而非關係資料庫系統還有其他資料結構,對這些資料結構還有其他操作。

隨著網路的不斷發展,單純關聯式資料庫面臨挑戰。

關係型資料庫,是指採用了關係模型來組織資料的資料庫。

簡單來說,關係模型指的就是二維**模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。

關係模型中常用的概念:

關係型資料庫的優點:

**的使用者併發性非常高,往往達到每秒上萬次讀寫請求,對於傳統關係型資料庫來說,硬碟i/o是乙個很大的瓶頸

**每天產生的資料量是巨大的,對於關係型資料庫來說,在一張包含海量資料的表中查詢,效率是非常低的

對**來說,關係型資料庫的很多特性不再需要了:

關係型資料庫在對事物一致性的維護中有很大的開銷,而現在很多web2.0系統對事物的讀寫一致性都不高

對關聯式資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出這條資料的,但是對於很多web應用來說,並不要求這麼高的實時性,比如發一條訊息之後,過幾秒乃至十幾秒之後才看到這條動態是完全可以接受的

任何大資料量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的資料分析型別的複雜sql報表查詢,特別是sns型別的**,從需求以及產品階級角度,就避免了這種情況的產生。往往更多的只是單錶的主鍵查詢,以及單錶的簡單條件分頁查詢,sql的功能極大的弱化了

在關係型資料庫中,導致效能欠佳的最主要原因是多表的關聯查詢,以及複雜的資料分析型別的複雜sql報表查詢。為了保證資料庫的acid特性,我們必須盡量按照其要求的正規化進行設計,關係型資料庫中的表都是儲存乙個格式化的資料結構。每個元組欄位的組成都是一樣,即使不是每個元組都需要所有的字段,但資料庫會為每個元組分配所有的字段,這樣的結構可以便於標語表之間進行鏈結等操作,但從另乙個角度來說它也是關係型資料庫效能瓶頸的乙個因素。

2023年初,johan oskarsson舉辦了一場關於開源分布式資料庫的討論,eric evans在這次討論中提出了nosql一詞,用於指代那些非關係型的,分布式的,且一般不保證遵循acid原則的資料儲存系統。eric evans使用nosql這個詞,並不是因為字面上的「沒有sql」的意思,他只是覺得很多經典的關係型資料庫名字都叫「**sql」,所以為了表示跟這些關係型資料庫在定位上的截然不同,就是用了「nosql「一詞。

注:資料庫事務必須具備acid特性,acid是atomic原子性,consistency一致性,isolation隔離性,durability永續性。

非關係型資料庫提出另一種理念,例如,以鍵值對儲存,且結構不固定,每乙個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。使用這種方式,使用者可以根據需要去新增自己需要的字段,這樣,為了獲取使用者的不同資訊,不需要像關係型資料庫中,要對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢。但非關係型資料庫由於很少的約束,他也不能夠提供像sql所提供的where這種對於字段屬性值情況的查詢。並且難以體現設計的完整性。他只適合儲存一些較為簡單的資料,對於需要進行較複雜查詢的資料,sql資料庫顯的更為合適。

關係型資料庫的最大特點就是事務的一致性:傳統的關係型資料庫讀寫操作都是事務的,具有acid的特點,這個特性使得關係型資料庫可以用於幾乎所有對一致性有要求的系統中,如典型的銀行系統。

但是,在網頁應用中,尤其是sns應用中,一致性卻不是顯得那麼重要,使用者a看到的內容和使用者b看到同一使用者c內容更新不一致是可以容忍的,或者說,兩個人看到同一好友的資料更新的時間差那麼幾秒是可以容忍的,因此,關係型資料庫的最大特點在這裡已經無用武之地,起碼不是那麼重要了。

相反地,關係型資料庫為了維護一致性所付出的巨大代價就是其讀寫效能比較差,而像微博、facebook這類sns的應用,對併發讀寫能力要求極高,關係型資料庫已經無法應付(在讀方面,傳統上為了克服關係型資料庫缺陷,提高效能,都是增加一級memcache來靜態化網頁,而在sns中,變化太快,memchache已經無能為力了),因此,必須用新的一種資料結構儲存來代替關聯式資料庫。

關聯式資料庫的另乙個特點就是其具有固定的表結構,因此,其擴充套件性極差,而在sns中,系統的公升級,功能的增加,往往意味著資料結構巨大變動,這一點關係型資料庫也難以應付,需要新的結構化資料儲存。

於是,非關係型資料庫應運而生,由於不可能用一種資料結構化儲存應付所有的新的需求,因此,非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。

必須強調的是,資料的持久儲存,尤其是海量資料的持久儲存,還是需要一種關聯式資料庫。

1.實質。

非關係型資料庫的實質:非關係型資料庫產品是傳統關係型資料庫的功能閹割版本,通過減少用不到或很少用的功能,來大幅度提高產品效能。

2.**。

目前基本上大部分主流的非關係型資料庫都是免費的。而比較有名氣的關係型資料庫,比如oracle、db2、mssql是收費的。雖然mysql免費,但它需要做很多任務作才能正式用於生產。

3.功能。

實際開發中,有很多業務需求,其實並不需要完整的關係型資料庫功能,非關係型資料庫的功能就足夠使用了。這種情況下,使用效能更高、成本更低的非關係型資料庫當然是更明智的選擇。

非關係型資料庫在某些特定的領域很好用,比如redis作為資料的快取,資料是儲存在記憶體中,所以效能非常好,底層只有三萬條**,貌似知乎就用到了redis作為資料庫。

關係型資料庫和非關係型資料庫

關係型資料庫 mysql oracle等 非關係型資料庫 nosql hbase,mongodb,redis等 優勢 可以在乙個表以及多個表之間做複雜的資料查詢 支援事務,保持資料的一致性。優勢 基於鍵值對,不需要經過sql解析,資料之間沒有耦合,易水平擴充套件。資料儲存在快取中,查詢速度快。可以儲...

關係型資料庫和非關係型資料庫

關聯式資料庫是資料項之間具有預定義關係的資料項的集合。這些項被組織為一組具有列和行的表。表用於儲存有關要在資料庫中表示的物件的資訊。表中的每列都儲存著特定型別的資料,字段儲存著屬性的實際值。表中的行表示乙個物件或實體的相關值的集合。表中的每一行可標有乙個稱為主鍵的唯一識別符號,並且可使用外來鍵在多個...

關係型資料庫和非關係型資料庫

關係型資料庫 採用了關係模型來組織資料的資料庫 代表 sql server,mysql,oracle 優點 容易理解,二維表的結構貼近現實世界 使用方便,通用的sql語句使得操作關係型資料庫非常方便 易於維護,資料庫的acid屬性,大大降低了資料冗餘和不一致性 缺點 讀寫效能差,尤其是海量資料的高效...