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.mzph.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是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序,而微软云是一个提供多种云服…