20250218 隨筆 垂直分庫分表(Vertical Sharding) 和 水平分庫分表(Horizontal Sharding)

垂直分庫分表(Vertical Sharding)水平分庫分表(Horizontal Sharding) 是數據庫拆分的兩種策略。它們在大規模數據庫優化、分布式架構設計中至關重要,主要用于 降低單庫壓力、提高查詢效率、支持高并發


1. 垂直分庫分表(Vertical Sharding)

概念

垂直分庫垂直分表 的核心思想是按業務模塊或功能拆分數據庫,即:

  • 垂直分庫(Vertical Database Partitioning):將不同的業務模塊拆分到不同的數據庫中
  • 垂直分表(Vertical Table Partitioning):在同一個數據庫中,將一個大表按字段拆分成多個表

示例

假設有一個 電商系統,包含 用戶信息、訂單、商品、支付 等功能,如果所有數據都存放在一個數據庫 ecommerce_db,會導致:

  • 單庫壓力過大
  • 查詢、寫入效率下降
  • 影響數據庫擴展能力

可以采用 垂直分庫

user_db         → 存儲用戶信息
order_db        → 存儲訂單信息
product_db      → 存儲商品信息
payment_db      → 存儲支付信息

不同的業務數據存儲在不同的數據庫中,每個數據庫只處理自己相關的業務,提高效率。


垂直分庫 vs. 垂直分表

方式說明適用場景
垂直分庫按業務模塊拆分數據庫,每個庫獨立存儲不同業務數據業務數據相對獨立,不同模塊間交互少
垂直分表在同一個數據庫內,將大表按字段拆分成多個小表單表字段過多,部分字段訪問頻率低

查詢示例

查詢用戶信息:

SELECT * FROM user_db.users WHERE id = 1001;

查詢訂單信息:

SELECT * FROM order_db.orders WHERE user_id = 1001;

各個數據庫可以獨立擴展,互不影響。


優點

? 分擔數據庫壓力:不同業務拆分到不同數據庫,查詢、寫入性能提升
? 不同數據庫可獨立優化:如 user_db 讀多寫少,可優化為讀寫分離;order_db 寫入頻繁,可優化為高性能寫庫
? 支持不同存儲策略:如 user_db 存 MySQL,payment_db 存 PostgreSQL

缺點

? 跨庫 JOIN 復雜:無法直接執行 JOIN 查詢,需要在應用層處理
? 事務一致性問題:跨庫事務需要分布式事務(如 TCC、XA)
? 運維復雜:多個數據庫管理、備份、遷移成本增加


2. 水平分庫分表(Horizontal Sharding)

概念

水平分庫分表 的核心思想是按照數據量進行拆分,即:

  • 水平分庫(Horizontal Database Partitioning):將數據按某個分片鍵(Sharding Key) 均勻分布到多個數據庫
  • 水平分表(Horizontal Table Partitioning):將數據按分片鍵分布到多個相同結構的表

示例

假設有一個 orders 表,存儲1 億條訂單數據,直接查詢會導致:

  • 查詢速度變慢
  • 索引過大,影響性能
  • 數據庫寫入壓力過大
水平分庫

可以按照 user_id % 4 進行分庫

order_db_0: user_id % 4 = 0
order_db_1: user_id % 4 = 1
order_db_2: user_id % 4 = 2
order_db_3: user_id % 4 = 3

查詢用戶訂單:

SELECT * FROM order_db_2.orders WHERE user_id = 1002;

數據分布均勻,每個庫的壓力降低

水平分表

order_db 內部,將 orders 表按 user_id % 10 拆分為 10 張表

orders_0: user_id % 10 = 0
orders_1: user_id % 10 = 1
...
orders_9: user_id % 10 = 9

查詢用戶訂單:

SELECT * FROM orders_2 WHERE user_id = 1002;

避免單表數據過大,提高查詢速度。


水平分庫 vs. 水平分表

方式說明適用場景
水平分庫Sharding Key 進行數據庫拆分,不同數據庫存儲相同結構的數據單庫容量受限,分片鍵可均勻分布數據
水平分表在同一個數據庫內,將大表拆分為多個小表單表數據量過大,查詢變慢,索引維護困難

優點

? 單庫壓力減少:數據分布在多個數據庫或表,查詢、寫入速度更快
? 讀寫性能提升:不同庫可并行查詢、寫入,提高吞吐量
? 易于擴展:可以繼續增加數據庫或表,支持大規模數據存儲

缺點

