天天看點

資料庫軟體概述

1. 關系型資料庫

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

關系模型是在1970年由IBM的研究員E.F.Codd博士首先提出的,在之後的幾十年中,關系模型的概念得到了充分的發展并逐漸成為主流資料庫結構的主流模型。

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

關系模型中常用的概念:

關系:可以了解為一張二維表,每個關系都具有一個關系名,就是通常說的表名

元組:可以了解為二維表中的一行,在資料庫中經常被稱為記錄

屬性:可以了解為二維表中的一列,在資料庫中經常被稱為字段

域:屬性的取值範圍,也就是資料庫中某一列的取值限制

關鍵字:一組可以唯一辨別元組的屬性,資料庫中常稱為主鍵,由一個或多個列組成

關系模式:指對關系的描述。其格式為:關系名(屬性1,屬性2, ... ... ,屬性N),在資料庫中成為表結構

關系型資料庫的優點:

容易了解:二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更容易了解

使用友善:通用的SQL語言使得操作關系型資料庫非常友善

易于維護:豐富的完整性(實體完整性、參照完整性和使用者定義的完整性)大大減低了資料備援和資料不一緻的機率

2. 關系型資料庫瓶頸

高并發讀寫需求

網站的使用者并發性非常高,往往達到每秒上萬次讀寫請求,對于傳統關系型資料庫來說,硬碟I/O是一個很大的瓶頸

海量資料的高效率讀寫

網站每天産生的資料量是巨大的,對于關系型資料庫來說,在一張包含海量資料的表中查詢,效率是非常低的

高擴充性和可用性

在基于web的結構當中,資料庫是最難進行橫向擴充的,當一個應用系統的使用者量和通路量與日俱增的時候,資料庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬體和服務節點來擴充性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行更新和擴充是非常痛苦的事情,往往需要停機維護和資料遷移。

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

事務一緻性

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

讀寫實時性

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

複雜SQL,特别是多表關聯查詢

任何大資料量的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資料庫:

key-value資料庫的主要特點即使具有極高的并發讀寫性能,Redis,Tokyo Cabinet,Flare就是這類的代表

面向海量資料通路的面向文檔資料庫:

這類資料庫的特點是,可以在海量的資料中快速的查詢資料,典型代表為MongoDB以及CouchDB

面向可擴充性的分布式資料庫:

這類資料庫想解決的問題就是傳統資料庫存在可擴充性上的缺陷,這類資料庫可以适應資料量的增加以及資料結構的變化

繼續閱讀