數據庫分庫分表介紹

分庫分表是解決數據庫性能瓶頸的常用技術手段,主要用于應對數據量過大、讀寫壓力過高的問題。通過將數據分散到多個數據庫或表中,可以提高系統的擴展性和性能。


1. 分庫分表的核心概念

(1)分庫

  • 定義:將數據分散到多個數據庫中,每個數據庫存儲一部分數據。
  • 優點
    • 分散讀寫壓力,提高并發能力。
    • 提高系統的可用性和容錯能力。
  • 缺點
    • 跨庫查詢復雜,需要額外的邏輯處理。
    • 數據一致性維護難度增加。

(2)分表

  • 定義:將數據分散到多個表中,每個表存儲一部分數據。
  • 優點
    • 減少單表數據量,提高查詢性能。
    • 降低索引大小,提高寫入性能。
  • 缺點
    • 跨表查詢復雜,需要額外的邏輯處理。
    • 數據一致性維護難度增加。

2. 分庫分表的策略

(1)水平分庫分表

  • 定義:將數據按行分散到多個庫或表中。
  • 常用策略
    • 按范圍分片:如按用戶 ID 范圍、時間范圍、區域范圍等。
    • 按哈希分片:如對用戶 ID 取模,分散到不同的庫或表中。

(2)垂直分庫分表

  • 定義:將數據按列分散到多個庫或表中。
  • 常用策略
    • 按業務分庫:如將用戶數據、訂單數據存儲在不同的數據庫中。
    • 按字段分表:如將大表中的常用字段和不常用字段拆分到不同的表中。

3. 分庫分表的實現方式

(1)應用層實現

  • 在應用層通過代碼實現分庫分表邏輯。
  • 優點:靈活可控。
  • 缺點:開發復雜度高,維護成本高。
  • 示例

