Mysql 數據庫的介紹和分類(學習筆記一)

數據庫介紹及常見數據庫分類

1.1?數據庫介紹

1.1.1?什么是數據庫?

簡單的說,數據庫(因為Database)就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯系)來組織、存儲的,我們可以通過數據庫提供的多種方式來管理數據庫里的數據。

更簡單形象的理解,數據庫和我們生活中存放雜物的儲物間倉庫性質一樣,區別只是存放的東西不同,雜物間存放實體的物件,而數據庫里存放的是數據。

數據庫誕生于距距現在大概六十多年前,隨著信息技術的發展和人類社會的不斷進步,特別是2000年以后,數據庫不在僅僅是存儲和管理數據了,而轉變成用戶所需要的各種數據管理方式。數據庫有很多種類和功能,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各方面得到了廣泛的應用。

1.2?數據庫的種類

按照早期的數據庫理論,比較流行的數據庫模型有三種,分別為層次式數據庫、網絡式數據庫和關系型數據庫(前兩者已經基本消失)。而當今的互聯網中,最常用的數據庫模型主要是兩種,即關系型數據庫和非關系型數據庫。

1.2.1?關系型數據庫介紹

q?關系型數據庫的由來

雖然網狀數據庫和層次數據庫已經很好地解決了數據的集中和共享問題,但是在數據獨立性和抽象級別上仍有很大欠缺,而關系型數據庫就可以較好地解決這些問題。

q?關系型數據庫介紹

關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。在關系數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過對這些關聯表的表格分類、合并、連接或選取等運算來實現數據的管理。

關系型數據庫誕生距今已有40多年了,從理論產生發展到現實產品,例如:MySQL和Oracle數據庫。Oracle在數據庫領域里上升到了霸主地位,形成每年高達數百億美元的龐大產業市場,而MySQL也是不容忽視的數據庫,以至于被Oracle重金收購(先被SUN收購,然后SUN被Oracle收購,據說MySQL賣了10億美金)。

q?關系型數據庫表格之間的關系舉例

表1:學生表

學號姓名年齡

S001張三16

S002李四17

S003王五18

S004趙六19


表2:課程表

課程號課程名學分

C1001語文5

C1002數學5

C1003外語5

C1004物理4


表1:學生選課表

學號課程號成績

S001C100180

S002C100290

S003C100359

S004C100466

q?小結:什么是關系型數據庫

1、二維的表格;

2、市場占有量較大的位MySQL和Oracle數據庫;

3、通過SQL結構化查詢語言來存取、管理數據;

4、保持數據一致性方面很強。ACID理論?

1.2.2?非關系型數據庫介紹

q?非關系型數據庫誕生的背景

非關系型數據庫也被稱為NoSQL數據庫,NoSQL的本意是“Not Only SQL”,指的是非關系型數據庫,而不是“No SQL”的意思(沒有SQL語句?),因此,NoSQL的產生并不是要徹底否定關系型數據庫,而是作為傳統關系型數據庫的一個有效補充。NoSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。

隨著互聯網web2.0(以前的基本上是靜態網頁,而現在是交互的網站)網站的興起,傳統的關系型數據庫在應付web2.0網站,特別是對于規模日益擴大的海量數據,超大規模和高并發的微博、微信、SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:傳統的關系型數據庫IO瓶頸、性能瓶頸都難以有效突破,于是開始出現了大批針對特定場景,以高性能和使用便利為目的的功能特異化的數據庫產品,NoSQL(非關系型)類的數據庫就是在這樣的情景中誕生并得到了非常迅速的發展。NoSQL不將數據的一致性作為重點,或者是作為次重點。

NoSQL是非關系型數據庫的廣義定義。它打破了長久以來關系型數據庫與ACID理論大統一的局面。NoSQL數據存儲不需要固定的表結構,通常也不存在連接操作。在大數據存取上具備關系型數據庫無法比擬的性能優勢。該術語(NoSQL)在2009年初得到了廣泛認同。當今的應用體系結構需要數據存儲在橫向伸縮性上能夠滿足需求。而NoSQL存儲就是為了實現這個需求而誕生的。

q?NOSQL非關系型數據庫小結:

1、NOSQL不是否定關系數據庫,而是作為關系數據庫的一個重要補充。

2、NOSQL為了高性能、高并發而生,忽略影響高性能、高并發的功能。

3、NOSQL典型產品memcached(純內存),redis(持久化緩存),mongodb(面向文檔)

1.2.3?非關系型數據庫種類

(1)?鍵值(Key-Value)存儲數據庫

鍵值數據庫就類似傳統語言中使用的哈希表。可以通過key來添加、查詢或者刪除數據,因為使用key主鍵訪問,所以會獲得很高的性能及擴展性。

