當前位置:首頁 » 操作系統 » 大型資料庫設計

大型資料庫設計

發布時間: 2022-06-17 04:08:10

『壹』 資料庫如何設計

資料庫設計的基本步驟

按照規范設計的方法,考慮資料庫及其應用系統開發全過程,將資料庫設計分為以下6個階段

1.需求分析

2.概念結構設計

3.邏輯結構設計

4.物理結構設計

5.資料庫實施

6.資料庫的運行和維護


資料庫設計通常分為6個階段1分析用戶的需求,包括數據、功能和性能需求;2概念結構設計:主要採用E-R模型進行設計,包括畫E-R圖;3邏輯結構設計:通過將轉換成表,實現從E-R模型到關系模型的轉換;4:主要是為所設計的資料庫選擇合適的和存取路徑;5資料庫的實施:包括編程、測試和試運行;6資料庫運行與維護:系統的運行與資料庫的日常維護。),主要討論其中的第3個階段,即邏輯設計。



在資料庫設計過程中,需求分析和概念設計可以獨立於任何資料庫管理系統進行,邏輯設計和物理設計與選用的DAMS密切相關。

1.需求分析階段(常用自頂向下)

進行資料庫設計首先必須准確了解和分析用戶需求(包括數據與處理)。需求分析是整個設計過程的基礎,也是最困難,最耗時的一步。需求分析是否做得充分和准確,決定了在其上構建資料庫大廈的速度與質量。需求分析做的不好,會導致整個資料庫設計返工重做。

需求分析的任務,是通過詳細調查現實世界要處理的對象,充分了解原系統工作概況,明確用戶的各種需求,然後在此基礎上確定新的系統功能,新系統還得充分考慮今後可能的擴充與改變,不僅僅能夠按當前應用需求來設計。

調查的重點是,數據與處理。達到信息要求,處理要求,安全性和完整性要求。

分析方法常用SA(Structured Analysis) 結構化分析方法,SA方法從最上層的系統組織結構入手,採用自頂向下,逐層分解的方式分析系統。

數據流圖表達了數據和處理過程的關系,在SA方法中,處理過程的處理邏輯常常藉助判定表或判定樹來描述。在處理功能逐步分解的同事,系統中的數據也逐級分解,形成若干層次的數據流圖。系統中的數據則藉助數據字典(data dictionary,DD)來描述。數據字典是系統中各類數據描述的集合,數據字典通常包括數據項,數據結構,數據流,數據存儲,和處理過程5個階段。

2.概念結構設計階段(常用自底向上)

概念結構設計是整個資料庫設計的關鍵,它通過對用戶需求進行綜合,歸納與抽象,形成了一個獨立於具體DBMS的概念模型。

