1. 程式人生 > >資料庫的簡介與型別

資料庫的簡介與型別

1.1 什麼是資料庫?

簡單的說,資料庫(英文Dtabase)就是一個存放資料的倉庫,這個倉庫是按照一定的資料結果(資料結構是指資料的組織形式或資料之間的聯絡)來組織、儲存的、我們可以通過資料庫提供的多種方法來管理資料庫裡的資料更簡單的形象理解,資料庫和我們生活中存放雜物的倉庫性質一樣,區別只是存放的東西不同。

1.2 資料庫的種類

早期比較流行的資料庫模型有三種,分別為層次式資料庫、網路式資料庫和關係型資料庫。而在當今的網際網路中,最常用的資料庫模型主要是兩種,即關係型資料庫和非關係型資料庫

1.3 關係型資料庫介紹

(1)關係型資料庫由來

網路資料庫和層次資料庫很好地解決了資料的集中和共享問題,但是在資料獨立性和抽象級別上仍有很大欠缺。使用者對這兩種資料庫進行存取時,依然需要明確資料的儲存結構,支出儲存路徑。而關係資料庫就可以較好地解決這些問題 

(2)關係型資料庫介紹

關係型資料庫模型是把複雜的資料結構歸結為簡單的二元關係(即二維表格形式)。 
  Oracle 在資料庫領域裡上升到了霸主地位,形成每年高達數百億美元的龐大市場,而MySQL也是不容忽視的資料庫,以至於被Oracle重金收購 

MySQL 網際網路市場 
Oracle 傳統企業 

(3)關係型資料庫舉例

表格

1.4 什麼是關係型資料庫

二維表格 

  1. Mysql和Oracle資料庫,網際網路運維最常用的是MySQL 
  2. 通過SQL結構化查詢語句儲存資料 
  3. 保持資料一致性方面很強,ACID理論

1.5 非關係型資料庫介紹

1.6 非關係型資料庫誕生背景

非關係型資料庫也被成為NoSQL資料庫,NOSQL的本意是“Not Olnly SQL” 


  指的是非關係型資料庫,而不是“No SQL”的意思,因此,NoSQL的產生並不是要徹底地否定非關係型資料庫,而是作為傳統關係型資料庫的一個有效補充。NOSQL資料庫在特定的場景下可以發揮出難以想象的高效率和高效能。 

隨著網際網路Web2.0網站的星期,傳統的關係型資料庫在應付web2,0網站,特別是對於規模日益擴大的海量資料,超大規模和高併發的微博、微信、SNS型別的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題。 

例如:傳統的關係型資料庫IO瓶頸、效能瓶頸都難以有效突破,於是出現了大批針對特定場景,以高效能和使用便利為目的功能特異化的資料庫產品。NOSQL(非關係型)類的資料就是在這樣的情景下誕生並得到了非常迅速的發展 

高效能、高併發、對資料一致性要求不高 
  開源的NoSQL體系,如Facebook的Cassandra,Apache的HBase,也得到了廣泛認同,Redis,mongb也逐漸越來越受到各類大中小型公司的歡迎和追捧 

NOSQL非關係型資料庫小結: 
1、NOSQL不是否定關係資料庫,而是作為關係資料庫的一個重要補充 
2、NOSQL為了高效能、高併發而生,忽略影響高效能,高併發的功能 
3、NOSQL典型產品memcached (純記憶體),redis(持久化快取),mongodb(文件的資料庫) 

1.7 非關係型資料庫種類

(1)鍵值(Key-Value)儲存資料庫

k1—>資料 
k2—>資料 
  鍵值資料庫就類似傳統語言中使用雜湊表,可以通過key來新增、查詢或刪除資料,因為使用key主鍵訪問,所以會獲得很高的效能及擴充套件性 

鍵值(Key-Value)資料庫主要是使用一個雜湊表,這個表中有一個特定的鍵和一個指標指向特定的資料。Key/value模型對於IT系統來說的優勢在於簡單、易部署、高併發 

典型產品:Memcached、Redis、MemcacheDB、BerkeleyDB 

