- 跟老男孩學Linux運維:MySQL入門與提高實踐
- 老男孩
- 8818字
- 2019-02-18 17:30:30
第1章 數據庫介紹與分類
1.1 數據庫介紹
什么是數據庫
簡單地說,數據庫(Database)就是一個存放計算機數據的倉庫,該倉庫按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯系)對數據進行組織和存儲,我們可以通過數據庫提供的多種方法來管理其中的數據。
若以生活中的案例來進行更形象的描述,那么計算機里的數據庫就是類似于人們存放雜物的儲物間和倉庫,它們的區別只是存放的東西不同,雜物間存放的是實體物件,而數據庫里存儲的是計算機數據。
1.2 數據庫的種類
按照早期的數據庫理論,比較流行的數據庫模型分為三種,分別為層次數據庫、網狀數據庫和關系型數據庫。而在當今的互聯網企業中,最常用的數據庫模型主要分為兩種,即關系型數據庫和非關系型數據庫。我們不是寫教科書,更不是研究數據庫理論,因此,本書主要講解關系型數據庫和非關系型數據庫NoSQL這兩類最重要也是目前互聯網企業里實際使用最多的數據庫類型。
1.2.1 關系型數據庫介紹
(1)關系型數據庫的由來
雖然網狀數據庫和層次數據庫已經很好地解決了數據的集中和共享問題,但是在數據的獨立性和抽象級別上仍然存在很大的欠缺。用戶在對這兩種數據庫進行存取時,仍然需要明確數據的存儲結構,指出存取路徑。而關系型數據庫則可以較好地解決這些問題。
(2)關系型數據庫介紹
關系型數據庫模型可將復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。例如,老男孩IT教育某一期的學生表格(見表1-1)關系就是一個二元關系。在關系型數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過對這些關聯的表格進行分類、合并、連接或選取等運算來實現對數據的管理。
關系型數據庫的誕生距今已有幾十年,已經從理論逐步發展成為大家耳熟能詳的企業產品,例如,最常見的MySQL和Oracle數據庫,其中,Oracle在數據庫領域里上升到了霸主地位,形成了每年高達數百億美元的龐大產業市場,而MySQL也是不容忽視的數據庫,近些年逐漸崛起,以至于被Oracle重金收購,目前它們占據了互聯網領域90%以上的數據庫市場份額。
(3)關系型數據庫表格之間的關系舉例
前面已經講過,數據庫簡單來說就是一個存放計算機數據的倉庫,但是數據存放在數據庫里還是有一定的組織形式的。在一個關系型數據庫里,二維表格是組織數據的基本形式,每個不同的數據庫里可以包含多張表格,例如,oldboy庫里可以包含如下的表1-1~1-3。
表1-1 學生表

表1-2 課程表

表1-3 學生選課表

而數據庫里的每個表格又是由若干個列組成的,例如,表1-3中的學號、課程號、成績都是組成表格的列,此外,一個表格可以有多個列,每個列又存儲著不同的信息。
由此,我們可以理解列的概念了,列是表中的字段,所有的表都是由一個或多個列組成的。
數據庫中的每個列(或稱字段)都有相應的數據類型,數據類型定義每個列存儲數據的類別,例如,如果某個列中希望存儲的內容為數字,那么可以選擇的數據類型為數字類型(int等);如果列中存儲的是少量文本或日期,甚至是大量文本等類別,那么數據庫都會對應不同的數據類型來進行存儲。
由此我們就可以理解數據類型的概念了,數據類型用于定義每個列需要存儲什么樣的數據,每個列都可以根據存儲數據的實際需要來設置數據類型,在指定數據類型的同時還可以指定存儲數據的長度。
圖1-1是關系型數據庫表格的基本信息說明。