設計概念結構通常有四類方法:

  • 自頂向下。即首先定義全局概念結構的框架,再逐步細化。

  • 自底向上。即首先定義各局部應用的概念結構,然後再將他們集成起來,得到全局概念結構。

  • 逐步擴張。首先定義最重要的核心概念結構,然後向外擴張,以滾雪球的方式逐步生成其他的概念結構,直至總體概念結構。

  • 混合策略。即自頂向下和自底向上相結合。

  • 3.邏輯結構設計階段(E-R圖)

    邏輯結構設計是將概念結構轉換為某個DBMS所支持的數據模型,並將進行優化。

    在這階段,E-R圖顯得異常重要。大家要學會各個實體定義的屬性來畫出總體的E-R圖。

    各分E-R圖之間的沖突主要有三類:屬性沖突,命名沖突,和結構沖突。

    E-R圖向關系模型的轉換,要解決的問題是如何將實體性和實體間的聯系轉換為關系模式,如何確定這些關系模式的屬性和碼。

    4.物理設計階段

    物理設計是為邏輯數據結構模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。

    首先要對運行的事務詳細分析,獲得選擇物理資料庫設計所需要的參數,其次,要充分了解所用的RDBMS的內部特徵,特別是系統提供的存取方法和存儲結構。

    常用的存取方法有三類:1.索引方法,目前主要是B+樹索引方法。2.聚簇方法(Clustering)方法。3.是HASH方法。

    5.資料庫實施階段

    資料庫實施階段,設計人員運營DBMS提供的資料庫語言(如sql)及其宿主語言,根據邏輯設計和物理設計的結果建立資料庫,編制和調試應用程序,組織數據入庫,並進行試運行。

    6.資料庫運行和維護階段

    資料庫應用系統經過試運行後,即可投入正式運行,在資料庫系統運行過程中必須不斷地對其進行評價,調整,修改。

    資料庫設計5步驟
    Five Steps to design the Database

    1.確定entities及relationships

    a)明確宏觀行為。資料庫是用來做什麼的?比如,管理雇員的信息。

    b)確定entities。對於一系列的行為,確定所管理信息所涉及到的主題范圍。這將變成table。比如,僱用員工,指定具體部門,確定技能等級。

    c)確定relationships。分析行為,確定tables之間有何種關系。比如,部門與雇員之間存在一種關系。給這種關系命名。

    d)細化行為。從宏觀行為開始,現在仔細檢查這些行為,看有哪些行為能轉為微觀行為。比如,管理雇員的信息可細化為:

    · 增加新員工

    · 修改存在員工信息

    · 刪除調走的員工

    e)確定業務規則。分析業務規則,確定你要採取哪種。比如,可能有這樣一種規則,一個部門有且只能有一個部門領導。這些規則將被設計到資料庫的結構中。

    ====================================================================
    範例:
    ACME是一個小公司,在5個地方都設有辦事處。當前,有75名員工。公司准備快速擴大規模,劃分了9個部門,每個部門都有其領導。
    為有助於尋求新的員工,人事部門規劃了68種技能,為將來人事管理作好准備。員工被招進時,每一種技能的專業等級都被確定。


    定義宏觀行為
    一些ACME公司的宏觀行為包括:
    ● 招聘員工
    ● 解僱員工
    ● 管理員工個人信息
    ● 管理公司所需的技能信息
    ● 管理哪位員工有哪些技能
    ● 管理部門信息
    ● 管理辦事處信息
    確定entities及relationships
    我們可以確定要存放信息的主題領域(表)及其關系,並創建一個基於宏觀行為及描述的圖表。
    我們用方框來代表table,用菱形代表relationship。我們可以確定哪些relationship是一對多,一對一,及多對多。
    這是一個E-R草圖,以後會細化。


    細化宏觀行為
    以下微觀行為基於上面宏觀行為而形成:
    ● 增加或刪除一個員工
    ● 增加或刪除一個辦事處
    ● 列出一個部門中的所有員工
    ● 增加一項技能
    ● 增加一個員工的一項技能
    ● 確定一個員工的技能
    ● 確定一個員工每項技能的等級
    ● 確定所有擁有相同等級的某項技能的員工
    ● 修改員工的技能等級

    這些微觀行為可用來確定需要哪些table或relationship。

    確定業務規則
    業務規則常用於確定一對多,一對一,及多對多關系。
    相關的業務規則可能有:
    ● 現在有5個辦事處;最多允許擴展到10個。
    ● 員工可以改變部門或辦事處
    ● 每個部門有一個部門領導
    ● 每個辦事處至多有3個電話號碼
    ● 每個電話號碼有一個或多個擴展
    ● 員工被招進時,每一種技能的專業等級都被確定。
    ● 每位員工擁有3到20個技能
    ● 某位員工可能被安排在一個辦事處,也可能不安排辦事處。

    2.確定所需數據

    要確定所需數據:

    a)確定支持數據

    b)列出所要跟蹤的所有數據。描述table(主題)的數據回答這些問題:誰,什麼,哪裡,何時,以及為什麼

    c)為每個table建立數據

    d)列出每個table目前看起來合適的可用數據

    e)為每個relationship設置數據

    f)如果有,為每個relationship列出適用的數據

    確定支持數據

    你所確定的支持數據將會成為table中的欄位名。比如,下列數據將適用於表Employee,表Skill,表Expert In。

    Employee

  • Skill

  • Expert In

  • ID

  • ID

  • Level

  • Last Name

  • Name

  • Date acquired

  • First Name

  • Description

  • Department

  • Office

  • Address


  • 如果將這些數據畫成圖表,就像:


  • 需要注意:

  • ● 在確定支持數據時,請一定要參考你之前所確定的宏觀行為,以清楚如何利用這些數據。

  • ● 比如,如果你知道你需要所有員工的按姓氏排序的列表,確保你將支持數據分解為名字與姓氏,這比簡單地提供一個名字會更好。

  • ● 你所選擇的名稱最好保持一致性。這將更易於維護資料庫,也更易於閱讀所輸出的報表。

  • ● 比如,如果你在某些地方用了一個縮寫名稱Emp_status,你就不應該在另外一個地方使用全名(Empolyee_ID)。相反,這些名稱應當是Emp_status及Emp_id。

  • ● 數據是否與正確的table相對應無關緊要,你可以根據自己的喜好來定。在下節中,你會通過測試對此作出判斷。
  • 3.標准化數據

    標准化是你用以消除數據冗餘及確保數據與正確的table或relationship相關聯的一系列測試。共有5個測試。本節中,我們將討論經常使用的3個。
    關於標准化測試的更多信息,請參考有關資料庫設計的書籍。

    標准化格式
    標准化格式是標准化數據的常用測試方式。你的數據通過第一遍測試後,就被認為是達到第一標准化格式;通過第二遍測試,達到第二標准化格式;通過第三遍測試,達到第三標准化格式。

    如何標准格式:
    1. 列出數據
    2. 為每個表確定至少一個鍵。每個表必須有一個主鍵。
    3. 確定relationships的鍵。relationships的鍵是連接兩個表的鍵。
    4. 檢查支持數據列表中的計算數據。計算數據通常不保存在資料庫中。
    5. 將數據放在第一遍的標准化格式中:
    6. 從tables及relationships除去重復的數據。
    7. 以你所除去數據創建一個或更多的tables及relationships。
    8. 將數據放在第二遍的標准化格式中:
    9. 用多於一個以上的鍵確定tables及relationships。
    10. 除去只依賴於鍵一部分的數據。
    11. 以你所除去數據創建一個或更多的tables及relationships。
    12. 將數據放在第三遍的標准化格式中:
    13. 除去那些依賴於tables或relationships中其他數據,並且不是鍵的數據。
    14. 以你所除去數據創建一個或更多的tables及relationships。

    數據與鍵
    在你開始標准化(測試數據)前,簡單地列出數據,並為每張表確定一個唯一的主鍵。這個鍵可以由一個欄位或幾個欄位(連鎖鍵)組成。

    主鍵是一張表中唯一區分各行的一組欄位。Employee表的主鍵是Employee ID欄位。Works In relationship中的主鍵包括Office Code及Employee ID欄位。給資料庫中每一relationship給出一個鍵,從其所連接的每一個table中抽取其鍵產生。

    RelationShip

  • Key

  • Office

  • *Office code

  • Office address

  • Phone number

  • Works in

  • *Office code

  • *Employee ID

  • Department

  • *Department ID

  • Department name

  • Heads

  • *Department ID

  • *Employee ID

  • Assoc with

  • *Department ID

  • *EmployeeID

  • Skill

  • *Skill ID

  • Skill name

  • Skill description

  • Expert In

  • *Skill ID

  • *Employee ID

  • Skill level

  • Date acquired

  • Employee

  • *Employee ID

  • Last Name

  • First Name

  • Social security number

  • Employee street

  • Employee city

  • Employee state

  • Employee phone

  • Date of birth


  • 將數據放在第一遍的標准化格式中
    ● 除去重復的組
    ● 要測試第一遍標准化格式,除去重復的組,並將它們放進他們各自的一張表中。
    ● 在下面的例子中,Phone Number可以重復。(一個工作人員可以有多於一個的電話號碼。)將重復的組除去,創建一個名為Telephone的新表。在Telephone與Office創建一個名為Associated With的relationship。

    將數據放在第二遍的標准化格式中
    ● 除去那些不依賴於整個鍵的數據。
    ● 只看那些有一個以上鍵的tables及relationships。要測試第二遍標准化格式,除去那些不依賴於整個鍵的任何數據(組成鍵的所有欄位)。
    ● 在此例中,原Employee表有一個由兩個欄位組成的鍵。一些數據不依賴於整個鍵;例如,department name只依賴於其中一個鍵(Department ID)。因此,Department ID,其他Employee數據並不依賴於它,應移至一個名為Department的新表中,並為Employee及Department建立一個名為Assigned To的relationship。


    將數據放在第三遍的標准化格式中
    ● 除去那些不直接依賴於鍵的數據。
    ● 要測試第三遍標准化格式,除去那些不是直接依賴於鍵,而是依賴於其他數據的數據。
    ● 在此例中,原Employee表有依賴於其鍵(Employee ID)的數據。然而,office location及office phone依賴於其他欄位,即Office Code。它們不直接依賴於Employee ID鍵。將這組數據,包括Office Code,移至一個名為Office的新表中,並為Employee及Office建立一個名為Works In的relationship。

    4.考量關系

    當你完成標准化進程後,你的設計已經差不多完成了。你所需要做的,就是考量關系。

    考量帶有數據的關系
    你的一些relationship可能集含有數據。這經常發生在多對多的關系中。

    遇到這種情況,將relationship轉化為一個table。relationship的鍵依舊成為table中的鍵。

    考量沒有數據的關系
    要實現沒有數據的關系,你需要定義外部鍵。外部鍵是含有另外一個表中主鍵的一個或多個欄位。外部鍵使你能同時連接多表數據。

    有一些基本原則能幫助你決定將這些鍵放在哪裡:

    一對多在一對多關系中,「一」中的主鍵放在「多」中。此例中,外部鍵放在Employee表中。

    一對一在一對一關系中,外部鍵可以放進任一表中。如果必須要放在某一邊,而不能放在另一邊,應該放在必須的一邊。此例中,外部鍵(Head ID)在Department表中,因為這是必需的。

    多對多在多對多關系中,用兩個外部鍵來創建一個新表。已存的舊表通過這個新表來發生聯系。

    5.檢驗設計

    在你完成設計之前,你需要確保它滿足你的需要。檢查你在一開始時所定義的行為,確認你可以獲取行為所需要的所有數據:
    ● 你能找到一個路徑來等到你所需要的所有信息嗎?
    ● 設計是否滿足了你的需要?
    ● 所有需要的數據都可用嗎?
    如果你對以上的問題都回答是,你已經差不多完成設計了。

    最終設計
    最終設計看起來就像這樣:

    設計資料庫的表屬性
    資料庫設計需要確定有什麼表,每張表有什麼欄位。此節討論如何指定各欄位的屬性。

    對於每一欄位,你必須決定欄位名,數據類型及大小,是否允許NULL值,以及你是否希望資料庫限制欄位中所允許的值。

    選擇欄位名
    欄位名可以是字母、數字或符號的任意組合。然而,如果欄位名包括了字母、數字或下劃線、或並不以字母打頭,或者它是個關鍵字(詳見關鍵字表),那麼當使用欄位名稱時,必須用雙引號括起來。

    為欄位選擇數據類型
    SQL Anywhere支持的數據類型包括:
    整數(int, integer, smallint)
    小數(decimal, numeric)
    浮點數(float, double)
    字元型(char, varchar, long varchar)
    二進制數據類型(binary, long binary)
    日期/時間類型(date, time, timestamp)
    用戶自定義類型

    關於數據類型的內容,請參見「SQL Anywhere數據類型」一節。欄位的數據類型影響欄位的最大尺寸。例如,如果你指定SMALLINT,此欄位可以容納32,767的整數。INTEGER可以容納2,147,483,647的整數。對CHAR來講,欄位的最大值必須指定。

    長二進制的數據類型可用來在資料庫中保存例如圖像(如點陣圖)或者文字編輯文檔。這些類型的信息通常被稱為二進制大型對象,或者BLOBS。

    關於每一數據類型的完整描述,見「SQL Anywhere數據類型」。