? 跨庫查詢復雜:需要 UNION ALL 或應用層合并
? 事務管理難度大:需要分布式事務,如 TCCXA
? 數據路由管理:需要在應用層或 Sharding Proxy 進行數據分片管理


3. 垂直分庫分表 vs. 水平分庫分表

對比項垂直分庫分表水平分庫分表
拆分方式按業務模塊拆分按數據量拆分
數據存儲每個庫存儲不同表每個庫存儲相同表,但數據不同
適用場景業務數據獨立,如用戶、訂單、支付分開單表數據過大,查詢和寫入性能受限
查詢優化業務查詢獨立,無需跨庫查詢需要跨庫合并查詢
事務管理業務間事務較少可能涉及跨庫事務,需分布式事務
運維難度需要管理多個數據庫需要管理數據路由、分片規則
擴展性適合業務擴展,但數據量不均衡可水平擴展,適合大數據量場景

4. 結合使用

大規模系統 中,通常會 結合垂直分庫+水平分庫 進行優化。

示例:電商平臺

  1. 按業務拆分(垂直分庫)

    • user_db(用戶數據)
    • order_db(訂單數據)
    • payment_db(支付數據)
  2. 按數據量拆分(水平分庫)

    • order_db_0, order_db_1, order_db_2...
  3. 按查詢優化(垂直分表)

    • users_basic, users_detail

這樣既能保證業務獨立性,又能提升查詢和寫入性能,適用于大規模系統架構。


總結

  • 垂直分庫分表 適用于 不同業務模塊獨立存儲,減少數據庫負載
  • 水平分庫分表 適用于 大數據量、高并發系統,提高查詢和寫入性能
  • 大規模系統通常結合使用,即 先垂直拆分業務,再水平拆分數據

如果你有具體的業務場景,可以告訴我,我可以給你更詳細的架構設計建議!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71513.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

notepad++右鍵菜單不見了

卸載時沒點擊完成,又重新安裝了一個,最終導致了一些bug,導致右鍵沒有notepad菜單。 解決方式: 新建一個register.reg文件,加入以下代碼,然后雙擊執行即可 代碼說明:Open with Notepad 是右…

重定向與文件緩沖機制

目錄 一、重定向的原理與實踐 1. 輸出重定向:讓數據流向新目的地 2. 追加重定向:在文件末尾追加數據 3. 輸入重定向:從指定文件讀取數據 4. 標準輸出流與標準錯誤流的區別 5. 使用 dup2 實現重定向 二、FILE 結構體的奧秘 1. FILE 中的…

DeepSeek 沖擊(含本地化部署實踐)

DeepSeek無疑是春節檔最火爆的話題,上線不足一月,其全球累計下載量已達4000萬,反超ChatGPT成為全球增長最快的AI應用,并且完全開源。那么究竟DeepSeek有什么魔力,能夠讓大家趨之若鶩,他又將怎樣改變世界AI格…

顯微鏡下的人體結構

顯微鏡下的人體結構,看完以后,你還覺得人類是進化而來的嗎?...... 第一張:電子顯微鏡所觀察到的人類血管,可以非常清楚的看到里面的白細胞和紅細胞 第二張:正在分泌耳垢(耳屎)的耳道…

DApp 開發入門指南

DApp 開發入門指南 🔨 1. DApp 基礎概念 1.1 什么是 DApp? 去中心化應用(DApp)是基于區塊鏈的應用程序,特點是: 后端運行在區塊鏈網絡前端可以是任何框架使用智能合約處理業務邏輯數據存儲在區塊鏈上 1…

鴻蒙狀態管理概述 v2

狀態管理v2 概述狀態管理之v2ObservedV2 和 Trace狀態管理V1版本對嵌套類對象屬性變化直接觀測的局限性ObservedV2 和 Trace 使用場景 Local狀態管理V1版本State裝飾器的局限性 Param狀態管理V1版本接受外部傳入的裝飾器的局限性 OnceEventComputedComputed 使用場景 TypePersi…

Git中revert和reset區別?

git revert 和 git reset 都用于撤銷 Git 中的提交,但它們的作用和使用場景不同: git revert: 作用:創建一個新的提交,撤銷指定的提交內容。使用場景:用于“回滾”已推送到遠程倉庫的提交。這種方法不會改變提交歷史&a…

LabVIEW開發中的電機控制與相機像素差

