MySQL-分庫分表(Mycat)

目錄

1.介紹?

概述

拆分策略

垂直拆分?

水平拆分?

實現技術?

shardingJDBC:

MyCat:

2.Mycat概述

環境準備?

分片配置

schema.xml?

server.xml

啟動服務?

分片測試?

3.MyCat配置

schema.xml?

schema標簽

datanode標簽

?datahost標簽?

rule.xml

server.xml

4.垂直拆分(分庫)

場景

準備

配置

schema標簽

server標簽

測試

多表聯查?

解決?

5.水平拆分?

6.分片規則

6.1范圍分片?

6.2取模分片?

6.3一致性哈希

6.4枚舉

6.5應用指定算法

6.6固定分片hash算法

6.7字符串哈希解析

6.8 按日期(天)分片

6.9 按日期(月)分片

7.MyCat管理與監督


1.介紹

概述

隨著互聯網及移動互聯網的發展,應用系統的數據量也是成指數式增長,若采用單數據庫進行數據存儲,存在以下性能瓶頸:

  1. IO瓶頸:熱點數據太多,數據庫緩存不足,產生大量磁盤IO,效率較低。請求數據太多,帶寬不夠,網絡IO瓶頸。
  2. CPU瓶頸:排序、分組、連接查詢、聚合統計等SOL會耗費大量的CPU資源,請求數太多,CPU出現瓶頸。

分庫分表的中心思想都是將數據分散存儲,使得單一數據庫/表的數據量變小來緩解單一數據庫的性能問題,從而達到提升數據庫性能的目的

拆分策略

根據形式不同可以分為垂直拆分和水平拆分。

垂直相當于從中間切開,分庫是把一個庫中多個表拆成幾份存儲到不同數據庫中,所以這些數據庫中的庫結構不一樣。分表是把一個表中的各字段拆分到不同數據庫,各表結構也不同。

水平就是物理切割,只是把各庫中的部分數據存儲到不同數據庫,這些數據庫結構一樣。分表則把表中行部分存在不同數據庫,表結構也相同。

垂直拆分

水平拆分

實現技術

shardingJDBC:

基于AOP原理,在應用程序中對本地執行的SQL進行攔截,解析、改寫、路由處理。需要自行編碼配置實現,只支持java語言,性能較高。


MyCat:

數據庫分庫分表中間件,不用調整代碼即可實現分庫分表,支持多種語言,性能不及前者。

2.Mycat概述

Mycat是開源的、活躍的、基于java語言編寫的MySOL數據庫中間件。可以像使用mysql一樣來使用mycat,對于開發人員來說根本感覺不到mycat的存在。

環境準備

在節點主機中都新增db01的數據庫,后續只對Mycat進行配置。

分片配置

schema.xml
  1. 邏輯庫(Schema):邏輯庫是 MyCat 中的一個虛擬數據庫,它對應于 MySQL 中的 DATABASE邏輯庫定義了包含的邏輯表和分片規則。

  2. 邏輯表(Table):邏輯表是 MyCat 中的一個虛擬表,它對應于物理數據庫中的實際表。邏輯表定義了數據如何分布到不同的數據節點

  3. 數據節點(DataNode):定義了數據存儲的具體位置。

  4. 數據主機(DataHost):定義了數據庫的連接信息和讀寫分離策略。

  5. 分片規則(Rule):定義了如何將數據分布到不同的數據節點。

server.xml

readyOnly:只讀權限,ture則表明該用戶只有讀權限。

啟動服務

  • -h:指定 MySQL 服務器的主機名或 IP 地址。

  • -P:指定 MySQL 服務器的端口號。

  • -u:指定連接到 MySQL 服務器的用戶名。

  • -p:指定連接到 MySQL 服務器的密碼。

Mycat的登錄格式與MySQL類似是由于,其通過以下方式實現與 MySQL 的兼容性:

SQL 解析

MyCat 內置了 SQL 解析器,能夠解析和理解 MySQL 的 SQL 語法。它會攔截和解析客戶端發送的 SQL 語句,然后根據配置的分片規則和路由策略,將 SQL 語句分發到相應的物理數據庫節點。

協議兼容

