《高效能mysql》第十一章讀書筆記

2021-10-05 03:20:07 字數 3463 閱讀 2617

一、什麼是可擴充套件性

可擴充套件性表明了當需要增加資源以執行更多工作時系統 能夠獲得划算的等同提公升的能力。

從較高層次上看是能夠通過增加資源來提公升容量的能力。

容量:可以認為是處理負載的能力。

二、擴充套件mysql

2.1規劃可擴充套件性

難點:估算需要承擔的負載到底有多少。

2.2為擴充套件贏得時間

優化效能,購買更強的硬體來爭取一些擴充套件工作的時間

2.3向上擴充套件

意味著花錢公升級硬體。

2.4向外擴充套件

分為三個部分:複製、拆分和資料分片。

1.按功能拆分

不同的伺服器或節點配置不同的應用,每個節點包含這個應用需要的資料即可。

2.資料分片

將資料分成一小片或一塊儲存到不同的節點。

需要從初始就將單一資料儲存結構轉為分片結構。

3.選擇分割槽鍵

盡量選擇那些能夠避免跨分片查詢的,同時也能讓分片足夠小,以免過大的資料片導致問題。

4.多個分割槽鍵

5.跨分片查詢

6.分配資料、分片和節點

分片盡可能的小於節點容量,則可以在單節點上部署多個分片。分片小易於管理,資料的備份和恢復都更容易

7.在節點上部署分片

每個分片使用單一資料庫。

多個分片的表放到同乙個資料庫,每個表明包含分片號。

每個分片使用乙個資料庫,這個資料庫包含所有應用需要的表。

每個分片使用乙個資料庫,並在資料庫名和表名中包含分片號。

每個節點上使用多個mysql例項,每個例項上有乙個或多個分片,使用上述提到的方式的任意組合安排分片。

8.固定分配

資料分配到分片的方式:固定分配和動態分配,種方法都需要使用乙個分割槽函式,使用行的分割槽鍵值作為輸入,返回儲存該行的分片。

固定分配:僅僅依賴分割槽鍵的值。eg:hash函式和取模運算。

優點:簡單,開銷低,可以在應用中硬編碼。

缺點:分片大,數量少,很難平衡不同分片的負載。

無法自定義資料放到哪個分片。修改分配策略較難,因為需要重新分配已有的資料

結論:更傾向於使用動態分配的方式。

動態分配:每個資料單元對映到乙個分片,實際上就是維護一套分片的關係。

增加了資源的開銷,但是可以更好的對資料儲存位置做細粒度的控制。

9.混合固定分配和動態分配

10.顯示分配

適用於新插入的資料,開發中極少使用。如果使用,需要將分片號碼編碼到id中,防止 主-主 複製主鍵衝突。

11.重新均衡分片資料

如有必要,可以通過在分片中移動資料來達到負載均衡。但是也要盡量避免重新均衡分片資料,可能會影響使用者使用,和增加新特性。

12.生成全域性唯一id

講乙個現有系統轉為分片資料儲存時,經常需要在多台機器上生成全域性唯一id。

如下幾個方法可以生成:

使用auto_jncrement_jncrement和auto_jncrement_offset

全域性節點中建立表

使用memcached或redis

批量分配數字

使用復合值

使用guid值

13.分片工具

在設計資料分片應用時,首先要做的是編寫能夠查詢多個資料來源的**。需要設計乙個抽象層。完成以下任務:

連線到正確的分片並查詢

分布式一致性校驗

跨分片結果集聚合

跨分片關聯操作

鎖和事務管理

建立新的資料分片

2.5通過多例項擴充套件

核心實際上是充分利用伺服器的資源,以較低的成本做較高效的設計。

2.6通過集群擴充套件

1.mysql cluster(ndb cluster)

2.clustrix

3.scalebase

4.beniedb

5.akiban

2.7向內擴充套件

僅僅作為爭取時間的短期策略

設計歸檔和清理策略時要考慮下面幾點:

對應用的影響

要歸檔的行

維護資料一致性

避免資料損失

解除歸檔

三、負載均衡

就是盡可能的平均負載量。

負載均衡的目的:

可擴充套件性

高效性可用性

透明性一致性

3.1直接連線

1.複製上的讀寫分離

常見的讀寫分離方法:

基於查詢分離

基於髒資料分離

基於會話分離

基於版本分離

基於全域性版本/會話分離

2.修改應用的配置

通過**來實現負載均衡,**要有健壯性和精確性。

3.修改dns

比較粗糙不太可控

4.轉移ip位址

在伺服器之間轉移虛擬位址。

3.2引入中介軟體

大部分的負載均衡都會引入中介軟體作為網路通訊的**。接受請求和派發請求到不同的伺服器上。

1.負載均衡器

mysql都是正常的tcp/ip連線,所以可以在mysql上使用多用途負載均衡器。但由於缺少mysql專有的特性,因此會有一些限制。

a.無法真正做到負載均衡,不同功能的伺服器的硬體不同就會有差異

b.mysql連線是有狀態的,負載均衡器不知道如何把所有從單個http會話傳送的連線請求「固定」到乙個mysql伺服器上。

c.連線池和長連線可能會阻礙負載均衡器分發連線請求。

d.許多負載均衡器只會對http伺服器做健康和負載檢查。

2.負載均衡演算法

常用的演算法:

隨機輪詢

最少連線數

最快響應

雜湊權重

3.在伺服器池中增加/移除伺服器

3.3一主多備間的負載均衡

這是最常見的複製拓撲結構。

功能區分

過濾和資料分割槽

將部分寫操作轉移到備庫

保證備庫跟上主庫

同步寫操作

第十一章 讀書筆記

第十一章 linux驅動程式中的 併發控制 併發 concurrency 指的是多個執行單元同時 並行被執行。而併發的執行單元對共享資 源 如硬體資摞 程式中的全域性變數 靜態變數等 的訪問很容易導致競態條件 race conditions 自旋鎖並不關心鎖定的 臨界區究竟是怎樣的操作,不管是讀還是...

第十一章讀書筆記

併發 concurrency 指的是多個執行單元同時 並行被執行。而併發的執行單元對共享資 源 如硬體資摞 程式中的全域性變數 靜態變數等 的訪問很容易導致競態條件 race conditions 例如,有乙個裝置檔案。程序 a 向該個裝置檔案寫入 1000 個 a飛而程序 b 向 裝置檔案寫入了 ...

讀書筆記 第十一章 C in depth

思考 11 2 from user in sampledata.allusers select user 轉譯 sampledata.allusers.select user user 範圍變數都可以是隱式型別。cast,oftype將飛型別化序列轉化為強型別。遇到不匹配型別,cast報錯,ofty...