日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

數(shù)據(jù)庫的本質(zhì)、概念及其應(yīng)用實踐(一)

系統(tǒng) 2053 0

原文請詳見: http://www.ucai.cn/blogdetail/7033?mid=1&f=5

能夠在線執(zhí)行查看效果哦!


今天這堂課,分為三個大點,正如標(biāo)題所指出的,是討論數(shù)據(jù)的本質(zhì)、概念與應(yīng)用實踐。第一點本質(zhì)的探討是站在一個更高的高度來分析數(shù)據(jù)的產(chǎn)生以及各種使用場景,然后將數(shù)據(jù)相關(guān)的存儲手段,作一個匯總解說。而概念,則是一個串講,主要放在關(guān)系數(shù)據(jù)庫上,由于我們六月份公開課,也將以關(guān)系型數(shù)據(jù)庫為主。第三點就是通過一些實例來鞏固前面兩點所講的內(nèi)容。

?

一、數(shù)據(jù)庫的出現(xiàn)源起和本質(zhì)


1.1 數(shù)據(jù)庫的起源

想像一下我們的電腦,有文件夾,有文件,文件有大小,有位置,有格式,這個是有文件系統(tǒng)開始就有這個概念的,肯定在有一個地方,存儲了這些文件的參數(shù)或者元數(shù)據(jù),而在我們的日常生活中,每個物體和人,都有其各自不同的特征,當(dāng)一批量的這些可描寫敘述的人的特征,想要數(shù)據(jù)化存儲起來的時候,也就須要有一種格式來保存。除了保存數(shù)據(jù)之外,我們還得對數(shù)據(jù)進(jìn)行管理。這就是數(shù)據(jù)庫出現(xiàn)的背景,而且隨著使用場景的越加復(fù)雜,數(shù)據(jù)庫本身也有了很多其它的衍生版本號。

所以數(shù)據(jù)庫起源于對數(shù)據(jù)的存儲以及管理。

?

1.2數(shù)據(jù)庫的使用場景

那么我們有幾個問題,基于大家眼下的理解,第一個問題是有哪些須要保存的數(shù)據(jù)種類,有哪些存儲方式呢?我們發(fā)散一點來想。

?

能夠得到例如以下的情況:

A、在程序中自己定義,比方數(shù)組,僅僅保存在內(nèi)存里,等程序停止了之后,數(shù)據(jù)就沒有了。這樣能夠不能夠?

在這個里面存儲的反正是描寫敘述型數(shù)據(jù),也能夠是二進(jìn)制數(shù)組。?

B、保存在一個文本文件中能夠不能夠,有自己的格式,比方自己定義的格式,比方XML,比方JSON格式

這里保存的,僅僅能是描寫敘述型數(shù)據(jù)。

C、採用一些文件型數(shù)據(jù)庫,比方支持SQL訪問的文本數(shù)據(jù)庫,比方Sqlite、比方Access

除了特定的數(shù)據(jù)類型,一般也僅僅保存文本描寫敘述數(shù)據(jù)。

D、採用 MySQL 這樣基于網(wǎng)絡(luò)和可分布式的數(shù)據(jù)庫系統(tǒng)。

用來保存較多數(shù)據(jù)量的用戶數(shù)據(jù)、關(guān)系數(shù)據(jù)、交易數(shù)據(jù),這些數(shù)據(jù)要實再高速查詢更新。

E、當(dāng)數(shù)據(jù)量大時,一臺設(shè)備就不能滿足要求,這就須要用到分布式數(shù)據(jù)庫,可能是數(shù)據(jù)集群。?

F、採用 memcached 這種軟件保存著緩存的數(shù)據(jù)。

一般用于保存文本數(shù)據(jù)或者計數(shù)。

G、採用 fastdfs 這種分布式文件系統(tǒng)來保存著文件數(shù)據(jù)。

不用于保存除文件本身描寫敘述之外的其它描寫敘述數(shù)據(jù),用于保存大量的文件。

H、採用redis 這種KVDB 軟件來保存簡單關(guān)系的描寫敘述數(shù)據(jù),或者特定的結(jié)構(gòu)。

比方用于保存微博數(shù)據(jù),用KEY能夠迅速定位到微博內(nèi)容。?

I、同KVDB類似的,大家有聽過隊列那幾講的同學(xué)嗎?是不是也是特殊的數(shù)據(jù)存儲手段呢?一邊有人生產(chǎn)數(shù)據(jù),一邊有人消費(fèi)數(shù)據(jù)。?