『貳』 如何設計一個方便高效查詢的大容量的資料庫結構

1、把你表中經常查詢的和不常用的分開幾個表,也就是橫向切分
2、把不同類型的分成幾個表,縱向切分
3、常用聯接的建索引
4、伺服器放幾個硬碟,把數據、日誌、索引分盤存放,這樣可以提高IO吞吐率
5、用優化器,優化你的查詢
6、考慮冗餘,這樣可以減少連接
7、可以考慮建立統計表,就是實時生成總計表,這樣可以避免每次查詢都統計一次
mrzxc 等說的好,考慮你的系統,注意負載平衡,查詢優化,25 萬並不大,可以建一個表,然後按mrzxc 的3 4 5 7 優化。 速度,影響它的因數太多了,且數據量越大越明顯。
1、存儲 將硬碟分成NTFS格式,NTFS比FAT32快,並看你的數據文件大小,1G以上你可以採用多資料庫文件,這樣可以將存取負載分散到多個物理硬碟或磁碟陣列上。
2、tempdb tempdb也應該被單獨的物理硬碟或磁碟陣列上,建議放在RAID 0上,這樣它的性能最高,不要對它設置最大值讓它自動增長
3、日誌文件 日誌文件也應該和數據文件分開在不同的理硬碟或磁碟陣列上,這樣也可以提高硬碟I/O性能。
4、分區視圖 就是將你的數據水平分割在集群伺服器上,它適合大規模OLTP,SQL群集上,如果你資料庫不是訪問特別大不建議使用。
5、簇索引 你的表一定有個簇索引,在使用簇索引查詢的時候,區塊查詢是最快的,如用between,應為他是物理連續的,你應該盡量減少對它的updaet,應為這可以使它物理不連續。
6、非簇索引 非簇索引與物理順序無關,設計它時必須有高度的可選擇性,可以提高查詢速度,但對表update的時候這些非簇索引會影響速度,且佔用空間大,如果你願意用空間和修改時間換取速度可以考慮。
7、索引視圖 如果在視圖上建立索引,那視圖的結果集就會被存儲起來,對與特定的查詢性能可以提高很多,但同樣對update語句時它也會嚴重減低性能,一般用在數據相對穩定的數據倉庫中。
8、維護索引 你在將索引建好後,定期維護是很重要的,用dbcc showcontig來觀察頁密度、掃描密度等等,及時用dbcc indexdefrag來整理表或視圖的索引,在必要的時候用dbcc dbreindex來重建索引可以受到良好的效果。 不論你是用幾個表1、2、3點都可以提高一定的性能,5、6、8點你是必須做的,至於4、7點看你的需求,我個人是不建議的。打了半個多小時想是在寫論文,希望對你有幫助。