圖1-1 關系型數據庫表格基本信息
關系型數據庫知識和特點小結
1)關系型數據庫在存儲數據時實際上采用的就是二維表格形式(和Word、Excel里的表格幾乎一樣)。
2)市場上占有量較大的是MySQL和Oracle數據庫,而互聯網場景最常用的是MySQL數據庫。
3)通過SQL(結構化查詢語言)來存取、管理關系型數據庫的數據。
4)關系型數據庫在保持數據安全和數據一致性方面功能很強,遵循ACID理論(后文會講此知識)。
1.2.2 非關系型數據庫介紹
1.非關系型數據庫誕生的背景
非關系型數據庫也稱為NoSQL數據庫,請注意,NoSQL的本意是“Not Only SQL”,指的是非關系型數據庫,而不是“No SQL”(沒有SQL)的意思。因此,NoSQL數據庫的產生之初并不是要徹底地否定和終結關系型數據庫,而是作為傳統關系型數據庫的一個有效補充。
隨著互聯網Web2.0、Web3.0網站的興起,傳統的關系型數據庫在應付這些網站,特別是對于規模日益擴大的海量數據,超大規模和高并發的微博、微信等類型的動態網站時已經顯得力不從心,暴露了很多難以克服的問題,例如,傳統關系型數據庫的I/O瓶頸、性能瓶頸等都難以有效突破。于是出現了大批針對特定場景,以高性能、高并發以及使用便利為目的的功能特異化的數據庫產品,非關系型數據庫就是在這樣的情景中誕生并得到非常迅速發展的。在這些特定的場景下,NoSQL數據庫可以發揮出難以想象的高效率和高性能。近年來,NoSQL這個術語得到了廣泛認同。
NoSQL是非關系型數據庫的廣義定義。它打破了長久以來關系型數據庫與ACID理論大一統的局面。NoSQL數據庫的數據存儲不需要固定的表結構,通常也不存在連接操作。其在大數據存取上具備關系型數據庫無法比擬的性能優勢,滿足了企業應用需要將數據存儲在橫向且伸縮性上更強的功能需求。例如,Google的BigTable、Amazon的Dynamo都是非常成功的商業NoSQL實現。在開源的NoSQL體系中,從早期的Memcached緩存軟件到當今Facebook的Cassandra、Apache的HBase,都得到了廣泛應用,redis、MongoDB等新興的NoSQL數據庫,也逐漸受到各類公司的歡迎和追捧。NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。
非關系型數據庫(NoSQL)知識小結
1)NoSQL數據庫不是否定關系型數據庫,而是作為關系型數據庫的一個重要補充。
2)NoSQL數據庫為了適應靈活及高性能、高并發需求而生,忽略影響高性能、高并發的功能。
3)在NoSQL數據庫領域,當今的最典型產品為redis(持久化緩存)、MongoDB、Memcached(純內存)等。
4)NoSQL數據庫沒有標準的查詢語言(SQL),通常使用REST式的數據接口或者查詢API。
2.非關系型數據庫種類介紹
(1)鍵值存儲數據庫
鍵值(key-value)數據庫類似于傳統語言中使用的哈希表,可以通過key來添加、查詢或者刪除數據,因為是使用key主鍵訪問,所以會獲得很高的性能及擴展性。
鍵值數據庫主要使用一個哈希表,表中有一個特定的鍵和一個指針(指向特定的數據)。對于IT系統來說,key/value模型的優勢在于簡單、易部署、高并發。
下面就來舉例說明。
k1→oldboy, k1是鍵,相當于學號,oldboy對應的就是真實的數據,相當于具體的人。
k2→oldgirl, k2是鍵,相當于學號,oldgirl對應的就是真實的數據,相當于具體的人。
我們要找人,首先定位學號(k1, k2),然后再找到具體的數據(oldboy、oldgirl)。
鍵值存儲數據庫的典型產品為Memcached、redis。
提示:Memcached、redis是互聯網領域里中小型企業網站使用最多的NoSQL數據庫種類。
(2)列存儲數據庫
列存儲(column-oriented)數據庫會將數據儲存在列族(column family)中,一個列族通常存儲會被一起查詢的相關數據。舉個例子,對于Person類,我們通常會查詢他們的姓名和年齡,而不是薪資。在這種情況下,姓名和年齡就會放入一個列族中,而薪資則放在另一個列族中。
這部分數據庫通常用于應對分布式存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列族來安排的。
列存儲數據庫的典型產品為Cassandra、HBase。
提示:Cassandra、HBase是互聯網領域大型門戶網站使用較多的NoSQL數據庫種類。例如,新浪、京東網站使用的是HBase(曾經筆者所在培訓機構的DBA老師就曾經在新浪公司維護數臺HBase集群),360安全公司使用的是Cassandra(筆者的學生曾在該公司維護數百臺Cassandra集群)。
(3)面向文檔的數據庫
面向文檔(document-oriented)的數據庫的靈感來自于Lotus Notes辦公軟件,而且它同第一種鍵值存儲相類似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。面向文檔(document-oriented)的數據庫可以看作鍵值數據庫的升級版,允許之間嵌套鍵值。而且面向文檔(document-oriented)的數據庫比鍵值數據庫的查詢更高效。
面向文檔的數據庫會將數據以文檔的形式儲存。每個文檔都是自包含的數據單元,是一系列數據項的集合。每個數據項都有一個與名稱對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是復雜的類型,如有序列表和關聯對象等。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲。
面向文檔的數據庫的典型產品為MongoDB。
提示:MongoDB是互聯網領域里中小型企業比較常用的面向文檔的數據庫種類,在部分企業里,可以替代MySQL作為數據庫使用。
(4)圖形數據庫(了解即可)
圖形(graph)數據庫允許我們將數據以圖形的方式進行存儲。實體會被作為頂點,而實體之間的關系則會被作為邊。比如我們有三個實體Steve Jobs、Apple和Next,則會有兩個“Founded by”的邊將Apple和Next連接到Steve Jobs。
圖形結構的數據庫與其他行列以及剛性結構的SQL數據庫不同,它使用的是靈活的圖形模型,并且能夠擴展到多個服務器上。
圖形數據庫的典型產品為Neo4J、InfoGrid
提示:在筆者工作的十多年里,沒有使用過圖形數據庫,不過根據國外網站數據庫排名信息來看,Neo4J上升到了21位(截至筆者寫作時),看來該軟件正在被越來越多的人所熟知,我們對它保持關注吧,建議簡單了解就可以了。
1.3 常用關系型數據庫產品介紹
1.3.1 Oracle數據庫
Oracle前身叫作SDL,由Larry Ellison和另外兩個開發人員于1977年創辦,他們開發了自己的拳頭產品,在市場上大量銷售,1979年,Oracle公司引入了第一個商用SQL關系型數據庫管理系統。Oracle公司是最早開發關系型數據庫的廠商之一,其產品支持最廣泛的操作系統平臺。目前Oracle關系型數據庫產品的市場占有率很高。

