日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

「数据库系列一」为什么要用数据库?

發布時間:2024/10/5 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「数据库系列一」为什么要用数据库? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一個問題:什么是數據庫?

? ? ? 數據,現在被譽為工業社會的“石油”。數據(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用于表示客觀事物的未經 加工的原始素材。數據可以是連續的值,比如聲音、圖像,稱為模擬數據。也可以是離散的,如符號、文字,稱為數字數據。

在計算機系統中,數據以二進制信息單元0,1的形式表示,被存儲在磁盤或者內存當中。

? ? 數據庫是數據管理的產物。數據管理是數據庫的核心任務,內容包括對數據的分類、組織、編碼、儲存、檢索和維護。隨著計算機硬件和軟件的發展,數據庫技術也不斷地發展。從數據管理的角度看,數據庫技術到目前共經歷了人工管理階段、文件系統階段和數據庫系統階段。

第二個問題:為什么要使用數據庫?

A.人工管理階段
? ? 人工管理階段是指計算機誕生的初期(即20世紀50年代后期之前),這個時期的計算機主要用于科學計算。從硬件看,沒有磁盤等直接存取的存儲設備;從軟件看,沒有操作系統和管理數據的軟件,數據處理方式是批處理。
? ? 這個時期數據管理的特點是:
? 1. 數據不保存
? ? 該時期的計算機主要應用于科學計算,一般不需要將數據長期保存,只是在計算某一課題 時將數據輸入,用完后不保存原始數據,也不保存計算結果。
? 2. 沒有對數據進行管理的軟件系統
? ? 程序員不僅要規定數據的邏輯結構,而且還要在程序中設計物理結構,包括存儲結構、存取方法、輸入輸出方式等。因此程序中存取數據的子程序隨著存儲的改變而改變,數據與程序不具有一致性。
? 3. 沒有文件的概念
? ? ? 數據的組織方式必須由程序員自行設計。
? 4. 一組數據對應于一個程序,數據是面向應用的
? ? 即使兩個程序用到相同的數據,也必須各自定義、各自組織,數據無法共享、無法相互利用和互相參照,從而導致程序和程序之間有大量重復的數據。

B.文件系統階段
? ? ?文件系統階段是指計算機不僅用于科學計算,而且還大量用于管理數據的階段(從50年代后期到60年代中期)。在硬件方面,外存儲器有了磁盤、磁鼓等直接存取的存儲設備。在軟件方面,操作系統中已經有了專門用于管理數據的軟件,稱為文件系統。
? ? 這個時期數據管理的特點是:
? 1. 數據需要長期保存在外存上供反復使用
? ? 由于計算機大量用于數據處理,經常對文件進行查詢、修改、插入和刪除等操作,所以數據需要長期保留,以便于反復操作。
? 2. 程序之間有了一定的獨立性
? ? 操作系統提供了文件管理功能和訪問文件的存取方法,程序和數據之間有了數據存取的接口,程序可以通過文件名和數據打交道,不必再尋找數據的物理存放位置,至此,數據有了物理結構和邏輯結構的區別,但此時程序和數據之間的獨立性尚還不充分。
? 3. 文件的形式已經多樣化
? ? 由于已經有了直接存取的存儲設備,文件也就不再局限于順序文件,還有了索引文件、鏈表文件等,因而,對文件的訪問可以是順序訪問,也可以是直接訪問。
? ? ?4. 數據的存取基本上以記錄為單位

利用文件存儲數據的操作起來會十分痛苦:?開發人員需要熟悉操作磁盤文件的方法、必須編寫復雜的搜尋算法才能高效的把數據從文件中檢索出來、當數據格式發生變化時,需要編寫復雜的文件格式升級程序、很難控制并發修改。所以我們有了數據庫,對數據統一進行管理,并且針對數據的類型劃分成不同的種類。。

C.數據庫系統階段
? ? 數據庫系統階段是從60年代后期開始的。在這一階段中,數據庫中的數據不再是面向某個應用或某個程序,而是面向整個企業(組織)或整個應用的。數據庫系統階段的特點是:
? ? ?1. 采用復雜的結構化的數據模型
? ? ?數據庫系統不僅要描述數據本身,還要描述數據之間的聯系。這種聯系是通過存取路徑來實現的。
? ? ?2. 較高的數據獨立性
? ? ?數據和程序彼此獨立,數據存儲結構的變化盡量不影響用戶程序的使用。
? ? ?3. 最低的冗余度
? ? ?數據庫系統中的重復數據被減少到最低程度,這樣,在有限的存儲空間內可以存放更多的數據并減少存取時間。
? ? ?4. 數據控制功能
? ? ?數據庫系統具有數據的安全性,以防止數據的丟失和被非法使用;具有數據的完整性,以保護數據的正確、有效和相容;具有數據的并發控制,避免并發程序之間的相互干擾;具有數據的恢復功能,在數據庫被破壞或數據不可靠時,系統有能力把數據庫恢復到最近某個時刻的正確狀態。

數據庫怎么存儲數據?

答案是:一般數據庫還是依賴與操作系統的文件讀寫,來存儲數據到磁盤

操作系統是以文件形式保存數據,關系型數據庫我們是一行一行的數據。那么去保存在磁盤上,我們是一行一行的去保存嗎?我們需要自己實現存儲機制,并且每操作一行都要去寫磁盤。那樣事不可接受的。所以絕大多數數據庫還是利用操作系統的文件讀寫機制來存儲數據到磁盤。但是操作系統是看不到某條記錄的,只能看到文件,實際上要找到某行的數據,我們需要首先找這個文件,然后打開文件去找,根據記錄找到我們的數據。

比如:我有40行記錄,但是我40行記錄存成一個文件,存到磁盤的一個扇區。后面會降到頁,搜線其實是找到記錄所有在頁,頁上面有標示,表明我存儲了從哪一行到哪一行到數據。這種信息一般很小會載到內存中,那么我們就能很快地找到這個文件,剩下的就是移動磁頭去讀了。

數據庫文件體系結構

現在我們以mysql為例子來看一下數據庫文件體系結構:

如下圖是MySQL(5.7.18)在Linux系統yum默認安裝的數據文件目錄,可以看到有如下幾類文件。

數據庫路徑:可以看到,系統數據庫和用戶自定義的數據庫都是一個路徑,展開具體的路徑之后是具體的每個數據庫自己的對象。由此可見數據庫系統是建立在文件系統基礎之上的。通過文件路徑與物理存儲來映射,最終是映射到外部存儲也就是磁盤上。

數據庫磁盤存儲:

數據庫管理系統將數據存儲在磁盤、磁帶以及其他的裸設備上,雖然這些設備的訪問速度相比內存慢很多,但其非易失性和大容量的特點使他們成為數據存儲的不二之選。

一次完整的輸入輸出(IO)操作的時間=磁盤軸旋轉時間(旋轉延遲)+磁盤臂移動時間(尋道時間)+數據傳輸時間。三者所需時間的平均經驗值為:0.004秒、0.008秒和0.0005秒。所以,一次完整的IO時間的經驗值是0.0125秒,即1/80秒

對于大型數據庫而言,即便是這極短暫的0.0125秒,頻繁的IO操作會將這微不足道的時間累積得非常可觀,因此磁盤存儲的優化對于數據庫效率的提升是非常必要和重要的。我們都知道木桶原理,短板絕對整體的好壞,而數據庫系統中這個短板正是由于我們 使用的硬件設備里最弱的磁盤所導致。很多時候,我們會發現系統中I/O累得要死,而CPU卻在那里空閑等待,主要是由于I/O執行響應時間太長,處理讀寫的速度遠遠趕落后于CPU的處理速度,這時我們會盡可能的讓操作放到內存中進行,由磁盤與CPU的關系,轉變成內存與CPU的關系,會使用內存中的緩沖池來最小化磁盤活動。甚至有專門基于內存的內存數據庫比如redis。不同的數據庫產品的磁盤存儲內部實現是不同的,在這里不對此進行展開。

mysql的默認數據庫存儲引擎是InnoDB,在 InnoDB 存儲引擎中,所有的數據都被邏輯地存放在表空間中,表空間(tablespace)是存儲引擎中最高的存儲邏輯單位,在表空間的下面又包括段(segment)、區(extent)、頁(page):

同一個數據庫實例的所有表空間都有相同的頁大小;默認情況下,表空間中的頁大小都為 16KB,當然也可以通過改變 innodb_page_size 選項對默認大小進行修改,需要注意的是不同的頁大小最終也會導致區大小的不同:

磁盤的存儲概念:

  • 扇區:每個同心環叫做一個扇區,扇區是磁盤的最小存儲單元。當需要從磁盤讀取數據時,系統會將數據邏輯地址傳給磁盤,磁盤的控制電路按照尋址邏輯將邏輯地址翻譯成物理地址,即確定要讀的數據在哪個磁道,哪個扇區。為了讀取這個扇區的數據,需要將磁頭放到這個扇區上方,為了實現這一點,磁頭需要移動對準相應磁道,這個過程叫做尋道,所耗費時間叫做尋道時間;然后磁盤旋轉將目標扇區旋轉到磁頭下,這個過程耗費的時間叫做旋轉時間。
  • 頁:由于存儲介質的特性,磁盤本身存取就比主存慢很多,再加上機械運動耗費,磁盤的存取速度往往是主存的幾百分分之一,因此為了提高效率,要盡量減少磁盤I/O。為了達到這個目的,磁盤往往不是嚴格按需讀取,而是每次都會預讀,即使只需要一個字節,磁盤也會從這個位置開始,順序向后讀取一定長度的數據放入內存。預讀可以提高I/O效率。預讀的長度一般為頁(page:計算機管理存儲器的邏輯塊-通常為4k)的整倍數. 主存和磁盤以頁為單位交換數據。當程序要讀取的數據不在主存中時,會觸發一個缺頁異常,此時系統會向磁盤發出讀盤信號,磁盤會找到數據的起始位置并向后連續讀取一頁或幾頁載入內存中。

文件系統及數據庫系統的設計者利用了磁盤預讀原理,將一個節點的大小設為等于一個頁,這樣每個節點只需要一次I/O就可以完全載入。為了達到這個目的,在B+Tree每次新建一個節點的同時,直接申請一個頁的空間,這樣就保證一個節點物理上也存儲在一個頁里,加之計算機存儲分配都是按頁對齊的,就實現了一個node只需一次I/O。

什么是一次IO?

讀/寫IO,最為常見說法,讀IO,就是發指令,從磁盤讀取某段扇區的內容。指令一般是通知磁盤開始扇區位置,然后給出需要從這個初始扇區往后讀取的連續扇區個數,同時給出動作是讀,還是寫。磁盤收到這條指令,就會按照指令的要求,讀或者寫數據。控制器發出的這種指令+數據,就是一次IO,讀或者寫。

磁盤保存數據有兩種方式: 1、隨機存儲 2、順序存儲

隨機存儲比順序存儲讀大文件會慢幾萬倍。

大/小塊IO,指控制器的指令中給出的連續讀取扇區數目的多少,如果數目很大,比如128,64等等,就應該算是大塊IO,如果很小,比如1, 4,8等等,就應該算是小塊IO,大塊和小塊之間,沒有明確的界限。?連續/隨機IO,連續和隨機,是指本次IO給出的初始扇區地址,和上一次IO的結束扇區地址,是不是完全連續的,或者相隔不多的,如果是,則本次IO應該算是一個連續IO,如果相差太大,則算一次隨機IO。連續IO,因為本次初始扇區和上次結束扇區相隔很近,則磁頭幾乎不用換道或換道時間極短;如果相差太大,則磁頭需要很長的換道時間,如果隨機IO很多,導致磁頭不停換道,效率大大降底。

其它概念:

**磁盤簇:**扇區是磁盤最小的物理存儲單元,但由于操作系統無法對數目眾多的扇區進行尋址,所以操作系統就將相鄰的扇區組合在一起,形成一個簇,然后再對簇進行管理。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是操作系統所使用的邏輯概念,而非磁盤的物理特性。為了更好地管理磁盤空間和更高效地從硬盤讀取數據,操作系統規定一個簇中只能放置一個文件的內容,因此文件所占用的空間,只能是簇的整數倍;而如果文件實際大小小于一簇,它也要占一簇的空間。所以,一般情況下文件所占空間要略大于文件的實際大小,只有在少數情況下,即文件的實際大小恰好是簇的整數倍時,文件的實際大小才會與所占空間完全一致。

扇區:磁盤上的每個磁道被等分為若干個弧段,這些弧段便是磁盤的扇區。硬盤的讀寫以扇區為基本單位。通常情況下每個扇區的大小是512字節。(由于不斷提高磁盤的大小,部分廠商設定每個扇區的大小是4096字節。每個同心環叫做一個扇區,扇區是磁盤的最小存儲單元。當需要從磁盤讀取數據時,系統會將數據邏輯地址傳給磁盤,磁盤的控制電路按照尋址邏輯將邏輯地址翻譯成物理地址,即確定要讀的數據在哪個磁道,哪個扇區。為了讀取這個扇區的數據,需要將磁頭放到這個扇區上方,為了實現這一點,磁頭需要移動對準相應磁道,這個過程叫做尋道,所耗費時間叫做尋道時間;然后磁盤旋轉將目標扇區旋轉到磁頭下,這個過程耗費的時間叫做旋轉時間。 ————————————————

磁盤塊:邏輯層面:?**磁盤塊(虛擬出來的)。 塊是操作系統中最小的邏輯存儲單位。操作系統與磁盤打交道的最小單位是磁盤塊。**操作系統是通過塊簇來做為單位讀取等操作數據的。文件系統就是操作系統的一部分,所以文件系統操作文件的最小單位是塊。目的:1.讀取方便:由于扇區的數量比較小,數目眾多在尋址時比較困難,所以操作系統就將相鄰的扇區組合在一起,形成一個塊,再對塊進行整體的操作。2.分離對底層的依賴:操作系統忽略對底層物理存儲結構的設計。通過虛擬出來磁盤塊的概念,在系統中認為塊是最小的單位。。

磁盤控制器:其作用除了讀取數據、控制磁頭等作用外,還有的功能就是映射扇區和磁盤塊的關系。

塊與頁的關系:操作系統經常與內存和硬盤這兩種存儲設備進行通信,類似于“塊”的概念,都需要一種虛擬的基本單位。所以,與內存操作,是虛擬一個頁的概念來作為最小單位。與硬盤打交道,就是以塊為最小單位

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的「数据库系列一」为什么要用数据库?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。