(2)列儲存(Column-oriedted)資料庫 ======>瞭解即可,一般公司用不到

   列儲存資料庫將資料庫儲存在列族(column family)中,一個列族儲存經常被一起查詢的相關資料。舉個例子,如果我們有一個Person類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。

這部分資料庫通常用來分散式儲存的海量資料,鍵仍然存在,但是他們的特點是指向了多個列。 
典型產品:Cassandra,HBase 

(3)面向文件(Document-Oriented)資料庫

面向文件資料庫會將以文件的形式儲存。每個文件都是自包含的資料單元,是一系列資料項的集合。每個資料項都有一個名稱與對應的值,值既可以是簡單的資料型別,如字串、數字和日期等;也可以是複雜的型別,如有序列表和關係物件。資料儲存的最小單位是文件,同一個表中儲存的文件屬性可以是不同的,資料可以使用XML、JSON或者JSONB等多種形式儲存 

典型產品:MorgoDB、CouchDB 
(4)圖形(Graph)資料庫

1.8 常用關係型資料庫產品介紹

1.8.1 oracle資料庫

Oracle前身叫SDL、由Larry Ellison和兩個變成任意在1977創辦,他們開發了主機的拳頭產品,在市場上大量銷售。Oracle公司是最早開發關係型資料庫的廠商之一,其產品支援最廣泛的作業系統平臺。目前Oracle關係資料庫產品的市場佔有率數一數二 
Oracle公司是目前全球最大的資料庫軟體公司,也是近年業務增長極為迅速的軟體提供與服務商 
主要應用範圍:傳統大企業、大公司、政府、金融、證券等。 
版本升級:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c

關係型資料庫分類

1.8.2 MySQL

 
MySQL被廣泛的應用在Internet上的大中小型網站中。由於體積小速度快總體擁有成本低,開放原始碼

1.8.3 MariaDB資料庫

 
  MAriaDB資料庫管理系統是MySQL資料庫的一個分支,主要由開元社群維護,採用GPL授權許可。開發這個MariaDB的原因之一是:甲骨文公司收購了MySQL後,有MySQL閉源的潛在風險,因此MySQL開元社群採用分支的方式來避開這個風險。 

MariaDB基於事務的Maria儲存引擎,替換了MySQL的MyISAM的儲存引擎,它使用了PerconaXtraDB(InnoDB的變體)這個版本還包括了PrimeBase XT (PBXT)和Federated X儲存引擎。

1.8.4 SQL Server資料庫

Microsoft SQL Server是微軟公司開發的大型關係資料庫系統。SQL Server的功能比較全面,效率高,可以作為中型企業或單位的資料庫平臺。SQL Server可以與Winodws作業系統緊密整合,不論是應用程式開發速度還是系統事務處理執行速度,都得到較大的提升,對於在Windows平臺上開發的各種企業級資訊管理系統來說,不論是C/S(客戶機/伺服器)架構還是B/S(瀏覽器/伺服器)架構。SQL Server都是一個很好的選擇。SQL Server的缺點是隻能在Windows系統下執行

1.8.5 Access資料庫

Access是入門級小型桌面資料庫,效能安全性都很一般,可供個人管理或小型企業只用 
Access不是資料庫語言,只是一個數據庫程式,目前最新版本為Office 2007,其特點主要如下: 
(1)完善地管理各種資料庫物件,具有強大的資料組織,使用者管理、安全檢查等功能 
(2)強大的資料處理功能,在一個工作組級別的網路環境中,使用Access開發的多使用者管理系統具有傳統的XSASE(DBASE、FoxBASE的統稱)資料庫系統所無法實現的客戶伺服器(Ckient/Server)結構和響應的資料庫安全機制,Access具備了許多先進的大型資料管理管理系統所具備的特徵。 
(3)可以方便地生成各種資料物件,利用儲存的資料建立窗體和報表 
(4)作為Office套件的一部分,可以與Office整合,實現無縫連線 
(5)能夠利用Web檢索和釋出資料,實現與Internet的連線,Access主要適用於中小企業應用系統,或作為客戶機/伺服器系統中的客戶端資料庫。

1.9 其他不常用關係型資料庫

