前言
時間:2018年3月11日 13:30-16:30
地點:北京工業大學第三教學樓412教室
2018年3月11日筆者開始了在職研究生第一課,第一門課程是《高級數據庫系統》。中午十二點開始報道,忙完相關入學事宜,一點半王冠老師開始講課。按照正常的上課時間是13:30-17:00四節課,每節課 45 分鐘,中間休息時間應當是是半小時。實際上課時間13:30 -16:30,中間只休息了 7 分鐘。第一天上課,總的來說還算滿意,老師也很負責,短暫的三小時學習也算收獲滿滿。
接下來的文章內容中,筆者會先來說說對在職研究生的認識和看法,然后再將三小時的課程整理成筆記。
一、在職研究生值不值得上
事實上可能有人對在職研究生會存在偏見,認為在職研究生沒有全日制研究生權威,沒與全日制研究生好,認為只是花錢買一個學位而已,比如讀MBA主要就是為了結交更多的人。但筆者認為在職研究生值得上。我是去年年底報的北京工業大學計算機相關專業的在職研究生的,坦白說剛了解在職研究生的時候也是存在一些質疑的,但是又非常想提高自己的能力。于是,當時就聯系了身邊的不少讀研的朋友問問他們的了解。其中還咨詢過大學母校兩位老師的意見,兩位老師對我的想法還是很支持的。其中一位老師屬于治學和科研態度非常嚴謹的人,接觸的所有老師中沒有任何一個可以像他那般嚴謹,按照他的建議在職研究生同全日制相比,肯定沒有全日制學習時間那樣充足,但是所接受的教學、拿到的學位證同全日制學生相比基本沒有差別的;另外一位老師,三十歲拿到博士學位,行政上也即將到達正處級別,也是對此非常贊同我去讀的。至今還引以為傲的是大學期間幫助這幫老師寫過一部分博士論文,并協助其寫科研基金申請論文拿到二十多萬元的科研經費,雖然這些都只是和化學相關。
注意:以下相關理由主要是站在技術相關工作人員角度思考問題。在研究生值得上的理由,主要如下:
1、學的東西并不比全日制研究生少。
在職研究生也是要修夠一定的學分,課程安排同全日制基本一樣。如果按照每周兩天的課程計算,修夠學分也需要將近一年半的時間。且師資待遇同全日制無區別,課程的授課老師均是教授或者研究生、博士生導師。2、學習和工作實踐相結合,學習的同時同樣能積累工作經驗。
3、在職研究生并非只是花錢就能考過,需要參加國家五月聯考。
學校各課程考試可能不會卡主你,但是要想拿到學位證,要參加國家的五月聯考。一門專業課和一門英語,其中英語的難度相當于國家英語四級的難度。4、學習課程可以指導自己成長的方向。
工作中想提高自己,如果單單是自學,沒有方向,可能會迷茫。筆者之前就是這樣,感覺有很多東西要學,但是很迷茫,沒方向。相信以后在相關課程作指導下,自己會有更明確的學習目標。-
5、學習過程會比較艱苦,因為艱苦,所以可以成長。
聽之前的在職研究生師兄師姐說,上一年他們是周六周日兩天滿滿的課程,有時為了趕進度偶爾還會在晚上加課;另外,北京工業大學早上上課時間是8:00,對于帝都的上班族而言一個多小時的上班時間再正常不過了。拿筆者來說,八點上課的話,大概一小時十分鐘的車程,那么早晨六點左右就要起床;再來看看課表筆者課表上的一句話:"節假日正常上課"。
上課時間 6、在職研究生畢業后所獲得的碩士學位證書,與統招研究生碩士學位證書一樣,都是國家承認、社會認可的。如果是將后想繼續讀博士,也是完全可以的。
7、這個社會上,學生可能是最廉價的勞動力。有些研究生雖然整日忙綠,但做的更多的是一些重復性的工作。學生沒有踏入社會,思想較為單純。但是社會是殘酷的,從老師的角度上來講,老師同一般的社會工作人員相比,并無太大區別,所以很多人說校園比較單純,但其實老師并不單純。
8、工作中需要更多的規范,在職研究生可以為你帶來更多規范。
工作以來,筆者去過大公司也去過小公司。但從來沒有認為接觸的哪一個項目做到了規范,即使是現在所在的公司(公司上萬人,規模不算小),一個面向百萬用戶的App距離規范也很遙遠。筆者認為這種規范有兩種類型的人可能可以做到帶頭牽引的作用,一種是經驗比較豐富的專家級別開發者,另一種是接受過高等教育。后者雖然沒有專家級別開發者經驗,但是卻從相關課程中學到不少規范,這種規范或許可以應用到實際工作。再者,那些博士或接受過更教育的人,學術上本身就要求他們要做到嚴謹和規范,這種嚴謹和規范當然也可能會被帶到工作中。筆者本科期間接觸過博士論文寫作,對其中的嚴謹自然是感悟不少。9、一些原理性東西需要掌握。
一些原理性的東西在實際寫代碼的過程中,可能用的不多。但是當遇到一些特殊難題或需要知道相關原理的情況,這時才能體現一個開發者的水平。筆者之前在一家創業公司開發的一個項目,數據量非常大,開始是無從下手。數據結構相關知識可能實際開發中很少用到,但筆者最后主要就是從數據結構相關基礎知識解決的。
小結
筆者身邊的一些全日制的研究生朋友,有非常忙碌的,也有比大學還悠哉的。比如我女朋友天天快要忙成,基本快全年無休了;我一大學隔壁同班同學以及一個學長,他們簡直比大學還逍遙快活。無論是全日制還是在職,在兩者為你提供基本一樣的課程和教學的條件下,到底能學多少東西,真正關鍵的在于自己。所以,今后學到的研究生相關課程內容,筆者打算盡可能的抽出一些時間將所學的東西以博客文章的形式記錄。接下來,總結第一次三小時課程學習到的大概內容。
二、一些基本概念
這里就先說一些最基本概念相關的東西。
數據庫系統:(Database System, DBS)是一個綜合的系統,一般有數據庫(Database,DB)、數據庫管理系統(Database Manager System,DBMS)及其開發工具、應用系統、數據管理員(DataBase Administrator, DBA)組成。其中BDMS是數據庫系統中的一組軟件。
數據庫管理系統:數據庫的核心是數據庫管理系統(DBMS)的重要程度相當于操作系統(OS),價值操作操作系統,往往比操作系統還要復雜很多。
三、分布式數據庫
分布式數據庫的重要意義就不多說。現在很火的區塊鏈技術,其實和分布式數據庫有不淺的關系,這里有篇文章你可以看看。
3.1 概念
分布式數據庫系統:(Distributed Database System,DDBS) 是面向地理上分散,但管理上需要不同程度的企業或組織提供數據庫管理的管理信息系統。比如一個學校的多個校區學生信息管理或一些跨國企業、連鎖店等數據信息管理。
分布式數據管理系統DDBMS:同DBMS對應的是分布式數據管理系統DDBMS (Distributed Database Manager System),它是數據庫系統中的一組軟件,負責管 理分布環境下邏輯集成數據的存取、 控制、數據轉換、通信。
另外還要知道,傳統的數據庫稱為集中式數據庫。國內研究始于80年代初期,相對比較完備的有中科院研發的C-POREL系統、武漢大學的WDDBS & WOODDBS的系統、東北大學 DMU/FO系統。
3.2 分布式數據庫系統結構
從上圖中可以看出,分布式數據庫中包含全局數據庫系統
和局部數據庫系統
。與之對應的分別是全局數據庫管理系統
GDBMS和局部數據庫管理系統
LDBMS。另外,一個用戶或一個應用如果只訪問他注冊的那個站點上的數據則稱為本地用戶/局部用戶/局部應用;如果訪問兩個或兩個以上站點中的數據,稱為全局用戶或全局應用。ps:上圖中的電腦樣式就是對應的三個站點。
3.3分布式數據庫系統特點
- 1、物理分布性
數據不是存儲在一個站點上,而是分散存儲在多個站點,且用戶是感覺不到這種分布特性。 - 2、邏輯整體性
五;上數據是分散在不同站點上,但是這些分散的數據在邏輯上卻是一個整體,他們被分布式數據系統所有用戶(全局用戶)共享,并由一個分布式數據庫管理系統管理。 - 3、站點自治性
即各站點數據由本地DBMS管理,具有自治處理能力,完成本站點的應用(局部應用)。
基于以上三點可以推到出另外幾個特點:
- 4、數據分布透明性
分布式數據庫系統中,數據的獨立性有數據的邏輯獨立性、數據物理獨立性以及數據分布獨立性,其中數據分布獨立性也稱為數據分布透明性。數據分布透明性是指用戶不用關心數據是如何被邏輯分片的(數據分片透明性),不必關心數據及其端是否被復制或復制副本的個數(數據復制透明性),也不必關心局部場地上數據庫支持哪些數據模型等。 - 5、集中與自治相結合的控制機制
- 6、存在適當的數據冗余度
傳統的數據庫系統即集中式數據庫系統,減少冗余度是其目標,因為冗余數據會浪費空間,且容易造成數據副本之間的不一致性。但分布式數據庫系統中,通過冗余數據可以提高系統的可靠性、可用性以及改善性能,增加冗余度可以方便檢索,提高系統的查詢速度,但不利于數據的更新,會增加系統維護的成本。 - 7、事務管理的分布性
大型數據庫分布在多個站點上,數據的分布性必然會造成事務執行和管理的分布性,即一個全局事務的執行可分解為在若干個站點上執行的子事務(局部事務)。關于事務的概念,如下。
事務:數據庫操作的最小單位,事務是一組操作的集合,要保證整個數據庫的一致性,事務中的操作要么都操作,要么都不操作,不存在一組操作中一部分執行一部分不執行的情況。比如銀行轉賬,A轉給B一千元則會分兩步進行:第一步A的賬戶減去1000,第二步B的賬戶加上1000,兩個步驟要么都操作,要么都不操作。如果只執行第一步,那么A來說是一種損失;如果只執行第二步,那么對銀行來說是一種損失。
3.4分布式數據庫系統分類
有兩個分類標準,一種是按照構成分布式數據庫系統的局部數據庫管理系統的數據模型,另一種是按照分布式數據庫的全局控制系統類型。
按照構成分布式數據庫系統的局部數據庫管理系統的數據模型分類:
- 同構型
如果各個站點上的數據庫的數據模型都是同一數據模型(如關系模型),則稱該數據庫系統是同構型。但是具有相同類型的數據模型若為不同公司的產品,其性質(如數據表示的格式)也不盡相同。因此DDBS又可以分為同構同質和同構異質兩種。關于數據模型,該節(3.4 節)后面會提到一點。 - 異構型
如果各站點上數據庫的數據模型的類型是各不相同的,則稱該分部式數據庫系統是異構DDBS。
按照分布式數據庫的全局控制系統類型分類:
- 全局控制集中型DDBS
- 全局控制分散性DDBS
- 全局控制可變型DDBS
補充:關系模型概念
常見的數據模型有關系模型、網狀模型、層次模型等,其中關系模型最為常見。關系模型可以理解為一組關系,其中的每一個關系的數據結構都是一張規范化的二維表。關系模型要求關系是規范化,規范化的最基本條件就是關系的每一個分量都必須是不可再分的數據項,通俗的說法就是不存在大表中嵌套小表。如圖所示的表格就不符合關系模型的基本要求。
另外,要知道支持關系模型的數據庫就是關系數據庫。
3.4分布式數據庫系統中數據的分片與分布
3.4.1 數據的分片
數據的分片也成數據分割,是分布式數據庫的特征之一。全局數據庫是有各個局部數據庫邏輯組合而成;反之,各個局部數據庫由全局數據庫的魔種邏輯分割而得。可以想象一份學生名單,第一行分別是學號、姓名、性別、出生年月等。接下來的若干行就是具體的學生信息。在關系型數據庫中,就有三種分片方式。即水平分片、垂直分片、混合分片。水平分片即按照若干行劃分,如學號小于10的化為一組,其他化為一組;垂直分片可以想象成將學生的姓名和學號獨立出來,其他信息再獨立成一部分;混合分片就是水平分片和垂直分片兩種方式結合。
之所以存在數據分布一說,是因為應有的需要。關系型數據庫中不同站點的用戶需要該關系中的元組(一組集合,集合中的元素類型可以不相同)可能不同。比如,某個關系中的元組和地區有關,上海站點的用戶需要的是包含''上海''的那些元組,而北京站點的用戶需要的是包含''北京''的那些元組等。
3.4.2 數據的分布
數據分布是指數據庫中的數據不是存儲在一個站點的計算機存儲設備上,而是根據需要將數據劃分成邏輯片段,按照某種策略將這些片段分散在各個站點上。通常有四種分布策略:集中式、分割式、復制式、混合式。
- 集中式:所有數據都放在一個站點上。這樣對數據的控制管理比較溶質,數據的一致性可以得到保證。但由于所有數據放在一個站點,所以站點負擔較重,加入站點故障,則整個系統直接崩潰。
- 分割式:所有數據只有一份,被分割成若干邏輯片段,每個邏輯片段指派到特定的站點。該方式可以充分利用各個站點的存儲設備且數據存儲量大。如果某個站點出現故障,系統仍能運行。但是對于去哪聚的查詢和修改會比較耗時。
- 復制式:全局數據由多個副本,每個站點都有一個完整副本。該方式可靠性高,響應速度快,數據庫的恢復也比較容易。但是要保證各個站點數據的同步修改,將要付出高昂的代價。
- 混合式:兼顧分割師和復制式的做法。
四、傳統數據庫(集中型數據庫)模式結構
集中型數據庫有三級模式和兩級映像。三級模式即外模式、模式(或概念模式)、內模式。兩級映像即外模式/模式映像和模式/內模式映像。
4.1 三級模式
- 外模式
外模式(亦稱子模式或者用戶模式),是數據庫用戶能夠看到和使用的局部數據的邏輯結構和特征的描述。外模式保證了數據庫的安全性,每個用戶只能看到和訪問對應外模式中的數據,數據庫的其他數據對該用戶均不可見。通常情況下來說,1、外模式是模式的的子集,一個數據庫可以有多個外模式。2、一個外模式可以被多個應用程序所使用,一個應用程序只能使用一個外模式。 - 模式或概念模式
模式(亦稱邏輯模式)是數據庫全體數據的邏輯結構和特征描述,是所有用戶的公共數據視圖。是數據庫系統結構的中間層,既不涉及數據的物理存儲細節,也不涉及具體的應用程序、開發工具和語言。通常來說,模式是數據庫在邏輯級的視圖,一個數據庫只有一個模式。
- 內模式
一個數據庫只有一個內模式(亦稱存儲模式),內模式是數據物理結構和存儲方式的描述,是數據庫中數據的內部表示方式。
4.2 兩級映像
外模式/模式映像保證了數據和程序之間的邏輯獨立性;模式/內模式映像保證了數據和程序之間的物理獨立性。
外模式/模式映像
模式描述數據的全局邏輯結構,外模式描述數據的局部邏輯結構,外模式是模式的子集。同一個模式可以有多個外模式,每一個外模式在數據庫系統中都有一個對應外模式/模式映像。當模式改變時,數據庫可以對各個外模式/模式映像做相應的改變,從而使外模式保持不變,,所以應用程序可以不修改。所以說外模式/模式映像保證了數據和程序之間的邏輯獨立性。模式/內模式映像
模式和內模式有且只有一個。模式/內模式映像定義了數據全局邏輯結構與存儲結構的對應關系。當數據庫的存儲方式發生變化時,模式/內模式映像做相應的改變,可使模式保持不變,進而使外模式也保持不變,最后可達到應用程序不變的目的。所以說模式/內模式映像保證了數據和程序之間的物理獨立性。
五、分布式數據庫模式結構
和集中型數據庫不同,分布式數據庫模式結構中有六級模式結構和五級映像,具體可以看下圖。
- 1、全局外模式
全局外模式是全局應用的用戶視圖,所以也稱為全局視圖。同集中型數據庫類似全局外模式是全局概念模式的子集。但和集中型數據庫最大的不同點是:分布式數據庫的全局視圖數據不是從某一個站點數據庫中抽取出來的,而是從一個邏輯集合(各局部數據庫組成的邏輯集合)中抽取出的。 - 2、全局概念模式或全局模式
全局概念模式主要描述分布式數據庫中全局數據的邏輯結構和數據特性。和集中式數據庫類似,全局概念模式是分布式數據的全局概念視圖。 - 3、分片模式
分布式數據庫中,數據存儲的單位是數據的邏輯片段。分片模式描述全局數據的邏輯劃分,主要是描述數據分片以及全局關系與片段之前的影響。 - 4、分配模式
分配模式就是根據選定的數據分配策略,定義各片段物理上存放的站點。 - 5、局部概念模式或局部模式
局部概念模式是全局概念模式的子集。局部站點模式僅與站點相關,即局部概念模式''局限于''特定站點。 - 6、局部內模式
局部內模式是分布式數據庫中關于物理數據庫的描述。類似于集中式數據庫中的內模式。
六、總結
文章中的不少內容是筆者從書中提煉出來的,寫出一篇文章出來,感覺對這些概念也清晰了很多。三個小時左右的課程大概是講了這么多的東西,內容不是很多,但是也不少。主要涉及一些概念問題比較多,對于新手而言,還是要花上一些時間去了解的。下周的課程大概是要講分布式數據庫的設計,課程的PPT課件也已經下發,按照老師的意思大概是要提前了解關系代數、數據庫事務相關的內容,才能保證跟的上下次課程的進度。
分布式數據庫第二次課程補充 (2018年3月18日)
因為該篇文章在實際的課程大綱中算是第一章節,但是第一次三個小時的課程該章節中有部分知識點未涉及,補充的知識點是在第二次上課時所講。所以這里就在之前寫的文章中做些簡單補充。后期的博客文章筆記整理應該是按照章節來發布,這樣每篇文章就會相對比較系統些。
分布式數據庫的分布透明性
分布式數據庫的數據獨立性也稱分布透明性。用戶或用戶程序使用分布式數據庫時,不必關心數據的分布情況,包括:全局數據的邏輯分片、 片段的物理位置分配、各站點數據庫的數據模型。三者也即是分片透明性、位置透明性、局部數據模型透明性,說白了就是數據庫每層的獨立性,保證層級之間的低耦合。
-
分片透明性
用戶編寫程序時要了解全局數據的分片情況(即下圖的supplier),但不必了解各邏輯片段的復制副本情況,也不必 關心各片段及其副本的站點位置分配情況。
-
位置透明性
用戶編寫程序時要了解全局數據的分片情況、 各邏輯片段的復制副本情況(即下圖的supplier1),以及各片段和它們的副本的站點位置分配情況,但不必了解各站點上數據庫的數據模型。
-
局部數據模型透明性
用戶編寫程序時要了解全局數據的分片情況、 各邏輯片段的復制副本情況,以及各片段和它們 的副本的站點位置分配情況(即下圖的supplier1 at site1,site1位具體的站點),但不必了解各站點 上數據庫的數據模型。