資料庫定址
A. 磁碟讀寫和資料庫讀寫哪個效率更高
假定在程序效率和關鍵過程相當且不計入緩存等措施的條件下,讀寫任何類型的數據都沒有直接操作文件來的快,不論MSYQL過程如何,最後都要到磁碟上去讀這個「文件」(記錄存儲區等效),所以當然這一切的前提是只讀 內容,無關任何排序或查找操作。
動態網站一般都是用資料庫來存儲信息,如果信息的及時性要求不高 可以加入緩存來減少頻繁讀寫資料庫。
兩種方式一般都支持,但是繞過操作系統直接操作磁碟的性能較高,而且安全性也較高,資料庫系中的磁碟性能一直都是瓶頸,大型資料庫一般基於unix
系統,當然win下也有,不常用應為win的不可靠性,unix下,用的是裸設備raw設備,就是沒有加工過的設備(unix下的磁碟分區屬於特殊設備,
以文件形式統一管理),由dbms直接管理,不通過操作系統,效率很高,可靠性也高,因為磁碟,cache和內存都是自己管理的,大型資料庫系統
db2,oracal,informix(不太流行了),mssql算不上大型資料庫系統。
1、直接讀文件相比資料庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。
2、一次讀取的內容越大,直接讀文件的優勢會越明
顯(讀文件時間都是小幅增長,這跟文件存儲的連續性和簇大小等有關系),這個結果恰恰跟書生預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操
作(兩次時間增長了近30%),如果只是單純的賦值轉換應該是差異偏小才對。
3、寫文件和INSERT幾乎不用測試就可以推測出,資料庫效率只會更差。
4、很小的配置文件如果不需要使用到資料庫特性,更加適合放到獨立文件里存取,無需單獨創建數據表或記錄,很大的文件比如圖片、音樂等採用文件存儲更為方便,只把路徑或縮略圖等索引信息放到資料庫里更合理一些。
5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數時間會少3秒左右。
6、fetch_row和fetch_object應該是從fetch_array轉換而來的,書生沒看過PHP的源碼,單從執行上就可以說明fetch_array效率更高,這跟網上的說法似乎相反。
磁碟讀寫與資料庫的關系:
一 磁碟物理結構
(1) 碟片:硬碟的盤體由多個碟片疊在一起構成。
在硬碟出廠時,由硬碟生產商完成了低級格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌
(Track),還將磁軌劃分為若干個扇區(Sector),每個扇區可存儲128×2的N次方(N=0.1.2.3)位元組信息,默認每個扇區的大小為
512位元組。通常使用者無需再進行低級格式化操作。
(2) 磁頭:每張碟片的正反兩面各有一個磁頭。
(3) 主軸:所有磁片都由主軸電機帶動旋轉。
(4) 控制集成電路板:復雜!上面還有ROM(內有軟體系統)、Cache等。
二 磁碟如何完成單次IO操作
(1) 尋道
當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator
Arm)帶動磁頭(Head)離開著陸區(Landing
Zone,位於內圈沒有數據的區域),移動到要操作的初始數據塊所在的磁軌(Track)的正上方,這個過程被稱為尋道(Seeking),對應消耗的時
間被稱為尋道時間(Seek Time);
(2) 旋轉延遲
找到對應磁軌還不能馬上讀取數據,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始數據塊所在的扇區(Sector)落在讀寫磁頭正下方之後才能開始讀取數據,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Delay);
(3) 數據傳送
接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的數據塊,直到完成這次IO所需要操作的全部數據,這個過程稱為數據傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後單次IO操作也就完成了。
根據磁碟單次IO操作的過程,可以發現:
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間
進而推算IOPS(IO per second)的公式為:
IOPS = 1000ms/單次IO時間
三 磁碟IOPS計算
不同磁碟,它的尋道時間,旋轉延遲,數據傳送所需的時間各是多少?
1. 尋道時間
考慮到被讀寫的數據可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(尋道時間最短),也可能在磁碟的最外圈(尋道時間最長),所以在計算中我們只考慮平均尋道時間。
在購買磁碟時,該參數都有標明,目前的SATA/SAS磁碟,按轉速不同,尋道時間不同,不過通常都在10ms以下:
3. 傳送時間2. 旋轉延時
和尋道一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外的延時就可以立刻讀寫到數據,但是最壞的情況確實要磁碟旋轉整整
一圈之後磁頭才能讀取到數據,所以這里也考慮的是平均旋轉延時,對於15000rpm的磁碟就是(60s/15000)*(1/2) = 2ms。
(1) 磁碟傳輸速率
磁碟傳輸速率分兩種:內部傳輸速率(Internal Transfer Rate),外部傳輸速率(External Transfer Rate)。
內部傳輸速率(Internal Transfer Rate),是指磁頭與硬碟緩存之間的數據傳輸速率,簡單的說就是硬碟磁頭將數據從碟片上讀取出來,然後存儲在緩存內的速度。
理想的內部傳輸速率不存在尋道,旋轉延時,就一直在同一個磁軌上讀數據並傳到緩存,顯然這是不可能的,因為單個磁軌的存儲空間是有限的;
實際的內部傳輸速率包含了尋道和旋轉延時,目前家用磁碟,穩定的內部傳輸速率一般在30MB/s到45MB/s之間(伺服器磁碟,應該會更高)。
外部傳輸速率(External Transfer Rate),是指硬碟緩存和系統匯流排之間的數據傳輸速率,也就是計算機通過硬碟介面從緩存中將數據讀出交給相應的硬碟控制器的速率。
硬碟廠商在硬碟參數中,通常也會給出一個最大傳輸速率,比如現在SATA3.0的6Gbit/s,換算一下就是6*1024/8,768MB/s,通常指的是硬碟介面對外的最大傳輸速率,當然實際使用中是達不到這個值的。
這里計算IOPS,保守選擇實際內部傳輸速率,以40M/s為例。
(2) 單次IO操作的大小
有了傳送速率,還要知道單次IO操作的大小(IO Chunk Size),才可以算出單次IO的傳送時間。那麼磁碟單次IO的大小是多少?答案是:不確定。
操作系統為了提高 IO的性能而引入了文件系統緩存(File System Cache),系統會根據請求數據的情況將多個來自IO的請求先放在緩存裡面,然後再一次性的提交給磁碟,也就是說對於資料庫發出的多個8K數據塊的讀操作有可能放在一個磁碟讀IO里就處理了。
還有,有些存儲系統也是提供了緩存(Cache),接收到操作系統的IO請求之後也是會將多個操作系統的 IO請求合並成一個來處理。
不管是操作系統層面的緩存還是磁碟控制器層面的緩存,目的都只有一個,提高數據讀寫的效率。因此每次單獨的IO操作大小都是不一樣的,它主要取決於系統對於數據讀寫效率的判斷。這里以SQL Server資料庫的數據頁大小為例:8K。
(3) 傳送時間
傳送時間 = IO Chunk Size/Internal Transfer Rate = 8k/40M/s = 0.2ms
可以發現:
(3.1) 如果IO Chunk Size大的話,傳送時間會變大,從而導致IOPS變小;
(3.2) 機械磁碟的主要讀寫成本,都花在了定址時間上,即:尋道時間 + 旋轉延遲,也就是磁碟臂的擺動,和磁碟的旋轉延遲。
(3.3) 如果粗略的計算IOPS,可以忽略傳送時間,1000ms/(尋道時間 + 旋轉延遲)即可。
4. IOPS計算示例
以15000rpm為例:
(1) 單次IO時間
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間 = 3ms + 2ms + 0.2 ms = 5.2 ms
(2) IOPS
IOPS = 1000ms/單次IO時間 = 1000ms/5.2ms = 192 (次)
這里計算的是單塊磁碟的隨機訪問IOPS。
考慮一種極端的情況,如果磁碟全部為順序訪問,那麼就可以忽略:尋道時間 + 旋轉延遲 的時長,IOPS的計算公式就變為:IOPS = 1000ms/傳送時間
IOPS = 1000ms/傳送時間= 1000ms/0.2ms = 5000 (次)
顯然這種極端的情況太過理想,畢竟每個磁軌的空間是有限的,尋道時間 + 旋轉延遲 時長確實可以減少,不過是無法完全避免的。
四 資料庫中的磁碟讀寫
1. 隨機訪問和連續訪問
(1) 隨機訪問(Random Access)
指的是本次IO所給出的扇區地址和上次IO給出扇區地址相差比較大,這樣的話磁頭在兩次IO操作之間需要作比較大的移動動作才能重新開始讀/寫數據。
(2) 連續訪問(Sequential Access)
相反的,如果當次IO給出的扇區地址與上次IO結束的扇區地址一致或者是接近的話,那磁頭就能很快的開始這次IO操作,這樣的多個IO操作稱為連續訪問。
(3) 以SQL Server資料庫為例
數據文件,SQL Server統一區上的對象,是以extent(8*8k)為單位進行空間分配的,數據存放是很隨機的,哪個數據頁有空間,就寫在哪裡,除非通過文件組給每個表預分配足夠大的、單獨使用的文件,否則不能保證數據的連續性,通常為隨機訪問。
另外哪怕聚集索引表,也只是邏輯上的連續,並不是物理上。
日誌文件,由於有VLF的存在,日誌的讀寫理論上為連續訪問,但如果日誌文件設置為自動增長,且增量不大,VLF就會很多很小,那麼就也並不是嚴格的連續訪問了。
2. 順序IO和並發IO
(1) 順序IO模式(Queue Mode)
磁碟控制器可能會一次對磁碟組發出一連串的IO命令,如果磁碟組一次只能執行一個IO命令,稱為順序IO;
(2) 並發IO模式(Burst Mode)
當磁碟組能同時執行多個IO命令時,稱為並發IO。並發IO只能發生在由多個磁碟組成的磁碟組上,單塊磁碟只能一次處理一個IO命令。
(3) 以SQL Server資料庫為例
有的時候,盡管磁碟的IOPS(Disk Transfers/sec)還沒有太大,但是發現資料庫出現IO等待,為什麼?通常是因為有了磁碟請求隊列,有過多的IO請求堆積。
磁碟的請求隊列和繁忙程度,通過以下性能計數器查看:
LogicalDisk/Avg.Disk Queue Length
LogicalDisk/Current Disk Queue Length
LogicalDisk/%Disk Time
這種情況下,可以做的是:
(1) 簡化業務邏輯,減少IO請求數;
(2) 同一個實例下,多個資料庫遷移的不同實例下;
(3) 同一個資料庫的日誌,數據文件分離到不同的存儲單元;
(4) 藉助HA策略,做讀寫操作的分離。
3. IOPS和吞吐量(throughput)
(1) IOPS
IOPS即每秒進行讀寫(I/O)操作的次數。在計算傳送時間時,有提到,如果IO Chunk Size大的話,那麼IOPS會變小,假設以100M為單位讀寫數據,那麼IOPS就會很小。
(2) 吞吐量(throughput)
吞吐量指每秒可以讀寫的位元組數。同樣假設以100M為單位讀寫數據,盡管IOPS很小,但是每秒讀寫了N*100M的數據,吞吐量並不小。
(3) 以SQL Server資料庫為例
對於OLTP的系統,經常讀寫小塊數據,多為隨機訪問,用IOPS來衡量讀寫性能;
對於數據倉庫,日誌文件,經常讀寫大塊數據,多為順序訪問,用吞吐量來衡量讀寫性能。
磁碟當前的IOPS,通過以下性能計數器查看:
LogicalDisk/Disk Transfers/sec
LogicalDisk/Disk Reads/sec
LogicalDisk/Disk Writes/sec
磁碟當前的吞吐量,通過以下性能計數器查看:
LogicalDisk/Disk Bytes/sec
LogicalDisk/Disk Read Bytes/sec
LogicalDisk/Disk Write Bytes/sec
B. 怎麼找到資料庫地址
這是關於SQL Server的回答。雖然目前答主也不清楚如何查看資料庫IP地址,但可以用伺服器名(實例名)來代替,因為無論是127.0.0.1或localhost或.或實例名(如實例名為PC-20170209MYKU)都可以登錄資料庫。簡單地說,在不知道IP地址的情況下,直接用實例名登錄(看最後一張圖)
PS:樓上幾位回答是關於查看資料庫物理文件路徑的方法
C. 什麼是定址方式
所謂定址方式,通常是指某一個CPU指令系統中規定的尋找操作數所在地址的方式,
或者說通過什麼的方式找到操作數。
學習定址方式,是為了找到指令中參與操作的數據,然後根據指令,得出結果。
D. 資料庫的ha模式是什麼
高可用(HA)性有兩種不同的含義,在廣義環境中是指整個系統的高可用性,在狹義方面一般指主機、服務的冗餘,如主機HA、應用程序的HA等,無論那種情況,高可用性都可以包含如下一些方面:
1、 系統失敗或崩潰;
2、 應用層或者中間層錯誤;
3、網路失敗;
4、 介質失敗:指一些存放數據的媒體介質故障;
5、 人為錯誤;
6、 系統的容災備份;
7、 計劃內的維護或者重啟。
可見,高可用性不僅包含了系統本身故障、應用層的故障、網路故障、認為操作的錯誤等,還包含數據的冗餘、容災及計劃的維護時間等,也就是說一個真正的高可用環境,不僅能避免系統本身的問題,還應該能防止天災、人禍,並且有一個可靠的系統升級及計劃維護操作。
E. 資料庫管理作業,大蝦們幫幫忙,緊急!!!
到資料庫書上找吧,不要偷懶
F. 為什麼要學資料庫
說到資料庫,如果是計算機專業的同學,他們往往需要學習資料庫的原理,也就是其底層邏輯。而其他專業的同學需要學習的一般是對資料庫操作層面的技巧和語法。題主就是屬於後者。
未來是一個數字化的時代,數據是我們最為寶貴的資源。
以上是馬雲先生的話,在如今這個時代,數據的意義和重要性不言而喻。
所以,不論是哪個專業出身,未來或多或少都會捲入數據時代的浪潮之中。
數據的重要性也就在一定程度上影射了資料庫的重要性,因為數據領域的最重要的安全問題、存儲問題、關系問題等,很多方面的整合都需要依靠資料庫來完成。
數據已經不是我們傳統意義上認為的數字信息了,生活中你說的每一句話、每一個動作、每一個表情都是數據。
舉個例子,現在有很多數據分析師,他們每天最基本的工作往往不是分析數據,而是提取數據,如何把數據高效、精準地提取出來並為我所用,這是數據分析的關鍵所在,這些前提性的工作基本都是依靠資料庫來完成。
未來對數據的定義會不斷地革新,生活的方方面面都會被列入數據的行列。從某種意義上來說,數據就是信息,只是數據不能直觀地帶來價值,而信息可以,但未來,這兩者之間的距離會越來越縮小,直至劃上等號。
G. 大數據正在如何改變資料庫格局
大數據正在如何改變資料庫格局
提及「資料庫」,大多數人會想到擁有30多年風光歷史的RDBMS。然而,這可能很快就會發生改變。
一大批新的競爭者都在爭奪這一塊重要市場,他們的方法是多種多樣的,卻都有一個共同點:極其專注於大數據。推動新的數據迭代衍生品大部分都是基於底層大數據的3V特徵:數量,速度和種類。本質上來講,今天的數據比以往任何時候都要傳輸更快,體積更大, 同時更加多樣化。這是一個新的數據世界,換言之,傳統的關系資料庫管理系統並沒有真正為此而設計。「基本上,他們不能擴展到大量,或快速,或不同種類的數據。」一位數據分析、數據科學咨詢機構的總裁格雷戈里認為。這就是哈特漢克斯最近發現。截至到2013年左右,營銷服務機構使用不同的資料庫,包括Microsoft SQL Server和Oracle真正應用集群(RAC)的組合。「我們注意到,數據隨著時間的增長,我們的系統不能足夠快速的處理信息」一位科技發展公司的負責人肖恩說到。「如果你不斷地購買伺服器,你只能繼續走到這幺遠,我們希望確保自己有向外擴展的平台。」最小化中斷是一個重要的目標,Iannuzzi說到,因此「我們不能只是切換到Hadoop。」相反,卻選擇了拼接機器,基本上把完整的SQL資料庫放到目前流行的Hadoop大數據平台之上,並允許現有的應用程序能夠與它連接,他認為。哈特漢克斯現在是在執行的初期階段,但它已經看到了好處,Iannuzzi說,包括提高容錯性,高可用性,冗餘性,穩定性和「性能全面提升」。一種完美風暴推動了新的資料庫技術的出現,IDC公司研究副總裁Carl Olofson說到。首先,「我們正在使用的設備與過去對比,處理大數據集更加快速,靈活性更強」Olofson說。在過去,這樣的集合「幾乎必須放在旋轉磁碟上」,而且數據必須以特定的方式來結構化,他解釋說。現在有64位定址,使得能夠設置更大的存儲空間以及更快的網路,並能夠串聯多台計算器充當單個大型資料庫。「這些東西在不可用之前開辟了可能性」Olofson說。與此同時,工作負載也發生了變化。10年前的網站主要是靜態的,例如,今天我們享受到的網路服務環境和互動式購物體驗。反過來,需要新的可擴展性,他說。公司正在利用新的方式來使用數據。雖然傳統上我們大部分的精力都放在了對事務處理 – 銷售總額的記錄,比如,數據存儲在可以用來分析的地方 – 現在我們做的更多。應用狀態管理就是一個例子假設你正在玩一個網路游戲。該技術會記錄你與系統的每個會話並連接在一起,以呈現出連續的體驗,即使你切換設備或各種移動,不同的伺服器都會進行處理,Olofson解釋說。數據必須保持連續性,這樣企業才可以分析問題,例如「為什麼從來沒有人穿過水晶廳」。在網路購物方面,為什麼對方點擊選擇顏色後大多數人不會購買某個特殊品牌的鞋子。「以前,我們並沒試圖解決這些問題,或者我們試圖扔進盒子也不太合適」Olofson說。Hadoop是當今新的競爭者中一個重量級的產品。雖然他本身不是一個資料庫,它的成長為企業解決大數據扮演關鍵角色。從本質上講,Hadoop是一個運行高度並行應用程序的數據中心平台,它有很強的可擴展性。通過允許企業擴展「走出去」的分布方式,而不是通過額外昂貴的伺服器「向上」擴展,「它使得我們可以低成本地把一個大的數據集匯總,然後進行分析研究成果」Olofson說。其他新的RDBMS的替代品如NoSQL家族產品,其中包括MongoDB -目前第四大流行資料庫管理系統,比照DB引擎和MarkLogic非結構化數據存儲服務。「關系型資料庫一直是一項偉大的技術持續了30年,但它是建立在不同的時代有不同的技術限制和不同的市場需求,」MarkLogic的執行副總裁喬·產品帕卡說。大數據是不均勻的,他說。許多傳統的技術,這仍然是一個基本要求。「想像一下,你的筆記本電腦上唯一的程序是Excel」帕卡說。「設想一下,你要和你的朋友利用網路保持聯系 – 或者你正在寫一個合約卻不適合放進行和列中。」拼接數據集是特別棘手的「關系型,你把所有這些數據集中在一起前,必須先決定如何去組織所有的列,」他補充說。「我們可以採取任何形式或結構,並立即開始使用它。」NoSQL資料庫沒有使用關系數據模型,並且它們通常不具有SQL介面。盡管許多的NoSQL存儲折中支持速度等其他因素,MarkLogic為企業定身量做,提供更為周全的選擇。NoSQL儲存市場有相當大的增長,據市場研究媒體,不是每個人都認為這是正確的做法-至少,不是在所有情況下。NoSQL系統「解決了許多問題,他們橫向擴展架構,但他們卻拋出了SQL,」一位CEO-Monte Zweben說。這反過來,又為現有的代碼構成問題。Splice Machine是一家基於Hadoop的實時大數據技術公司,支持SQL事務處理,並針對OLAP 和OLAP應用進行實時優化處理。它被稱為替代NewSQL的一個例子,另一類預期會在未來幾年強勁增長。「我們的理念是保持SQL,但橫向擴展架構」Zweben說。「這是新事物,但我們正在努力試圖使它讓人們不必重寫自己的東西。」深度信息科學選擇並堅持使用SQL,但需要另一種方法。公司的DeepSQL資料庫使用相同的應用程序編程介面(API)和關系模型如MySQL,意味著沒有應用變化的需求而使用它。但它以不同的方式處理數據,使用機器學習。DeepSQL可以自動適應使用任何工作負載組合的物理,虛擬或雲主機,該公司表示,從而省去了手動優化資料庫的需要。該公司的首席戰略官Chad Jones表示,在業績大幅增加的同時,也有能力將「規模化」為上千億的行。一種來自Algebraix數據完全不同的方式,表示已經開發了數據的第一個真正的數學化基礎。而計算器硬體需在數學建模前建成,這不是在軟體的情況下,Algebraix首席執行官查爾斯銀說。「軟體,尤其是數據,從未建立在數學的基礎上」他說,「軟體在很大程度上是語言學的問題。」經過五年的研發,Algebraix創造了所謂的「數據的代數」集合論,「數據的通用語言」Silver說。「大數據骯臟的小秘密是數據仍然放在不與其他數據小倉融合的地方」Silver解釋說。「我們已經證明,它都可以用數學方法來表示所有的集成。」配備一個基礎的平台,Algebraix現在為企業提供業務分析作為一種服務。改進的性能,容量和速度都符合預期的承諾。時間會告訴我們哪些新的競爭者取得成功,哪些沒有,但在此期間,長期的領導者如Oracle不會完全停滯不前。「軟體是一個非常時尚行業」安德魯·門德爾松,甲骨文執行副總裁資料庫伺服器技術說。「事情經常去從流行到不受歡迎,回再次到流行。」今天的許多創業公司「帶回炒冷飯少許拋光或旋轉就可以了」他說。「這是一個新一代孩子走出學校和重塑的東西。」SQL是「唯一的語言,可以讓業務分析師提出問題並得到答案,他們沒有程序員,」門德爾松說。「大市場將始終是關系型。」至於新的數據類型,關系型資料庫產品早在上世紀90年代發展為支持非結構化數據,他說。在2013年,甲骨文的同名資料庫版本12C增加了支持JSON(JavaScript對象符號)。與其說需要一個不同類型的資料庫,它更是一種商業模式的轉變,門德爾松說。「雲,若是每個人都去,這將破壞這些小傢伙」他說。「大家都在雲上了,所以在這里有沒有地方來放這些小傢伙?「他們會去亞馬遜的雲與亞馬遜競爭?」 他補充說。「這將是困難的。」甲骨文有「最廣泛的雲服務」門德爾松說。「在現在的位置,我們感覺良好。」Gartner公司的研究主任里克·格林沃爾德,傾向於採取了類似的觀點。「對比傳統強大的RDBMS,新的替代品並非功能齊全」格林沃爾德說。「一些使用案例可以與新的競爭者來解決,但不是全部,並非一種技術」。展望未來,格林沃爾德預計,傳統的RDBMS供貨商感到價格壓力越來越大,並為他們的產品增加新的功能。「有些人會自由地帶來新的競爭者進入管理自己的整個數據生態系統」他說。至於新的產品,有幾個會生存下來,他預測「許多人將被收購或資金耗盡」。今天的新技術並不代表傳統的RDBMS的結束,「正在迅速發展自己」IDC的Olofson。贊成這種說法,「RDBMS是需要明確定義的數據 – 總是會有這樣一個角色。」但也會有一些新的競爭者的角色,他說,特別是物聯網技術和新興技術如非易失性內存晶元模塊(NVDIMM)占據上風。以上是小編為大家分享的關於大數據正在如何改變資料庫格局的相關內容,更多信息可以關注環球青藤分享更多干貨