前言 資料庫典型架構實踐

2021-08-31 23:23:55 字數 2579 閱讀 1569

本章,將介紹資料庫架構設計中的一些基本概念,常見問題以及對應解決方案,為了便於讀者理解,將以「使用者中心」為例,講解資料庫架構設計的常見玩法。

使用者中心是乙個非常常見的業務,主要提供使用者註冊、登入、資訊查詢與修改的服務,其核心元資料為:

user(uid, uname, passwd, ***, age, nickname, …)

其中:資料庫設計上,一般來說在業務初期,單庫單錶就能夠搞定這個需求。

最常見的架構設計如上:

什麼是分組?

答:分組架構是最常見的一主多從,主從同步,讀寫分離資料庫架構:

主和從構成的資料庫集群稱為「組」。

分組有什麼特點?

答:同乙個組裡的資料庫集群:

分組架構究竟解決什麼問題?

答:大部分網際網路業務讀多寫少,資料庫的讀往往最先成為效能瓶頸,如果希望:

此時可以使用分組架構,需要注意的是,分組架構中,資料庫的主庫依然是寫單點。

一句話總結,分組解決的是「資料庫讀寫高併發量高」問題,所實施的架構設計。

什麼是分片?

答:分片架構是大夥常說的水平切分(sharding)資料庫架構:

分片後,多個資料庫例項也會構成乙個資料庫集群。

水平切分,到底是分庫還是分表?

答:強烈建議分庫,而不是分表來實施水平切分,因為:

水平切分,用什麼演算法?

答:常見的水平切分演算法有「範圍法」和「雜湊法」

範圍法如上圖:以使用者中心的業務主鍵uid為劃分依據,將資料水平切分到兩個資料庫例項上去:

雜湊法如上圖:也是以使用者中心的業務主鍵uid為劃分依據,將資料水平切分到兩個資料庫例項上去:

這兩種方法在網際網路都有使用,其中雜湊法使用較為廣泛。

分片有什麼特點?

答:同乙個分片裡的資料庫集群:

分片架構究竟解決什麼問題?

答:大部分網際網路業務資料量很大,單庫容量容易成為瓶頸,此時通過分片可以:

一句話總結,分片解決的是「資料庫資料量大」問題,所實施的架構設計。

如果業務讀寫併發量很高,資料量也很大,通常需要實施分組+分片的資料庫架構:

除了水平切分,垂直切分也是一類常見的資料庫架構設計,垂直切分一般和業務結合比較緊密。

還是以使用者中心為例,可以這麼進行垂直切分:

user(uid, uname, passwd, ***, age, …)

user_ex(uid, intro, sign, …)

如何進行垂直切分?

答:根據業務對資料進行垂直切分時,一般要考慮屬性的「長度」和「訪問頻度」兩個因素:

這是因為,資料庫會以行(row)為單位,將數load到記憶體(buffer)裡,在記憶體容量有限的情況下,長度短且訪問頻度高的屬性,記憶體能夠load更多的資料,命中率會更高,磁碟io會減少,資料庫的效能會提公升。

垂直切分有什麼特點?

答:垂直切分和水平切有相似的地方,又不太相同:

垂直切分解決什麼問題?

答:垂直切分即可以降低單庫的資料量,還可以降低磁碟io從而提公升吞吐量,但它與業務結合比較緊密,並不是所有業務都能夠進行垂直切分的。

業務場景決定資料庫架構:

還有哪些未盡事宜?

本文以「使用者中心」為例,對常見資料庫架構設計進行了簡要梳理與總結,但實際資料庫架構設計遠比此複雜,特別是水平切分的架構設計,不同業務場景的切分方式不盡相同。

本專題後續將要詳細介紹,覆蓋90%網際網路業務特性的四類業務:

分別應該如何實施水平切分,專題期望達到的效果是,從今之後,不管什麼業務場景,資料量大水平切分的技術問題從此就不用再擔心了,盡請期待。

資料庫典型題目

工廠 工廠編號,廠名,位址 主碼是工廠編號 職工 工號,姓名,工廠編號,聘期,工資 主碼是工號,外碼是工廠編號 產品 產品編號,產品名,規格 主碼是產品編號 生產關係 產品編號,工廠編號,計畫數量 主碼是 產品編號,工廠編號 外碼是產品編號 工廠編號 select a anmae from a wh...

mySQLite資料庫使用前言

方法例項中資料庫鍵值分別為 0 id,1 title,2 price,3 image,4 goodsid,5 number 其中id為主鍵,goodsid為商品編號veriable代表變數,count代表計數,其中column方法中的count代表對應鍵值在資料庫中的位置,從0開始 而bind方法中...

高階資料庫典型技術

資料庫作為計算機學科中乙個比較重要的分支,也是乙個對於程式設計師來說非常好的學習方向。平時我們用的最多的,同時也是接觸最多的一定是增刪改查語句,select,update,delete等,當然,我不會拿這些再說一遍,這些都是老的掉渣的東西了。所以我們可以學習高階資料庫中所以涉及的技術。換句話,其實就...