MyCat 實現了 MySQL 的網絡協議,使得客戶端可以像連接普通 MySQL 數據庫一樣連接 MyCat。這包括支持 MySQL 的二進制協議和文本協議。

?透明代理

MyCat 作為一個透明代理,對客戶端來說,它就像一個普通的 MySQL 數據庫。客戶端發送的 SQL 語句和數據請求都會被 MyCat 攔截和處理,然后轉發到后端的物理數據庫。返回的結果也會被 MyCat 處理后返回給客戶端。

查看已存在schema.xml文件中配置的邏輯庫與邏輯表。

分片測試

在MyCat中通過創建邏輯表該表結構會同步至節點數據庫中,而往其邏輯表插入的數據會根據分片規則散落至各節點數據庫。

3.MyCat配置

schema.xml

schema.xml作為MyCat中最重要的配置文件之一,涵蓋了MyCat的邏輯庫 、邏輯表 、分片規則、分片節點及數據源的配置。
主要包含以下三組標簽:


schema標簽

schema標簽用于定義 MyCat實例中的邏輯庫,一個MyCat實例中,可以有多個邏輯庫,可以通過 schema 標簽來劃分不同的邏輯庫。
MyCat中的邏輯庫的概念 ,等同于MySQL中的database概念,需要操作某個邏輯庫下的表時,也需要切換邏輯庫(use xxx)。

schema標簽<table>標簽定義了MyCat中邏輯庫schema下的邏輯表,所有需要拆分的表都需要在table標簽中定義。


datanode標簽


datahost標簽

rule.xml

rule.xml中定義所有拆分表的規則,在使用過程中可以靈活的使用分片算法,或者對同一個分片算法使用不同的參數,它讓分片過程可配置化。主要包含兩類標簽:tableRule、Function。

tableRule為分片規則,Function為具體配置

server.xml

server.xml配置文件包含了MyCat的系統配置信息,主要有兩個重要的標簽:system、user。

system為一些系統配置的信息。

user配置用戶的信息以及其可以訪問的權限

4.垂直拆分(分庫)

場景

主數據庫中包含4種分類的各表,決定拆分成3個表。

準備

配置

schema標簽

table必須包含所有需要拆分的邏輯表。

這里講邏輯表分為3部分,從上至下,商品相關表關聯分片節點dn1,訂單dn2,用戶dn3.

dataNode配置了分片節點關聯的節點主機。

server標簽

將用戶可訪問的數據庫名稱修改為創建的邏輯庫名稱。

由于是邏輯表還需要在MyCat中執行對應的創建表語句,才能在節點主機看到物理表結構。

測試

多表聯查

聯查表在同一節點主機中,查詢成功

聯查表在不同節點主機中,查詢失敗

解決

將地址信息分片到所有節點,并將type=global聲明為全局表。

5.水平拆分

將一張表中的數據分片到不同節點主機中,表結構相同,內容不同。

本質一樣:schema配置邏輯庫ITCAST中的邏輯表tb_log數據分片在dn4,dn5,dn6的分片節點中,rule指定分片規則。 dataNode配置節點關聯的節點主機。

server配置用戶訪問權限

使用MyCat后所有DDL,DML語句在MyCat中執行。

6.分片規則

6.1范圍分片

rule引用tableRule name中的分片規則,algorithm引用funcion name中的分片算法。

6.2取模分片

6.1與6.2不適用字段值為字符串。

6.3一致性哈希

所謂一致性哈希,相同的哈希因子計算值總是被劃分到相同的分區表中,不會因為分區節點的增加而改變原來數據的分區位置。

6.4枚舉

通過在配置文件中配置可能的枚舉值,指定數據分布到不同數據節點上,本規則適用于按照省份、性別、狀態拆分數據等業務。

6.5應用指定算法

運行階段由應用自主決定路由到那個分片,直接根據字符子串(必須是數字)計算分片號

6.6固定分片hash算法

該算法類似于十進制的求模運算,但是為二進制的操作,例如,取d的二進制低10位與 1111111111進行位&運算。

paritioncount位分片數,length為長度。 前兩個分片節點長度256,第三個長度512.

6.7字符串哈希解析

截取字符串中的指定位置的子字符串,進行hash算法,算出分片。

6.8 按日期(天)分片