(2)中間件實現(推薦

  • 使用數據庫中間件(如 MyCat、ShardingSphere)實現分庫分表。
  • 優點:簡化開發,支持動態擴展。
  • 缺點:依賴中間件,可能存在性能瓶頸。

4. 分庫分表的挑戰

(1)跨庫/跨表查詢

  • 問題:分庫分表后,跨庫或跨表查詢變得復雜。
  • 解決方案
    • 使用全局表或冗余數據。
    • 通過中間件支持跨庫查詢。

(2)數據一致性

  • 問題:分庫分表后,數據一致性維護難度增加。
  • 解決方案
    • 使用分布式事務(如 2PC、TCC)。
    • 通過消息隊列實現最終一致性。

(3)主鍵生成

  • 問題:分庫分表后,主鍵可能重復。
  • 解決方案
    • 使用分布式 ID 生成器(如 Snowflake、UUID)。
    • 使用數據庫自增 ID 結合分片規則。

5. 分庫分表的實際應用場景

(1)電商系統

  • 場景:訂單表數據量巨大,讀寫壓力高。
  • 方案
    • 按用戶 ID 分庫分表,分散訂單數據。
    • 使用 ShardingSphere 實現分庫分表,支持跨庫查詢。

(2)社交網絡

  • 場景:用戶動態數據量大,讀寫壓力高。
  • 方案
    • 按用戶 ID 分表,分散動態數據。
    • 使用 MySQL 分區表,簡化數據管理。

(3)日志系統

  • 場景:日志數據量巨大,寫入壓力高。
  • 方案
    • 按時間分表,每天或每月創建一個新表。
    • 使用 Elasticsearch 存儲日志,支持分布式查詢。

6. 示例

(1)水平分表示例

-- 用戶表按用戶 ID 取模分表
CREATE TABLE user_0 (id BIGINT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE user_1 (id BIGINT PRIMARY KEY,name VARCHAR(100)
);-- 插入數據時根據用戶 ID 取模選擇表
INSERT INTO user_0 (id, name) VALUES (1, 'Alice');
INSERT INTO user_1 (id, name) VALUES (2, 'Bob');

(2)垂直分庫示例

-- 用戶庫
CREATE DATABASE user_db;
USE user_db;
CREATE TABLE user (id BIGINT PRIMARY KEY,name VARCHAR(100)
);-- 訂單庫
CREATE DATABASE order_db;
USE order_db;
CREATE TABLE order (id BIGINT PRIMARY KEY,user_id BIGINT,amount DECIMAL(10, 2)
);

(3)使用 ShardingSphere 實現分庫分表

# sharding.yml 配置文件
dataSources:ds0:url: jdbc:mysql://localhost:3306/db0username: rootpassword: rootds1:url: jdbc:mysql://localhost:3306/db1username: rootpassword: rootshardingRule:tables:user:actualDataNodes: ds$->{0..1}.user$->{0..1}tableStrategy:standard:shardingColumn: idpreciseAlgorithmClassName: com.example.HashModShardingAlgorithm

(4)應用層分庫分表示例

// 根據用戶 ID 取模分表
public String getTableName(long userId) {int tableIndex = (int) (userId % 4); // 分為 4 張表return "user_" + tableIndex;
}// 插入數據時選擇表
public void insertUser(User user) {String tableName = getTableName(user.getId());String sql = "INSERT INTO " + tableName + " (id, name) VALUES (?, ?)";jdbcTemplate.update(sql, user.getId(), user.getName());
}

7. 總結

  • 分庫分表是解決數據庫性能瓶頸的有效手段,適用于數據量大、讀寫壓力高的場景。
  • 分庫分表策略:水平分庫分表、垂直分庫分表。
  • 實現方式:應用層實現、中間件實現。
  • 挑戰:跨庫/跨表查詢、數據一致性、主鍵生成。

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

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

相關文章

#mapreduce打包#maven:could not resolve dependencies for project

打包報錯: #報錯信息: [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…

Rabit

之前發過rabit了,所以這里不再贅述,講講原理 在線Rabbit加密 | Rabbit解密- 在線工具 (sojson.com) rabbit加密原理 Rabbit加密算法是一種流密碼算法,由Daniel J. Bernstein設計,并被廣泛用于多種加密和安全通信應用中。它的設…

【A2DP】深入解讀A2DP中通用訪問配置文件(GAP)的互操作性要求

目錄 一、模式支持要求 1.1 發現模式 1.2 連接模式 1.3 綁定模式 1.4 模式間依賴關系總結 1.5 注意事項 1.6 協議設計深層邏輯 二、安全機制(Security Aspects) 三、空閑模式操作(Idle Mode Procedures) 3.1 支持要求 …

模型蒸餾系列——開源項目

推薦項目:MiniMind(低成本全流程訓練框架) GitHub:https://github.com/jingyaogong/minimind 核心特性:完整實現從數據清洗到模型部署的全流程,支持單卡低成本訓練,代碼全透明,適合…

【軟考-架構】13.1、軟件架構概述-構件技術

?資料&文章更新? GitHub地址:https://github.com/tyronczt/system_architect 文章目錄 ?【重點】系統架構設計軟件架構概述軟件架構設計與生命周期構件🌟軟件架構風格數據流風格調用/返回風格獨立構件風格虛擬機風格倉庫風格閉環控制風格C2體系結…

《Android啟動偵探團:追蹤Launcher啟動的“最后一公里”》

1. 開機儀式的“黑屏懸案” 當Android設備完成開機動畫后,某些產品會陷入詭異的“黑屏時刻”——仿佛系統在玩捉迷藏。此時,**Launcher(桌面)**就是躲貓貓的主角。我們的任務:揪出Launcher何時完成啟動,終…

Redis事務與管道

Redis事務 可以一次執行多個命令,本質是一組命令的集合。一個事務中的所有命令都會序列化,按順序地串行執行而不會被其他命令插入,不許加塞。 一個隊列中,一次性、順序性、排他性的執行一系列命令。 Redis事務VS數據庫事務 常用…

掌握這些 UI 交互設計原則,提升產品易用性

在當今數字化時代,用戶對于產品的體驗要求越來越高,UI 交互設計成為決定產品成敗的關鍵因素之一。一個易用的產品能夠讓用戶輕松、高效地完成各種操作,而實現這一目標的核心在于遵循一系列科學合理的 UI 交互設計原則。本文將詳細闡述簡潔性、…

Alembic 實戰指南:快速入門到FastAPI 集成

一、快速開始 1.1 簡介 Alembic 是一個基于 SQLAlchemy 的數據庫遷移工具,主要用于管理數據庫模式(Schema)的變更,例如新增表、修改字段、刪除索引等,確保數據庫結構與應用程序的 ORM 模型保持一致。 Alembic 通過版…

LRU(最近最少使用)算法實現

核心思想與基本思路 LRU(Least Recently Used)算法是一種緩存淘汰策略,其核心思想是淘汰最近最少使用的數據。 最近使用原則:最近被訪問的數據在未來被訪問的概率更高,因此應保留在緩存中。淘汰機制:當緩…

現在有分段、句子數量可能不一致的中英文文本,如何用python實現中英文對照翻譯(即每行英文對應相應的中文)

以下是處理分段且中英文句子數量可能不一致的文本的Python實現方案,包含分句、翻譯和對齊功能: from googletrans import Translator import redef split_paragraphs(text):"""按空行分割段落并清洗"""return [p.strip()…

C語言每日一練——day_8

引言 針對初學者,每日練習幾個題,快速上手C語言。第八天。(連續更新中) 采用在線OJ的形式 什么是在線OJ? 在線判題系統(英語:Online Judge,縮寫OJ)是一種在編程競賽中用…

基礎知識《Redis解析》

Redis 詳細解析與介紹 Redis(Remote Dictionary Server)是一個開源的高性能鍵值對(Key-Value)數據庫,支持多種數據結構(如字符串、哈希、列表、集合等),廣泛應用于緩存、消息隊列、…

區跨鏈知識和概念

1、以太坊 Geth 源碼解析 Geth(Go Ethereum)是以太坊官方提供的 Go 語言實現的客戶端,廣泛用于以太坊全節點運行、挖礦、DApp 開發等。理解 Geth 的源碼有助于掌握以太坊區塊鏈底層邏輯,如區塊同步、EVM 執行、P2P 交互等。 2、…

Vue 計算屬性與 Data 屬性同名問題深度解析

文章目錄 1. 問題背景與核心概念1.1 Vue 響應式系統架構1.2 核心概念定義 2. 同名問題的技術分析2.1 同名場景示例2.2 問題發生機制 3. 底層原理剖析3.1 Vue 初始化流程3.2 響應式系統關鍵代碼 4. 問題解決方案4.1 最佳實踐建議4.2 錯誤處理機制 5. 性能影響分析5.1 遞歸調用性…

Mybatis——基礎操作、動態SQL

目錄 一.基礎操作 1.刪除 2.新增 3.更新 4.查詢 5.XML映射文件 二、動態SQL 1.<if> 2.<where> 3.<set> 4.<foreach> 5.<sql> 6.<include> 一.基礎操作 1.刪除 參數占位符&#xff1a; 注意&#xff1a; #{...}相比于${...}…

[設計模式]1_設計模式概覽

摘要&#xff1a;設計模式原則、設計模式的劃分與簡要概括&#xff0c;怎么使用重構獲得設計模式并改善代碼的壞味道。 本篇作概覽與檢索用&#xff0c;后續結合源碼進行具體模式深入學習。 目錄 1、設計模式原理 核心原則&#xff08;語言無關&#xff09; 本質原理圖 原…

C語言數據類型取值范圍及格式化符號

一、數據類型取值范圍與格式化輸出符號表格 數據類型大小&#xff08;字節&#xff09;取值范圍格式化輸出符號char1-128到127<br>或0到255&#xff08;如果聲明為unsigned char&#xff09;%c (字符)<br>%hhu (無符號)signed char1-1.2810到1.2710%hhd (有符號)u…

2024華東師范大學計算機復試上機真題

2024華東師范大學計算機復試機試真題 2023華東師范大學計算機復試機試真題 2022華東師范大學計算機復試機試真題 2024華東師范大學計算機復試上機真題 2023華東師范大學計算機復試上機真題 2022華東師范大學計算機復試上機真題 在線評測&#xff1a;傳動門&#xff1a;pgcode…

星越L_內后視鏡使用講解

目錄 1內后視鏡角度調節 2,防炫目功能