Oracle公司是目前全球最大的數據庫軟件公司,也是近年來業務增長極為迅速的軟件提供商與服務商。
2007年7月,Oracle公司在美國紐約宣布推出數據庫Oracle 11g,這是Oracle數據庫的較新版本。據官方介紹,Oracle 11g有400多項功能,經過了1500萬個小時的測試,開發工作量達到了3.6萬人/月。Oracle 11g在安全、XML DB、備份等方面得到了很大的提升。
主要的應用企業包括傳統大企業、大公司、政府、金融、證券等。
版本包括Oracle 8i、Oracle 9i、Oracle 10g、Oracle 11g、Oracle 12c等。
1.3.2 MySQL數據庫
MySQL數據庫是一個開源的中小型關系型數據庫管理系統,由瑞典MySQL AB公司開發。該公司于2008年被Sun公司收購,后Sun公司又被Oracle公司收購。目前MySQL被廣泛地應用于各大中小型網站中。由于其具有體積小、速度快、總體擁有成本低,且開放源碼等特點,因此許多大中小型網站選擇它作為網站數據庫,從而降低網站總體擁有成本,甚至國內知名的淘寶網也選擇棄用Oracle而更換成更為開放的MySQL。

MySQL數據庫的應用范圍主要包括互聯網領域、大中小型網站、游戲公司、電商平臺等,因用戶廣泛,其產生了很多高并發的成熟解決方案,因此傳統企業的用戶也在逐漸增多。
1.3.3 MariaDB數據庫
MariaDB數據庫管理系統是MySQL數據庫的一個分支,主要由開源社區維護,采用GPL授權許可。開發這個MariaDB數據庫分支的可能原因之一是:Oracle公司收購了MySQL之后,有將MySQL閉源的潛在風險,因此MySQL開源社區采用分支的方式來避開這個風險。