『叄』 資料庫設計主要包括哪幾部分,分別包括哪些內容

資料庫設計主要包括需求分析、概念結構設計、邏輯結構設計、物理結構設計、資料庫的實施和資料庫的運行和維護,具體內容如下:

1、需求分析

內容:調查和分析用戶的業務活動和數據的使用情況,弄清所用數據的種類、范圍、數量以及它們在業務活動中交流的情況,確定用戶對資料庫系統的使用要求和各種約束條件等,形成用戶需求規約。

2、概念設計

內容:對用戶要求描述的現實世界,通過對其中諸處的分類、聚集和概括,建立抽象的概念數據模型。這個概念模型應反映現實世界各部門的信息結構、信息流動情況、信息間的互相制約關系以及各部門對信息儲存、查詢和加工的要求等。

3、邏輯設計

內容:主要工作是將現實世界的概念數據模型設計成資料庫的一種邏輯模式,即適應於某種特定資料庫管理系統所支持的邏輯數據模式。與此同時,可能還需為各種數據處理應用領域產生相應的邏輯子模式。這一步設計的結果就是所謂「邏輯資料庫」。

4、物理設計

內容:根據特定資料庫管理系統所提供的多種存儲結構和存取方法等依賴於具體計算機結構的各項物理設計措施,對具體的應用任務選定最合適的物理存儲結構(包括文件類型、索引結構和數據的存放次序與位邏輯等)、存取方法和存取路徑等。

5、驗證設計

內容:收集數據並具體建立一個資料庫,運行一些典型的應用任務來驗證資料庫設計的正確性和合理性。一般,一個大型資料庫的設計過程往往需要經過多次循環反復。當設計的某步發現問題時,可能就需要返回到前面去進行修改。

6、運行與維護設計

內容:在資料庫系統正式投入運行的過程中,必須不斷地對其進行調整與修改。除了關系型資料庫已有一套較完整的數據範式理論可用來部分地指導資料庫設計之外,尚缺乏一套完善的資料庫設計理論、方法和工具,以實現資料庫設計的自動化或互動式的半自動化設計。

(3)大型資料庫設計擴展閱讀:

重要性

1、有利於資源節約

對計算機軟體資料庫設計加以重視不僅可減少軟體後期的維修,達到節約人力與物力的目的,同時還有利於軟體功能的高效發揮。

2、有利於軟體運行速度的提高

高水平的資料庫設計可滿足不同計算機軟體系統對於運行速度的需求,而且還可充分發揮並實現系統功能。計算機軟體性能提高後,系統發出的運行指令在為用戶提供信息時也將更加快速有效,軟體運行速度自然得以提高。

3、有利於軟體故障的減少

加強資料庫設計可有效減少軟體故障的發生幾率,推動計算機軟體功能的實現。

『肆』 大型Oracle資料庫如何設計

超大型系統的特點為: 1、處理的用戶數一般都超過百萬,有的還超過千萬,資料庫的數據量一般超過1TB; 2、系統必須提供實時響應功能,系統需不停機運行,要求系統有很高的可用性及可擴展性。 為了能達到以上要求,除了需要性能優越的計算機和海量存儲設備外,還需要先進的資料庫結構設計和優化的應用系統。 一般的超大型系統採用雙機或多機集群系統。下面以資料庫採用Oracle 8.0.6並行伺服器為例來談談超大型資料庫設計方法: 確定系統的ORACLE並行伺服器應用劃分策略 資料庫物理結構的設計 系統硬碟的劃分及分配 備份及恢復策略的考慮 二、Oracle並行伺服器應用劃分策略 Oracle並行伺服器允許不同節點上的多個INSTANCE實例同時訪問一個資料庫,以提高系統的可用性、可擴展性及性能。Oracle並行伺服器中的每個INSTANCE實例都可將共享資料庫中的表或索引的數據塊讀入本地的緩沖區中,這就意味著一個數據塊可存在於多個INSTANCE實例的SGA區中。那麼保持這些緩沖區的數據的一致性就很重要。Oracle使用 PCM( Parallel Cache Management)鎖維護緩沖區的一致性,Oracle同時通過I DLM(集成的分布式鎖管理器)實現PCM 鎖,並通過專門的LCK進程實現INSTANCE實例間的數據一致。 考慮這種情況:INSTANCE1對BLOCK X塊修改,這時INSTANCE2對BLOCK X塊也需要修改。Oracle並行伺服器利用PCM鎖機制,使BLOCK X從INSTANCE 1的SGA區寫入資料庫數據文件中,又從數據文件中把BLOCK X塊讀入INSTANCE2的SGA區中。發生這種情況即為一個PING。PING使原來1個MEMORY IO可以完成的工作變成2個DISK IO和1個 MEMORY IO才能夠完成,如果系統中有過多的PING,將大大降低系統的性能。 Oracle並行伺服器中的每個PCM鎖可管理多個數據塊。PCM鎖管理的數據塊的個數與分配給一個數據文件的PCM鎖的個數及該數據文件的大小有關。當INSTANCE 1和INSTANCE 2要操作不同的BLOCK,如果這些BLOCK 是由同一個PCM鎖管理的,仍然會發生PING。這些PING稱為FALSE PING。當多個INSTANCE訪問相同的BLOCK而產生的PING是TRUE PING。 合理的應用劃分使不同的應用訪問不同的數據,可避免或減少TRUE PING;通過給FALSE PING較多的數據文件分配更多的PCM鎖可減少 FALSE PING的次數,增加PCM鎖不能減少TRUE PING。 所以,Oracle並行伺服器設計的目的是使系統交易處理合理的分布在INSTANCE實例間,以最小化PING,同時合理的分配PCM鎖,減少FALSE PING。設計的關鍵是找出可能產生的沖突,從而決定應用劃分的策略。應用劃分有如下四種方法: 1、根據功能模塊劃分,不同的節點運行不同的應用 2、根據用戶劃分,不同類型的用戶運行在不同的節點上 3、根據數據劃分,不同的節點訪問不同的數據或索引 4、根據時間劃分,不同的應用在不同的時間段運行 應用劃分的兩個重要原則是使PING最小化及使各節點的負載大致均衡。 三、資料庫物理結構的設計 資料庫物理結構設計包括確定表及索引的物理存儲參數,確定及分配資料庫表空間,確定初始的回滾段,臨時表空間,redo log files等,並確定主要的初始化參數。物理設計的目的是提高系統的性能。整個物理設計的參數可以根據實際運行情況作調整。 表及索引數據量估算及物理存儲參數的設置 表及索引的存儲容量估算是根據其記錄長度及估算的最大記錄數確定的。在容量計算中考慮了數據塊的頭開銷及記錄和欄位的頭開銷等等。