6.9 按日期(月)分片

7.MyCat管理與監督

MyCat對SQL語句解析解析,根據rule配置的分片規則對字段進行分片分析后決定路由給哪個節點。

MyCat對查詢到的結果集再合并進行一系列處理后返回給客戶端。

排序等操作都是在MyCat中執行,因為對部分數據處理無意義,采用整合后再處理。

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

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

相關文章

Dubbo 的 Java 項目間調用的完整示例

1. 項目結構假設項目分為三個模塊&#xff1a;api&#xff1a;定義服務接口provider&#xff1a;服務提供者consumer&#xff1a;服務消費者2. 依賴配置在 pom.xml 中添加 Dubbo 和注冊中心&#xff08;如 Nacos&#xff09;的依賴&#xff1a;<dependency><groupId&g…

Python進行中文分詞

1. jieba庫概述 jieba&#xff08;“結巴”&#xff09;是Python中最流行的中文分詞庫&#xff0c;采用基于前綴詞典實現的高效分詞算法&#xff0c;支持多種分詞模式&#xff0c;是中文自然語言處理(NLP)的基礎工具。 核心特性 精確模式&#xff1a;試圖將句子最精確地切開&am…

JavaScript 性能優化實戰:從原理到落地的完整指南

一、引言&#xff1a;為什么 JavaScript 性能優化至關重要&#xff1f;性能與用戶體驗的強關聯數據支撐&#xff1a;加載延遲每增加 1 秒&#xff0c;用戶轉化率下降 7%&#xff08;來自 Google 研究&#xff09;核心痛點&#xff1a;現代 Web 應用中 JS 代碼體積膨脹、運行時卡…

前端自動化部署

摘要&#xff1a;前端自動化部署是通過工具和流程自動化實現前端代碼從開發完成到線上發布的全流程&#xff0c;減少人工操作、提高效率并降低出錯風險。核心目標減少重復操作&#xff1a;自動化構建、測試、部署等步驟&#xff0c;替代手動上傳服務器等低效方式。提升發布效率…

peewee中db.create_tables(tables, safe=True),safe=True作用

db.create_tables(tables, safeTrue) 中的 safeTrue 參數的作用是 防止在表已經存在的情況下引發錯誤。 具體來說&#xff1a; 當 safeTrue 時&#xff1a;Peewee 會在生成的 SQL 語句中加入 IF NOT EXISTS 子句&#xff08;例如&#xff1a;CREATE TABLE IF NOT EXISTS my_tab…

2025年計算機視覺與圖像國際會議(ICCVI 2025)

2025年計算機視覺與圖像國際會議| 視界創新&#xff0c;圖領未來 2025年計算機視覺與圖像國際會議&#xff08;ICCVI 2025&#xff09;將在中國東莞盛大召開。這不僅是一次匯聚全球頂尖科學家、工程師和學者的盛會&#xff0c;更是一個探索計算機視覺和圖像處理領域前沿技術與未…

Temu美國站大規模掃號封店:虛假本土店遭批量封禁,如何規避?

2025年8月&#xff0c;Temu平臺針對美國站再次掀起大規模掃號風暴。大量店鋪因注冊信息違規被判定為“高風險”&#xff0c;不僅店鋪被凍結&#xff0c;商品也被下架并禁止補貨。這一輪清掃&#xff0c;讓不少依靠“資料店”快速起盤的賣家遭遇重創。事實上&#xff0c;Temu的風…

航空發動機葉片yolov8模型訓練和轉換(包含適配rk3588-pt轉onnx轉rknn)

前言&#xff1a; 1.訓練在windows進行&#xff0c;因為電腦沒有顯卡&#xff0c;所以純cpu訓練&#xff0c;生成pt后轉onnx 2.onnx轉需要在Ubuntu虛擬機上運行 3.數據集標定快捷鍵 &#xff08;模型訓練時不需要&#xff09;官方地址和下載pt權重&#xff1a;鏈接&#xff…

PyTorch如何修改模型(魔改)?/替換模型,一般除了注意輸入輸出一致,還有其他要修改的嗎?

