DBMS一種設計方案(原)

2021-04-15 08:46:52 字數 3338 閱讀 4331

一、 整體架構

乙個資料**採用資料集、索引集分開的儲存方式,分別為資料檔案和索引檔案,有可能還需要乙個關鍵字檔案。

資料**必須指定乙個主關鍵字,主關鍵字在資料表內不允許重複。

資料**還可以有若干索引,索引可以重複。只有第乙個索引(主索引)能影響資料檔案內的資料分布,所有相同主索引的資料會存放於同乙個資料檔案中。

如果相同主索引的資料太多,超過資料檔案的大小限制,則也可以有多個資料檔案儲存同乙個主索引的資料。

二、

索引檔案1.

關鍵字索引檔案

關鍵字索引集採用雜湊檔案儲存,檔案內每一條索引記錄包含了對應的資料記錄的關鍵字和在資料檔案中的位置(具體可根據資料集的格式來設定)和索引鍊錶(後詳)。

索引記錄按照關鍵字的hash

值分布到若干的桶內,桶的數目: a)

可以是固定的配置引數; b)

按照一定的演算法自動增長; c)

初始大小通過指定,以後採用自動增長

每個桶內索引記錄的個數有上限(引數可配),建立索引檔案時會為每個桶預留出此上限值的索引記錄空間。這要求每個索引記錄的長度固定,所以如果關鍵字是變長字串,則需要另外處理(後詳)。

當某個桶內索引記錄過多,超過上限的索引記錄採用鍊錶儲存,加入檔案末尾,並稱之為「溢位記錄」,如下圖所示:

刪除非溢位索引記錄時,如果該桶內有溢位記錄,則把第乙個溢位記錄轉移到空出的位置。空出的原溢位記錄位置被鏈結到乙個空記錄鍊錶內,下次增加溢位記錄時會優先從空記錄煉表裡獲得記錄位置。

通過記錄索引記錄的總數,和溢位記錄的個數,可以決定是否重新整理索引檔案,並增加桶的數目。當整理完成後,只需切換檔案指標,並刪除舊的索引檔案。

優點:1)

通過配置每個桶內索引記錄的個數有上限,可以調節空間浪費與重新整理次數之間的平衡;

2)溢位記錄數不多時,查詢,新增,刪除記錄均很高效;

3)相比多級索引,占用空間相對較少;

缺點:1)

不能進行順序訪問,只能按關鍵字隨機訪問;

2)詢問方式限於簡單等於方式;

3)在資料快速增長的情況下,重新整理可能成為效能瓶頸,不過可以採用指定初始桶個數來解決;

1.一般索引檔案

乙個資料**只能有乙個關鍵字,但是可以有多個索引,每個索引對應乙個一般索引檔案。該檔案儲存格式與關鍵字索引檔案大致相同,不同的是每個索引記錄包含:

1)索引值

2)索引鍊錶(後詳)首記錄在關鍵字索引檔案中的位置。

三、

資料檔案

資料集採用順序無序檔案儲存,即新增加的資料記錄依次加入檔案的末尾。

但是為了解決因資料修改導致資料長度改變的問題,可以:

a)對若干條(可配引數)資料記錄進行分組,並為之留下一定大小(可配引數)的預留空間;

b)把儲存空間按固定長度(可配引數)劃分成組,每一組內又分為連續的資料區和預留區;

如下圖所示:

資料記錄r1

,r2,r3

在一組,後面有一定的預留空間。

當修改r1

,r2或r3

時,如果資料長度發生改變,需要移動r2

或r3以保證三者的連續性;

當刪除r1

,r2或r3

時,同樣需要移動r2

或r3,並把多餘的空間併入預留空間;如果r1

,r2,r3

都被刪除,那麼:

a)把整組空間併入前一組資料的預留空間,這就需要預留空間也有自己的結構;

b)把該組空間加入「預留空間的管理索引」,以後插入的新資料會優先放入此處;

如果預留的空間不足以容納新增加的資料,那麼將最後的資料記錄挪到其他地方,直到有足夠的預留空間;

在極端情況下,如果r1

增加到整組空間都不能容納的大小,那麼三者都挪到其他地方,並:

c)把整組空間併入前一組資料的預留空間,這就需要預留空間也有自己的結構;