DB2,PostgreSQL,Informix,Sybase等。這些關係型資料庫逐步的淡化了普通運維的實現,特別是網際網路公司幾乎見不到

常用非關係型資料庫產品介紹 

1.9.1 memcached(key-value)

 
  Memcaced是一個開源的高效能的具有分散式記憶體物件的快取系統。通過它可以減輕資料庫負載,加速動態的web應用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年開發完成。目前全球有非常多的使用者都在使用它來架構主機的大負載網站或提升主機的高訪問網站的響應速度。注意:Memcache 是這個專案的名稱,而Memcached是服務端的主程式檔名。 
快取一般用來儲存一些程序被存取的物件或資料,通過快取來存取物件或資料要比在磁碟上存取塊很多,前者是記憶體,後者是磁碟、Memcached是一種純記憶體快取系統,把經常存取的物件或資料快取在memcached的記憶體中,這些被快取的資料被程式通過API的方式被讀取,memcached裡面的資料就像一張巨大的hash表,資料以key-value對的方式存在。Memcached通過快取經常被存取的物件或資料,從而減輕頻繁讀取資料庫的壓力,提高網站的響應速度,構建出快速更快的可擴充套件的Web應用。 

由於memcached為純記憶體快取軟體,一旦重啟所有資料都會丟失,因此,新浪網基於Memcached開發了一個開源專案Memcachedb。通過為Memcached增加Berkeley DB的特久化儲存機制和非同步主複製機制,使Memcached具備了事務恢復能力、持久化資料能力和分散式複製能力,memcached非常適合需要超高效能讀寫速度、持久化儲存的應用場景,但是最近幾年逐漸被其他的持久化產品替代如Redis

Memcached小結: 
1、key-value行資料庫 
2、純記憶體資料庫 
3、持久化memcachedb(sina)

1.9.2 Redis(key-value)

 
  和Memcached類似,redis也是一個key-value型儲存系統。但redis支援的儲存value型別相對更多,包括string(字串)、list(連結串列)、set(集合)和zset(有序集合)等。這些資料型別都支援push/pop、add/remove及取交集、並集和差集及更豐富的操作,而且這些操作都是原子性的。為了保證效率,redis的資料都是快取在記憶體中。區別是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在基礎上實現了master-slave(主從)同步。 

redis是一個高效能的key-value資料庫。redis的出現、很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關係資料庫起到很好的補充作用。它提供了Python、Ruby、Erlang、PHP客戶端,使用方便。 

redis特點: 
1)支援記憶體快取,這個功能相當於memcached 
2)支援持久化儲存,這個功能相當於memcachedb,ttserver 
3)資料庫型別更豐富。比其他key-value庫功能更強 
4)支援主從叢集、分散式 
5)支援佇列等特殊功能 
應用:快取從存取memcached更改存取redis

1.9.3 MongoDB(Document-oriented)

 
  MongoDB是一個介於關係型資料庫和非關係型資料庫之間的產品,是非關係型資料庫當中功能最豐富,最像關係資料庫的。他支援的資料庫結構非常鬆散,類似json的bjson格式,因此可以儲存比較複雜的資料型別。Mongodb最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。 

特點: 
高效能、易部署、易使用、儲存資料非常方便 
主要功能特性: 

  1. 面向集合儲存,易儲存物件型別的資料 
  2. “面向集合”(Collenction-Orented)意思是資料庫被分組儲存在資料集中,被稱為一個集合(Collenction)每個 集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文件,集合的概念類似關係型資料庫(RDBMS)裡的表(table)不同的是它不需要定義任何模式(schema) 
  3. 模式自由 
  4. 模式自由(schema-free)意為著儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。 
  5. 支援動態查詢 
  6. 支援完全索引,包含內部物件 
  7. 支援查詢 
  8. 支援複製和故障恢復 
  9. 使用高效的二進位制資料儲存,包括大型物件 
  10. 自動處理碎片、以支援雲端計算層次的擴充套件性

1.9.4 Cassandra(Column-oriented)

