ShardingSphere Proxy 配置

在使用 ShardingSphere Proxy 模式時,結合 主從復制架構 實現 讀寫分離,并按照 用戶ID哈希算法 確定庫、時間范圍 確定表的場景下,配置文件需要做一些調整以支持分片、讀寫分離以及主從復制。

以下是如何配置 ShardingSphere Proxy 模式的詳細步驟:

1. 數據庫配置

假設我們有多個數據庫 db_0, db_1, …, db_9,每個數據庫都有主從復制架構,即每個數據庫都有一個主節點和多個從節點。我們可以按照以下方式配置 ShardingSphere Proxy。

配置文件示例(sharding.yml

schemaName: sharding_dbdataSources:# 主庫配置(每個數據庫有主從架構)ds_0_master:url: jdbc:mysql://localhost:3306/db_0_masterusername: rootpassword: rootdriverClassName: com.mysql.cj.jdbc.Driverds_0_slave:url: jdbc:mysql://localhost:3306/db_0_slaveusername: rootpassword: rootdriverClassName: com.mysql.cj.jdbc.Driverds_1_master:url: jdbc:mysql://localhost:3306/db_1_masterusername: rootpassword: rootdriverClassName: com.mysql.cj.jdbc.Driverds_1_slave:url: jdbc:mysql://localhost:3306/db_1_slaveusername: rootpassword: rootdriverClassName: com.mysql.cj.jdbc.Driver# 配置其他數據庫的主從架構...# 配置讀寫分離
readwriteSplitting:ds_0:writeDataSourceName: ds_0_masterreadDataSourceNames:- ds_0_slaveds_1:writeDataSourceName: ds_1_masterreadDataSourceNames:- ds_1_slave# 配置其他數據庫的主從架構...# 配置分片規則
sharding:tables:user_trades:actualDataNodes: ds${0..9}.user_trades_${yyyy_MM}tableStrategy:inline:shardingColumn: user_idalgorithmExpression: user_trades_${yyyy_MM}databaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ds${user_id.hashCode() % 10}keyGenerator:column: trade_idtype: SNOWFLAKEbindingTables:- user_trades

配置 Spring Boot 與 ShardingSphere Proxy 連接

在 application.properties 或 application.yml 中配置數據源連接 ShardingSphere Proxy。
application.yml 配置

spring:datasource:url: jdbc:mysql://localhost:3307/example_dsusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10

此配置中,localhost:3307 是 ShardingSphere Proxy 的地址,假設 Proxy 配置監聽在該端口。

2. 解釋配置內容

數據源配置 (dataSources)

每個數據源(ds_0_master, ds_0_slave, ds_1_master, ds_1_slave 等)都配置了一個主庫和從庫。主庫用于寫操作,從庫用于讀操作。通過這種方式,ShardingSphere Proxy 可以實現 讀寫分離

  • 主庫:用于所有的寫操作。
  • 從庫:用于所有的讀操作。

讀寫分離配置 (readwriteSplitting)

readwriteSplitting 配置將數據庫的主從節點進行綁定,指定寫操作走主庫,讀操作走從庫。
例如:

ds_0:writeDataSourceName: ds_0_masterreadDataSourceNames:- ds_0_slave

該配置意味著,所有針對 ds_0 數據源的寫操作會被路由到 ds_0_master,而所有讀操作則會被路由到 ds_0_slave

分片規則 (sharding)

ShardingSphere 中,分片規則的配置包括 數據庫分片表分片

  • 數據庫分片策略
    • 基于 用戶ID哈希算法 對數據庫進行分片。通過 user_id.hashCode() % 10 確定用戶數據存儲在哪個數據庫(ds_0, ds_1, …, ds_9)。
  • 表分片策略
    • 根據 時間范圍 來確定表。例如,可以按月來分片,表名會是 user_trades_2023_01, user_trades_2023_02 等。
    • actualDataNodes: ds${0..9}.user_trades_${yyyy_MM} 配置表示每個數據庫中都有以 yyyy_MM 格式命名的表。

分片鍵

  • user_id 是分片鍵,ShardingSphere 會根據 user_id 的哈希值決定數據落在哪個數據庫上。
  • yyyy_MM 是時間范圍,用來決定數據落在哪個具體的表上。

主鍵生成器

  • 這里使用了 Snowflake 算法生成 trade_id,確保每個 trade_id 在分布式環境下是唯一的。

3. 讀寫分離工作原理

  • 寫操作:所有的寫操作會根據 user_id 哈希值決定目標數據庫,然后路由到對應的 主庫ds_0_master, ds_1_master, …)。
  • 讀操作:所有的讀操作會根據 user_id 哈希值決定目標數據庫,然后路由到對應的 從庫ds_0_slave, ds_1_slave, …)。

