1、什么是數(shù)據(jù)庫(kù)
從字面意思理解,首先數(shù)據(jù)庫(kù)是一個(gè)存放東西的庫(kù)贸桶,里面存的東西是數(shù)據(jù)。以下解釋來(lái)自百度百科:
數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織桌肴、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫(kù)
皇筛。
想象一下這個(gè)場(chǎng)景:某高中二年級(jí)有三個(gè)班,期末考試成績(jī)下來(lái)了坠七,每個(gè)班的學(xué)生的成績(jī)都打印在了一張A4紙上水醋,而每個(gè)班的成績(jī)單都放在一個(gè)檔案袋里,最后所有的檔案袋都放在李主任那里保管彪置。如下圖所示:
[圖片上傳失敗...(image-dec11c-1531619647957)]
每個(gè)班的成績(jī)表上記錄著該班所有學(xué)生的成績(jī)拄踪,其內(nèi)容大概是下面這個(gè)樣子:
排名 | 姓名 | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | 總分 |
---|---|---|---|---|---|
1 | 李元芳 | 99 | 99 | 99 | 297 |
2 | 后裔 | 99 | 98 | 98 | 295 |
3 | 孫尚香 | 95 | 95 | 95 | 285 |
該表中所有成員的數(shù)據(jù)結(jié)構(gòu)都相同,也就是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織拳魁、存儲(chǔ)和管理數(shù)據(jù)
惶桐。
檔案袋可類(lèi)比于數(shù)據(jù)庫(kù),成績(jī)表可類(lèi)比于數(shù)據(jù)庫(kù)中的表潘懊,而李主任則類(lèi)比于數(shù)據(jù)庫(kù)服務(wù)器姚糊。開(kāi)學(xué)來(lái)了老師們都要聯(lián)系李主任去拿檔案袋,我們?cè)谑褂脭?shù)據(jù)庫(kù)時(shí)也要首先連接數(shù)據(jù)庫(kù)授舟。
2救恨、數(shù)據(jù)庫(kù)的分類(lèi)
數(shù)據(jù)庫(kù)通常分為層次式數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)式數(shù)據(jù)庫(kù)和關(guān)系式數(shù)據(jù)庫(kù)三種岂却。而不同的數(shù)據(jù)庫(kù)是按不同的數(shù)據(jù)結(jié)構(gòu)來(lái)聯(lián)系和組織的忿薇。
在當(dāng)今的互聯(lián)網(wǎng)中裙椭,最常見(jiàn)的數(shù)據(jù)庫(kù)模型主要是兩種躏哩,即關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)<NOSQL>署浩。
2.1 關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系模型就是指二維表格模型
,因而一個(gè)關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的聯(lián)系組成的一個(gè)數(shù)據(jù)組織扫尺。當(dāng)前主流的關(guān)系型數(shù)據(jù)庫(kù)有Oracle筋栋、DB2、PostgreSQL正驻、Microsoft SQL Server弊攘、Microsoft Access、MySQL姑曙、浪潮K-DB等襟交。
2.2 非關(guān)系型數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù),又被稱(chēng)為NoSQL(Not Only SQL )伤靠,意為不僅僅是SQL捣域,對(duì)NOSQL 最普遍的定義是“非關(guān)聯(lián)型的”,強(qiáng)調(diào)Key-Value 存儲(chǔ)和文檔數(shù)據(jù)庫(kù)的優(yōu)點(diǎn) 宴合。主要代表有MongoDB焕梅,Redis、CouchDB等卦洽。
分類(lèi) | Examples舉例 | 典型應(yīng)用場(chǎng)景 | 數(shù)據(jù)模型 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|---|---|
鍵值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 內(nèi)容緩存贞言,主要用于處理大量數(shù)據(jù)的高訪問(wèn)負(fù)載,也用于一些日志系統(tǒng)等等阀蒂。 | Key 指向 Value 的鍵值對(duì)该窗,通常用hash table來(lái)實(shí)現(xiàn) | 查找速度快 | 數(shù)據(jù)無(wú)結(jié)構(gòu)化,通常只被當(dāng)作字符串或者二進(jìn)制數(shù)據(jù) |
列存儲(chǔ)數(shù)據(jù)庫(kù) | Cassandra, HBase, Riak | 分布式的文件系統(tǒng) | 以列簇式存儲(chǔ)蚤霞,將同一列數(shù)據(jù)存在一起 | 查找速度快挪捕,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展 | 功能相對(duì)局限 |
文檔型數(shù)據(jù)庫(kù) | CouchDB, MongoDb | Web應(yīng)用(與Key-Value類(lèi)似争便,Value是結(jié)構(gòu)化的级零,不同的是數(shù)據(jù)庫(kù)能夠了解Value的內(nèi)容) | Key-Value對(duì)應(yīng)的鍵值對(duì),Value為結(jié)構(gòu)化數(shù)據(jù) | 數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格滞乙,表結(jié)構(gòu)可變奏纪,不需要像關(guān)系型數(shù)據(jù)庫(kù)一樣需要預(yù)先定義表結(jié)構(gòu) | 查詢(xún)性能不高,而且缺乏統(tǒng)一的查詢(xún)語(yǔ)法斩启。 |
圖形(Graph)數(shù)據(jù)庫(kù) | Neo4J, InfoGrid, Infinite Graph | 社交網(wǎng)絡(luò)序调,推薦系統(tǒng)等。專(zhuān)注于構(gòu)建關(guān)系圖譜 | 圖結(jié)構(gòu) | 利用圖結(jié)構(gòu)相關(guān)算法兔簇。比如最短路徑尋址发绢,N度關(guān)系查找等 | 很多時(shí)候需要對(duì)整個(gè)圖做計(jì)算才能得出需要的信息硬耍,而且這種結(jié)構(gòu)不太好做分布式的集群方案。 |
3边酒、數(shù)據(jù)庫(kù)的組成
數(shù)據(jù)庫(kù)是相關(guān)數(shù)據(jù)的集合经柴,一個(gè)數(shù)據(jù)庫(kù)通常包含如下組成部分:
- 數(shù)據(jù)表(Table):簡(jiǎn)稱(chēng)表,由一組數(shù)據(jù)記錄組成墩朦,數(shù)據(jù)庫(kù)中的數(shù)據(jù)是以表為單位進(jìn)行組織的坯认。表實(shí)際上是一個(gè)二維表格,如上面所講成績(jī)表氓涣。
- 記錄(Record):表中的每一行稱(chēng)為一個(gè)記錄牛哺,它由若干個(gè)字段組成。如上面所講李元芳劳吠、后裔引润、孫尚香的成績(jī)都為一條記錄。
- 字段(Field):也稱(chēng)域痒玩。表中的每一列稱(chēng)為一個(gè)字段淳附,每個(gè)字段都有相應(yīng)的描述信息,如數(shù)據(jù)類(lèi)型凰荚、數(shù)據(jù)寬度等燃观。成績(jī)表中 排名、 姓名便瑟、語(yǔ)文缆毁、數(shù)學(xué)、英語(yǔ)到涂、總分 都是字段脊框。
- 索引(Index):為了提高訪問(wèn)數(shù)據(jù)庫(kù)的肖略,可以對(duì)數(shù)據(jù)庫(kù)使用索引践啄。索引實(shí)際上是一種特殊類(lèi)型的表浇雹,其中含有關(guān)鍵字段的值(由用戶(hù)定義)和指向?qū)嶋H記錄位置的指針,這些值和指針按照特定的順序(也由用戶(hù)定義)存儲(chǔ)屿讽,從而可以以較快的速度查找到所需要的數(shù)據(jù)記錄昭灵。
- 查詢(xún)(Query):一條 SQL 指令用來(lái)從一個(gè)或多個(gè)表中獲取一組指定的記錄,或者對(duì)某個(gè)表執(zhí)行指定的操作伐谈。每條語(yǔ)句都可以看做是一個(gè)查詢(xún)烂完,根據(jù)這個(gè)查詢(xún),可以得到需要的查詢(xún)結(jié)果
- 過(guò)濾器(Filter):它把索引和拍訊結(jié)合起來(lái)诵棵,用來(lái)設(shè)置條件抠蚣,然后根據(jù)給定的條件輸出所需要的數(shù)據(jù)。
- 視圖(view):數(shù)據(jù)的視圖指的是查找到(或處理)的記錄數(shù)和顯示(或進(jìn)行處理)這些記錄的順序履澳。一般情況下嘶窄,視圖由過(guò)濾器和索引控制怀跛。
4、MySQL簡(jiǎn)介
作為本系列文章的主角柄冲,下面要介紹一下 MySQL
吻谋。
MySQL 是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言羊初。MySQL 軟件采用了雙授權(quán)政策滨溉,分為社區(qū)版和商業(yè)版什湘,由于其體積小长赞、速度快、總體擁有成本低闽撤,尤其是開(kāi)放源碼這一特點(diǎn)得哆,一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。
隨著 MySQL 被 Oracle 收購(gòu)哟旗,MySQL 的用戶(hù)和開(kāi)發(fā)者開(kāi)始質(zhì)疑開(kāi)源數(shù)據(jù)庫(kù)的命運(yùn)贩据,有一部分人開(kāi)始尋找 MySQL 的替代品,其中比較主流的有: Percona Server 闸餐、MariaDB饱亮、 Drizzle。值得一提的是 MariaDB 的創(chuàng)始人正是 MySQL 的創(chuàng)始人舍沙。