『伍』 大型ERP等資料庫系統常見幾種設計

早期的資料庫系統,經常採用某種編號,比如身份證號碼,公司編號等等作為資料庫表的 primary key。然而,很快,大家就發現其中的不利之處。 比如早期的醫院管理系統,用身份證號碼作為病人表的 primary key。然而,第一,不是每個人都有身份證;第二,對於國外來的病人,不同國家的病人的證件號碼並不見得沒有重復。因此,用身份證號碼作為病人表的 primary key是一個非常糟糕的設計。考慮到沒有醫生或者護士會刻意去記這些號碼,使用自增長 primary key是更好的設計。 公司編號採用某種特定的編碼方法,這也是早期的資料庫系統常見的做法。它的缺點也顯而易見:很容易出現像千年蟲的軟體問題,因為當初設計資料庫表的時候設計的位數太短,導致系統使用幾年後不能滿足要求,只有修改程序才能繼續使用。問題在於,任何人設計系統的時候,在預計某某編號多少位可以夠用的時候,都存在預計不準的風險。而採用自增長 primary key 則不存在這種問題。同樣的道理,沒有人可以去記這些號碼。 使用自增長 primary key另外一個原因是性能問題。略有編程常識的人都知道,數字大小比較比字元串大小比較要快得多。使用自增長 primary key可以大大地提高數據查找速度。 2. 避免用復合主鍵 (compound primary key)這主要還是因為性能問題。數據檢索是要用到大量的 primary key 值比較,只比較一個欄位比比較多個欄位快很多。使用單個 primary key 從編程的角度也很有好處, sql 語句中 where 條件可以寫更少的代碼,這意味著出錯的機會大大減少。 3. 雙主鍵雙主鍵是指資料庫表有兩個欄位,這兩個欄位獨立成為主鍵,但又同時存在。 資料庫系統的雙主鍵最早用在用戶管理模塊。最早的來源可能是參照操作系統的用戶管理模塊。 操作系統的用戶管理有兩個獨立的主鍵:操作系統自己自動生成的隨機 ID (Linux, windows 的 SID), login id。這兩個 ID 都必須是唯一的,不同的是,刪除用戶 test 然後增加一個用戶 test, SID 不同,login id 相同。採用雙主鍵主要目的是為了防止刪除後增加同樣的 login id 造成的混亂。比如銷售經理 hellen 本機共享文件給總經理 peter, 一年後總經理離開公司,進來一個普通員工 peter ,兩個peter 用同樣的 login id, 如果只用 login id 作操作系統的用戶管理主鍵,則存在漏洞:普通員工 peter 可以訪問原來只有總經理才能看的文件。操作系統自己自動生成的隨機 ID 一般情況下面用戶是看不到的。 雙主鍵現在已經廣泛用在各種資料庫系統中,不限於用戶管理系統。 4. 以固定的資料庫、表應付變化的客戶需求這主要基於以下幾個因素的考慮: 4.1 大型 EPR 系統的正常使用、維護需要軟體廠商及其眾多的合作夥伴共同給客戶提供技術服務,包括大量的二次開發。 如果用戶在軟體正常使用過程中需要增加新的表或者資料庫,將給軟體廠商及其眾多的合作夥伴帶來難題。 4.2 軟體升級的需要。 沒有一個軟體能夠讓客戶使用幾十上百年不用升級的。軟體升級往往涉及資料庫表結構的改變。軟體廠商會做額外的程序將早期版本軟體的資料庫數據升級到新的版本,但是對於用戶使用過程中生成的表進行處理就比較為難。 4.3 軟體開發的需要。 使用固定的資料庫庫表從開發、二次開發來說,更加容易。對於用戶使用過程中生成的表,每次查找數據時都要先查表名,再找數據,比較麻煩。 舉例來說,早期的用友財務軟體用 Access 作資料庫,每年建立一個新的資料庫。很快,用戶和用友公司都發現,跨年度數據分析很難做。因此這是一個不好的設計。在 ERP 中,很少有不同的年度數據單獨分開。一般來說,所有年份的數據都在同一個表中。對於跨國公司甚至整個集團公司都用同一個 ERP 系統的時候,所有公司的數據都在一起。這樣的好處是數據分析比較容易做。 現在大多數資料庫系統都能做到在常數時間內返回一定量的數據。比如,Oracle 資料庫中,根據 primary key 在 100萬條數據中取 10 條數據,與在1 億條數據中取 10 條數據,時間相差並不多。 5. 避免一次取資料庫大量數據,取大量數據一定要用分頁。這基本上是現在很多資料庫系統設計的基本守則。ERP 系統中超過 100萬條數據的表很多,對於很多表中的任何一個,一次取所有的會導致資料庫伺服器長時間處於停滯狀態,並且影響其它在線用戶的系統響應速度。 一般來說,日常操作,在分頁顯示的情況下面,每次取得數據在 1-100 之間,系統響應速度足夠快,客戶端基本沒有特別長的停頓。這是比較理想的設計。這也是大型資料庫系統往往用 ODBC, ADO 等等通用的資料庫聯接組件而不用特定的速度較快的專用資料庫聯接組件的原因。因為系統瓶頸在於資料庫( Database) 方面(數據量大),而不在於客戶端(客戶端每次只取少量數據)。 在 B/S 資料庫系統中,分頁非常普遍。早期的資料庫系統經常有客戶端程序中一次性取大量數據做緩沖。現在已經不是特別需要了,主要原因有: 5.1 資料庫本身的緩沖技術大大提高。 大部分資料庫都會自動將常用的數據自動放在內存中緩沖,以提高性能。 5.2 資料庫聯接組件的緩沖技術也在提高。 包括 ADO 在內的一些資料庫聯接組件都會自動對數據結果集(result set)進行緩沖,並且效果不錯。比較新穎的資料庫聯接組件,比如 Hibernate 也加入了一些數據結果集緩沖功能。 當然,也有一些資料庫聯接組件沒有對數據結果集進行緩沖,比如 JDBC Driver,不過幾年之內情況應該有所改觀。也有些不太成功的數據緩沖,比如 EJB 中的實體Bean,性能就不盡如人意,實體Bean數據也是放在內存中,可能是因為佔用內存過多的緣故。 相對來說,今天的程序員寫客戶端數據緩沖,能夠超過以上兩個緩沖效果的,已經比較難了。