4. 配置調整

  • 分片粒度:你可以根據實際需求調整分片粒度,按 月、季度、年 等時間段進行分表。
  • 數據庫擴展:隨著數據量的增加,你可以增加更多的數據庫(ds_10, ds_11, …),并相應修改分片策略,以支持水平擴展。

5. 測試和監控

  • 在生產環境中,進行充分的 負載測試性能監控,確保讀寫分離能夠有效地緩解讀壓力,并且系統的整體性能達到預期。
  • 使用 ShardingSphere 提供的監控工具(如 Prometheus、Grafana)來監控數據庫負載、請求量等指標,確保系統穩定。

總結

通過 ShardingSphere Proxy 模式和主從復制架構,你可以實現 讀寫分離分布式分片。配置文件中,關鍵是將 數據庫分片讀寫分離 配置結合起來,確保寫操作進入主庫,讀操作路由到從庫,同時按照 用戶ID哈希算法 來決定庫,按 時間范圍 來決定表。這種設計可以有效提高系統的可擴展性、性能和容錯性。

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

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

相關文章

Redis集群機制及一個Redis架構演進實例

Replication(主從復制) Redis的replication機制允許slave從master那里通過網絡傳輸拷貝到完整的數據備份,從而達到主從機制。為了實現主從復制,我們準備三個redis服務,依次命名為master,slave1,…

Qt QScrollArea 總結

Qt QScrollArea 總結 1. 功能概述 滾動容器:用于顯示超出視口(Viewport)范圍的內容,自動提供滾動條。子部件管理:可包裹單個子部件(通過 setWidget()),當子部件尺寸 > 視口時&a…

Windows系統編程項目(一)進程管理器

本項目將通過MFC實現一個進程管理器,如下圖詳細信息頁所示: 一.首先創建一個基于對話框的MFC項目,在靜態庫中使用MFC 二.在項目默認的對話框中添加一個列表 三.列表添加變量 四.初始化列表 1.設置列表風格和表頭 2.填充列表內容 我們需要在…

RAG-202502

