數(shù)據(jù)庫管理系統(tǒng)中的SpeedUp和ScaleUp是什么?
譯文?譯者 | 李睿
審校 | 孫淑娟
本文將討論數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的SpeedUp和ScaleUp,這是數(shù)據(jù)庫并行處理中用于調(diào)整數(shù)據(jù)庫的兩個基本概念。
一、SpeedUp
由于數(shù)據(jù)庫的規(guī)模穩(wěn)步增長,承載數(shù)百GB數(shù)據(jù)的數(shù)據(jù)倉庫現(xiàn)在相對較小。甚至數(shù)TB的數(shù)據(jù)可以存儲在一些數(shù)據(jù)庫中,這些數(shù)據(jù)庫稱為超大數(shù)據(jù)庫(VLDB)。
為了獲取商業(yè)智能和支持決策,這些數(shù)據(jù)倉庫要接受復(fù)雜的查詢。這樣的查詢需要很長時間來處理。可以通過同時運行這些查詢來縮短總體時間,同時仍然提供必要的處理時間。
使用一個核心處理器(CPU)的運行時間與使用幾個核心處理器的運行時間之比稱為SpeedUp。
可以采用下面的公式來計算。它估計了使用多個處理器而不是一個處理器所獲得的性能優(yōu)勢:
Speedup =Time1/Timen
Time1是使用一個處理器完成一項任務(wù)所需的時間,而Timen是使用m個處理器完成同一項工作所需的時間。
1.Speedup曲線
在理想的情況下,并行處理的Speedup應(yīng)該與每個給定操作所使用的處理器數(shù)量相對應(yīng)。
或者,45度直線是Speedup曲線的最佳形狀。
因為處理器并行涉及到一些開銷,所以很少能得到SpeedUp曲線。可以獲得的Speedup受到應(yīng)用程序固有的并行性的顯著影響。
有些任務(wù)的組成部分可以很容易地并行處理。例如,可以并發(fā)地連接兩個巨大的表。
然而,有些任務(wù)是不能分離的。其中一個實例是無分區(qū)索引掃描。如果應(yīng)用程序幾乎沒有或根本沒有固有的并行性,那么Speedup將是最小的或根本不存在的。
效率是用Speedup除以處理器總數(shù)來計算的。在這個示例中有四個處理器,Speedup也是四個。因此,其效率為100%,這是一個理想的情況。
2.示例
CPU執(zhí)行一個進(jìn)程需要3分鐘。
通過將一個進(jìn)程劃分為更小的任務(wù),CPU需要1分鐘來執(zhí)行它。
SpeedUp的類型:
- Linear SpeedUp
- Sub-Linear SpeedUp
3.線性SpeedUp
如果SpeedUp是N,那么SpeedUp是線性的。換句話說,小系統(tǒng)的運行時間是大系統(tǒng)的運行時間的N倍(N是資源的數(shù)量,例如CPU)。
例如,如果一臺機(jī)器在10秒內(nèi)完成一項任務(wù),但10臺并行工作的機(jī)器在1秒內(nèi)完成同一項任務(wù),則SpeedUp為(10/1)=10(參見上面的等式),這等于N,即更大系統(tǒng)的大小。10倍強(qiáng)大的機(jī)制允許SpeedUp。
4.Sub-Linear SpeedUp
如果SpeedUp小于N,它就是次線性的(這在大多數(shù)并行系統(tǒng)中是常見的)。
更深刻的討論:如果SpeedUp是N或線性的,這意味著性能與預(yù)期一致。
如果SpeedUp小于N,則可能出現(xiàn)兩種情況:
· 情況1:當(dāng)“SpeedUp值”大于N時,則系統(tǒng)性能優(yōu)于預(yù)期。在這種情況下,SpeedUp值將小于1。
· 情況2:如果SpeedUp N是次線性的,在這種情況下,其分母(巨大的系統(tǒng)運行時間)超過了單個機(jī)器的運行時間。
在這種情況下,該值的范圍在0到1之間,需要設(shè)置一個閾值,以便任何低于該閾值的值都將阻止并行處理的發(fā)生。
在這樣的系統(tǒng)中,在處理器之間重新分配工作負(fù)載需要特別小心。
二、加快數(shù)據(jù)庫速度的幾種技術(shù)
現(xiàn)在了解一些SpeedUp數(shù)據(jù)庫的技術(shù)。
1.索引
通過保留有效的搜索數(shù)據(jù)結(jié)構(gòu),索引使數(shù)據(jù)庫能夠更快地定位相關(guān)行(例如B-Tree)。
每個表都必須執(zhí)行此操作。可能很少添加索引,因為它需要大量的計算并需要生產(chǎn)系統(tǒng)。
使用SQL(MySQL,PostgreSQL),創(chuàng)建索引很簡單:
通過添加索引,可以更快地搜索數(shù)據(jù)庫。但是,UPDATE、INSERT和DELETE命令需要較長時間執(zhí)行,除非WHERE子句需要較長時間。
2.查詢增強(qiáng)
數(shù)據(jù)庫用戶對每個查詢進(jìn)行查詢優(yōu)化。編寫查詢的方法有很多種,其中一些方法可能比其他方法更有效。
n+1問題和使用循環(huán)提交多個請求(而不是僅提交一個請求)來獲得數(shù)據(jù)屬于查詢優(yōu)化主題的一個稍微不同的子類別。
3.業(yè)務(wù)和分區(qū)的更改
隨著企業(yè)規(guī)模的擴(kuò)張,希望給客戶留下深刻印象。試圖包含客戶要求的任何微小的新特性。這可能導(dǎo)致特性蠕變。
根據(jù)UNIX的理念,這在很久以前就是一個問題:相比之下,將在線服務(wù)數(shù)據(jù)劃分為用戶組可能是可以接受的。也許把它們劃分成不同的區(qū)域更有意義?這就是在Secure Code Warrior和AWS所觀察到的。
可以將其分為“私人客戶端”、“小型企業(yè)客戶端”和“大型企業(yè)客戶端”。也許應(yīng)用程序的一部分可以作為自己的服務(wù)使用單獨的數(shù)據(jù)庫。
4.復(fù)制
如果讀取是一個問題,而少量的更新時間延遲不是主要問題,那么復(fù)制是一個簡單的解決方案。在復(fù)制過程中,將不斷地將數(shù)據(jù)庫復(fù)制到另一個系統(tǒng)。它充當(dāng)故障轉(zhuǎn)移機(jī)制并由SpeedUp讀取。
一個主服務(wù)器和多個復(fù)制服務(wù)器是預(yù)期的配置,這些服務(wù)器以前以不同的名稱命名。數(shù)據(jù)更新由主服務(wù)器處理,而不是復(fù)制服務(wù)器,復(fù)制服務(wù)器只是鏡像主服務(wù)器。其他拓?fù)湟泊嬖冢绛h(huán)形或星形配置。
5.水平分區(qū)
如果表非常大,可以將一些行存儲在一臺機(jī)器上,將其他行存儲在另一臺機(jī)器上。水平分區(qū)是將數(shù)據(jù)劃分為行的概念。
6.垂直分區(qū)
可以使用列而不是行將大型數(shù)據(jù)庫拆分為更小的部分。人們可能對此感到擔(dān)心,因為他們所知道的是,將數(shù)據(jù)庫規(guī)范化是一件好事。
在討論數(shù)據(jù)庫架構(gòu)的各個階段時,記住這一點至關(guān)重要。邏輯設(shè)計涉及到許多的常規(guī)數(shù)據(jù)庫類型。現(xiàn)在關(guān)注的是物理設(shè)計。
也許不是所有應(yīng)用程序組件都需要一行的所有列。因此,把它們分開也許是可以接受的。因此,行分割是垂直分區(qū)的另一個名稱。
需要記住的一點是,垂直擴(kuò)展與垂直分區(qū)無關(guān)!
如果不涉及隱私或法律問題,垂直分區(qū)可能是有利的。
盡管將其與其他數(shù)據(jù)結(jié)合在一起合乎邏輯,但應(yīng)用程序的大部分并不需要它,甚至更好的是,可以將其隱藏在一個私有微服務(wù)后面,并將其存儲在一個全新的數(shù)據(jù)庫中。
7.分片:分區(qū)的下一步
已經(jīng)有兩種不同的方法來對數(shù)據(jù)進(jìn)行分組。為了幫助數(shù)據(jù)庫更快地處理頻繁查詢,在同一個系統(tǒng)上劃分?jǐn)?shù)據(jù)可能已經(jīng)很有意義了。
但是,如果數(shù)據(jù)庫使用當(dāng)前機(jī)器上的所有CPU或內(nèi)存,那么使用不同的機(jī)器是明智的。 單個邏輯數(shù)據(jù)集被分片并分布在不同的設(shè)備上。
正如人們所料,這有很多問題,所以應(yīng)該只將其作為最后的手段。例如,2010年10月,一個分片問題導(dǎo)致Foursquare無法使用長達(dá)11個小時。
第一個問題是,應(yīng)用程序必須知道哪個分片擁有所需的數(shù)據(jù)。因此,應(yīng)用程序邏輯可能處處受到影響。
8.數(shù)據(jù)庫集群
集群這個概念似乎通過使用復(fù)制作為掩蓋技術(shù)來掩蓋分片的問題。
三、Scaleup
通過添加更多的處理器和磁盤,Scaleup是應(yīng)用程序在工作負(fù)載大小或事務(wù)量增長時保持響應(yīng)時間的能力。從可擴(kuò)展性的角度經(jīng)常討論Scaleup。
數(shù)據(jù)庫應(yīng)用程序中的擴(kuò)展可以是基于批處理或基于事務(wù)的。批處理擴(kuò)展可以支持更大的批處理作業(yè),而不犧牲響應(yīng)時間。在不犧牲響應(yīng)時間的情況下,事務(wù)擴(kuò)展可以支持更多的事務(wù)。
在這兩個場景中都添加了更多的處理器來維持響應(yīng)時間。例如,一個四個處理器系統(tǒng)可以提供與單一處理器系統(tǒng)相同的響應(yīng)時間,即支持四個處理器系統(tǒng)每分鐘處理400個事務(wù),而單處理器系統(tǒng)則支持每分鐘處理100個事務(wù)。
1.理想的Scaleup曲線
該圖將理想狀態(tài)表示為曲線或平坦的直線。事實上,即使添加更多的處理器,最終反應(yīng)時間也會隨著事物量的增加而增加。
擴(kuò)展能力取決于在保持恒定響應(yīng)時間的情況下可以增加多少處理能力。下面的公式用于確定Scaleup:
Scaleup=Volumem/Volume1
Volume1是使用一個處理器在同一時間段內(nèi)執(zhí)行的事務(wù)量,而Volumem是使用m個處理器執(zhí)行的事務(wù)量。對于前面的例子:
Scaleup=400/100。
Scaleup=4,
使用4個處理器,可以實現(xiàn)4倍的擴(kuò)展。
2.Scaleup的類型
- Liner Scaling up
- Sub-linear Scaleup
3.Linear Scaleup
如果資源的增長與問題的嚴(yán)重程度成正比,那么Scaleup是線性的(這是非常罕見的)。上面的等式表明,Scaleup=1,如果解決一個小系統(tǒng)小問題所花的時間等于解決一個大系統(tǒng)大問題所花的時間,則Scaleup是線性的。
4.Sub-Linear Scaleup
如果具有巨大問題的大型系統(tǒng)的運行時間比具有較小問題的小型系統(tǒng)的運行時間長,則擴(kuò)展是次線性的。
相關(guān)的其他討論包括:如果Scaleup是一個或線性的,則系統(tǒng)會完美地執(zhí)行。
如果Scaleup是次線性的且值在0到1之間,那么在選擇并行執(zhí)行的計劃時必須格外小心。例如,如果解決一個小問題所需的時間是5秒,而解決一個大問題所需的時間也是5秒。
這清楚地展示了線性。因此,5/5=1。對于不同的分母值,特別是較低的值(超出限制是無法想象的),系統(tǒng)的性能令人滿意。
但是,Scaleup下降到1以下,這就需要特別注意,以便為分母的較高值(如6、7、8等)進(jìn)行更好的任務(wù)再分配。
四、SpeedUp和Scaleup的區(qū)別
SpeedUp和Scaleup的顯著區(qū)別在于,SpeedUp是通過保持固定的問題大小來計算的,而Scaleup是通過增加問題大小或事務(wù)量來確定的。
在保持恒定的響應(yīng)時間的情況下,通過添加額外的處理器可以在多大程度上增強(qiáng)事務(wù)量,這是衡量擴(kuò)Scaleup的方法。
希望這篇關(guān)于Scaleup和SpeedUp的文章能幫助人們學(xué)習(xí)這些基本知識。
原文鏈接:https://dzone.com/articles/what-are-speedup-and-scaleup-in-dbms