J、用于保存地理關(guān)系數(shù)據(jù),并提供運(yùn)算。在英文里叫SpatialData,也就是空間數(shù)據(jù)。Oracle最擅長,如今MySQL也有空間擴(kuò)展。

http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

K、而對于大量的,源源不斷的海量數(shù)據(jù),相對不那么規(guī)則的數(shù)據(jù)存儲,我們可能存儲在Hadoop系統(tǒng)中。

L、最后再談一個場景,像百度這種搜索引擎,他會把他的數(shù)據(jù)全放在MySQL里,然后去檢索嗎?顯然不是。有自有的索引格式和支持分布式查詢的系統(tǒng)。

?

1.3數(shù)據(jù)庫場景以及分類總結(jié)

總結(jié)一下:

A、在電腦時代曾經(jīng),人類就產(chǎn)生了大量的信息,而電腦時代以來,更是產(chǎn)生了大量的數(shù)字化的數(shù)據(jù)。而這些數(shù)據(jù)庫的保存的形式,從上面能夠看到,根據(jù)不同的場景,不同的保存方式,是多種多樣的。有僅在內(nèi)存中保存,有在文件里保存,有專用嚴(yán)謹(jǐn)?shù)臄?shù)據(jù)庫系統(tǒng)保存,也有不那么嚴(yán)謹(jǐn)?shù)腒VDB保存。?

B、依據(jù)上面的各種存儲場景,我們對數(shù)據(jù),也做兩個簡單的分類,一個是結(jié)構(gòu)化數(shù)據(jù)庫和非結(jié)構(gòu)化數(shù)據(jù)的分類,當(dāng)然,還有再加一種半結(jié)構(gòu)化數(shù)據(jù)的。所謂結(jié)構(gòu)化,就是非常規(guī)整地有屬性的一種情況。像一個人,他有身高、體重、年齡,這個描寫敘述是結(jié)構(gòu)化的,你給照一張照片,錄一段聲音,拍一段攝像,雖然這也是數(shù)據(jù),可是不是結(jié)構(gòu)化的。對于不同的這兩類數(shù)據(jù),存儲方式也不同樣,比方結(jié)構(gòu)化數(shù)據(jù)是典型的二維表的結(jié)構(gòu)。而非結(jié)構(gòu)化數(shù)據(jù)就是僅僅以原始數(shù)據(jù)的形式存儲。

上面的場景,大多是結(jié)構(gòu)化數(shù)據(jù)的處理場景,像文本數(shù)據(jù)庫、MySQL數(shù)據(jù)庫。而在fastdfs上,Hadoop上,就有大量的非結(jié)構(gòu)化數(shù)據(jù)的存儲。?

C、依據(jù)數(shù)據(jù)量本身的大小,我們也能夠做一個分類。或者特定的技術(shù)應(yīng)用場景。

比方小數(shù)據(jù)量數(shù)據(jù),我們可能為了方便,就以文本的方式來保存。而對于一個正規(guī)的提供服務(wù)的站點,像用戶數(shù)據(jù),比方優(yōu)才網(wǎng)的用戶數(shù)據(jù),就會用MySQL數(shù)據(jù)庫來保存,為了訪問速度,也會用到memcached這種緩存軟件。也會用fastdfs來保存小文件。而當(dāng)有大量的日志等數(shù)據(jù)量產(chǎn)生,須要進(jìn)行數(shù)據(jù)分析的時候,比方每天的數(shù)據(jù)量以幾百G,T來計的時候,就會用Hadoop 這種軟件。

所以,不同的數(shù)據(jù)量也使用不同的保存方式。小型數(shù)據(jù)、大中型數(shù)據(jù)、海量數(shù)據(jù)或者大數(shù)據(jù)。

D、第四個角度就是從上面能夠看出,數(shù)據(jù)的存儲方式,有非常多類別,不同類別適用于不同的場景。數(shù)據(jù)庫是非常強(qiáng)大的,可是不是全部的場景都合適使用數(shù)據(jù)庫。比方上面講的全文檢索的場景,一般須要用特定的存儲,特定的索引方式。假設(shè)詳細(xì)地講,全文檢索中,使用的一種索引,叫倒排索引。

?

二、數(shù)據(jù)庫有哪些概念

好的,聊完了數(shù)據(jù)以及相關(guān)軟件的一些使用場景,對于不同場景下使用不同軟件有了概念。以下我們來介紹一下,在數(shù)據(jù)庫的領(lǐng)域經(jīng)常使用的一些術(shù)語,這些術(shù)語,在我們的整個數(shù)據(jù)庫學(xué)習(xí)中都要用到。

