層級數(shù)據(jù)模型

IMS時代

  • 問題
  • 經(jīng)驗總結(jié)
  • 分層數(shù)據(jù)邏輯模型
  • 分層數(shù)據(jù)存儲格式
  • 數(shù)據(jù)獨立性
  • 數(shù)據(jù)操作
  • 示例

問題

什么是數(shù)據(jù)獨立性筐高?為什么數(shù)據(jù)獨立性如此重要凡怎?

經(jīng)驗總結(jié)

  1. 物理數(shù)據(jù)獨立性和邏輯數(shù)據(jù)獨立性非常重要芽腾;
  2. 使用樹形數(shù)據(jù)模型有很大的約束,比如只有有限的物理數(shù)據(jù)獨立性等栈源;
  3. 很難提供一種針對樹形數(shù)據(jù)的高效的邏輯重組逊抡;
  4. 一次只操作一個記錄的接口需要程序員手動做查詢優(yōu)化,這很難火窒;

分層數(shù)據(jù)模型

  • 記錄類型
    多個有數(shù)據(jù)類型的字段的集合硼补,比如Supplier(sno, sname, scity, sstate),Part (pno, pname, psize, pcolor)
    所有記錄類型形成一個樹結(jié)構(gòu)熏矿;
    每個非根記錄類型都必須有一個父類記錄類型已骇;
    根記錄類型沒有父類記錄類型离钝;
  • 記錄實例
    遵循記錄類型中對數(shù)據(jù)的定義;
  • key
    唯一確定一個記錄實例褪储;
    由1個或者多個記錄類型的字段組成卵渴;
  • HSK
    層級序列key;
    當(dāng)前記錄的HSK=先輩記錄的HSK+當(dāng)前記錄的HSK鲤竹;
    HSK定義為IMS數(shù)據(jù)庫中的所有記錄定義了一個全局序浪读,即:深度優(yōu)先,從左到右辛藻;
    為IMS數(shù)據(jù)操作語言DL/1提供了方便碘橘;
  • IMS數(shù)據(jù)庫
    多個記錄類型的實例組成的集合;
    每個非根記錄實例都只有1個父類記錄類型揩尸;
    根記錄實例沒有父類記錄類型蛹屿;

數(shù)據(jù)操作語言DL/1

指令

  • get next
    根據(jù)HSK順序,即深度優(yōu)先岩榆,從左到右错负,獲取下一個記錄;
  • get next within parent
    在給定記錄的子樹中勇边,根據(jù)根據(jù)HSK順序犹撒,即按照從左到右的順序,獲取下一個記錄

實例

問題1 找出供應(yīng)商16提供的所有紅色零件粒褒。

Get unique Supplier (sno = 16) 
Until failure do
    Get next within parent (color = red)
    Enddo

思路:
第一步:找到供應(yīng)商16识颊;
先使用get next指令深入到供應(yīng)商記錄類型所在的層,然后再從左到右找到sno=16的供應(yīng)商奕坟;
第二步:遍歷供應(yīng)商16的子樹祥款,找出所有紅色零件;
備注:
(1) 多叉樹可以轉(zhuǎn)換為二叉樹月杉;
(2) 二叉樹中查詢效率最好的是什么樹刃跛?

層級數(shù)據(jù)存儲

先存儲根記錄,后存儲依賴根記錄的其他記錄苛萎;

如何存儲根記錄桨昙?

  • 順序存儲;
  • B-樹存儲腌歉,key是根記錄的HSK蛙酪;
  • 哈希表存儲,key是根記錄的HSK翘盖;

在存儲好根記錄后桂塞,如何存儲相關(guān)的記錄?

  • 順序存儲馍驯;
  • 指針引用存儲藐俺;

為了避免可能產(chǎn)生的性能不佳問題炊甲,IMS對層級數(shù)據(jù)的存儲格式進(jìn)行了如下約束:

  1. 如果根記錄和其他記錄都使用順序存儲,
    • 則不能使用DL/1命令來插入記錄欲芹;
    • 適用于這樣的批處理環(huán)境,即“old-master-new-master”處理:
      先將修改列表按照HSK排序吟吝,接著對舊數(shù)據(jù)庫進(jìn)行一次遷移菱父,同時將修改列表涉及的記錄插入到合適的位置,最后形成了新的數(shù)據(jù)庫剑逃;
  2. 如果使用哈希表來存儲根記錄浙宜,則不能使用DL/1命令中的get next命令
    理由:使用哈希表實現(xiàn)順序查找并不容易;

