国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據庫的本質、概念及其應用實踐(一)

William_Sang / 2574人閱讀

摘要:今天這堂課,分為三個大點,正如標題所指出的,是討論數據的本質概念與應用實踐。采用一些文件型數據庫,比如支持訪問的文本數據庫,比如比如除了特定的數據類型,一般也只保存文本描述數據。上面的場景,大多是結構化數據的處理場景,像文本數據庫數據庫。

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

一、數據庫的出現源起和本質
1.1 數據庫的起源
想像一下我們的電腦,有目錄,有文件,文件有大小,有位置,有格式,這個是有文件系統開始就有這個概念的,肯定在有一個地方,存儲了這些文件的參數或者元數據,而在我們的日常生活中,每一個物體和人,都有其各自不同的特征,當一批量的這些可描述的人的特征,想要數據化存儲起來的時候,也就需要有一種格式來保存。除了保存數據之外,我們還得對數據進行管理。這就是數據庫出現的背景,并且隨著使用場景的越加復雜,數據庫本身也有了更多的衍生版本。
所以數據庫起源于對數據的存儲以及管理。

1.2數據庫的使用場景
那么我們有幾個問題, 基于大家目前的理解,第一個問題是有哪些需要保存的數據種類,有哪些存儲方式呢?我們發散一點來想。

可以得到如下的情況:
A、在程序中自定義,比如數組,只保存在內存里,等程序停止了之后,數據就沒有了。這樣可以不可以?
在這個里面存儲的反正是描述型數據,也可以是二進制數組。

B、保存在一個文本文件里可以不可以,有自己的格式,比如自定義的格式,比如XML,比如JSON格式
這里保存的,只能是描述型數據。

C、采用一些文件型數據庫,比如支持SQL訪問的文本數據庫,比如Sqlite、比如Access
除了特定的數據類型,一般也只保存文本描述數據。

D、采用 MySQL 這樣基于網絡和可分布式的數據庫系統。
用來保存較多數據量的用戶數據、關系數據、交易數據,這些數據要實再快速查詢更新。

E、當數據量大時,一臺設備就不能滿足要求,這就需要用到分布式數據庫,可能是數據集群

F、采用 memcached 這樣的軟件保存著緩存的數據。
一般用于保存文本數據或者計數。

G、采用 fastdfs 這樣的分布式文件系統來保存著文件數據。
不用于保存除文件本身描述之外的其他描述數據,用于保存大量的文件。

H、采用redis 這樣的KVDB 軟件來保存簡單關系的描述數據,或者特定的結構。
比如用于保存微博數據,用KEY可以迅速定位到微博內容。

I、同KVDB類似的,大家有聽過隊列那幾講的同學嗎?是不是也是特殊的數據存儲手段呢?一邊有人生產數據,一邊有人消費數據。

J、用于保存地理關系數據,并提供運算。在英文里叫Spatial Data,也就是空間數據。Oracle最擅長,現在MySQL也有空間擴展。
http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

K、而對于大量的,源源不斷的海量數據,相對不那么規則的數據存儲,我們可能存儲在Hadoop系統中。

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

1.3數據庫場景以及分類總結
總結一下:
A、在電腦時代以前,人類就產生了大量的信息,而電腦時代以來,更是產生了大量的數字化的數據。而這些數據庫的保存的形式,從上面可以看到,依據不同的場景,不同的保存方式,是多種多樣的。有僅在內存中保存,有在文件中保存,有專用嚴謹的數據庫系統保存,也有不那么嚴謹的KVDB保存。

B、根據上面的各種存儲場景,我們對數據,也做兩個簡單的分類,一個是結構化數據庫和非結構化數據的分類,當然,還有再加一種半結構化數據的。所謂結構化,就是很規整地有屬性的一種情況。像一個人,他有身高、體重、年齡,這個描述是結構化的,你給照一張照片,錄一段聲音,拍一段攝像,盡管這也是數據,但是不是結構化的。對于不同的這兩類數據,存儲方式也不相同,比如結構化數據是典型的二維表的結構。而非結構化數據就是只以原始數據的形式存儲。
上面的場景,大多是結構化數據的處理場景,像文本數據庫、MySQL數據庫。而在fastdfs上,Hadoop上,就有大量的非結構化數據的存儲。