Apache Cassndra是一套開源分散式Key-Value儲存系統。它最初由Facebook開發,用於儲存特別大的資料。Facebook目前在使用此係統。 
主要特點: 

  1. 分散式 
  2. 基於column的結構化 
  3. 高伸展性 
  4. Cassandra的主要特點就是它不是一個數據庫,而是由一堆資料庫節點共同構成一個分散式網路服務,對Cassandra的一個寫操作,會被複制到其他節點上去,對Cassandra的讀操作。也會被路由到某個節點上面去讀取。 

Cassandir是一個混合型的非關係的資料庫,類似於Google的BigTable。其主要功能比Dynomie(分散式的key-value儲存系統)更豐富,Cassandra最初由Facebook開發,後轉變成了開源專案。

1.9.5 其他不常用非關係型資料庫

HBase、MemcacheDB、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver) 
ttserver 持久化輸出,缺點儲存2千萬條 效能下降(由日本人發明)

2.1 Mysql資料庫介紹

2.2 Mysql資料庫介紹

MySQL是網際網路領域裡一款最要的,深受廣大使用者歡迎的開源關係型資料庫軟體之一、由瑞典MySQL AB公司開發與維護。2006年。MySQL AB公司被SUN公司收購,2008年,SUN公司又被傳統資料資料庫領域大佬甲骨文(oracle)公司收購,因此,MySQL資料庫軟體目前屬於Oracle公司,成為傳統資料庫領域老大的又一個數據庫產品,甲骨文公司收購MySQL後,使得自身在商業資料庫與開源軟體領域市場佔有份額都躍居第一的位置,這樣的格局,引起了很多人的擔憂,這種擔憂直接導致後來的Mysql分支資料庫MariaDB的誕生於發展。 

MySQL是一種關係型資料庫管理系統,關係型資料庫的特點是將資料儲存在不同的表中,在將這些表放入不同的資料庫中,而不是將所有資料統一放在一個大倉庫裡,這樣的設計增加了MySQL的讀取速度,靈活性和可管理型也得到了很大提高,訪問以及管理MySQL資料庫的最常用標準化語言為SQL結構化查詢語句

2.3 為什麼選擇MySQL資料庫

原因可能有以下幾點: 
(1) MySQL效能卓越、服務穩定,很少出現異常宕機 
(2) MySQL開放原始碼且無版權制約,自主性及使用成本低 
(3) MySQL歷史悠久,社群及使用者活躍,遇到問題可以解決 
(4) MySQL軟體體積小,安裝使用簡單,並且易於文虎,安裝及維護成本低 
(5) MySQL品牌口碑效應,使得企業無需考慮就直接用,LAMP、LEMP流行架構 
(6) MySQL支援多用作業系統,提供多種API介面,支援多用開發語言,特別對流行的PHP語言有很好的支援

2.4 MySQL資料庫分類與版本升級

MySQL資料庫的,其釋出的MySQL版本採用雙授權政策,和大多數開源產品的路線一樣,分為社群版和商業版,而這兩個版本又各自分四個版本依次釋出,這四個版本為:Alpha版、Beta版、RC版和GA版本

MySQL資料庫商業版與社群辦區別 

MySQL商業版與社群辦之間的區別在於: 
1、商業版本組織管理與測試環節控制更嚴格,穩定性方面,會比社群版本更穩定 
2、MySQL是成熟產品,商業版與社群辦之間效能方面相差不大 
3、商業版不遵守GPL協議,社群版遵守GPL協議可以免費試用 
4、使用商業版後可以購買相關的服務,享受7*24小時技術支援以及及時打補丁等服務,但是使用者必須為此支援服務費用 
5、社群版本的維護服務只能靠社群提供,無法像商業版本獲得故障及補丁解決服務了,但是社群版是完全免費的方式,社群版的服務質量與時效性等方面就無法與MySQL AB公司提供的服務相比了

2.5 MySQL資料庫四種釋出版本介紹

(1)Alpha版 
Alpha版一般只在開發的公司內部執行,不對外公開 
(2)Beta版 
Beta版一般是完成功能的開發與所有的測試工作之後的產品,不會存在較大的功能或效能BUG,並且邀請或提供給使用者體驗與測試,以便更全面地測試軟體的問題。 
(3)RC版 
RC版屬於生產環境釋出之前的一個小版本或稱候選版,是根據Beta版本測試結果,收集到的BUG或缺陷之處等收集到的資訊,進行修復和完善之後的一版產品 
(4)GA版 
GA版是軟體產品正式釋出的版本,也稱生產版本的產品