開發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替換了MySQL的InnoDB存儲引擎。
MariaDB數據庫的早期版本,均依照MySQL的版本發行。因此,使用MariaDB的人都會從MySQL中了解到MariaDB的相關功能,學習MySQL數據庫的人,也可以輕松上手掌握MariaDB數據庫。
1.3.4 SQL Server數據庫
Microsoft SQL Server是微軟公司開發的大型關系型數據庫系統。SQL Server的功能比較全面、效率高,可以作為中型企業或單位的數據庫平臺。由于SQL Server與Windows操作系統緊密集成,所以不論是應用程序的開發速度,還是系統事務處理的運行速度,都得到了較大的提升。對于在Windows平臺上開發的各種企業級信息管理系統來說,不論是C/S(客戶機/服務器)架構還是B/S(瀏覽器/服務器)架構,SQL Server都是一個很好的選擇。但SQL Server也有它的缺點,即只能在Windows系統下運行。
1987年,微軟和IBM合作開發完成OS/2, IBM在其銷售的OS/2 ExtendedEdition系統中綁定了OS/2 Database Manager,而微軟產品線中尚缺少數據庫產品。為此,微軟將目光投向Sybase,同Sybase簽訂了合作協議,使用Sybase的技術開發了基于OS/2平臺的關系型數據庫。1989年,微軟發布了SQL Server 1.0版。Microsoft在與Sybase分道揚鑣之后,在其6.05和7.0版本中重寫了核心數據庫系統,最終形成了如今的SQL Server。
SQL Server數據庫主要應用于使用Windows服務器平臺的企業。
1.3.5 Access數據庫
美國Microsoft公司于1994年推出了微機數據庫管理系統。它結合了Microsoft Jet Database Engine和圖形用戶界面兩項特點,是Microsoft Off ice的成員之一。具有界面友好、易學易用、開發簡單、接口靈活等特點,是典型的新一代桌面關系型數據庫管理系統。Access能夠存取Access/Jet、Microsoft SQL Server、Oracle,或者任何ODBC兼容數據庫的資料。Access界面友好而且易學易用,作為Off ice套件的一部分,可以與Off ice集成,實現無縫連接,Access提供了表(Table)、查詢(Query)、窗體(Form)、報表(Report)、宏(Macro)、模塊(Module)等用來建立數據庫系統的對象,而且還提供了多種向導、生成器、模板,把數據存儲、數據查詢、界面設計、報表生成等操作規范化。
Access是入門級小型桌面數據庫,性能、安全性都很一般。可供個人管理或小型網站之用。Access不是數據庫語言,只是一個數據庫程序。集成于Off ice中。其主要具有如下特點。
完善地管理各種數據庫對象,具有強大的數據組織、用戶管理、安全檢查等功能。
強大的數據處理功能,Access具備了許多先進的大型數據庫管理系統所具備的特征,如事務處理/出錯回滾能力等。
可以方便地生成各種數據對象,利用存儲的數據建立窗體和報表,可視性好。
作為Off ice套件的一部分,可以與Off ice集成,實現無縫連接。
能夠利用Web檢索和發布數據,實現與Internet的連接。Access主要適用于中小型應用系統,或者作為客戶機/服務器系統中的客戶端數據庫。
早期應用領域為小型程序系統ASP+Access系統,例如,留言板、校友錄、BBS等,目前在互聯網場景下使用得較少。
1.3.6 PostgreSQL數據庫
PostgreSQL是加州大學伯克利分校計算機系開發的,以POSTGRES為基礎,后來更名為PostgreSQL,它是除了MySQL之外發展較快的另一個關系型數據庫管理系統(RDBMS)。
PostgreSQL在靈活的BSD-風格許可證下發行。它提供了相對其他開放源代碼數據庫系統(比如MySQL)和專有系統(比如Oracle、Sybase、Microsoft SQL Server)之外的另一種選擇。
PostgreSQL支持大部分SQL標準,并且提供了非常多的特性:復雜查詢、外鍵、觸發器、視圖、事務完整性、MVCC。同樣,PostgreSQL可以用許多方法擴展,比如,通過增加新的數據類型、函數、操作符、聚集函數、索引等來擴展。任何人都可以免費使用、修改和分發PostgreSQL,不管是私用、商用,還是學術研究使用,目前數據庫產品排名在第四位,是一個很有潛力的數據庫,但不建議新手或者經驗欠缺的企業人員使用。
1.3.7 其他不常用的關系型數據庫
本書主要關注互聯網領域常用的數據庫產品,像DB2、Informix、Sybase等在互聯網公司幾乎見不到,因此這里就不多介紹了。
1.4 常用非關系型數據庫產品介紹
1.4.1 Memcached(key-value)
Memcached是一個開源的、支持高性能、高并發的分布式內存緩存系統,由C語言編寫,總共2000多行代碼。從軟件名稱上看,前3個字符“Mem”就是內存的意思,而接下來的5個字符“Cache”就是緩存的意思,最后一個字符d,是daemon的意思,代表是服務端守護進程模式服務。