C、根據數據量本身的大小,我們也可以做一個分類。或者特定的技術應用場景。
比如小數據量數據,我們可能為了方便,就以文本的方式來保存。而對于一個正規的提供服務的網站,像用戶數據,比如優才網的用戶數據,就會用MySQL數據庫來保存,為了訪問速度,也會用到memcached這樣的緩存軟件。也會用fastdfs來保存小文件。而當有大量的日志等數據量產生,需要進行數據分析的時候,比如每天的數據量以幾百G,T來計的時候,就會用Hadoop 這樣的軟件。

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

D、第四個角度就是從上面可以看出,數據的存儲方式,有很多類別,不同類別適用于不同的場景。數據庫是很強大的,但是不是所有的場景都合適使用數據庫。比如上面講的全文檢索的場景,一般需要用特定的存儲,特定的索引方式。如果具體地講,全文檢索中,使用的一種索引,叫倒排索引。

二、數據庫有哪些概念
好的,聊完了數據以及相關軟件的一些使用場景,對于不同場景下使用不同軟件有了概念。下面我們來介紹一下,在數據庫的領域常用的 一些術語,這些術語,在我們的整個數據庫學習中都要用到。

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

****2.1 數據庫的基本概念****
介紹我們下面數據庫的這些概念時,我們以一個公司做為對比。
2.1.1、庫
庫,就相對于一個公司,下面幾乎所有的概念都裝在這個公司里的。
在使用數據庫之前,我們得在數據庫軟件上創建數據庫。
在 MySQL 里,同一個連接,只能附著在同一個庫上,當然,只要權限允許,也可以實現跨庫查詢。
創建數據庫的語法是
create database xxx;
只有root 用戶能創建庫。

2.1.2、表
表就相對于,公司的一個部門,這個部門管用戶,那個部門管訂單。就是一個又一個的表。
表由記錄和字段組成。
字段表成的是表定義。
記錄組成的是表數據。

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

字段定義則有字段名,字段類型,是否為空,是否自增長,缺省值等。
記錄則是實際的數據值,同一個表的記錄的定義都是一樣的。也就是說有相同的特征。

2.1.3、視圖
視圖類就相當于虛擬的項目小組,可以是同一個部門出來的,也可以是跨部門的。
視圖之所以說是虛擬,因為沒有實際存在的數據。無論是定義,還是數據,都是從別的表里組合起來的。

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 hsviewG;
*************************** 1. row ***************************
                View: hsview
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `hsview` AS select `hstesttbl`.`k` AS `k`,`hstesttbl`.`v` AS `v` from `hstesttbl`

從上面的命令可以看出,視圖跟表的操作有很多相似。并且從表到視圖還能修改字段名。

2.1.4、索引
索引就是相當于部門每個員工的一些用于快速找到員工的屬性。比如職位,比如愛好,比如畢業學校。通過這些,就能將部門的人分類,每一次查詢都能縮小結果集。

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

2.1.5、鍵
鍵就相當于部門每個人的一些最快捷且唯一的聯絡方式,比如電話、郵箱,微信號,QQ號都是。
添加鍵跟添加索引,類似,刪除鍵這里介紹一下,
比如:

alter table hstesttbl drop primary key;

2.1.6、權限
是指公司內部限制的一些紀律,比如公司外部人,是不能知道公司內部的一些事情的。
我們可以通過

grant ALL PRIVILEGES on dbname.* to "user"@"127.0.0.1" identified by "password" with grant option;

這樣的語句給某用戶授權,全權訪問某個庫。這個這個用戶只能訪問這個庫,在沒有獲得更多授權的情況下。

上面說只有root用戶能創建數據庫,而對于上面的其他操作,比如創建表,添加視圖,新建、刪除索引和鍵,只要經過了上面的授權,就可以做了。

2.1.7、SQL
SQL就相當于公司的一些規定,指令。比如我們在公司里交流說,可以發布到生產環境了。聽起來一句簡單的話,包含著可能進行了產品確認,各種測試,可以由運維上線了。
SQL是我們同數據庫打交道的指令。上面其實在講各個概念時,已經都講過了一些SQL命令,我想這里提幾個點。