鍵值(Key-Value)數據庫主要是使用一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對于IT系統來說的優勢在于簡單、易部署、高并發。

典型產品:Memcached、Redis、MemcacheDB、Berkeley DB

(2)?列存儲(Column-oriented)數據庫

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

這部分數據庫通常是用來應對分布式存儲的海量數據。鍵仍然存在,但是他們的特點是指向了多個列。這些列是由列家族來安排的。

典型產品:Hbase、Cassandra

(3)?面向文檔數據庫

文檔型數據庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相類似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型數據庫可以看作是鍵值數據庫的升級版,允許之間嵌套鍵值。而且文檔型數據庫比鍵值數據庫的查詢效率更高。

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

典型產品:MongoDB、CouchDB

(4)?圖形數據庫

圖形數據庫允許我們將數據已圖的方式存儲。實體會被作為定點,而實體之間的關系則會被作為邊。比如我們有三個實體,Steve Jobs,Apple和Next,則會有兩個”Founded by”的邊將Apple和Next連接到Steve Jobs。

圖形結構的數據庫同其他行列以及剛性結構的SQL數據庫不同,它是使用靈活的圖形模型,并且能擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。

典型的產品有:Neo4J、InfoGrid。

1.3?常用關系型數據庫產品介紹

1.3.1 Oracle數據庫

Oracle前生叫SDL,由Larry Ellison和另外兩個編程人員在1977創辦,他們開發了自己的拳頭產品,在市場上大量銷售,1979年,Oracle公司引入了第一個商用SQL關系型數據庫管理系統。Oracle公司是最早開發關系型數據庫的廠商之一,其產品支持最廣泛的操作系統平臺。目前Oracle關系型數據庫產品的市場占有率數一數二。

Oracle公司是目前全球最大的數據庫軟件公司,也是近年業務增長極為迅速的軟件提供與服務商。

主要應用范圍:傳統大企業,大公司,政府,金融,證券等等。

版本升級:Oracle8i,Oracle9i,Oracle10g,Oracle11g,Oracle12c

1.3.2 MySQL數據庫

MySQL數據庫是一個中小型關系型數據庫管理系統,軟件開發者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購,后Sun公司又被oracle公司收購。目前MySQL被廣泛地應用在Internet上的大中小型網站中。由于體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多大中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站數據庫,甚至國內知名的淘寶網頁選擇棄用ORACLE而更換為更開放的MySQL。

MySQL數據庫主要應用范圍:互聯網領域、大中小型網站,游戲公司,電商平臺等等。

1.3.3 MariaDB

MariaDB數據庫管理系統是MySQL數據庫的一個分支,主要由開源社區維護,采用CPL授權許可。開發這個MariaDB數據庫分支的可能原因之一是:甲骨文公司收購了MySQL之后,有將MySQL閉源的潛在風險,因此MySQL開源社區采用分支的方式來避開這個風險。(CentOS7已經將集成的MySQL替換為了MariaDB)

開發MariaDB數據庫的目的是完全兼容MySQL數據庫,包括API和命令行,使之能輕松的成為MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。MariaDB由MySQL的創始人Michael Widenius主導開發,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此后,隨著SUN被甲骨文收購,MySQL的所有權也落入了Oracle的手中。MariaDB數據庫的名稱來自MySQL的創始人Michael Widenius的女兒Maria的名字。

MariaDB基于事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用Percona的XtraDB。這個版本還包括了PrimeBase XT和FederatedX存儲引擎。

MariaDB數據庫直到5.5八本,均依照MySQL的版本發行。因此,使用MariaDB5.5的人會從MySQL5.5中了解到MariaDB的所有功能。

1.3.4 SQL Server

Microsoft SQL Server是微軟公司開發的大型關系型數據庫系統。SQL Server的功能比較全面,效率高,可以作為中型企業或者單位的數據庫平臺。SQL Server可以與Windows操作系統緊密集成,不論是應用程序開發速度還是系統事務處理運行速度,都能得到較大的提升。對于在Windows品臺上開發的各種企業級信息管理系統來說,不論是C/S架構還是B/S架構,SQL Server都是一個很好的選擇。SQL Server的缺點是只能在Windows系統下運行。

主要應用范圍:部分企業電商,使用windows服務器平臺的企業。

1.3.5 Access

美國Microsoft公司于1994年推出的微機數據庫管理系統。它具有界面友好、易學易用、開發簡單、接口靈活等特點,是典型的新一代桌面關系型數據庫管理系統。它結合了Microsoft Jet Database Engine和圖形用戶界面兩項特點,是Microsoft Office的成員之一。Access能夠存取Access/Jet、Microsoft SQL Server、Oracle,或者任何ODBC兼容數據庫的資料。