一、PyTorch如何修改模型&#xff08;魔改&#xff09;? 可以參考這個鏈接&#xff0c;看了一下還不錯&#xff1a; PyTorch如何修改模型&#xff08;魔改&#xff09;_模型魔改-CSDN博客 二、替換模型&#xff0c;一般除了注意輸入輸出一致&#xff0c;還有其他要修改的嗎?…

Pycharm Debug詳解

Pycharm Debug詳解看這個工具欄就是 PyCharm 調試器的“步進/斷點”按鈕區。常用按鈕和作用&#xff08;從左到右一般是這些&#xff09;&#xff1a; Resume / 繼續運行&#xff08;F9&#xff09;&#xff1a;從當前斷點繼續跑&#xff0c;直到下一個斷點或程序結束。Step Ov…

將SSL配置遷移到Nacos的步驟

將SSL配置遷移到Nacos的步驟 要將SSL配置從本地application.yml遷移到Nacos配置中心&#xff0c;需要完成以下幾個步驟&#xff1a; 1. 創建Nacos配置文件 在Nacos中創建一個新的配置文件&#xff08;例如application-ssl.yml&#xff09;&#xff0c;內容如下&#xff1a; ser…

HTTP請求參數類型及對應的后端注解

在Java后端開發中&#xff0c;HTTP請求的不同部分需要使用不同的注解來處理。以下是四種主要請求參數類型及其對應的Spring注解&#xff1a;1. 請求頭(Headers)??位置??&#xff1a;HTTP請求的頭部信息??常用場景??&#xff1a;認證信息(Token)、客戶端信息、內容類型等…

服務器硬件電路設計之 SPI 問答(一):解密 SPI—— 從定義到核心特性

在服務器硬件電路設計中&#xff0c;SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外設接口&#xff09;是一種關鍵的通信總線。它由摩托羅拉公司開發&#xff0c;是全雙工、同步串行通信總線&#xff0c;主要用于微控制器與外圍設備之間的通信&#xff0c;憑借…

【2025CVPR-目標檢測方向】OW-OVD:統一的開放世界和開放詞匯對象檢測

研究背景與動機? ?問題?:傳統目標檢測器(封閉集)需預定義所有類別,無法適應動態開放環境。現有研究多獨立解決開放詞匯檢測(OVD)或開放世界檢測(OWOD),未結合兩者優勢: ?OVD?:通過文本-視覺嵌入匹配實現零樣本泛化,但無法主動發現未知對象。 ?OWOD?:可主動…

基于Python的就業信息推薦系統 Python+Django+Vue.js

本文項目編號 25011 &#xff0c;文末自助獲取源碼 \color{red}{25011&#xff0c;文末自助獲取源碼} 25011&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀 六、核心代碼6.1 查詢數據6.2 新…

el-date-picker type=daterange 日期范圍限制

html &#xff08;組件&#xff1a;element-ui&#xff09;重點&#xff1a; :picker-options"pickerOptions"<template><el-date-pickerv-model"form.dateRange"type"daterange" value-format"yyyy-MM-dd"range-separator&q…

【38頁PPT】關于5G智慧園區整體解決方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91694207 資料解讀&#xff1a;《關于5G智慧園區整體解決方案》 詳細資料請看本解讀文章的最后內容。 智慧園區行業理解與建設目標 智慧園…

Kafka的ISR、OSR、AR詳解

Kafka中的ISR、OSR和AR是副本管理機制的核心概念&#xff0c;它們共同保障了Kafka的高可用性和數據一致性。下面我將詳細解釋這些概念及其相互關系。 1. 基本概念 1.1 AR (Assigned Replicas) - 分配副本 定義&#xff1a;一個分區的所有副本集合稱為AR&#xff0c;即Kafka為主…

第一階段C#基礎-13:索引器,接口,泛型

1_索引器&#xff08;1&#xff09;索引器是C#中一個強大而實用的特性&#xff0c;允許像訪問數組一樣訪問類的成員&#xff08;2&#xff09;索引器&#xff1a;一種可以讓我們使用索引來訪問對象的一種方法&#xff0c;是一組get,set訪問器&#xff0c;與屬性類似&#xff0c…

SQL-leetcode— 2356. 每位教師所教授的科目種類的數量

2356. 每位教師所教授的科目種類的數量 表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是該表的主鍵。 該表…