- 零基礎(chǔ)學(xué)Java項(xiàng)目開(kāi)發(fā)
- 聚慕課教育研發(fā)中心編著
- 1950字
- 2022-07-28 18:41:29
1.3 系統(tǒng)架構(gòu)中的數(shù)據(jù)分布式設(shè)計(jì)
系統(tǒng)架構(gòu)中的數(shù)據(jù)分布式設(shè)計(jì)是支持分布式處理的軟件設(shè)計(jì),即在通信網(wǎng)絡(luò)互連的多處體系結(jié)構(gòu)上執(zhí)行任務(wù)的系統(tǒng)設(shè)計(jì)。在分布式設(shè)計(jì)中,分布式操作系統(tǒng)、分布式程序設(shè)計(jì)語(yǔ)言及其編譯系統(tǒng)、分布式文件系統(tǒng)、分布式數(shù)據(jù)庫(kù)系統(tǒng)等,這些都是分布式的關(guān)鍵技術(shù)。下面將介紹數(shù)據(jù)分布式設(shè)計(jì)的相關(guān)內(nèi)容。
1.獨(dú)立Schema式模式設(shè)計(jì)
獨(dú)立Schema,簡(jiǎn)單來(lái)說(shuō),就是一個(gè)大系統(tǒng)由相關(guān)的多個(gè)小系統(tǒng)組成,且不同小系統(tǒng)具有互不相同的數(shù)據(jù)庫(kù)Schema定義。獨(dú)立模式可管理性高,通信開(kāi)銷小。
我們?cè)趯W(xué)習(xí)數(shù)據(jù)庫(kù)SQL的過(guò)程中,會(huì)遇到一個(gè)模糊的Schema概念。Schema就是數(shù)據(jù)庫(kù)對(duì)象的集合,這個(gè)集合包含各種對(duì)象,如表、視圖、存儲(chǔ)過(guò)程、索引等。為了區(qū)分不同的集合,就需要為不同的集合命名。默認(rèn)情況下,一個(gè)用戶對(duì)應(yīng)一個(gè)集合,用戶的Schema名同于用戶名,所以Schema集合看上去像用戶名。
如果把DataBase看作是一個(gè)倉(cāng)庫(kù),該倉(cāng)庫(kù)內(nèi)有很多房間(Schema),一個(gè)Schema代表一個(gè)房間,那么Table可以被看作是每個(gè)房間中的儲(chǔ)物柜,User是每個(gè)Schema的用戶并有操作數(shù)據(jù)庫(kù)中每個(gè)房間的權(quán)利。也就是說(shuō),每個(gè)數(shù)據(jù)庫(kù)映射的User有每個(gè)Schema(房間)的鑰匙。訪問(wèn)一個(gè)表時(shí),如果沒(méi)有指明該表屬于哪一個(gè)Schema中,系統(tǒng)就會(huì)自動(dòng)在表上添加默認(rèn)的Schema名。在數(shù)據(jù)庫(kù)中,一個(gè)對(duì)象的完整名稱為schema.object,而不是user.object。
在MySQL中創(chuàng)建一個(gè)Schema和創(chuàng)建一個(gè)DataBase的效果是一樣的,但是在SQL Server和Oracle數(shù)據(jù)庫(kù)中效果是不同的。
在SQL Server 2005中,為了向后兼容,當(dāng)使用存儲(chǔ)過(guò)程創(chuàng)建一個(gè)用戶的時(shí)候,SQL Server 2005同時(shí)也創(chuàng)建了一個(gè)與用戶名相同的Schema。當(dāng)使用CREATE USER命令創(chuàng)建數(shù)據(jù)庫(kù)用戶時(shí),可以用該用戶指定一個(gè)已經(jīng)存在的Schema作為默認(rèn)的Schema;如果不指定,則該用戶所默認(rèn)的Schema即為DBO Schema。我們將DBO房間(Schema)比作一個(gè)大的公共房間,在當(dāng)前登錄用戶沒(méi)有默認(rèn)Schema的前提下,如果在大倉(cāng)庫(kù)中進(jìn)行一些操作(如創(chuàng)建表),但沒(méi)有指定特定的房間(Schema),那么物品就會(huì)放在公共的DBO房間中。但是如果當(dāng)前登錄用戶有默認(rèn)的Schema,那么所執(zhí)行的操作都是在默認(rèn)的Schema上進(jìn)行。
在Oracle數(shù)據(jù)庫(kù)中不能直接新建一個(gè)Schema,如果要想創(chuàng)建一個(gè)“Schema”,只能通過(guò)創(chuàng)建一個(gè)用戶的方法實(shí)現(xiàn)。在創(chuàng)建一個(gè)用戶的同時(shí),為這個(gè)用戶創(chuàng)建一個(gè)與用戶名同名的Schema,并作為該用戶的默認(rèn)Schema。此時(shí),Schema的個(gè)數(shù)與User的個(gè)數(shù)相同,而且Schema名與User名一一對(duì)應(yīng)并相同。
下面簡(jiǎn)單介紹Schema的基礎(chǔ)知識(shí)。
1)關(guān)于Schema的表
(1)設(shè)計(jì)數(shù)據(jù)的表、索引及表與表的關(guān)系。
(2)在數(shù)據(jù)建模的基礎(chǔ)上將關(guān)系模型轉(zhuǎn)為數(shù)據(jù)庫(kù)表。
(3)在滿足業(yè)務(wù)模型需要的基礎(chǔ)上,根據(jù)數(shù)據(jù)庫(kù)和應(yīng)用特點(diǎn)來(lái)優(yōu)化表結(jié)構(gòu)。
2)關(guān)于Schema程序功能與性能
(1)滿足業(yè)務(wù)功能需求。
(2)同性能密切相關(guān)。
(3)滿足周邊需求(統(tǒng)計(jì)、遷移等)。(4)數(shù)據(jù)庫(kù)擴(kuò)展性。
3)關(guān)于Schema的索引
(1)正確使用索引。
(2)更新盡可能使用主鍵或唯一索引。
(3)主鍵盡可能使用自增ID字段。
(4)核心查詢使用覆蓋索引。
(5)建立聯(lián)合索引,避免回收表數(shù)據(jù)。
2.集中式模式設(shè)計(jì)
集中式模式設(shè)計(jì)是指一個(gè)大系統(tǒng)必須支持來(lái)自不同地方的訪問(wèn),或者該系統(tǒng)由多個(gè)不同的小系統(tǒng)組成,對(duì)數(shù)據(jù)進(jìn)行集中化、統(tǒng)一格式存儲(chǔ)。該模式可管理性、數(shù)據(jù)一致性都比較高。
互聯(lián)網(wǎng)的技術(shù)架構(gòu)正在經(jīng)歷“集中式→分布式→云平臺(tái)”的發(fā)展歷程。這3種技術(shù)架構(gòu)的產(chǎn)生過(guò)程是一個(gè)迭代發(fā)展過(guò)程。從技術(shù)和優(yōu)勢(shì)來(lái)說(shuō),這也是一個(gè)逐漸演進(jìn)過(guò)程;從業(yè)務(wù)需求和架構(gòu)成熟度來(lái)說(shuō),這是一個(gè)愈加遞增、健壯的發(fā)展過(guò)程。
目前,集中式架構(gòu)主要集中在傳統(tǒng)IT行業(yè),分布式和云平臺(tái)技術(shù)架構(gòu)主要集中在需求演變快速的互聯(lián)網(wǎng)行業(yè),但這并不能表明滿足低并發(fā)、擴(kuò)展性差的集中式架構(gòu)就落后了。對(duì)于傳統(tǒng)行業(yè)來(lái)說(shuō),在業(yè)務(wù)壓力不大、并發(fā)要求和擴(kuò)展性不高、公司技術(shù)人員能力迭代更新延遲的前提下,集中式三層架構(gòu)依舊有其優(yōu)勢(shì)和價(jià)值。
3.分區(qū)式模式設(shè)計(jì)
分區(qū)主要分為水平分區(qū)與垂直分區(qū)。當(dāng)系統(tǒng)為“地域分布廣泛的用戶”提供相同服務(wù)時(shí),常常使用水平分區(qū)策略。垂直分區(qū)為字段分隔,一般較少使用。采用分區(qū)方式,可伸縮性較好。
(1)分區(qū)式模式是將記錄進(jìn)行分類(即分片、分區(qū)或分箱),它不關(guān)心記錄的順序。
(2)分區(qū)式模式的目的是將數(shù)據(jù)中相似的數(shù)據(jù)記錄成不同的、更小的數(shù)據(jù)。
(3)分區(qū)式模式的適用范圍就是指必須提前知道有多少個(gè)分區(qū),例如按年、月、日等分區(qū)。
(4)分區(qū)式模式的結(jié)構(gòu)中對(duì)數(shù)據(jù)是通過(guò)分區(qū)器進(jìn)行分區(qū)的,所以需要自定義分區(qū)器(partitioner)函數(shù)來(lái)確定每條記錄應(yīng)該被分在哪個(gè)分區(qū)。
4.復(fù)制式模式設(shè)計(jì)
復(fù)制式模式設(shè)計(jì)是指在整個(gè)分布式系統(tǒng)中保存多個(gè)副本,并且以某種機(jī)制保持多個(gè)數(shù)據(jù)副本之間的數(shù)據(jù)一致性。復(fù)制式可有效提升數(shù)據(jù)的可靠性。
5.子集式模式設(shè)計(jì)
子集式模式設(shè)計(jì)是指某節(jié)點(diǎn)因功能或非功能考慮而保持全體數(shù)據(jù)的一個(gè)相對(duì)固定的子集。子集式是復(fù)制式的特殊方式。
6.重組式模式設(shè)計(jì)
重組式模式設(shè)計(jì)是指不同數(shù)據(jù)節(jié)點(diǎn)因要支持的功能不同,而以不同的Schema保存數(shù)據(jù),但本質(zhì)上數(shù)據(jù)是同源的,并以“重新組織”的格式進(jìn)行傳遞和保存。
- Rust編程:入門(mén)、實(shí)戰(zhàn)與進(jìn)階
- Learning Elixir
- VMware虛擬化技術(shù)
- Creating Stunning Dashboards with QlikView
- Java網(wǎng)絡(luò)編程實(shí)戰(zhàn)
- Learning Unreal Engine Android Game Development
- Android開(kāi)發(fā)三劍客:UML、模式與測(cè)試
- C# and .NET Core Test Driven Development
- ArcGIS for Desktop Cookbook
- 深度學(xué)習(xí)原理與PyTorch實(shí)戰(zhàn)(第2版)
- SQL Server 入門(mén)很輕松(微課超值版)
- Python趣味編程與精彩實(shí)例
- Learning iOS Security
- Python數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南(全彩)
- C編程技巧:117個(gè)問(wèn)題解決方案示例