這種約束有缺陷:

  • 不能通過自由地切換存儲格式來對應(yīng)用進(jìn)行調(diào)優(yōu)蛹磺;
    理由:因為換了一種存儲格式后粟瞬,并不能保證針對原存儲格式編寫的DL/1程序能在新的存儲格式上繼續(xù)運行。

示例

假設(shè)有3個供應(yīng)商萤捆,分別是S_1裙品,S_2S_3俗或,其中S_1key是1市怎,S_2key是2,S_3key是3辛慰;
有3個零件区匠,分別是P_1P_2帅腌,P_3驰弄,其中P_1key是1,P_2key是2速客,P_3key是3戚篙;
其中,S_1供應(yīng)零件P_1P_2挽封,S_2供應(yīng)零件P_2已球,S_3不供應(yīng)任何零件,P_3沒有供應(yīng)商辅愿;
問題1:使用層級數(shù)據(jù)模型智亮,該如何描述上述信息?
(1) 假設(shè)Supplier記錄是Part記錄的父類点待,則有:

供應(yīng)商是零件的父類示意圖.png

備注:

  • 零件P_1的記錄實例存在重復(fù)存儲的問題阔蛉,不利于維護(hù)數(shù)據(jù)的一致性;
  • 零件P_3不存在任何供應(yīng)商癞埠,即不存在供應(yīng)商父類記錄状原,違反了IMS的數(shù)據(jù)模型約束規(guī)則:“任何一個非根記錄都必須有一個父類記錄”聋呢,則零件P_3無法在這種IMS數(shù)據(jù)庫中存儲;

(2)假設(shè)Part記錄是Supplier記錄的父類颠区,則有:

零件是供應(yīng)商的父類示意圖.png

備注:

  • 零件S_1的記錄實例存在重復(fù)存儲的問題削锰,不利于維護(hù)數(shù)據(jù)的一致性;
  • 零件S_3不供應(yīng)任何零件毕莱,即不存在零件父類記錄器贩,違反了IMS的數(shù)據(jù)模型約束規(guī)則:“任何一個非根記錄都必須有一個父類記錄”,則零件S_3無法在這種IMS數(shù)據(jù)庫中存儲朋截。

問題2 假設(shè)Supplier記錄是Part記錄的父類蛹稍,則如何計算上述信息的HSK?
答:S_1HSK是1,S_2HSK是2部服,S_3HSK是3唆姐;
S_1的子類中的P_1HSK11S_2的子類中的P_1HSK21廓八,P_2HSK12奉芦;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘫想,隨后出現(xiàn)的幾起案子仗阅,更是在濱河造成了極大的恐慌,老刑警劉巖国夜,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减噪,死亡現(xiàn)場離奇詭異,居然都是意外死亡车吹,警方通過查閱死者的電腦和手機(jī)筹裕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窄驹,“玉大人朝卒,你說我怎么就攤上這事±植海” “怎么了抗斤?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丈咐。 經(jīng)常有香客問我瑞眼,道長,這世上最難降的妖魔是什么棵逊? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任伤疙,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徒像。我一直安慰自己黍特,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布锯蛀。 她就那樣靜靜地躺著灭衷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谬墙。 梳的紋絲不亂的頭發(fā)上今布,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音拭抬,去河邊找鬼。 笑死侵蒙,一個胖子當(dāng)著我的面吹牛造虎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纷闺,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼算凿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了犁功?” 一聲冷哼從身側(cè)響起氓轰,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浸卦,沒想到半個月后署鸡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡限嫌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年靴庆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怒医。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡炉抒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稚叹,到底是詐尸還是另有隱情焰薄,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布扒袖,位于F島的核電站塞茅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏僚稿。R本人自食惡果不足惜凡桥,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚀同。 院中可真熱鬧缅刽,春花似錦啊掏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啡省,卻和暖如春娜睛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卦睹。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工畦戒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人结序。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓障斋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親徐鹤。 傳聞我的和親對象是個殘疾皇子垃环,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容