Memcached服務分為服務端和客戶端兩部分,其中,服務端軟件的名字形如Memcached-1.4.24.tar.gz,客戶端軟件的名字形如Memcached-2.25.tar.gz。
Memcached軟件誕生于2003年,最初由LiveJournal的Brad Fitzpatrick開發完成。Memcache是整個項目的名稱,而Memcached是服務器端的主程序名,因其協議簡單,應用部署方便且支持高并發,因此廣泛應用于互聯網企業,直到現在仍然如此。其官方網站地址為:http://memcached.org/。
緩存一般用于保存一些經常被存取的對象或數據(例如,瀏覽器會把經常訪問的網頁緩存起來),通過緩存來存取對象或數據要比在磁盤上存取快很多,因為前者使用的是內存,后者使用的是磁盤。Memcached是一種純內存緩存系統,把經常存取的對象或數據緩存在Memcached的內存中,程序通過API的方式存取這些被緩存的數據,Memcached里面的數據就像一張巨大的HASH表,數據以key-value對的方式存在。Memcached通過緩存經常被存取的對象或數據,從而減輕頻繁讀取數據庫的壓力,提高網站的響應速度,構建出速度更快的可擴展的Web應用。
由于Memcached為純內存緩存軟件,一旦重啟,所有的數據都會丟失,因此,新浪網基于Memcached開發了一個開源項目Memcachedb。通過為Memcached增加Berkeley DB的持久化存儲機制和異步主輔復制機制,使Memcached具備了事務恢復能力、持久化數據存儲能力和分布式復制能力,Memcachedb非常適合需要超高性能讀寫速度、持久化保存的應用場景,但是最近幾年其正逐漸被其他的持久化產品所替代,例如redis。
有關Memcached的知識小結
1)Memcached為key-value型數據庫。
2)Memcached為純內存數據庫。
3)Memcached相關持久化產品Memcachedb、Tokyo Cabinet\Tokyo Tyrant(ttserver)。
4)Memcached企業級講解見《跟老男孩學Linux運維:Web集群實戰》第13章。
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客戶端,使用很方便。
redis的官方網址為http://www.redis.io/documentation。
redis知識小結
1)支持內存緩存,這個功能和Memcached相同。
2)支持持久化存儲,這個功能和Memcachedb、ttserver相同。
3)數據類型更豐富。比其他key-value庫功能更強。
4)支持主從、分布式等集群模式。
5)支持隊列等特殊功能。
1.4.3 MongoDB(document-oriented)
MongoDB是一個介于關系型數據庫和非關系型數據庫之間的產品,是非關系型數據庫當中功能最豐富,最像關系型數據庫的一種產品。它支持的數據結構非常松散,類似JSON的bjson格式,因此可以存儲比較復雜的數據類型。MongoDB最大的特點是其所支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系型數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它的特點是高性能、易部署、易使用,存儲數據非常方便。

