日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

典型数据库架构设计

發布時間:2024/3/26 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 典型数据库架构设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、用戶中心

用戶中心是一個常見業務,主要提供用戶注冊、登錄、信息查詢與修改的服務,其核心元數據為:

User(uid, uname, passwd, sex, age,nickname, …)

其中:

  • uid為用戶ID,主鍵

  • uname, passwd, sex, age, nickname, …等為用戶的屬性

數據庫設計上,一般來說在業務初期,單庫單表就能夠搞定這個需求。

?

二、圖示說明

為了方便大家理解,后文圖片說明較多,其中:

  • “灰色”方框,表示service,服務

  • “紫色”圓框,標識master,主庫

  • “粉色”圓框,表示slave,從庫

?

三、單庫架構


最常見的架構設計如上:

  • user-service:用戶中心服務,對調用者提供友好的RPC接口

  • user-db:一個庫進行數據存儲

?

四、分組架構


什么是分組?

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

  • user-service:依舊是用戶中心服務

  • user-db-M(master):主庫,提供數據庫寫服務

  • user-db-S(slave):從庫,提供數據庫讀服務

主和從構成的數據庫集群稱為“組”

?

分組有什么特點?

:同一個組里的數據庫集群:

  • 主從之間通過binlog進行數據同步

  • 多個實例數據庫結構完全相同

  • 多個實例存儲的數據也完全相同,本質上是將數據進行復制

?

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

大部分互聯網業務讀多寫少數據庫的讀往往最先成為性能瓶頸,如果希望:

  • 線性提升數據庫讀性能

  • 通過消除讀寫鎖沖突提升數據庫寫性能

  • 通過冗余從庫實現數據的“讀高可用”

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

?

一句話總結,分組解決的是“數據庫讀寫高并發量高”問題,所實施的架構設計。

?

五、分片架構


什么是分片?

:分片架構是大伙常說的水平切分(sharding)數據庫架構:

  • user-service:依舊是用戶中心服務

  • user-db1:水平切分成2份中的第一份

  • user-db2:水平切分成2份中的第二份

分片后,多個數據庫實例也會構成一個數據庫集群。

?

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

強烈建議分庫,而不是分表,因為:

  • 分表依然公用一個數據庫文件,仍然有磁盤IO的競爭

  • 分庫能夠很容易的將數據遷移到不同數據庫實例,甚至數據庫機器上,擴展性更好

?

水平切分,用什么算法?

:常見的水平切分算法有“范圍法”和“哈希法”


范圍法如上圖:以用戶中心的業務主鍵uid為劃分依據,將數據水平切分到兩個數據庫實例上去:

  • user-db1:存儲01千萬的uid數據

  • user-db2:存儲02千萬的uid數據



哈希法如上圖:也是以用戶中心的業務主鍵uid為劃分依據,將數據水平切分到兩個數據庫實例上去:

  • user-db1:存儲uid取模得1uid數據

  • user-db2:存儲uid取模得0uid數據

這兩種方法在互聯網都有使用,其中哈希法使用較為廣泛

?

分片有什么特點?

:同一個分片里的數據庫集群:

  • 多個實例之間本身不直接產生聯系,不像主從間有binlog同步

  • 多個實例數據庫結構,也完全相同

  • 多個實例存儲的數據之間沒有交集,所有實例間數據并集構成全局數據

?

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

:大部分互聯網業務數據量很大,單庫容量容易成為瓶頸,此時通過分片可以:

  • 線性提升數據庫寫性能,需要注意的是,分組架構是不能線性提升數據庫寫性能的

  • 降低單庫數據容量

?

一句話總結,分片解決的是“數據庫數據量大”問題,所實施的架構設計。

?

六、分組+分片架構


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

  • 通過分片來降低單庫的數據量,線性提升數據庫的寫性能

  • 通過分組來線性提升數據庫的讀性能,保證讀庫的高可用

?

七、垂直切分

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


還是以用戶中心為例,可以這么進行垂直切分:

User(uid, uname, passwd, sex, age, …)

User_EX(uid, intro, sign, …)

  • 垂直切分開的表,主鍵都是uid

  • 登錄名,密碼,性別,年齡等屬性放在一個垂直表(庫)里

  • 自我介紹,個人簽名等屬性放在另一個垂直表(庫)里

?

如何進行垂直切分?

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

  • 長度較短,訪問頻率較高的放在一起

  • 長度較長,訪問頻度較低的放在一起

這是因為,數據庫會以行(row)為單位,將數load到內存(buffer)里,在內存容量有限的情況下,長度短且訪問頻度高的屬性,內存能夠load更多的數據,命中率會更高,磁盤IO會減少,數據庫的性能會提升。

?

垂直切分有什么特點?

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

  • 多個實例之間也不直接產生聯系,即沒有binlog同步

  • 多個實例數據庫結構,都不一樣

  • 多個實例存儲的數據之間至少有一列交集,一般來說是業務主鍵,所有實例間數據并集構成全局數據

?

垂直切分解決什么問題?

:垂直切分即可以降低單庫的數據量,還可以降低磁盤IO從而提升吞吐量,但它與業務結合比較緊密,并不是所有業務都能夠進行垂直切分的。

?

八、總結

文章較長,希望至少記住這么幾點:

  • 業務初期用單庫

  • 讀壓力大,讀高可用,用分組

  • 數據量大,寫線性擴容,用分片

  • 屬性短,訪問頻度高的屬性,垂直拆分到一起

總結

以上是生活随笔為你收集整理的典型数据库架构设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。