Access是入門級小型桌面數據庫,性能安全性都很一般。可供個人管理或小型網站使用

1.3.6?其他數據庫

DB2,PostgreSQL,Informix,Sybase等。

1.4?常用的非關系型數據庫產品介紹

1.4.1 Memcached(key-value)

Memcached是一個開源的、高性能的、具有分布式內存對象的緩存系統。通過它可以減輕數據庫負載,加速動態的Web應用,最初版本由LiveJournal的Brad Fitzpatrick在2003年開發完成。目前全球有非常多的用戶都在使用它來構建自己的大負載網站或提高自己的高訪問網站的響應速度。注意:Memcache是這個項目的名稱,而Memcached是服務器端的主程序文件名。

緩存一般用來保存一些經常被讀取的對象或數據(例如,瀏覽器會把經常訪問的網頁緩存起來一樣),通過緩存來存取對象或數據要比在磁盤上存取快很多,前者是內存,后者是磁盤。Memcached是一種純內存緩存系統,把經常存取的對象或數據緩存在Memcached的內存中,這些被緩存的數據被程序通過API的方式被存取,Memcached里面的數據就像一張巨大的HASH表,數據以key-value對的方式存在。Memcached通過緩存經常被存取的對象或數據,從而減輕頻繁讀取數據庫的壓力,提高網站的響應速度,構建出速度更快的可擴展的Web應用。官網:http://memcached.org/

由于Memcached為純內存緩存軟件,一旦重啟所有數據都會丟失,因此,新浪網基于Memcached開發了一個開源項目Memcachedb。通過為Memcached增加Berkeley DB的持久化存儲機制和異步主輔復制機制,使Memcached具備了事務恢復能力、持久化數據存儲能力和分布式復制能力,Memcachedb非常適合需要在超高性能讀寫速度、持久化保存的應用場景,但是最近幾年逐漸被其他的持久化產品代替,例如redis。

q?小結:

1、key-value型數據庫

2、純內存數據庫,重啟丟失數據

3、持久化產品memcachedb(sina)

1.4.2 redis(key-value)

和Memcached類似,redis也是一個key-value型存儲系統。但redis支持的存儲value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)等。這些數據類型都支持push/pop、add/remove及取交集、并集和差集及更豐富的操作,而這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與Memcached一樣,為了保證效率,redis的數據都是緩存在內存中的。區別是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

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

官網:http://www.redis.io/documentation

q?小結:

1、支持內存緩存,這個功能相當于Memcached。

2、支持持久化存儲,這個功能相當于Memcachedb,ttserver

3、數據類型更豐富,比其他key-value庫功能更強

4、支持主從集群,分布式

5、支持列隊等特殊功能。

應用:緩存從存取Memcached更改為redis。


1.4.3 MongoDB(Document-oriented)

MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,類似json的bjson格式,因此可以存儲比較復雜的數據類型。MongoDB最大的特點就是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它的特點是高性能、易部署、易使用,存儲數據非常方便。

q?主要功能特性:

1、面向集合存儲,易存儲對象類型的數據。“面向集合”(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)

2、模式自由。模式自由(schema-free),意味著對于存儲在MongoDB數據庫中的文件,我們不需要知道它的任何結構定義。如果需要,你完全可以把不同結構的文件存儲在同一個數據庫里。

3、支持動態查詢

4、支持完全索引,包含內部對象

5、支持查詢

6、支持復制和故障恢復

7、使用高效的二進制數據存儲,包括大型對象

8、自動處理碎片,以支持云計算層次的擴展性。

1.4.4 Cassandra(Column-oriented)

Apache Cassandra是一套開源分布式Key-Value存儲系統。它最初由Facebook開發,用于存儲特別大的數據。Facebook目前在使用此系統。

Cassandra的主要特點就是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分布式網絡服務,對Cassandra的一個寫操作,會被復制到其他節點上去,對Cassandra的讀操作,也會被路由到某個節點上面去讀取。對于一個Cassandra集群來說,擴展性能是比較簡單的事情,只管在集群里面添加節點就可以了。

Cassandra是一個混合型的非關系型數據庫,類似于Google的BigTable。其主要功能比Dynimite更豐富,Cassandra最初由Facebook開發,后轉變成了開源項目。它是一個網絡社交云計算方面理想的數據庫。

官網:http:// cassandra.org

主要特性:

1、分布式

2、基于column的結構化

3、高伸展性

1.4.5?其他數據庫

Hbase,MemcacheDB,BerkeleyDB,Tokyo Tyrant(ttserver)

1.5?數據庫排名

排名地址:https://db-engines.com/en/ranking

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容