『陸』 一個龐大資料庫設計,如何才能提高性能,有請高手們

高性能資料庫設計原則:
1. 原始單據與實體之間的關系
2. 主鍵與外鍵
3. 基本表的性質
基本表與中間表、臨時表不同,因為它具有如下四個特性:
(1) 原子性。基本表中的欄位是不可再分解的。
(2) 原始性。基本表中的記錄是原始數據(基礎數據)的記錄。
(3) 演繹性。由基本表與代碼表中的數據,可以派生出所有的輸出數據。
(4) 穩定性。基本表的結構是相對穩定的,表中的記錄是要長期保存的。
4. 範式標准
5. 通俗地理解三個範式
第一範式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
第三範式:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,要求欄位沒有冗餘。
6. 要善於識別與正確處理多對多的關系
7. 主鍵PK的取值方法
8. 正確認識數據冗餘
9. E--R圖沒有標准答案
10 . 視圖技術在資料庫設計中很有用
11. 中間表、報表和臨時表
12. 完整性約束表現在三個方面
13. 防止資料庫設計打補丁的方法是「三少原則」
14. 提高資料庫運行效率的辦法

『柒』 大數據量高並發訪問資料庫結構的設計

大數據量高並發訪問資料庫結構的設計
如果不能設計一個合理的資料庫模型,不僅會增加客戶端和伺服器段程序的編程和維護的難度,而且將會影響系統實際運行的性能。所以,在一個系統開始實施之前,完備的資料庫模型的設計是必須的。
在一個系統分析、設計階段,因為數據量較小,負荷較低。我們往往只注意到功能的實現,而很難注意到性能的薄弱之處,等到系統投入實際運行一段時間後,才發現系統的性能在降低,這時再來考慮提高系統性能則要花費更多的人力物力,而整個系統也不可避免的形成了一個打補丁工程。
所以在考慮整個系統的流程的時候,我們必須要考慮,在高並發大數據量的訪問情況下,我們的系統會不會出現極端的情況。(例如:對外統計系統在7月16日出現的數據異常的情況,並發大數據量的的訪問造成,資料庫的響應時間不能跟上數據刷新的速度造成。具體情況是:在日期臨界時(00:00:00),判斷資料庫中是否有當前日期的記錄,沒有則插入一條當前日期的記錄。在低並發訪問的情況下,不會發生問題,但是當日期臨界時的訪問量相當大的時候,在做這一判斷的時候,會出現多次條件成立,則資料庫里會被插入多條當前日期的記錄,從而造成數據錯誤。),資料庫的模型確定下來之後,我們有必要做一個系統內數據流向圖,分析可能出現的瓶頸。
為了保證資料庫的一致性和完整性,在邏輯設計的時候往往會設計過多的表間關聯,盡可能的降低數據的冗餘。(例如用戶表的地區,我們可以把地區另外存放到一個地區表中)如果數據冗餘低,數據的完整性容易得到保證,提高了數據吞吐速度,保證了數據的完整性,清楚地表達數據元素之間的關系。而對於多表之間的關聯查詢(尤其是大數據表)時,其性能將會降低,同時也提高了客戶端程序的編程難度,因此,物理設計需折衷考慮,根據業務規則,確定對關聯表的數據量大小、數據項的訪問頻度,對此類數據表頻繁的關聯查詢應適當提高數據冗餘設計但增加了表間連接查詢的操作,也使得程序的變得復雜,為了提高系統的響應時間,合理的數據冗餘也是必要的。設計人員在設計階段應根據系統操作的類型、頻度加以均衡考慮。
另外,最好不要用自增屬性欄位作為主鍵與子表關聯。不便於系統的遷移和數據恢復。對外統計系統映射關系丟失(******************)。
原來的表格必須可以通過由它分離出去的表格重新構建。使用這個規定的好處是,你可以確保不會在分離的表格中引入多餘的列,所有你創建的表格結構都與它們的實際需要一樣大。應用這條規定是一個好習慣,不過除非你要處理一個非常大型的數據,否則你將不需要用到它。(例如一個通行證系統,我可以將USERID,USERNAME,USERPASSWORD,單獨出來作個表,再把USERID作為其他表的外鍵)
表的設計具體注意的問題:
1、數據行的長度不要超過8020位元組,如果超過這個長度的話在物理頁中這條數據會佔用兩行從而造成存儲碎片,降低查詢效率。
2、能夠用數字類型的欄位盡量選擇數字類型而不用字元串類型的(電話號碼),這會降低查詢和連接的性能,並會增加存儲開銷。這是因為引擎在處理查詢和連接回逐個比較字元串中每一個字元,而對於數字型而言只需要比較一次就夠了。
3、對於不可變字元類型char和可變字元類型varchar都是8000位元組,char查詢快,但是耗存儲空間,varchar查詢相對慢一些但是節省存儲空間。在設計欄位的時候可以靈活選擇,例如用戶名、密碼等長度變化不大的欄位可以選擇CHAR,對於評論等長度變化大的欄位可以選擇VARCHAR。