因為公開課的時間問題,我們主要交流一下基本概念,對于高級的概念,后面的公開課會持續(xù)地講到。

?

2.1 數(shù)據(jù)庫的基本概念

介紹我們以下數(shù)據(jù)庫的這些概念時,我們以一個公司做為對照。

2.1.1、庫

庫,就相對于一個公司,以下差點兒全部的概念都裝在這個公司里的。

在使用數(shù)據(jù)庫之前,我們得在數(shù)據(jù)庫軟件上創(chuàng)建數(shù)據(jù)庫。

在 MySQL 里,同一個連接,僅僅能附著在同一個庫上,當(dāng)然,僅僅要權(quán)限同意,也能夠?qū)崿F(xiàn)跨庫查詢。

創(chuàng)建數(shù)據(jù)庫的語法是

?createdatabase xxx;

僅僅有root 用戶能創(chuàng)建庫。

?

2.1.2、表

表就相對于,公司的一個部門,這個部門管用戶,那個部門管訂單。就是一個又一個的表。

表由記錄和字段組成。

字段表成的是表定義。

記錄組成的是表數(shù)據(jù)。

      CREATE TABLE `hstesttbl` (
  `k` int(11)NOT NULL AUTO_INCREMENT,
  `v`char(255) NOT NULL DEFAULT '',
  PRIMARY KEY(`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

字段定義則有字段名,字段類型,是否為空,是否自增長,缺省值等。

記錄則是實際的數(shù)據(jù)值,同一個表的記錄的定義都是一樣的。也就是說有同樣的特征。

?

2.1.3、視圖

視圖類就相當(dāng)于虛擬的項目小組,能夠是同一個部門出來的,也能夠是跨部門的。

視圖之所以說是虛擬,由于沒有實際存在的數(shù)據(jù)。不管是定義,還是數(shù)據(jù),都是從別的表里組合起來的。

      create view hsview as select * from hstesttbl;
 
mysql> show tables;
+--------------------+
| Tables_in_hstestdb |
+--------------------+
| hstesttbl         |
| hsview            |
+--------------------+
2 rows in set (0.02 sec)
 
mysql> show create table hsview\G;
*************************** 1. row***************************
               View: hsview
        Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQLSECURITY DEFINER VIEW `hsview` AS select `hstesttbl`.`k` AS `k`,`hstesttbl`.`v`AS `v` from `hstesttbl`
    

從上面的命令能夠看出,視圖跟表的操作有非常多相似。而且從表到視圖還能改動字段名。

?

2.1.4、索引

索引就是相當(dāng)于部門每一個員工的一些用于高速找到員工的屬性。比方職位,比方愛好,比方畢業(yè)學(xué)校。通過這些,就能將部門的人分類,每一次查詢都能縮小結(jié)果集。

對表創(chuàng)建索引是,比方還是上面這個表, alter table hstesttbl add index(xxx);

?

2.1.5、鍵

鍵就相當(dāng)于部門每一個人的一些最快捷且唯一的聯(lián)絡(luò)方式,比方電話、郵箱,微信號,QQ號都是。

加入鍵跟加入索引,類似,刪除鍵這里介紹一下,

比方:

alter table hstesttbl drop primary key;

?

2.1.6、權(quán)限

是指公司內(nèi)部限制的一些紀(jì)律,比方公司外部人,是不能知道公司內(nèi)部的一些事情的。

我們能夠通過

grantALL PRIVILEGES on dbname.* to 'user'@'127.0.0.1' identified by 'password' withgrant option;

這種語句給某用戶授權(quán),全權(quán)訪問某個庫。這個這個用戶僅僅能訪問這個庫,在沒有獲得很多其它授權(quán)的情況下。

上面說僅僅有root用戶能創(chuàng)建數(shù)據(jù)庫,而對于上面的其它操作,比方創(chuàng)建表,加入視圖,新建、刪除索引和鍵,僅僅要經(jīng)過了上面的授權(quán),就能夠做了。

?

2.1.7、SQL

SQL就相當(dāng)于公司的一些規(guī)定,指令。比方我們在公司里交流說,能夠公布到生產(chǎn)環(huán)境了。聽起來一句簡單的話,包括著可能進(jìn)行了產(chǎn)品確認(rèn),各種測試,能夠由運(yùn)維上線了。

SQL是我們同數(shù)據(jù)庫打交道的指令。上面事實上在講各個概念時,已經(jīng)都講過了一些SQL命令,我想這里提幾個點。

手寫命令,很重要,優(yōu)才網(wǎng)要求自己的學(xué)員都要有手寫命令的能力,不能離開phpmyadmin就沒有辦法干活。

SQL上面雖然介紹了這么多,我們對它進(jìn)行一個分類,事實上這個分類早有人做了。主要是為DDL、DML、DCL(當(dāng)然另一個TCL,我們今天不講)。

?

(1)數(shù)據(jù)定義。(SQL DDL)用于定義SQL模式、基本表、視圖和索引的創(chuàng)建和撤消操作。上面的,大多是DDL。

(2)數(shù)據(jù)操縱。(SQL DML)數(shù)據(jù)操縱分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類。數(shù)據(jù)更新又分成插入、刪除、和改動三種操作。這就是我們尋常所熟知的增刪改查操作。

(3)數(shù)據(jù)控制(DCL)。包含對基本表和視圖的授權(quán),完整性規(guī)則的描寫敘述,事務(wù)控制等內(nèi)容。這個就是我們上面也有涉及,權(quán)限處理。

?

2.2 學(xué)術(shù)性的概念

?1、范式與冗余

–第一范式,列不能夠切割,比方興趣字段,它里面,可能寫了籃球、電影等多項。原則上來講,這個表是不滿足第一范式的。應(yīng)該專門建立一個用戶興趣表,有uid和興趣。然后一個人有多條記錄。所以在數(shù)據(jù)庫字段定義時,須要顯式地指明數(shù)據(jù)類型,除了文本類型之外,你非常難往一個字段里附加多個信息。

–第二范式,主鍵決定了其它所有屬性,比方一個班級學(xué)生表,一個學(xué)號,決定了學(xué)生其它的信息,比方有一個表,里面有學(xué)號、學(xué)院編號、學(xué)生姓名、年齡、學(xué)院、院長。學(xué)號和學(xué)院編號是主鍵,看起來沒有錯,學(xué)生在這個學(xué)院編號里,決定了哪個學(xué)院,院長是誰誰誰。只是這是不滿足第二范式的,由于學(xué)院和院長不是由學(xué)號這個主鍵來決定的,而是由學(xué)院編號來決定的。所以要分拆。

–和三范式,其它屬性全由主鍵決定, 比方還是上面這個表,里面有學(xué)號、學(xué)院編號、學(xué)生姓名、年齡、學(xué)院、院長。學(xué)號是主鍵,看起來沒有錯,學(xué)生在這個學(xué)院里,院長是誰誰誰。只是這是不滿足第二范式的,由于院長不是由學(xué)號這個主鍵來決定的,而是由學(xué)院來決定的。所以要分拆。

?

?2、ACID:

–原子性? (Atomicity) , 不可中間失敗。比方說,我們買東西,一邊是買家付款,從買家賬戶扣除,還有一邊是存錢入賣家賬戶,這分了兩步,這不是原子的。由于可能中間失敗。比方扣錢成功,存錢未成功。

–一致性(Consistency),還是上面這個樣例,交易完畢后,數(shù)據(jù)一致,收支相抵。不能一邊多,一邊少。

–隔離性(Isolation),避免并發(fā)混亂,非常多數(shù)據(jù),一個客戶訪問時沒有問題,多個用戶在高并發(fā)時訪問,也要滿足數(shù)據(jù)不會錯亂。

–持久性(Durability),永久保存,就是不要丟失。不能一關(guān)機(jī)沒有了,即使丟一條也不成。

?

2.3 很多其它高級術(shù)語

1、存儲引擎 、事務(wù)、復(fù)合索引、連接池、備份、恢復(fù)

2、主從復(fù)制、行鎖定、表鎖定、慢查詢、二進(jìn)制日志、暫時表、內(nèi)容分發(fā)、同步、數(shù)據(jù)庫分區(qū)、分庫、分表、水平拆分、垂直拆分

這很多其它的高級術(shù)語,我們在后面再交流,或者在全棧project師課程中再交流。

?


數(shù)據(jù)庫的本質(zhì)、概念及其應(yīng)用實踐(一)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 米泉市| 敦化市| 小金县| 同江市| 稻城县| 永平县| 建昌县| 交口县| 黄大仙区| 黎川县| 中山市| 庐江县| 新沂市| 同德县| 鄯善县| 富民县| 茶陵县| 陵水| 那坡县| 柳河县| 三门峡市| 高唐县| 祥云县| 南华县| 白山市| 丹东市| 溧水县| 鹰潭市| 新余市| 百色市| 新宁县| 德令哈市| 元氏县| 石嘴山市| 罗平县| 邳州市| 普兰县| 来宾市| 内丘县| 龙里县| 兰西县|