其主要功能特性具體如下。
面向集合存儲,易存儲對象類型的數據。“面向集合”(collenction-orented),意思是數據被分組存儲在數據集中,稱為一個集合(collenction)。每個集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似于關系型數據庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。
模式自由(schema-free),這意味著對于存儲在MongoDB數據庫中的文件,我們不需要知道它的任何結構定義。如果需要,你完全可以把不同結構的文件存儲在同一個數據庫里。
支持動態查詢。
支持完全索引,包含內部對象。
支持查詢。
支持復制和故障恢復。
使用高效的二進制數據存儲,包括大型對象(如視頻等)。
自動處理碎片,以支持云計算層次的擴展性。
支持Ruby、Python、Java、C++、PHP等多種語言。
文件存儲格式為BSON(JSON的一種擴展)。BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。
此外,還可以通過網絡訪問。MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,而且它是把數據存儲在文件中的,為提高效率其使用內存映射文件進行管理。
關于MongoDB更詳細的文檔請見http://www.mongodb.org/display/DOCS/Manual
Documentation:http://www.mongodb.org/display/DOCS/Home。
MongoDB是很有發展潛力的課程之一,后續會重點講解該軟件。
1.4.4 Cassandra(column-oriented)
Apache Cassandra是一套開源分布式key-value存儲系統。它最初由Facebook開發,用于儲存特別大的數據。Facebook目前使用的正是此系統。
Cassandra的主要特性如下所示。
分布式。
基于列的結構化。
高伸展性。
Cassandra的主要特點是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分布式網絡服務,對Cassandra的一個寫操作,會被復制到其他節點上去,對Cassandra的讀操作,也會被路由到某個節點上去讀取。對于一個Cassandra群集來說,擴展性能是比較簡單的事情,只管在群集里面添加節點就可以了。
Cassandra是一個混合型的非關系型數據庫,類似于Google的BigTable。其主要功能比Dynomite(分布式的key-value存儲系統)更豐富,Cassandra最初由Facebook開發,后轉變成了開源項目。它是一個網絡社交云計算方面很理想的數據庫。以Amazon專有的完全分布式的Dynamo為基礎,結合了Google BigTable基于列族(column family)的數據模型。P2P去中心化的存儲,在很多方面都可以稱為Dynamo 2.0。
Cassandra的官方網址為:http://cassandra.org。
1.4.5 其他非關系型數據庫
除此之外,其他非關系型數據庫還有HBase、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver)等。
1.5 數據庫相關知識
1.5.1 數據庫發展歷史大事記
1951:Univac系統使用磁帶和穿孔卡片作為數據存儲。
1956:IBM公司在其Model 305 RAMAC中第一次引入了磁盤驅動器。
1961:通用電氣(GE)公司的Charles Bachman開發了第一個數據庫管理系統IDS。
1969:E.F. Codd發明了關系型數據庫。
1973:由John J.Cullinane領導Cullinane公司開發了針對IBM主機的基于網絡模型的數據庫IDMS。
1976:Honeywell公司推出了第一個商用關系型數據庫產品Multics Relational Data Store。
1979:Oracle公司引入了第一個商用SQL關系型數據庫管理系統。
1983:IBM推出了DB2數據庫產品。
1985:為Procter & Gamble系統設計的第一個商務智能系統產生。
1991:W.H.“Bill”Inmon發表了“構建數據倉庫”。
1.5.2 數據庫軟件企業應用排名及發展趨勢參考
2013年數據庫軟件企業應用排名如圖1-2所示。

圖1-2 2013年數據庫軟件企業應用排名
2015年數據庫軟件企業應用排名如圖1-3所示。

圖1-3 2015年數據庫軟件企業應用排名
2016年數據庫軟件企業應用排名如圖1-4所示。

圖1-4 2016年數據庫軟件企業應用排名
2017年數據庫軟件企業應用排名趨勢如圖1-5所示。

圖1-5 2017年數據庫軟件企業應用排名
2018年數據庫軟件企業應用排名如圖1-6所示。

圖1-6 2018年數據庫軟件企業應用排名
上述內容源自http://db-engines.com/en/ranking。
從圖1-6所示的2018年的數據庫軟件企業應用排名趨勢可以看出,Oracle依然是穩坐第一,但是已有落后的趨勢了,即將講解的“主人公”MySQL穩坐第二,如果再加上同源的MariaDB,則已經超過了Oracle的排名,而后面的PostgreSQL、MongoDB的上升趨勢也較明顯,因此,建議大家重點掌握MySQL,其次是MongoDB。
1.6 本章重點
1)關系型數據庫知識及特點介紹。
2)關系型數據庫的典型產品介紹及應用場景說明。
3)非關系型數據庫知識及特點介紹。
4)非關系型數據庫典型產品介紹及應用場景說明。
5)常見數據庫產品的發展趨勢排名。
1.7 章節試題
1)什么是關系型數據庫,其有什么特點?
2)關系型數據庫的典型產品有哪些,各自對應什么應用場景?
3)什么是非關系型數據庫,其有什么特點?
4)非關系型數據庫的常見種類及相應的典型產品有哪些?
5)請分別說出5個最流行的關系型和非關系型數據庫產品名稱。