2.6 MySQL產品路線

為了提高MySQL產品的競爭優勢,以及提高效能,降低開發維護成本等原因。同時方便企業使用者更精準的選擇適合的版本用於主機的企業生產環境中, 

MySQL在發展到5.1版本系列之後,重新規劃為三條產品線

第一條-5.0.xx到5.1.xx產品線系列介紹 
MySQL 5.1是當前穩定(產品質量)釋出系列。只針對漏洞修復重新發布:沒有增加會影響穩定性的新功能。 MySQL 5.1:Previous stable(production-quality)release MySQL 5.0是前一穩定(產品質量)釋出系列。只針對嚴重漏洞修復和安全修復重新發布:沒有增加會影響該系列的重要功能。 

MySQL 5.0:Older stable release nearing the end of the product lifecycle

第二條-5.4.xx開始-到了5.7.xx產品線系列介紹 
為了更好地整合MySQL AB公司社群和第三方公司開發的新儲存引擎,以及吸收新的實現演算法等,從而更好地支援SMP架構,提高效能而做了大量的程式碼重構,版本編號從5.4.xx開始,目前發展到了5.6.x MySQL 5.5:LatestGeneral Availability(Production)release 
主流:網際網路公司用MySQL.5.5

第三條-6.0.xx到7.1.xx產品線系列介紹 
為了更好地推廣MySQL Cluster版本,以及提高MySQL Cluster的效能和穩定性,以及功能改進和增加,以及改動MySQL基礎功能,使其對Cluster儲存引擎提供更有效的支援與優化。版本號為6.0.xx開發。目前發展到7.1.xx 

2.7 MySQL資料庫軟體命名介紹

   MySQL資料庫軟體的名字是由3個數字和一個字尾組成的版本號。

例如,像mysql-5.0.56.tar.gz的版本號解釋: 

(1) 第1個數字(5)是主版本號,描述了檔案格式。所有版本5發行都有相同檔案格式 
(2) 第2個數字(0)是發行級別。主版本號和發行級別組合到一起便構成了髮型序列號。 
(3) 第3個數字(56)是在此係列的版本號,隨每個新分發遞增,通常你需要已經選擇的發行(release)的最新版本 
(4) 字尾顯示發行的穩定級別,通過一系列字尾顯示如何改進穩定性,可能的字尾有:*alpha版

2.8 MySQL版本選擇最終建議

企業生產場景選擇MySQL資料庫建議: 
1) 穩定版:選擇開源的社群版的穩定版GA版本 
2) 產品線:可以選擇5.1或5.5 網際網路公司主流5.5,其次是5.1和5.6 
3) 選擇MySQL資料庫GA版釋出後6個月以上的GA版本。 
4)要選擇前後幾個月沒有大的BUG修復的版本,而不是大量修復BUG的集中版本 
5)最好向後較長時間沒有更新發布的版本 
6)要考慮開發人員開發程式使用的版本是否相容你選的版本 
7)作為內部開發人員開發測試資料庫環境,跑大概3-6個月的事件 
8)優先企業非核心業務採用新版本的資料庫GA版本軟體 
9)向DBA高手請教,或者在及技術氛圍好的群裡和大家一起交流,使用真正的高手們用過的好用的GA版本產品
10)若是沒有重要的功能BUG或效能瓶頸,則可以開始考慮作為任何任務資料服務的後端資料庫軟體

<

p style=”margin-top: 10px; font-size: 15px; font-family: Helvetica, ‘Hiragino Sans GB’, 微軟雅黑, ‘Microsoft YaHei UI’, SimSun, SimHei, arial, sans-serif; line-height: 24px;”>yum/rpm安裝適合對資料庫要求不太高的場合,例如併發布大,公司內部,企業內部的一些應用場景。大的門戶把原始碼根據企業需求製作成rpm,搭建rpm倉庫。