標籤:mysql
1. 關係型資料庫
關係型資料庫,是指採用了關聯式模式來組織資料的資料庫。
關聯式模式是在1970年由IBM的研究員E.F.Codd博士首先提出的,在之後的幾十年中,關聯式模式的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。
簡單來說,關聯式模式指的就是二維表格模型,而一個關係型資料庫就是由二維表及其之間的聯絡所組成的一個資料群組織。
關聯式模式中常用的概念:
關係:可以理解為一張二維表,每個關係都具有一個關係名,就是通常說的表名
元組:可以理解為二維表中的一行,在資料庫中經常被稱為記錄
屬性:可以理解為二維表中的一列,在資料庫中經常被稱為欄位
域:屬性的取值範圍,也就是資料庫中某一列的取值限制
關鍵字:一組可以唯一標識元組的屬性,資料庫中常稱為主鍵,由一個或多個列組成
關係模式:指對關係的描述。其格式為:關係名(屬性1,屬性2, ... ... ,屬性N),在資料庫中成為表結構
關係型資料庫的優點:
容易理解:二維表結構是非常貼近邏輯世界的一個概念,關聯式模式相對網狀、層次等其他模型來說更容易理解
使用方便:通用的SQL語言使得操作關係型資料庫非常方便
易於維護:豐富的完整性(實體完整性、參照完整性和使用者定義的完整性)大大減低了資料冗餘和資料不一致的機率
2. 關係型資料庫瓶頸
網站的使用者並發性非常高,往往達到每秒上萬次讀寫請求,對於傳統關係型資料庫來說,硬碟I/O是一個很大的瓶頸
網站每天產生的資料量是巨大的,對於關係型資料庫來說,在一張包含海量資料的表中查詢,效率是非常低的
在基於web的結構當中,資料庫是最難進行橫向擴充的,當一個應用系統的使用者量和訪問量與日俱增的時候,資料庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬體和服務節點來擴充性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴充是非常痛苦的事情,往往需要停機維護和資料移轉。
對網站來說,關係型資料庫的很多特性不再需要了:
關係型資料庫在對事物一致性的維護中有很大的開銷,而現在很多web2.0系統對事物的讀寫一致性都不高
對關聯式資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出這條資料的,但是對於很多web應用來說,並不要求這麼高的即時性,比如發一條訊息之後,過幾秒乃至十幾秒之後才看到這條動態是完全可以接受的
任何大資料量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的資料分析類型的複雜SQL報表查詢,特別是SNS類型的網站,從需求以及產品階級角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能極大的弱化了
在關係型資料庫中,導致效能欠佳的最主要原因是多表的關聯查詢,以及複雜的資料分析類型的複雜SQL報表查詢。為了保證資料庫的ACID特性,我們必須盡量按照其要求的範式進行設計,關係型資料庫中的表都是儲存一個格式化的資料結構。每個元組欄位的組成都是一樣,即使不是每個元組都需要所有的欄位,但資料庫會為每個元組分配所有的欄位,這樣的結構可以便於標語表之間進行連結等操作,但從另一個角度來說它也是關係型資料庫效能瓶頸的一個因素。
3.mysql與mariadb
MySQL Mariadb這2款是開源軟體 作者是同一個人。
簡單介紹一下開源軟體的概念
很多人認為開源軟體=免費。其實是不準確的。開源的含義是可以自由傳播的軟體。包括修改後的軟體都是開放的。說到這裡不得不提的是GPL協議(GNU通用公用許可證)。通過此協議,規定了使用開源軟體的權利和義務。通俗來講。就是說修改完開源軟體之後的軟體也是開源的。如果變為收費版的商業軟體,那麼就會違反GPL協議。將會收到相應的制裁。
所以開源軟體極大的提升了人類的潛能。造成了it界百花齊放,飛速發展
4. 關係型資料庫 V.S. 非關係型資料庫
關係型資料庫的最大特點就是事務的一致性:傳統的關係型資料庫讀寫操作都是事務的,具有ACID的特點,這個特性使得關係型資料庫可以用於幾乎所有對一致性有要求的系統中,如典型的銀行系統。
但是,在網頁應用中,尤其是SNS應用中,一致性卻不是顯得那麼重要,使用者A看到的內容和使用者B看到同一使用者C內容更新不一致是可以容忍的,或者說,兩個人看到同一好友的資料更新的時間差那麼幾秒是可以容忍的,因此,關係型資料庫的最大特點在這裡已經無用武之地,起碼不是那麼重要了。
相反地,關係型資料庫為了維護一致性所付出的巨大代價就是其讀寫效能比較差,而像微博、facebook這類SNS的應用,對並發讀寫能力要求極高,關係型資料庫已經無法應付(在讀方面,傳統上為了克服關係型資料庫缺陷,提高效能,都是增加一級memcache來靜態化網頁,而在SNS中,變化太快,memchache已經無能為力了),因此,必須用新的一種資料結構儲存來代替關聯式資料庫。
關聯式資料庫的另一個特點就是其具有固定的表結構,因此,其擴充性極差,而在SNS中,系統的升級,功能的增加,往往意味著資料結構巨大變動,這一點關係型資料庫也難以應付,需要新的結構化資料存放區。
於是,非關係型資料庫應運而生,由於不可能用一種資料結構化儲存應付所有的新的需求,因此,非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。
必須強調的是,資料的持久儲存,尤其是海量資料的持久儲存,還是需要一種關聯式資料庫這員老將。
5. 非關係型資料庫分類
由於非關係型資料庫本身天然的多樣性,以及出現的時間較短,因此,不想關係型資料庫,有幾種資料庫能夠一統江山,非關係型資料庫非常多,並且大部分都是開源的。
這些資料庫中,其實實現大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,因此,對於該類應用,具有極高的效能。依據結構化方法以及應用場合的不同,主要分為以下幾類:
key-value資料庫的主要特點即使具有極高的並發讀寫效能,Redis,Tokyo Cabinet,Flare就是這類的代表
這類資料庫的特點是,可以在海量的資料中快速的查詢資料,典型代表為MongoDB以及CouchDB
這類資料庫想解決的問題就是傳統資料庫存在可擴充性上的缺陷,這類資料庫可以適應資料量的增加以及資料結構的變化
資料庫軟體概述