目錄 RAG場景的坑知識等級金字塔 初級RAG存在的問題高級RAG索前優化檢索優化檢索后優化 優化經驗總結參考 RAG場景的坑 晦澀的專業術語 誤區:在專業領域中。許多文獻和資料中充滿了專業術語,這些術語對于非專業人士(甚至是大模型&#xff0…

CDN與群聯云防護的技術差異在哪?

CDN(內容分發網絡)與群聯云防護是兩種常用于提升網站性能和安全的解決方案,但兩者的核心目標和技術實現存在顯著差異。本文將從防御機制、技術架構、適用場景和代碼實現等方面詳細對比兩者的區別,并提供可直接運行的代碼示例。 一…

STM32-智能小車項目

項目框圖 ST-link接線 實物圖: 正面: 反面: 相關內容 使用L9110S電機模塊 電機驅動模塊L9110S詳解 | 良許嵌入式 測速模塊 語音模塊SU-03T 網站:智能公元/AI產品零代碼平臺 一、讓小車動起來 新建文件夾智能小車項目 在里面…

【Linux】vim 設置

【Linux】vim 設置 零、起因 剛學Linux,有時候會重裝Linux系統,然后默認的vi不太好用,需要進行一些設置,本文簡述如何配置一個好用的vim。 壹、軟件安裝 sudo apt-get install vim貳、配置路徑 對所有用戶生效: …

【Python爬蟲(90)】以Python爬蟲為眼,洞察金融科技監管風云

【Python爬蟲】專欄簡介:本專欄是 Python 爬蟲領域的集大成之作,共 100 章節。從 Python 基礎語法、爬蟲入門知識講起,深入探討反爬蟲、多線程、分布式等進階技術。以大量實例為支撐,覆蓋網頁、圖片、音頻等各類數據爬取&#xff…

【java進階】java多態深入探討

前言 在Java的編程宇宙中,多態是極為關鍵的概念,它宛如一條靈動的紐帶,串聯起面向對象編程的諸多特性,賦予程序宛如生命般的動態活力與高度靈活性。透徹理解多態,不僅是提升代碼質量的關鍵,更是開啟高效編程大門的鑰匙。 一、多態的定義與本質 多態,從概念層面來講,…

17164字符遷移

17164字符遷移 ??難度:中等 📖 📚 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int q scanner.nextInt();scanner.next…

強化學習概覽

強化學習的目標 智能體(Agent)通過與環境(Environment)交互,學習最大化累積獎勵(Cumulative Reward)?的策略。 數學抽象 馬爾科夫決策過程(MDP) 收益 由于馬爾科夫決…

IDEA關閉SpringBoot程序后仍然占用端口的排查與解決

IDEA關閉SpringBoot程序后仍然占用端口的排查與解決 問題描述 在使用 IntelliJ IDEA 開發 Spring Boot 應用時,有時即使關閉了應用,程序仍然占用端口(例如:4001 端口)。這會導致重新啟動應用時出現端口被占用的錯誤&a…

QT:QPen、QBrush、與圖形抗鋸齒的關聯

QPen QPen 是 Qt 框架中用于定義繪圖時使用的畫筆屬性的類。在使用 QPainter 進行 2D 繪圖時,QPen 可以控制線條的外觀,比如線條的顏色、寬度、樣式(如實線、虛線等)、端點樣式(如方形端點、圓形端點等)和…

論文筆記(七十二)Reward Centering(三)

Reward Centering(三) 文章概括摘要3 基于值的獎勵中心化4 案例研究: 以獎勵為中心的 Q-learning5 討論、局限性與未來工作致謝 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…

單例模式——c++

一個類,只能有1個對象 (對象在堆空間) 再次創建該對象,直接引用之前的對象 so構造函數不能隨意調用 so構造函數私有 so對象不能構造 如何調用私有化的構造函數: 公開接口調用構造函數 調用構造函數:singleTon instance; 但…

ReentrantLock 底層實現

一、核心概念 1 - CAS CAS(Compare-And-Swap,比較并交換)操作是一種無鎖的原子操作,它在多線程環境下能夠保證線程安全,主要是通過硬件級別的原子性以及樂觀鎖的思想來實現的。以下詳細介紹 CAS 操作保證線程安全的原…

NLP學習記錄十:多頭注意力

一、單頭注意力 單頭注意力的大致流程如下: ① 查詢編碼向量、鍵編碼向量和值編碼向量分別經過自己的全連接層(Wq、Wk、Wv)后得到查詢Q、鍵K和值V; ② 查詢Q和鍵K經過注意力評分函數(如:縮放點積運算&am…

算法-二叉樹篇08-完全二叉樹的節點個數

完全二叉樹的節點個數 力扣題目鏈接 題目描述 給你一棵 完全二叉樹 的根節點 root ,求出該樹的節點個數。 完全二叉樹 的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,并且最下…

【原創工具】同文件夾PDF文件合并 By憐渠客

【原創工具】同文件夾PDF文件合并 By憐渠客 原貼:可批量合并多個文件夾內的pdf工具 - 吾愛破解 - 52pojie.cn 他這個存在一些問題,并非是軟件內自主實現的PDF合并,而是調用的pdftk這一工具,但樓主并沒有提供pdftk,而…

微軟云和金山云和k8有什么區別

Kubernetes(K8s)和微軟云(Microsoft Cloud)是兩種不同的技術,分別用于不同的目的。Kubernetes是一個開源的容器編排系統,用于自動化部署、擴展和管理容器化應用程序,而微軟云是一個提供多種云服…