d)把該組空間加入「預留空間的管理索引」,以後插入的新資料會優先放入此處;

優點:1)

分組資料和預留空間大小可以根據具體情況配置,達到空間和效率的平衡;

2)刪除和插入資料可快速完成;

3)修改資料效率高,在極端情況下相當於幾次資料插入操作,具體幾次視組內資料記錄的多少而定;

4)不需要檔案資料的大規模移動,適合於相對穩定的檔案系統,比如gfs

。缺點:

1)方案c

)有可能產生大的預留空間,造成檔案的「空洞」,但可以解決。

2)如果有必要,需要乙個預留空間的管理索引,並把新插入的資料放入比較「大」(閥值)的預留空間裡;

四、

關鍵字檔案

對於以變長字串作為主鍵的索引檔案,還需要乙個關鍵字檔案儲存字串關鍵字,索引檔案裡只儲存相應的偏移值。

關鍵字檔案可採用順序無序格式,由於關鍵字不可變,可以連續儲存而沒有預留空間。

增加乙個關鍵字時,直接加入關鍵字檔案末尾;

刪除乙個關鍵字時,把原有字串全重置為0

;如果需要,可以統計關鍵字檔案的空間利用率,並在適當的時候進行整理和**多餘空間。

五、

索引鍊錶

關鍵字索引檔案中的一條索引記錄除了包含對應的資料記錄的關鍵字和在資料檔案中的位置外,還包含其他索引的鍊錶,

如下圖所示:

上面的示例資料**除了有乙個關鍵字,還有2

個索引,把所有相同索引的索引記錄用鍊錶連線起來,可以實現針對同一索引值的相關查詢。

增加乙個索引記錄時,首先在一般索引檔案裡找到首記錄位置,如果不存在則在一般索引檔案裡建立乙個新的索引記錄,然後把關鍵字索引檔案中的新索引記錄加在索引鍊錶的首位置,成為新的索引鍊錶首記錄。

刪除乙個索引記錄時,需要改變索引鍊錶,所以索引鍊錶應該是雙向鍊錶;如果刪除的是索引鍊錶首記錄,還需要修改或刪除一般索引檔案裡的索引記錄。

六、

資料檔案的**

資料檔案的大小有一定的限制(可配引數),當某個資料檔案超過這個限制時,會近似平均的**為2

個資料檔案。

如果資料**沒有指定主索引,那麼資料檔案的**任意進行;

如果資料**指定了主索引,資料檔案**時會把所有相同主索引的資料放在同乙個新資料檔案裡。

更理想的情況是,**時把訪問頻繁的資料記錄集中到乙個新資料檔案裡,訪問較少的集中到另乙個新資料檔案,這樣可以減少cache

的檔案數量。

資料檔案的**需要:

1.資料檔案有一套命名規則;(具體待定)

2.修改索引檔案。(具體待定)

離線應用的一種設計方案

程式快取比較容易設定,只要寫乙個.manifest檔案,再把它寫到html元素的屬性就可以了。我遇到的一些問題 因此對離線應用而言,我認為程式快取的作用就是儲存靜態檔案。據說瀏覽器限制本地儲存為5m,所以就不考慮了。主要是利用瀏覽器支援的indexeddb來完成資料操作。方式1的測試成本要比方式2高...

一種奧運門票網路系統設計方案

這些天來,很多給我來信,表達了他們的願望,就是讓我給出乙份設計方案。我本庸才,不敢在眾多 專家學者面前班門弄大斧,但對的熱情難卻,湊個熱鬧,也吼兩聲自己的醜陋看法,純屬瞎寫,別見笑。但我還是那句話,在高效能系統不宜使用資料庫,只在資料管理中才會使用。由於我對該系統的具體需求不清楚,只能假設一些需求,...

資料倉儲中,緩慢變化維的一種設計方案

資料倉儲中,緩慢漸變維度是一種經常使用到的方案。漸變 即為逐漸變化的維度,因為日常應用中,維度屬性是隨時可能發生變化的,而bi統計時,又可能是需要歷史某個時間點的維度屬性值。所以這種情況下,就需要我們記錄下這個變化資訊,於是漸變維度就出現了。緩慢 兩個字,也是需要注意的,僅有緩慢變化的才適用於這種方...