手寫命令,非常重要,優才網要求自己的學員都要有手寫命令的能力,不能離開phpmyadmin就沒有辦法干活。

SQL上面盡管介紹了這么多,我們對它進行一個分類,其實這個分類早有人做了。主要是為DDL、DML、DCL(當然還有一個TCL,我們今天不講)。

(1)數據定義。(SQL DDL)用于定義SQL模式、基本表、視圖和索引的創建和撤消操作。上面的,大多是DDL。
(2)數據操縱。(SQL DML)數據操縱分成數據查詢和數據更新兩類。數據更新又分成插入、刪除、和修改三種操作。 這就是我們平常所熟知的增刪改查操作。
(3)數據控制(DCL)。包括對基本表和視圖的授權,完整性規則的描述,事務控制等內容。這個就是我們上面也有涉及,權限處理。

2.2 學術性的概念
?1、范式與冗余
–第一范式,列不可以分割,比如興趣字段,它里面,可能寫了籃球、電影等多項。原則上來講,這個表是不滿足第一范式的。應該專門建立一個用戶興趣表,有uid和興趣。然后一個人有多條記錄。
所以在數據庫字段定義時,需要顯式地指明數據類型,除了文本類型之外,你很難往一個字段里附加多個信息。

–第二范式,主鍵決定了其他全部屬性,比如一個班級學生表,一個學號,決定了學生其他的信息,比如有一個表,里面有學號、學院編號、學生姓名、年齡、學院、院長。學號和學院編號是主鍵,看起來沒有錯,學生在這個學院編號里,決定了哪個學院,院長是誰誰誰。不過這是不滿足第二范式的,因為學院和院長不是由學號這個主鍵來決定的,而是由學院編號來決定的。所以要分拆。

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

?2、ACID:
–原子性 (Atomicity) , 不可中間失敗。比如說,我們買東西,一邊是買家付款,從買家賬戶扣除,另一邊是存錢入賣家賬戶,這分了兩步,這不是原子的。因為可能中間失敗。比如扣錢成功,存錢未成功。

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

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

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

2.3 更多高級術語
1、存儲引擎 、事務、復合索引、連接池、備份、恢復
2、主從復制、行鎖定、表鎖定、慢查詢、二進制日志、臨時表、內容分發、同步、數據庫分區、分庫、分表、水平拆分、垂直拆分
這更多的高級術語,我們在后面再交流,或者在全棧工程師課程中再交流。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17451.html

相關文章

  • 據庫本質概念及其應用實踐(二)

    摘要:通過就可以看到這個文本數據庫的運行的例子。有兩個特點目前已經是非常流行的文件數據庫,尤其是嵌入式數據庫,在移動應用中也應用得十分普遍。分別用即將廢棄的和以來操作數據庫。 三、各種數據庫的關系、實踐3.1、自制簡單文本格式(甚至在PHP中,用數據保存配置) A、比如有一個AngularJS的示例項目,就用json保存示例數據的格式。 ![請輸入圖片描述][1] B、PHP保存配置數據就...

    int64 評論0 收藏0
  • 詳解云原生應用實踐與未來趨勢

    摘要:近日,愛分析在京舉辦了愛分析中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業的發展趨勢。演講實錄黃啟功大家好首先做一下自我介紹,我是時速云黃啟功,感謝愛分析的邀請,我今天分享的主題叫云原生應用實踐與未來趨勢。 近日,愛分析在京舉辦了 2018 愛分析·中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業的發展趨勢。愛分析邀請了云計算領域標桿公司時...

    wujl596 評論0 收藏0
  • 擴展spring cache 支持緩存多租戶及其自動過期

    摘要:在多租戶下租戶所請求的并不是同一入參雖然看起來參數名參數值都是一樣的,更不能返回同一個結果。默認的根據入參來區分不能滿足多租戶系統的設計需求不能實現根據租戶隔離。 spring cache 的概念 Spring 支持基于注釋(annotation)的緩存(cache)技術,它本質上不是一個具體的緩存實現方案(例如 EHCache 或者 OSCache),而是一個對緩存使用的抽象,通過在...

    hover_lew 評論0 收藏0

發表評論

0條評論

William_Sang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<