在電機控制系統中,我們需要精確控制電機運動與相機拍攝畫面之間的關系。理想情況下,當電機帶動相機移動同樣的距離時,相機拍攝畫面中兩點之間的像素差應當是一個固定值。然而,在實際應用中,我們發現這一像素差并非固定…

從零到一:構建現代 React 應用的完整指南

1. create-react-app (CRA) 簡介: create-react-app 是官方推薦的 React 項目腳手架工具,提供了一個開箱即用的開發環境,幫助開發者快速啟動 React 應用。它會自動配置 Webpack、Babel、ESLint 等工具,讓你專注于開發而不需要手動配置工具鏈。 特點: 零配置:CRA 自動配…

rman 備份恢復1

前提: rman用戶必須具有sysdba權限 使用常用連接方式如下: rman target / rman target sys/oracle rman target sys/oracleprod1 catalog dav/oracledav_db 一個rman連接會產生兩個進程,action字段為空的就是rman的監控進程,另…

Qt程序退出相關資源釋放問題

目錄 問題背景: aboutToQuit 代碼舉例 closeEvent事件 代碼舉例 程序退出方式 quit() exit(int returnCode 0) close() 問題背景: 實際項目中程序退出前往往需要及進行一些資源釋放、配置保存、線程中斷等操作,避免資源浪費&#xff…

【DeepSeek】Mac m1電腦部署DeepSeek

一、電腦配置 個人電腦配置 二、安裝ollama 簡介:Ollama 是一個強大的開源框架,是一個為本地運行大型語言模型而設計的工具,它幫助用戶快速在本地運行大模型,通過簡單的安裝指令,可以讓用戶執行一條命令就在本地運…

[生活雜項][運動教程]自由泳

https://v.youku.com/v_show/id_XMzgzMjkwMzg0MA.html?spma2h0k.11417342.soresults.dtitle https://v.youku.com/v_show/id_XMzgxNjM2NjY4NA.html?spma2h0k.11417342.soresults.dtitle

Linux的指令與熱鍵

一.指令 1.pwd :顯示一個用戶當前所處的目錄 2.ls :顯示當前目錄下的文件(顯示當前文件屬性) ls -l :顯示當前目錄下文件的屬性及更多內容(ll是ls -l的別名,用法相同) ls -l 目錄:顯示指定目錄內容 ls…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知識整合

🎼個人主頁:【Y小夜】 😎作者簡介:一位雙非學校的大二學生,編程愛好者, 專注于基礎和實戰分享,歡迎私信咨詢! 🎆入門專欄:🎇【MySQL&#xff0…

【OS安裝與使用】part5-ubuntu22.04基于conda安裝pytorch+tensorflow

文章目錄 一、待解決問題1.1 問題描述1.2 解決方法 二、方法詳述2.1 必要說明2.2 應用步驟2.2.1 明確pytorch安裝依賴2.2.2 conda創建虛擬環境2.2.3 安裝pytorch2.2.4 驗證pytorch安裝2.2.5 安裝Tensorflow2.2.6 驗證Tensorflow安裝 三、疑問四、總結 一、待解決問題 1.1 問題…

馬拉車算法

Manacher算法 ,用于處理最長回文字符串的問題,可以在O(n)的情況下,求出一個字符串的最長回文字符串 回文串的基礎解法: 以每個點為中心對稱點,看左右兩邊的點是否相同。這種算法的時間復雜度為O&#xff0…

氣象學中的CDO插值(多方法+多分辨率)

文章目錄 說明CDO代碼 說明 需要新建.sh腳本文件,將下面的CDO代碼復制到.sh腳本中,然后運行插值程序。 CDO代碼 #!/bin/bash # # 用戶配置區(按實際需求修改) # input_directory"2m_temperature" # 自定義路徑 gr…

計算機網絡:應用層 —— 動態主機配置協議 DHCP

文章目錄 什么是 DHCP?DHCP 的產生背景DHCP 的工作過程工作流程地址分配機制 DHCP 中繼代理總結 什么是 DHCP? 動態主機配置協議(DHCP,Dynamic Host Configuration Protocol)是一種網絡管理協議,用于自動分…

【OS安裝與使用】part3-ubuntu安裝Nvidia顯卡驅動+CUDA 12.4

文章目錄 一、待解決問題1.1 問題描述1.2 解決方法 二、方法詳述2.1 必要說明2.2 應用步驟2.2.1 更改鏡像源2.2.2 安裝NVIDIA顯卡驅動:nvidia-550(1)查詢顯卡ID(2)PCI ID Repository查詢顯卡型號(3&#xf…