![電子課件數(shù)據(jù)科學(xué)概論ch9_第1頁](http://file4.renrendoc.com/view/de9cce8f7c830aff2a5f2be14ccd2937/de9cce8f7c830aff2a5f2be14ccd29371.gif)
![電子課件數(shù)據(jù)科學(xué)概論ch9_第2頁](http://file4.renrendoc.com/view/de9cce8f7c830aff2a5f2be14ccd2937/de9cce8f7c830aff2a5f2be14ccd29372.gif)
![電子課件數(shù)據(jù)科學(xué)概論ch9_第3頁](http://file4.renrendoc.com/view/de9cce8f7c830aff2a5f2be14ccd2937/de9cce8f7c830aff2a5f2be14ccd29373.gif)
![電子課件數(shù)據(jù)科學(xué)概論ch9_第4頁](http://file4.renrendoc.com/view/de9cce8f7c830aff2a5f2be14ccd2937/de9cce8f7c830aff2a5f2be14ccd29374.gif)
![電子課件數(shù)據(jù)科學(xué)概論ch9_第5頁](http://file4.renrendoc.com/view/de9cce8f7c830aff2a5f2be14ccd2937/de9cce8f7c830aff2a5f2be14ccd29375.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 內(nèi)容可修改電子課件數(shù)據(jù)科學(xué)概論ch9數(shù)據(jù)庫和數(shù)據(jù)倉庫數(shù)據(jù)結(jié)構(gòu)簡介數(shù)據(jù)庫和 SQL數(shù)據(jù)倉庫和商業(yè)智能目錄444數(shù)據(jù)結(jié)構(gòu)簡介在計算機(jī)科學(xué)里,數(shù)據(jù)結(jié)構(gòu)指互相之間存在著一種或多種特定關(guān)系的數(shù)據(jù)元素集合。描述這些關(guān)系而抽象出來的數(shù)學(xué)模型稱為邏輯結(jié)構(gòu),主要包括: 集合結(jié)構(gòu) 線性結(jié)構(gòu) 樹形結(jié)構(gòu) 圖形結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)簡介計算機(jī)科學(xué)通常從數(shù)據(jù)的存儲階段開始關(guān)注,但數(shù)據(jù)科學(xué)需要更早的介入,在數(shù)據(jù)的采集或觀測階段開始考慮數(shù)據(jù)的測量測度。參照統(tǒng)計學(xué)中的定義,數(shù)據(jù)科學(xué)也將數(shù)據(jù)的測量尺度分為四類: 定類尺度 定序尺度 定距尺度 定比尺度數(shù)據(jù)的測量尺度定類尺度(Nominal Measurement)是按照事物的特征辨別和劃
2、分異同的測量層次,也稱為類別尺度、名義尺度。例如性別數(shù)據(jù),可以用 1 代表男性,用 2 代表女性。這兩個數(shù)值只描述差異,不存在大小之分,可以進(jìn)行 “=” 和“=” 運(yùn)算。在一些統(tǒng)計計算語言中(例如 R)會使用 “因子” 這一特殊的結(jié)構(gòu)來描述定類尺度的數(shù)據(jù)變量。定類尺度定序尺度(Ordinal Measurement)是按照事物的特征依順序和級別進(jìn)行排列的測量層次,也稱為順序尺度、等級尺度。例如收入數(shù)據(jù),可以分為低收入組、中等偏下收入組、中等收入組、中等偏上收入組、高收入組這五個級別。每個級別的收入不同,且層層上升,具有順序關(guān)系。在數(shù)據(jù)的計量和分析中,研究者通常使用順序增加的編號來描述,例如第
3、1、2、3、4、5 組。該尺度的數(shù)據(jù)除了可以進(jìn)行 “=” 和 “=” 運(yùn)算外,還能進(jìn)行 、 和 運(yùn)算。定序尺度定距尺度(Interval Measurement)是既能將事物區(qū)分類別和等級,又可以確定其之間數(shù)量差別、間隔距離的測量層次,也稱為間隔尺度、區(qū)間尺度。在收入等級中,雖然不同等級存在大小的區(qū)別,但分割方式并不一定均勻,第 1 級和第 2 級的差距很可能比第 4 級和第 5 級的差距小得多。但是有些數(shù)據(jù)(例如氣溫),從 20 C 上升到 30 C 和從30 C 上升到 40 C 的變化是相同的。該尺度下的數(shù)字之間除了可以比較大小之外,其差額也是有意義的,因此還支持+ 和 運(yùn)算。定距尺度定
4、比尺度(Scale Measurement)是在定距尺度上增加絕對零點的測量層次,也被稱為等比尺度、比率尺度。類似溫度的數(shù)據(jù),因為 0 并不是絕對零點,所以 40 不能說是 20 的兩倍。沒有一個固定的原點的話,數(shù)字之間的比例關(guān)系就沒有意義。但是有些數(shù)據(jù)(例如重量)衡量了物體的質(zhì)量,由于最小值近似為 0,所以 100kg 是 50kg 的 2 倍。這樣的測量尺度除了可以進(jìn)行 + 和 運(yùn)算外,還可以進(jìn)行 和 運(yùn)算。定比尺度數(shù)據(jù)類型(Data Type)是一個值的集合和定義在這個值集上一組操作的總稱,最早出現(xiàn)在一些高級程序設(shè)計語言中,用來刻畫程序操作對象的特性。一般來說,數(shù)據(jù)類型可以分為兩類:一類
5、是原子類型,另一類是結(jié)構(gòu)類型。數(shù)據(jù)的基礎(chǔ)類型原子類型的值是不可分解的,例如 C 語言包含的 整型(int) 字符型(char) 浮點型(float) 雙精度型(double)很多其他編程語言的基本類型都相似,可能名稱略有不同。原子類型整型表示整數(shù),一般在內(nèi)存中占兩個字節(jié)。有些編程語言還有長整型(long)結(jié)構(gòu),占四個字節(jié)。有一類比較基礎(chǔ)的數(shù)據(jù)類型邏輯型在很多編程語言中實際上是基于整型數(shù)據(jù)存儲,通常用 0 和 1 表示,但是可以聲明成邏輯型,并支持邏輯運(yùn)算。R 和 Python 中的邏輯型數(shù)據(jù)都可以同時支持整數(shù)和邏輯運(yùn)算,也可以很容易地轉(zhuǎn)化成整型數(shù)據(jù)。整型浮點型和雙精度型都用來表示實數(shù)。由于計算
6、機(jī)只能存儲整數(shù),所以實數(shù)都是約數(shù),需要指定精度。單精度的實數(shù)(Single Real)在內(nèi)存中占 4 個字節(jié),通??梢员4?8 位有效數(shù)字(1 位整數(shù)加 7 位小數(shù)),在 C 語言等編程語言中被稱為浮點型數(shù)據(jù)。雙精度的實數(shù)(Double Real)在內(nèi)存中占 8 個字節(jié),通??梢员4?16 位有效數(shù)字,在 C 語言等編程語言中被稱為雙精度型數(shù)據(jù)。R 不區(qū)分浮點型和雙精度型,使用一個單獨(dú)的數(shù)值型(numeric)作為原子類型。浮點型和雙精度型C 語言等編程語言中的字符型數(shù)據(jù)代表單個的字符,作為原子類型而存在。如果需要表示字符串,就使用結(jié)構(gòu)類型的字符串,并提供一些字符串操作的函數(shù)或方法。R 和 P
7、ython 中不區(qū)分字符與字符串,都用字符這種原子類型來表示,極大地簡化了操作,非常方便數(shù)據(jù)科學(xué)的使用。字符型數(shù)據(jù)不同編程語言在原子類型基礎(chǔ)上大都提供了一些復(fù)合的結(jié)構(gòu),稱為結(jié)構(gòu)類型。其值通常由一些基礎(chǔ)元素按照某種結(jié)構(gòu)組成,在不同的應(yīng)用領(lǐng)域,適用于不同的結(jié)構(gòu)。例如 R 和 Python 中的數(shù)組就是典型的結(jié)構(gòu)類型。每個基本元素都是數(shù)值或者字符,可以實現(xiàn)一些數(shù)組操作和矩陣運(yùn)算,在數(shù)據(jù)科學(xué)中很常用。此外還有數(shù)據(jù)框,已經(jīng)成了數(shù)據(jù)分析中的基礎(chǔ)結(jié)構(gòu),同樣由數(shù)值和字符等基礎(chǔ)元素構(gòu)成,還可以和數(shù)組進(jìn)行轉(zhuǎn)化。結(jié)構(gòu)類型數(shù)據(jù)的邏輯結(jié)構(gòu)通常分為以下四類: 集合結(jié)構(gòu) 線性結(jié)構(gòu) 樹形結(jié)構(gòu) 圖形結(jié)構(gòu)其中集合結(jié)構(gòu)中元素的關(guān)系
8、比較松散,只屬于同一個集合,可以認(rèn)為彼此之間不存在關(guān)系。另外三種結(jié)構(gòu)描述了三類關(guān)系,線性結(jié)構(gòu)中的元素之間存在一對一的關(guān)系,樹形結(jié)構(gòu)的元素之間存在一對多的關(guān)系,圖形結(jié)構(gòu)的元素之間存在多對多的關(guān)系。在具體的使用中,以下七種結(jié)構(gòu)比較常見。數(shù)據(jù)的邏輯結(jié)構(gòu)線性結(jié)構(gòu)中最簡單的結(jié)構(gòu)是線性表,其中的所有元素都具有相同的數(shù)據(jù)類型,按照順序一個接一個地排列。其典型的實現(xiàn)方式是順序存儲,把各個元素依次存放在一組連續(xù)的內(nèi)存單元中,可以很容易地根據(jù)序號來查詢。這樣的線性表也被稱為順序表。如果線性表的下標(biāo)維度超過了 1,就是常用的數(shù)組結(jié)構(gòu)。數(shù)組也被認(rèn)為是線性表的推廣,在不同的編程語言中有不同的實現(xiàn)方式,有些編程語言里實際
9、上就是一維的線性表加上額外的維度信息。線性表(Linear List)和數(shù)組(Array)順序表的每個元素存在一組相鄰的內(nèi)存單元,查詢時非常高效,但是刪除和新增元素時需要改變其他元素的位置,相對較麻煩。另一種存儲方式是把每個元素隨機(jī)存儲,除了存儲該元素的值之外,還存儲下一個元素的位置,這樣的結(jié)構(gòu)就稱為鏈表。鏈表也是一種常見的線性表,使用上也和向量類似,形式上和順序表沒差別,但是存儲的方式完全不同。鏈表查詢時需要重頭開始遍歷,比線性表費(fèi)時,但是插入和刪除時很容易,以插入元素為例,改變要插入的位置的指針即可。鏈表(Linked List)棧也是一種線性結(jié)構(gòu),其中的元素遵守 “先進(jìn)后出”1 的規(guī)則。
10、最早進(jìn)入的元素存放的位置稱為棧底(Bottom),最后進(jìn)入的元素存放的位置稱為棧頂(Top),如圖1所示。進(jìn)棧操作(Puch)會把新元素推入棧中,其位置成為新的棧頂。出棧操作(Pop)會把頂部的元素從棧中彈出。該數(shù)據(jù)結(jié)構(gòu)可以用來實現(xiàn)一些算法的操作,具體的存儲方式可以基于數(shù)組也可以基于鏈表。但是從邏輯上來看,也是一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。圖 1: 棧結(jié)構(gòu)示例棧(Stack)隊列與棧類似,但遵守 “先進(jìn)先出”1,如圖2所示。最早進(jìn)入的元素的位置稱為隊頭(Front),最晚進(jìn)入的元素的位置稱為隊尾(Rear)。入隊操作(Enqueue)會把新元素從隊尾放入隊列中,出隊操作(Dequeue)會把隊頭的元素移
11、出隊列。其存儲方式同樣可以基于數(shù)組或者鏈表,也是一種很常見的邏輯結(jié)構(gòu)。圖 2: 隊列結(jié)構(gòu)示例隊列(Queue)在之前介紹的幾種數(shù)據(jù)結(jié)構(gòu)中,查詢效率最高的是數(shù)組,根據(jù)下標(biāo)就可以在常數(shù)時間內(nèi)迅速找到該位置的元素。但是如果不知道下標(biāo)或者序號,查詢時就需要遍歷整個數(shù)組,不再高效。哈希表可以不依賴于數(shù)組的下標(biāo),把某個名稱和位置關(guān)聯(lián)起來實現(xiàn)快速的查詢。哈希表也稱為散列表,是一種線性結(jié)構(gòu),提供了鍵(Key)和值(Value)的映射關(guān)系。鍵就是需要查詢的名稱,值就是其對應(yīng)的位置中存儲的值。不同編程語言中哈希表的具體結(jié)構(gòu)可能有所不同,但都可以實現(xiàn)常數(shù)時間的查詢,非常方便。Python 中的字典結(jié)構(gòu)就提供了哈希表
12、的功能,可以實現(xiàn)快速查詢。R 的基礎(chǔ)包中沒有直接的哈希函數(shù),但是在環(huán)境對象中提供了哈希功能。哈希表(Hash Table)樹是一種典型的非線性結(jié)構(gòu),如圖3。1 號結(jié)點(Node)是其起點,稱為根結(jié)點(Root)。根節(jié)點下方可以有很多分叉,稱為其子結(jié)點(Child)。每個結(jié)點都可能有子結(jié)點,只要包含子結(jié)點,該結(jié)點就稱為其子結(jié)點的父結(jié)點(Parent),如果某個結(jié)點不存在子結(jié)點,就稱其為葉結(jié)點(Leaf)。從樹的根結(jié)點到葉結(jié)點可以有很多層級,樹的最大層級數(shù)稱為樹的深度,圖中樹的深度為 4。圖 3: 樹結(jié)構(gòu)示例樹(Tree)圖也是一種非常常用的非線性結(jié)構(gòu)。其基礎(chǔ)元素也是結(jié)點,不同元素之間存在著連接關(guān)
13、系,稱為邊(Edge)。在不同的使用場景里,邊也可稱為關(guān)系(Relationship)、連帶(Tie)、鏈接(Link)或者連接(Connection)。如果連接有方向的話,兩端的頂點分別是源(Source)和目標(biāo)(Target)。如果邊的大小有差異,其數(shù)值稱為權(quán)重(Weight)。在圖結(jié)構(gòu)中,將結(jié)點與邊連接起來的序列稱為漫步(Walk),每個結(jié)點只經(jīng)過一次的漫步稱為路徑(Path),兩結(jié)點之間最短的路徑稱為最短路徑。圖結(jié)構(gòu)除了可以用來實現(xiàn)或者優(yōu)化算法以外,在很多分析方法中也作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)而存在,例如概率圖模型、社會網(wǎng)絡(luò)分析等。圖(Graph)圖 4: 圖結(jié)構(gòu)示例圖(Graph)26262
14、6數(shù)據(jù)庫和SQL上一節(jié)介紹的各種數(shù)據(jù)結(jié)構(gòu)都可以對應(yīng)到不同的文件結(jié)構(gòu),可以用來存儲和管理數(shù)據(jù),也可以配合算法進(jìn)行計算。但是正如數(shù)據(jù)結(jié)構(gòu)非常多樣一般,文件結(jié)構(gòu)也千差萬別,很難標(biāo)準(zhǔn)化。這就容易造成數(shù)據(jù)的不一致,不方便共享。為了解決文件系統(tǒng)中存在的上述問題,從 20 世紀(jì) 60 年代后期開始,專門針對多用戶、多場景共享數(shù)據(jù)需求而設(shè)計的數(shù)據(jù)庫軟件逐漸興起。1968 年,美國 IBM 公司推出了商品化的基于層次模型的信息管理系統(tǒng)(IMS)。1969 年,美國數(shù)據(jù)系統(tǒng)語言協(xié)會提出了數(shù)據(jù)庫的網(wǎng)狀數(shù)據(jù)模型。1970 年,IBM 公司發(fā)表系列文章提出了關(guān)系模型,奠定了關(guān)系數(shù)據(jù)庫管理系統(tǒng)的理論基礎(chǔ),一直沿用至今。數(shù)
15、據(jù)庫和SQL關(guān)于數(shù)據(jù)庫(Database)的定義,一般認(rèn)為是長期存儲在計算機(jī)內(nèi)、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫的具體實現(xiàn)可以有很多不同的軟件版本,但核心的框架是數(shù)據(jù)模型。傳統(tǒng)的數(shù)據(jù)模型主要包括: 層次模型(Hierarchical Model) 網(wǎng)狀模型(Network Model) 關(guān)系模型(Relational Model)數(shù)據(jù)庫基礎(chǔ)介紹層次模型最早由 IBM 公司提出,使用樹結(jié)構(gòu)來表示實體和關(guān)系的結(jié)構(gòu)。其結(jié)構(gòu)簡單、層次分明,但是無法直接表示兩個以上的實體之間的復(fù)雜關(guān)系。網(wǎng)狀模型是一種有向圖結(jié)構(gòu),可以更好地描述復(fù)雜的關(guān)系,不過其操作語言過于復(fù)雜,不適合普通用戶使用。關(guān)系模型是現(xiàn)在數(shù)據(jù)庫
16、的主流模型,由 IBM 公司的研究員Codd (1970) 首次提出,他在文章中定義了一些關(guān)于關(guān)系的代數(shù)運(yùn)算,開創(chuàng)了數(shù)據(jù)庫的關(guān)系方法和數(shù)據(jù)規(guī)范化理論的研究,也因此獲得了 1981 年的圖靈獎。數(shù)據(jù)模型本節(jié)以 SQLite 為例介紹數(shù)據(jù)庫的基礎(chǔ)知識和操作方式。SQLite 是一個輕量級的關(guān)系型數(shù)據(jù)庫,誕生于 2000 年,采用 “Public Domain” 方式授權(quán),任何個人或商業(yè)機(jī)構(gòu)都可以免費(fèi)使用。SQLite 官網(wǎng)上只提供了最簡單的程序包供下載使用,只能進(jìn)行命令行操作或者通過 R 或 Python 等編程語言來調(diào)用,不包括圖形界面的管理工具。不過第三方的工具很多,而且大多數(shù)都是開源免費(fèi)的。
17、本節(jié)選擇 SQLite Expert 作為例子,該軟件的個人版是免費(fèi)的,功能非常強(qiáng)大,而且對中文的支持也很好。SQLite圖5顯示了 SQLite Expert 的操作界面,通過上方工具欄中的“Open Database” 圖標(biāo)可以打開已有的數(shù)據(jù)庫文件。例如電腦中已經(jīng)存在一個名為 “dbtest” 的數(shù)據(jù)庫,在 SQLite 中以“dbtest.db” 文件的形式存儲。通過選擇該文件,即可將數(shù)據(jù)庫導(dǎo)入到 SQLite Expert 管理工具。圖 5: SQLite Expert 導(dǎo)入數(shù)據(jù)庫SQLite ExpertSQLite Expert 以及很多其他的數(shù)據(jù)庫管理工具都可以同時管理多個數(shù)據(jù)庫
18、,關(guān)系型數(shù)據(jù)庫的基礎(chǔ)結(jié)構(gòu)通常都是 “數(shù)據(jù)庫- 數(shù)據(jù)表” 這個層次關(guān)系。例如這個 “dbtest” 數(shù)據(jù)庫中就包含了“cource”“grade”“student” 這三張數(shù)據(jù)表,點擊其中一張后,會自動顯示其中的數(shù)據(jù),如圖6 。利用 SQLite Expert 還可以進(jìn)行增、刪、改等操作,還可以使用 SQL 語句來進(jìn)行管理。圖 6: SQLite Expert 查看數(shù)據(jù)表SQLite Expert除了 SQLite,其他專業(yè)的數(shù)據(jù)庫平臺有: DB2 Oracle PostgreSQL Infomix Sybase 和 SQL Server MySQL HBase MongoDB Redis常見的
19、數(shù)據(jù)庫產(chǎn)品IBM 公司于 1968 年推出了基于層次模型的數(shù)據(jù)庫 IMS,市場反應(yīng)很好。1970 年 IBM 公司的 E.F. Codd 提出了關(guān)系模型,隨后 IBM公司于 1973 年啟動了 System R 項目。此后 IBM 公司以System R 為原型發(fā)布了一些實驗性的系統(tǒng)。1983 年,IBM 正式發(fā)布了 DATABASE 2,就是今天的DB2。DB2 一直整合在 IBM 的很多大型軟硬件系統(tǒng)中,通常是和 IBM 的產(chǎn)品綁定在一起的,所以用戶群比較單一。圖 7: DATABASE 2DB21977 年 6 月,Larry Ellison、Bob Miner 和 Ed Oates 在
20、硅谷創(chuàng)辦了 SDL 公司,開始設(shè)計和開發(fā)一款關(guān)系型數(shù)據(jù)庫。1979 年他們將公司更名為 RSI,并且發(fā)布了可用于 DEC 公司 PDP-11 計算機(jī)上的 ORACLE 數(shù)據(jù)庫。1983 年,他們將公司更名為 Oracle,并且發(fā)布了第三版的 ORACLE 產(chǎn)品。該產(chǎn)品基于 C 語言開發(fā),具有很好的移植性。由于良好的跨平臺能力和穩(wěn)定性,Oracle 逐漸成了數(shù)據(jù)庫領(lǐng)域的領(lǐng)軍者,長期占據(jù)世界數(shù)據(jù)庫市場份額的第一位。OracleIBM 的 System R 項目發(fā)表了很多文章,加州大學(xué)伯克利分校的 Michael Stonebraker 和 Eugene Wong 教授讀到這些文章后開始設(shè)計和開發(fā)自
21、己的數(shù)據(jù)庫系統(tǒng),將其命名為交互式圖形和檢索系統(tǒng)(Interactive Graphics and Retrieval System,簡稱 Ingres)。Ingres 項目采用 BSD 授權(quán)方式,可以被開源獲取,后來有很多著名的商業(yè)數(shù)據(jù)庫軟件都是基于 Ingres。Stonebraker 教授因為發(fā)明了很多現(xiàn)代數(shù)據(jù)庫中的概念以及成功地商業(yè)化了他在數(shù)據(jù)庫領(lǐng)域的開創(chuàng)性工作,獲得了 2014 年的圖靈獎。Ingres 項目在 20 世紀(jì) 80 年代推出了一個改進(jìn)版本post-ingres,簡稱 postgres。該項目停止后,開源社區(qū)基于其源碼于 1995 年發(fā)布了 PostgreSQL,一直沿用至
22、今,是一款非常優(yōu)秀且受歡迎的開源數(shù)據(jù)庫。PostgreSQL圖 9: PostgreSQLPostgreSQLInformix 公司成立于 1980 年,針對關(guān)系型數(shù)據(jù)庫的市場開發(fā)產(chǎn)品。1984 年拿到 Ingres 源碼后推出了改進(jìn)后的產(chǎn)品,后來不斷發(fā)展,曾經(jīng)一度占據(jù)市場份額第二的位置。不過由于管理上的失敗,Informix 于 2000 年被 IBM 收購。圖 10: InfomixInfomixSybase 公司成立于 1984 年,創(chuàng)始人 Robert Epstein 來自Ingres 項目的核心團(tuán)隊,基于 Ingres 開發(fā)了自己的數(shù)據(jù)庫產(chǎn)品 Sybase SQL Server。后來
23、該產(chǎn)品引入微軟公司合作開發(fā),1994 年雙方終止合作后,微軟得到了 SQL Server 的名稱,并一直沿用至今,是微軟服務(wù)端數(shù)據(jù)庫的主打產(chǎn)品。Sybase 將產(chǎn)品更名為 Sybase ASE,2010 年 Sybase 被 SAP收購,其產(chǎn)品也整合進(jìn)了 SAP。Sybase和SQL Server創(chuàng)始人 Monty Widenius 早在 1979 年就開始設(shè)計一個小型的關(guān)系型數(shù)據(jù)庫,1996 年發(fā)布了 MySQL 1.0,開始不斷移植到不同的平臺。1999 年 Monty 在瑞典成立了 MySQL AB 公司,開發(fā)和運(yùn)營數(shù)據(jù)庫產(chǎn)品 MySQL。其誕生之初對個人用戶免費(fèi),對商業(yè)用戶收費(fèi)。200
24、0 年時 MySQL 改換成 GPL 授權(quán)模式,無論是個人用戶還是商業(yè)用戶都可以免費(fèi)使用,但是需要開源。2008 年,SUN 公司收購了 MySQL。2009 年,Oracle 收購了 SUN,MySQL 存在被閉源的風(fēng)險,于是 Monty 發(fā)起了新項目 MariaDB,作為開源數(shù)據(jù)庫 MySQL 的替代品。MySQL圖 12: MySQLMySQLHBase 最早來自于 Apache Hadoop 平臺中的數(shù)據(jù)庫模塊,2007 年隨 Hadoop 一起發(fā)布,參考了 Google 公司的專有數(shù)據(jù)庫 BigTable 的思路而開發(fā),后來于 2010 年成了 Apache基金會的頂級項目。其操作方
25、式比較類似于關(guān)系型數(shù)據(jù)庫,但實際上是 NoSQL數(shù)據(jù)庫中的典型代表,是一種列存儲型數(shù)據(jù)庫。由于 HBase依托于 Hadoop 的 HDFS 文件系統(tǒng),因此在 Hadoop 生態(tài)圈非常流行,是主流的數(shù)據(jù)庫選擇之一。圖 13: HBaseHBaseMongoDB 數(shù)據(jù)庫由 MongoDB 公司于 2009 年發(fā)布,可能是 NoSQL 領(lǐng)域最受歡迎的數(shù)據(jù)庫。其發(fā)布之初采用 GPL 開源協(xié)議,但是很多商業(yè)公司使用MongoDB 后并沒有將后續(xù)的代碼開源,因此該公司于 2018年將協(xié)議換成 SSPL,商業(yè)應(yīng)用時要么購買商業(yè)許可證、要么選擇開源。MongoDB 是一個基于 JSON 文件的文檔型數(shù)據(jù)庫,
26、沒有關(guān)系型數(shù)據(jù)庫那種關(guān)系模式,其數(shù)值可以任意嵌套,非常靈活,在很多新領(lǐng)域有著廣泛的應(yīng)用。MongoDBRedis 是另一種典型的 NoSQL 數(shù)據(jù)庫,采用鍵值對的模式進(jìn)行存儲,由意大利人 Antirez 于 2009 年發(fā)布,很快就流行起來。從 2010 年開始,Redis 的開發(fā)工作由 VMware 主持。早期的 Redis 采用 AGPL 開源協(xié)議,2018 年替換成 Apache 與Commons Clause 相結(jié)合的協(xié)議。Redis 的數(shù)據(jù)結(jié)構(gòu)比較類似哈希表,在查詢方面非常高效,其主要操作在內(nèi)存中進(jìn)行,可以滿足很多復(fù)雜的分析需求。Redis關(guān)系模型的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)是一張二維表,一個關(guān)系
27、對應(yīng)一張表,關(guān)系名即表名。和很多分析類軟件中的二維表比較類似,每一行稱為一條記錄,每一列稱為一個字段。不過數(shù)據(jù)庫中的關(guān)系模型更加復(fù)雜,其行的基本單位是元組(tuple),列的基本單位是屬性(attribute)。屬性包括名稱、類型和長度特征,屬性名即為字段名,屬性的取值范圍稱為域(domain)。每一個元組對應(yīng)的屬性值稱為分量,可唯一標(biāo)識一個元組的屬性或者屬性集稱為鍵(key)或者主碼。一個關(guān)系可以看成是共享屬性的一個或者多個元組組成的集合。圖16描述了關(guān)系模型的基本元素。SQL語句簡介圖 16: 關(guān)系型數(shù)據(jù)庫結(jié)構(gòu)關(guān)系模型關(guān)系模型里的數(shù)據(jù)操作方式主要包括查詢、插入、刪除和修改,通常會在模型的基
28、礎(chǔ)上定義一系列的集合操作方式,目前最通用的語言是 SQL,通常包含以下幾個部分:數(shù)據(jù)定義語言(DDL),用來在數(shù)據(jù)庫中創(chuàng)建新表或刪除表,以及加入索引等,包括 create、alter、drop 等關(guān)鍵字。數(shù)據(jù)操縱語言(DML),用來對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行一些操作,包括 insert、update、delete 等關(guān)鍵字。數(shù)據(jù)查詢語言(DQL),用來從表中獲取數(shù)據(jù),包括 select、from、where 等關(guān)鍵字。SQL語句簡介假如讀者需要在數(shù)據(jù)庫中新建一張名為 “test” 的表,其包含兩個字段 “x” 和 “y”,其中 x 為整數(shù)型,y 為字符型,其長度為 4,可以使用 create 語句來創(chuàng)
29、建,如圖17:圖 17: SQL 示例:createSQL語句簡介新建的數(shù)據(jù)表中并沒有數(shù)據(jù),如果需要插入一條記錄,可以使用insert 語句,在括號中指定要插入的字段名,并通過 values 關(guān)鍵字來輸入記錄的數(shù)值。代碼:insert into test (x, y) values (3, a)。此時點擊 “test” 數(shù)據(jù)表,可以發(fā)現(xiàn)該記錄已添加,如圖18:圖 18: SQL 示例:insertSQL語句簡介在數(shù)據(jù)分析應(yīng)用中,最常用的操作是查詢,通過 select 語句和一些關(guān)鍵字來實現(xiàn)?;A(chǔ)的用法中,select 后接字段名,可用逗號分隔,用來選擇要查詢的列,“*” 表示選擇所有列。fro
30、m 后面接表名,表示要查詢的表。最后還可以加 where 語句,用條件表達(dá)式來篩選行。例如要查詢數(shù)據(jù)表 “student” 中所有女生的姓名和年齡。代碼:select sname, age from student where sex = 女。SQL語句簡介統(tǒng)計函數(shù) count 可以計算選擇出來的結(jié)果的行數(shù),而不是輸出所有行的信息。類似的統(tǒng)計函數(shù)還有最大值 max、最小值 min、平均數(shù) avg。以下語句分別輸出數(shù)據(jù)表的總行數(shù)以及年齡的平均值:select count(*) from student; select avg(age) from student。SQL語句簡介在 R 和 Pyth
31、on 中,針對特定的數(shù)據(jù)庫通常都存在響應(yīng)的客戶端,以第三方包的形式進(jìn)行操作。本節(jié)仍然以 SQLite 為例,R 中可以安裝 RSQLite 包,Python 內(nèi)置了 sqlite3 包,如果要查詢之前的示例數(shù)據(jù)庫中“student” 數(shù)據(jù)表里性別為 “女” 的學(xué)生信息,執(zhí)行以下程序即可。圖 19: SQL 示例SQL語句簡介535353數(shù)據(jù)倉庫和商業(yè)智能在業(yè)務(wù)領(lǐng)域,不同的信息系統(tǒng)中可能包含不同的數(shù)據(jù)庫,如業(yè)務(wù)數(shù)據(jù)、財務(wù)數(shù)據(jù)、管理數(shù)據(jù)等。企業(yè)進(jìn)行數(shù)據(jù)分析的時候,通常需要把所有數(shù)據(jù)整合到一起,從而得到更大的價值。有時候還需要引入第三方的外部數(shù)據(jù),所有這些數(shù)據(jù)按照一定的流程進(jìn)行處理,最后都匯總到一個
32、統(tǒng)一的 “倉庫” 中。圖20顯示了一個數(shù)據(jù)倉庫的一般架構(gòu)。圖 20: 數(shù)據(jù)倉庫的一般架構(gòu)數(shù)據(jù)倉庫基礎(chǔ)介紹數(shù)據(jù)庫進(jìn)入數(shù)據(jù)倉庫的一個關(guān)鍵步驟是 ETL,表示數(shù)據(jù)的抽?。‥xtraction)、轉(zhuǎn)換(Trans-formation)和加載(Load)。抽取指的是通過接口從源數(shù)據(jù)庫中獲取數(shù)據(jù),可以使用專用的 ETL 工具,也可以使用 R 和 Python 等編程語言直接查詢數(shù)據(jù)。轉(zhuǎn)換指的是對原始數(shù)據(jù)進(jìn)行轉(zhuǎn)換操作,通常包括數(shù)據(jù)的校驗、清洗、匯總等,在傳統(tǒng)的數(shù)據(jù)倉庫管理中可能只需要簡單地按照統(tǒng)一的目標(biāo)格式進(jìn)行處理。數(shù)據(jù)倉庫基礎(chǔ)介紹數(shù)據(jù)倉庫的底層基礎(chǔ)仍然是數(shù)據(jù)庫技術(shù),主流的數(shù)據(jù)倉庫也是以關(guān)系型數(shù)據(jù)庫產(chǎn)品作為
33、存儲工具。很多數(shù)據(jù)倉庫都建立在 Oracle、MySQL、PostgreSQL 等數(shù)據(jù)庫之上。數(shù)據(jù)倉庫和數(shù)據(jù)庫的區(qū)別主要在于數(shù)據(jù)模型的不同,用星型模型、雪花模型等多維模型來替代傳統(tǒng)的關(guān)系模型,從而更有利于查詢和多維分析,而不用考慮太多傳統(tǒng)數(shù)據(jù)庫的設(shè)計范式和冗余問題。此外,對于數(shù)據(jù)庫中的表也從邏輯上定義為事實表、維度表,將屬性域之間的關(guān)系重新定義為維度、量度、層次、顆粒度等。數(shù)據(jù)倉庫的多維模型事實表常用來描述事件的度量值,存儲了最細(xì)顆粒度的信息。每條記錄可以對應(yīng)一個事件,通常包含了時間信息,以及該事件的各種屬性。有一些相關(guān)聯(lián)的信息,比如產(chǎn)品類型、價格、出廠日期等,通常不會存儲在事實表之中。這樣的信息稱為維度信息,會存儲在維度表里。數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外協(xié)加工保密合同范本
- 2025年度智慧物流體系建設(shè)借款合同附件正規(guī)范本
- 2025年度數(shù)據(jù)中心裝修工程合同書
- 2025年度建筑智能化系統(tǒng)安裝承包合同
- 2025年度節(jié)能建筑一體化設(shè)計采購合同范本
- 2025年度房屋抵押貸款合同范本(含保險條款)
- 2025年度新能源儲能系統(tǒng)購銷買賣合同樣本
- 2025年度教育機(jī)構(gòu)網(wǎng)絡(luò)信息安全與維護(hù)合同范本
- 2025年度國家重點水利工程項目合同
- 2025年度古董字畫修復(fù)與藝術(shù)品修復(fù)行業(yè)市場調(diào)研合同
- 福建省泉州市晉江市2024-2025學(xué)年七年級上學(xué)期期末生物學(xué)試題(含答案)
- 醫(yī)美注射類知識培訓(xùn)課件
- 2025年春新人教版物理八年級下冊課件 第十章 浮力 第4節(jié) 跨學(xué)科實踐:制作微型密度計
- 2025年廣電網(wǎng)絡(luò)公司工作計劃(3篇)
- 貨運(yùn)車輛駕駛員服務(wù)標(biāo)準(zhǔn)化培訓(xùn)考核試卷
- 財務(wù)BP經(jīng)營分析報告
- 三年級上冊體育課教案
- 2024高考物理二輪復(fù)習(xí)電學(xué)實驗專項訓(xùn)練含解析
- 暴發(fā)性心肌炎的診斷與治療
- 2024年全國統(tǒng)一高考英語試卷(新課標(biāo)Ⅰ卷)含答案
- 2022屆“一本、二本臨界生”動員大會(2023.5)
評論
0/150
提交評論