乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      大型數(shù)據(jù)庫(kù)設(shè)計(jì)原則

       linyu2688 2006-09-15

      【導(dǎo)讀】一個(gè)好的數(shù)據(jù)庫(kù)產(chǎn)品不等于就有一個(gè)好的應(yīng)用系統(tǒng),如果不能設(shè)計(jì)一個(gè)合理的數(shù)據(jù)庫(kù)模型,不僅會(huì)增加客戶端和服務(wù)器段程序的編程和維護(hù)的難度,而且將會(huì)影響系統(tǒng)實(shí)際運(yùn)行的性能。
      一個(gè)好的數(shù)據(jù)庫(kù)產(chǎn)品不等于就有一個(gè)好的應(yīng)用系統(tǒng),如果不能設(shè)計(jì)一個(gè)合理的數(shù)據(jù)
      庫(kù)模型,不僅會(huì)增加客戶端和服務(wù)器段程序的編程和維護(hù)的難度,而且將會(huì)影響系統(tǒng)實(shí)
      際運(yùn)行的性能。一般來講,在一個(gè)MIS系統(tǒng)分析、設(shè)計(jì)、測(cè)試和試運(yùn)行階段,因?yàn)閿?shù)據(jù)量
      較小,設(shè)計(jì)人員和測(cè)試人員往往只注意到功能的實(shí)現(xiàn),而很難注意到性能的薄弱之處,
      等到系統(tǒng)投入實(shí)際運(yùn)行一段時(shí)間后,才發(fā)現(xiàn)系統(tǒng)的性能在降低,這時(shí)再來考慮提高系統(tǒng)
      性能則要花費(fèi)更多的人力物力,而整個(gè)系統(tǒng)也不可避免的形成了一個(gè)打補(bǔ)丁工程。筆者
      依據(jù)多年來設(shè)計(jì)和使用數(shù)據(jù)庫(kù)的經(jīng)驗(yàn),提出以下一些設(shè)計(jì)準(zhǔn)則,供同仁們參考。
      命名的規(guī)范
      ---- 不同的數(shù)據(jù)庫(kù)產(chǎn)品對(duì)對(duì)象的命名有不同的要求,因此,數(shù)據(jù)庫(kù)中的各種對(duì)象的命名
      、后臺(tái)程序的代碼編寫應(yīng)采用大小寫敏感的形式,各種對(duì)象命名長(zhǎng)度不要超過30個(gè)字符
      ,這樣便于應(yīng)用系統(tǒng)適應(yīng)不同的數(shù)據(jù)庫(kù)。
      游標(biāo)(Cursor)的慎用
      ---- 游標(biāo)提供了對(duì)特定集合中逐行掃描的手段,一般使用游標(biāo)逐行遍歷數(shù)據(jù),根據(jù)取出
      的數(shù)據(jù)不同條件進(jìn)行不同的操作。尤其對(duì)多表和大表定義的游標(biāo)(大的數(shù)據(jù)集合)循環(huán)
      很容易使程序進(jìn)入一個(gè)漫長(zhǎng)的等特甚至死機(jī),筆者在某市《住房公積金管理系統(tǒng)》進(jìn)行
      日終帳戶滾積數(shù)計(jì)息處理時(shí),對(duì)一個(gè)10萬個(gè)帳戶的游標(biāo)處理導(dǎo)致程序進(jìn)入了一個(gè)無限期
      的等特(后經(jīng)測(cè)算需48個(gè)小時(shí)才能完成)(硬件環(huán)境:Alpha/4000 128Mram ,Sco Unix
      ,Sybase 11.0),后根據(jù)不同的條件改成用不同的UPDATE語句得以在二十分鐘之內(nèi)完成。
      示例如下:
      Declare Mycursor cursor for select  count_no from COUNT
      Open Mycursor
      Fetch Mycursor into @vcount_no
      While (@@sqlstatus=0)
      Begin
      If  @vcount_no=’’  條件1
      操作1
      If  @vcount_no=’’  條件2
      操作2
      。。。
      Fetch Mycursor into @vcount_no
      End
      。。。
      。。。
      改為
      Update COUNT set  操作1 for 條件1
      Update COUNT set  操作2 for 條件2
      。。。
      。。。
      ---- 在有些場(chǎng)合,有時(shí)也非得使用游標(biāo),此時(shí)也可考慮將符合條件的數(shù)據(jù)行轉(zhuǎn)入臨時(shí)表
      中,再對(duì)臨時(shí)表定義游標(biāo)進(jìn)行操作,可時(shí)性能得到明顯提高。筆者在某地市〈電信收費(fèi)
      系統(tǒng)〉數(shù)據(jù)庫(kù)后臺(tái)程序設(shè)計(jì)中,對(duì)一個(gè)表(3萬行中符合條件的30多行數(shù)據(jù))進(jìn)行游標(biāo)操
      作(硬件環(huán)境:PC服務(wù)器,PII266 64Mram ,NT4.0 Ms Sqlserver 6.5)。 示例如下:
      Create #tmp   /* 定義臨時(shí)表 */
      ( 字段1
      字段2
      。。。
      )
      Insert into #tmp select * from TOTAL where
      條件  /* TOTAL中3萬行 符合條件只有幾十行 */
      Declare Mycursor cursor for select * from #tmp
      /*對(duì)臨時(shí)表定義游標(biāo)*/
      。。。
      索引(Index)的使用原則
      ---- 創(chuàng)建索引一般有以下兩個(gè)目的:維護(hù)被索引列的唯一性和提供快速訪問表中數(shù)據(jù)的
      策略。大型數(shù)據(jù)庫(kù)有兩種索引即簇索引和非簇索引,一個(gè)沒有簇索引的表是按堆結(jié)構(gòu)存
      儲(chǔ)數(shù)據(jù),所有的數(shù)據(jù)均添加在表的尾部,而建立了簇索引的表,其數(shù)據(jù)在物理上會(huì)按照
      簇索引鍵的順序存儲(chǔ),一個(gè)表只允許有一個(gè)簇索引,因此,根據(jù)B樹結(jié)構(gòu),可以理解添加
      任何一種索引均能提高按索引列查詢的速度,但會(huì)降低插入、更新、刪除操作的性能,
      尤其是當(dāng)填充因子(Fill Factor)較大時(shí)。所以對(duì)索引較多的表進(jìn)行頻繁的插入、更新
      、刪除操作,建表和索引時(shí)因設(shè)置較小的填充因子,以便在各數(shù)據(jù)頁(yè)中留下較多的自由
      空間,減少頁(yè)分割及重新組織的工作。
      數(shù)據(jù)的一致性和完整性
      ---- 為了保證數(shù)據(jù)庫(kù)的一致性和完整性,設(shè)計(jì)人員往往會(huì)設(shè)計(jì)過多的表間關(guān)聯(lián)(Relat
      ion),盡可能的降低數(shù)據(jù)的冗余。表間關(guān)聯(lián)是一種強(qiáng)制性措施,建立后,對(duì)父表(Par
      ent Table)和子表(Child Table)的插入、更新、刪除操作均要占用系統(tǒng)的開銷,另外
      ,最好不要用Identify 屬性字段作為主鍵與子表關(guān)聯(lián)。如果數(shù)據(jù)冗余低,數(shù)據(jù)的完整性
      容易得到保證,但增加了表間連接查詢的操作,為了提高系統(tǒng)的響應(yīng)時(shí)間,合理的數(shù)據(jù)
      冗余也是必要的。使用規(guī)則(Rule)和約束(Check)來防止系統(tǒng)操作人員誤輸入造成數(shù)
      據(jù)的錯(cuò)誤是設(shè)計(jì)人員的另一種常用手段,但是,不必要的規(guī)則和約束也會(huì)占用系統(tǒng)的不
      必要開銷,需要注意的是,約束對(duì)數(shù)據(jù)的有效性驗(yàn)證要比規(guī)則快。所有這些,設(shè)計(jì)人員
      在設(shè)計(jì)階段應(yīng)根據(jù)系統(tǒng)操作的類型、頻度加以均衡考慮。
      事務(wù)的陷阱
      ---- 事務(wù)是在一次性完成的一組操作。雖然這些操作是單個(gè)的操作,SQL Server能夠保
      證這組操作要么全部都完成,要么一點(diǎn)都不做。正是大型數(shù)據(jù)庫(kù)的這一特性,使得數(shù)據(jù)
      的完整性得到了極大的保證。
      ---- 眾所周知,SQL Server為每個(gè)獨(dú)立的SQL語句都提供了隱含的事務(wù)控制,使得每個(gè)
      DML的數(shù)據(jù)操作得以完整提交或回滾,但是SQL Server還提供了顯式事務(wù)控制語句
      ---- BEGIN TRANSACTION 開始一個(gè)事務(wù)
      ---- COMMIT TRANSACTION 提交一個(gè)事務(wù)
      ---- ROLLBACK TRANSACTION 回滾一個(gè)事務(wù)
      ---- 事務(wù)可以嵌套,可以通過全局變量@@trancount檢索到連接的事務(wù)處理嵌套層次。
      需要加以特別注意并且極容易使編程人員犯錯(cuò)誤的是,每個(gè)顯示或隱含的事物開始都使
      得該變量加1,每個(gè)事務(wù)的提交使該變量減1,每個(gè)事務(wù)的回滾都會(huì)使得該變量置0,而只
      有當(dāng)該變量為0時(shí)的事務(wù)提交(最后一個(gè)提交語句時(shí)),這時(shí)才把物理數(shù)據(jù)寫入磁盤。
      數(shù)據(jù)庫(kù)性能調(diào)整
      ---- 在計(jì)算機(jī)硬件配置和網(wǎng)絡(luò)設(shè)計(jì)確定的情況下,影響到應(yīng)用系統(tǒng)性能的因素不外乎為
      數(shù)據(jù)庫(kù)性能和客戶端程序設(shè)計(jì)。而大多數(shù)數(shù)據(jù)庫(kù)設(shè)計(jì)員采用兩步法進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì):首
      先進(jìn)行邏輯設(shè)計(jì),而后進(jìn)行物理設(shè)計(jì)。數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)去除了所有冗余數(shù)據(jù),提高了數(shù)
      據(jù)吞吐速度,保證了數(shù)據(jù)的完整性,清楚地表達(dá)數(shù)據(jù)元素之間的關(guān)系。而對(duì)于多表之間
      的關(guān)聯(lián)查詢(尤其是大數(shù)據(jù)表)時(shí),其性能將會(huì)降低,同時(shí)也提高了客 戶端程序的編程
      難度,因此,物理設(shè)計(jì)需折衷考慮,根據(jù)業(yè)務(wù)規(guī)則,確定對(duì)關(guān)聯(lián)表的數(shù)據(jù)量大小、數(shù)據(jù)
      項(xiàng)的訪問頻度,對(duì)此類數(shù)據(jù)表頻繁的關(guān)聯(lián)查詢應(yīng)適當(dāng)提高數(shù)據(jù)冗余設(shè)計(jì)。
      數(shù)據(jù)類型的選擇
      ---- 數(shù)據(jù)類型的合理選擇對(duì)于數(shù)據(jù)庫(kù)的性能和操作具有很大的影響,有關(guān)這方面的書籍
      也有不少的闡述,這里主要介紹幾點(diǎn)經(jīng)驗(yàn)。
      Identify字段不要作為表的主鍵與其它表關(guān)聯(lián),這將會(huì)影響到該表的數(shù)據(jù)遷移。
      Text 和Image字段屬指針型數(shù)據(jù),主要用來存放二進(jìn)制大型對(duì)象(BLOB)。這類數(shù)據(jù)的
      操作相比其它數(shù)據(jù)類型較慢,因此要避開使用。
      日期型字段的優(yōu)點(diǎn)是有眾多的日期函數(shù)支持,因此,在日期的大小比較、加減操作上非
      常簡(jiǎn)單。但是,在按照日期作為條件的查詢操作也要用函數(shù),相比其它數(shù)據(jù)類型速度上
      就慢許多,因?yàn)橛煤瘮?shù)作為查詢的條件時(shí),服務(wù)器無法用先進(jìn)的性能策略來優(yōu)化查詢而只
      能進(jìn)行表掃描遍歷每行。
      ---- 例如:要從DATA_TAB1中(其中有一個(gè)名為DATE的日期字段)查詢1998年的所有記
      錄。
      ---- Select * from DATA_TAB1 where datepart(yy,DATE)=1998
      --

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多