4、欄位的長度在最大限度的滿足可能的需要的前提下,應該盡可能的設得短一些,這樣可以提高查詢的效率,而且在建立索引的時候也可以減少資源的消耗。
5、基本表及其欄位之間的關系, 應盡量滿足第三範式。但是,滿足第三範式的資料庫設計,往往不是最好的設計。為了提高資料庫的運行效率,常常需要降低範式標准:適當增加冗餘,達到以空間換時間的目的。
6、若兩個實體之間存在多對多的關系,則應消除這種關系。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一個多對多的關系,現在變為兩個一對多的關系。要將原來兩個實體的屬性合理地分配到三個實體中去。這里的第三個實體,實質上是一個較復雜的關系,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關系,但能處理多對多的關系。
7、主鍵PK的取值方法,PK是供程序員使用的表間連接工具,可以是一無物理意義的數字串, 由程序自動加1來實現。也可以是有物理意義的欄位名或欄位名的組合。不過前者比後者好。當PK是欄位名的組合時,建議欄位的個數不要太多,多了不但索引佔用空間大,而且速度也慢。
8、主鍵與外鍵在多表中的重復出現, 不屬於數據冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重復出現, 才是數據冗餘!而且是一種低級冗餘,即重復性的冗餘。高級冗餘不是欄位的重復出現,而是欄位的派生出現。
〖例4〗:商品中的「單價、數量、金額」三個欄位,「金額」就是由「單價」乘以「數量」派生出來的,它就是冗餘,而且是一種高級冗餘。冗餘的目的是為了提高處理速度。只有低級冗餘才會增加數據的不一致性,因為同一數據,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗餘(派生性冗餘),反對低級冗餘(重復性冗餘)。
9、中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉庫除外)。臨時表是程序員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程序員自己用程序自動維護。
10、防止資料庫設計打補丁的方法是「三少原則」
(1) 一個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了重復的多餘的實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;
(2) 一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外鍵,所以組合主鍵的欄位個數少了,不僅節省了運行時間,而且節省了索引存儲空間;
(3) 一個表中的欄位個數越少越好。只有欄位的個數少了,才能說明在系統中不存在數據重復,且很少有數據冗餘,更重要的是督促讀者學會「列變行」,這樣就防止了將子表中的欄位拉入到主表中去,在主表中留下許多空餘的欄位。所謂「列變行」,就是將主表中的一部分內容拉出去,另外單獨建一個子表。這個方法很簡單,有的人就是不習慣、不採納、不執行。
資料庫設計的實用原則是:在數據冗餘和處理速度之間找到合適的平衡點。「三少」是一個整體概念,綜合觀點,不能孤立某一個原則。該原則是相對的,不是絕對的。「三多」原則肯定是錯誤的。試想:若覆蓋系統同樣的功能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性)的E--R圖,要好得多。
提倡「三少」原則,是叫讀者學會利用資料庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全局綜合資料庫。集成的程度越高,數據共享性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。
提倡「三少」原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的「垃圾堆」,或資料庫表的「大雜院」,最後造成資料庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。
「三多」原則任何人都可以做到,該原則是「打補丁方法」設計資料庫的歪理學說。「三少」原則是少而精的原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用「打補丁方法」設計資料庫的理論依據。
11、在給定的系統硬體和系統軟體條件下,提高資料庫系統的運行效率的辦法是:
(1) 在資料庫物理設計時,降低範式,增加冗餘, 少用觸發器, 多用存儲過程。
(2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在資料庫外面,以文件系統方式用編程語言計算處理完成之後,最後才入庫追加到表中去。
(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
(5) 在使用面向數據的SQL語言進行程序設計時,盡量採取優化演算法
總之,要提高資料庫的運行效率,必須從資料庫系統級優化、資料庫設計級優化、程序實現級優化,這三個層次上同時下功夫。
主鍵設計:
1、不建議用多個欄位做主鍵,單個表還可以,但是關聯關系就會有問題,主鍵自增是高性能的。
2、一般情況下,如果有兩個外鍵,不建議採用兩個外鍵作為聯合住建,另建一個欄位作為主鍵。除非這條記錄沒有邏輯刪除標志,且該表永遠只有一條此聯合主鍵的記錄。
3、一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處於葉子部位的實體, 可以定義主鍵,也可以不定義主鍵(因為它無子孫), 但必須要有外鍵(因為它有父親)。
主鍵與外鍵的設計,在全局資料庫的設計中,佔有重要地位。當全局資料庫的設計完成以後,有個美國資料庫設計專家說:「鍵,到處都是鍵,除了鍵之外,什麼也沒有」,這就是他的資料庫設計經驗之談,也反映了他對信息系統核心(數據模型)的高度抽象思想。因為:主鍵是實體的高度抽象,主鍵與、外鍵的配對,表示實體之間的連接。

『捌』 概念資料庫設計的主要任務是什麼應該完成哪些工作

資料庫設計可以分為概念結構設計、邏輯結構設計和物理結構設計三個階段。
(1)概念結構設計。這是資料庫設計的第一個階段,在管理信息系統的分析階段,已經得到了系統的數據流程圖和數據字典,現在要結合數據規范化的理論,用一種數據模型將用戶的數據需求明確地表示出來。
概念數據模型是面向問題的模型,反映了用戶的現實工作環境,是與資料庫的具體實現技術無關的。建立系統概念數據模型的過程叫做概念結構設計。
(2)邏輯結構設計。根據已經建立的概念數據模型,以及所採用的某個資料庫管理系統軟體的數據模型特性,按照一定的轉換規則,把概念模型轉換為這個資料庫管理系統所能夠接受的邏輯數據模型。不同的資料庫管理系統提供了不同的邏輯數據模型,如層次模型、網狀模型、關系模型等。
(3)物理結構設計。為一個確定的邏輯數據模型選擇一個最適合應用要求的物理結構的過程,就叫做資料庫的物理結構設計。資料庫在物理設備上的存儲結構和存取方法稱為資料庫的物理數據模型。
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。

『玖』 大型ERP資料庫系統常見的幾種設計有什麼

採用自增長 主要是性能。早期的資料庫系統,經常採用某種編號,比如身份證號碼,公司編號等等作為資料庫表的 。然而,很快,大家就發現其中的不利之處。 比如早期的醫院管理系統,用身份證號碼作為病人表的 。然而,第一,不是每個人都有身份證;第二,對於國外來的病人,不同國家的病人的證件號碼並不見得沒有重復。因此,用身份證號碼作為病人表的 是一個非常糟糕的設計。考慮到沒有醫生或者護士會刻意去記這些號碼,使用自增長 是更好的設計。 公司編號採用某種特定的編碼方法,這也是早期的資料庫系統常見的做法。它的缺點也顯而易見:很容易出現像千年蟲的軟體問題,因為當初設計資料庫表的時候設計的位數太短,導致系統使用幾年後不能滿足要求,只有修改程序才能繼續使用。問題在於,任何人設計系統的時候,在預計某某編號多少位可以夠用的時候,都存在預計不準的風險。而採用自增長 則不存在這種問題。同樣的道理,沒有人可以去記這些號碼。 使用自增長 另外一個原因是性能問題。略有編程常識的人都知道,數字大小比較比字元串大小比較要快得多。使用自增長 可以大大地提高數據查找速度。2. 避免用復合主鍵 (compound ) 這主要還是因為性能問題。數據檢索是要用到大量的 值比較,只比較一個欄位比比較多個欄位快很多。使用單個 從編程的角度也很有好處, sql 語句中 where 條件可以寫更少的代碼,這意味著出錯的機會大大減少。3. 雙主鍵 雙主鍵是指資料庫表有兩個欄位,這兩個欄位獨立成為主鍵,但又同時存在。 資料庫系統的雙主鍵最早用在用戶管理模塊。最早的來源可能是參照操作系統的用戶管理模塊。 操作系統的用戶管理有兩個獨立的主鍵:操作系統自己自動生成的隨機 ID (Linux, windows 的 SID), login id。這兩個 ID 都必須是唯一的,不同的是,刪除用戶 test 然後增加一個用戶 test, SID 不同,login id 相同。採用雙主鍵主要目的是為了防止刪除後增加同樣的 login id 造成的混亂。比如銷售經理 hellen 本機共享文件給總經理 peter, 一年後總經理離開公司,進來一個普通員工 peter ,兩個peter 用同樣的 login id, 如果只用 login id 作操作系統的用戶管理主鍵,則存在漏洞:普通員工 peter 可以訪問原來只有總經理才能看的文件。操作系統自己自動生成的隨機 ID 一般情況下面用戶是看不到的。 雙主鍵現在已經廣泛用在各種資料庫系統中,不限於用戶管理系統。4. 以固定的資料庫、表應付變化的客戶需求 這主要基於以下幾個因素的考慮: 4.1 大型 EPR 系統的正常使用、維護需要軟體廠商及其眾多的合作夥伴共同給客戶提供技術服務,包括大量的二次開發。 如果用戶在軟體正常使用過程中需要增加新的表或者資料庫,將給軟體廠商及其眾多的合作夥伴帶來難題。 4.2 軟體升級的需要。 沒有一個軟體能夠讓客戶使用幾十上百年不用升級的。軟體升級往往涉及資料庫表結構的改變。軟體廠商會做額外的程序將早期版本軟體的資料庫數據升級到新的版本,但是對於用戶使用過程中生成的表進行處理就比較為難。 4.3 軟體開發的需要。 使用固定的資料庫庫表從開發、二次開發來說,更加容易。對於用戶使用過程中生成的表,每次查找數據時都要先查表名,再找數據,比較麻煩。 舉例來說,早期的用友財務軟體用 Access 作資料庫,每年建立一個新的資料庫。很快,用戶和用友公司都發現,跨年度數據分析很難做。因此這是一個不好的設計。在 ERP 中,很少有不同的年度數據單獨分開。一般來說,所有年份的數據都在同一個表中。對於跨國公司甚至整個集團公司都用同一個 ERP 系統的時候,所有公司的數據都在一起。這樣的好處是數據分析比較容易做。 現在大多數資料庫系統都能做到在常數時間內返回一定量的數據。比如,Oracle 資料庫中,根據 在 100萬條數據中取 10 條數據,與在1 億條數據中取 10 條數據,時間相差並不多。5. 避免一次取資料庫大量數據,取大量數據一定要用分頁。 這基本上是現在很多資料庫系統設計的基本守則。ERP 系統中超過 100萬條數據的表很多,對於很多表中的任何一個,一次取所有的會導致資料庫伺服器長時間處於停滯狀態,並且影響其它在線用戶的系統響應速度。 一般來說,日常操作,在分頁顯示的情況下面,每次取得數據在 1-100 之間,系統響應速度足夠快,客戶端基本沒有特別長的停頓。這是比較理想的設計。這也是大型資料庫系統往往用 ODBC, ADO 等等通用的資料庫聯接組件而不用特定的速度較快的專用資料庫聯接組件的原因。因為系統瓶頸在於資料庫( Database) 方面(數據量大),而不在於客戶端(客戶端每次只取少量數據)。 在B/S 資料庫系統中,分頁非常普遍。早期的資料庫系統經常有客戶端程序中一次性取大量數據做緩沖。現在已經不是特別需要了,主要原因有: 5.1 資料庫本身的緩沖技術大大提高。 大部分資料庫都會自動將常用的數據自動放在內存中緩沖,以提高性能。 5.2 資料庫聯接組件的緩沖技術也在提高。 包括ADO 在內的一些資料庫聯接組件都會自動對數據結果集(result set)進行緩沖,並且效果不錯。比較新穎的資料庫聯接組件,比如 Hibernate 也加入了一些數據結果集緩沖功能。 當然,也有一些資料庫聯接組件沒有對數據結果集進行緩沖,比如 JDBC Driver,不過幾年之內情況應該有所改觀。也有些不太成功的數據緩沖,比如 EJB 中的實體Bean,性能就不盡如人意,實體Bean數據也是放在內存中,可能是因為佔用內存過多的緣故。 相對來說,今天的程序員寫客戶端數據緩沖,能夠超過以上兩個緩沖效果的,已經比較難了。

熱點內容
sql返回執行結果 發布:2024-11-06 20:30:55 瀏覽:960
雷蛇怎麼配置 發布:2024-11-06 19:45:04 瀏覽:507
pm伺服器地址怎麼填 發布:2024-11-06 19:40:35 瀏覽:768
對應伺服器是什麼意思 發布:2024-11-06 19:38:18 瀏覽:255
怎麼搭建伺服器空間 發布:2024-11-06 19:35:36 瀏覽:981
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:181
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:739
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:248
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:344