高併發系統-數據庫層設計原則

分庫分表

同樣量的數據平均存儲在不同數據庫相同表(或不同表)中,減輕單表壓力,如果還是很大,就可以每個庫在分多張表,根據hash取值或者其他邏輯判斷將數據存儲在哪張表中。

(1)垂直分庫

就是根據業務耦合性,將關聯度低的不同表存儲在不同的數據庫。做法與大系統拆分為多個小系統類 似,按業務分類進行獨立劃分。與"微服務治理"的做法相似,每個微服務使用單獨的一個數據庫。

(2)水平切分

當一個應用難以再細粒度的垂直切分,或切分後數據量行數巨大,存在單庫讀寫、存儲性能瓶頸,這時候就需要進行水平切分了。

水平切分分為庫內分表和分庫分表,是根據表內數據內在的邏輯關係,將同一個表按不同的條件分散到多個數據庫或多個表中,每個表中只包含一部分數據,從而使得單個表的數據量變小,達到分佈式的效果。

(3)帶來的問題

  • 事務一致性問題
  • 跨節點關聯查詢 join 問題
  • 跨節點分頁、排序、函數問題
  • 全局主鍵避重問題
  • 數據遷移、擴容問題

讀寫分離

數據庫原本就有主從數據庫之分,查詢在從服務器,增刪改在主服務器。

思路:通過設置主從數據庫實現讀寫分離,主數據庫負責“寫操作”,從數據庫負責“讀操作”,根據壓力情況,從數據庫可以部署多個提高“讀”的速度,藉此來提高系統總體的性能。

歸檔和操作表區分

建一張歸檔表,將歷史數據放入,需要操作的表數據單獨存儲。

索引

對於數據量很大,百萬級別以上的單表,如果增刪改操作不頻繁的話, 可以創建bitMap索引,速度要快得多。

索引分類

  • 唯一索引: UNIQUE

表明此索引的每一個索引值只對應唯一的數據記錄,對於單列唯一性索引,這保證單列不包含重複的值。對於多列唯一性索引,保證多個值的組合不重複。

  • 主鍵索引: primary key

數據庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。 在數據庫關係圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。

  • 聚集索引(也叫聚簇索引):cluster

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。

索引的實現方式

  • B+Tree 索引
  • 哈希索引
  • 全文索引
  • 空間數據索引


  1. 共享鎖:要等第一個人操作完,釋放鎖,才能操作
  2. 更新鎖:解決死鎖,別人可以讀,但不能操作
  3. 排他鎖:讀寫都被禁用
  4. 意向鎖(xlock): 對錶中部分數據加鎖,查詢時,可以跳過
  5. 計劃鎖: 操作時,別的表連接不了這張表,


高併發系統-數據庫層設計原則

高併發處理思路



分享到:


相關文章: