Sharding sphere分库分表

需要物理自己实现分表分库,然后通过配置文件配置。

配置文件:

需要配置多个数据源,主从表的关系【默认主表修改,从表读取】,定义分库的策略【比如User id】和分表【表Id】的策略

  • 分库和分表策略:分库策略定义了如何将数据分配到不同的数据库中,例如,可以根据用户ID的范围来进行分库。分表策略定义了如何将数据在表级别进行分片,例如,可以根据表ID来进行分表。

过程:

从解析sql到路由sql再到改写sql最后到sql执行然后将数据归并回来,改写过程中可能会增加列,因为路由的时候需要聚合或者分组需要带上某些id。

  • 解析SQL:当 ShardingSphere 接收到一个 SQL 语句时,它首先解析该语句以理解其结构和内容。

  • 路由SQL:根据解析后的信息和分库分表策略,ShardingSphere 决定这个 SQL 语句应该发送到哪个数据库实例和具体的表上执行。

  • 改写SQL:在路由决定后,ShardingSphere 可能需要修改原始的 SQL 语句以适应目标数据库实例和表,比如修改表名为实际的分片表名。

  • SQL执行:改写后的 SQL 语句被发送到目标数据库实例执行。

  • 归并数据:如果一个查询操作涉及到多个数据库实例或表,ShardingSphere 会收集所有返回的数据,然后将它们归并在一起返回给用户。归并过程中可能会涉及到排序、分组、聚合等操作。

改写过程中可能会增加列:在 SQL 改写的过程中,可能需要增加额外的信息,比如分片键列,以确保数据的一致性和正确的归并操作。

总体来讲,ShardingSphere 通过这个过程,对外提供了一个透明的数据库分库分表操作,对应用层来说,它就像访问单一数据库一样。这个架构能够在不更改应用程序代码的情况下,对数据库进行水平扩展,提升了系统的可扩展性和可用性。

举个例子

假设我们有一个 User 表,它非常大,包含数百万用户数据。为了提高查询性能和数据的可管理性,我们决定将这个 User 表进行分库分表。

分库策略

我们可以根据用户的地理位置(例如用户的国家码)来进行分库。假设我们有三个数据库实例,Database A、Database B 和 Database C,我们可以这样分配:

  • Database A 存储国家码为1的用户数据
  • Database B 存储国家码为2的用户数据
  • Database C 存储国家码为3的用户数据

这种策略可以通过配置 ShardingSphere 来实现。当一个请求进来时,ShardingSphere 查看用户的国家码,然后决定将请求路由到哪个数据库实例。

分表策略

对于每个数据库实例中的 User 表,我们还可以根据用户的 ID 进行分表。假设我们决定每张表存储10000条用户记录,我们可以有如下的分表:

  • User_0001 存储 ID 1 到 10000 的用户数据
  • User_0002 存储 ID 10001 到 20000 的用户数据
  • User_0003 存储 ID 20001 到 30000 的用户数据
  • 依此类推...

这样,当我们有一个查询请求来查找 ID 为 15000 的用户时,ShardingSphere 首先通过分库策略确定这个用户在哪个数据库实例,然后通过分表策略确定这个用户在哪张表中。如果 ID 15000 的用户属于国家码为2的范围,则 ShardingSphere 将查询路由到 Database B 的 User_0002 表中。

配置分库分表策略的关键是确定分片键(Sharding Key),它是用于分片的字段。在我们的例子中,国家码可以是分库的分片键,用户 ID 可以是分表的分片键。

通过以上方式,ShardingSphere 能够管理大规模分布式数据库系统,提升性能,降低单个数据库的压力。这是实现大规模数据库水平扩展的常用方法。

执行

执行有2种模式:内存限制【做分析的数据库,连接量不高,聚合运算和数据量比较多】和连接限制【事务型数据库 连接限制比较大】,

在数据库管理和优化中,根据不同的使用场景,数据库系统可能会被配置为不同的执行模式,特别是在处理资源分配和性能优化时。这里描述的“内存限制”和“连接限制”模式反映了两种不同的资源管理策略:

  1. 内存限制模式: 在内存限制模式下,数据库系统的主要瓶颈是内存资源。这种模式适用于那些需要进行大量数据处理和复杂查询的数据库,如数据仓库、分析型数据库或报表系统。这些系统往往执行大规模的聚合和分析运算,需要缓存大量数据来计算结果。由于查询的复杂性和数据量的大小,数据库的内存使用变得非常关键。

    在内存限制模式下,数据库管理员可能需要精细地配置内存管理参数,例如缓存大小、查询执行内存限制等,以防止查询操作消耗过多的内存而影响到整个数据库系统的稳定性。

  2. 连接限制模式: 在连接限制模式下,数据库系统的主要瓶颈是并发连接数量,也就是同时连接到数据库的客户端数量。这种模式适用于那些以事务处理为主的数据库,如在线事务处理系统(OLTP),这类系统通常处理大量的短期交易。

    事务型数据库通常需要优化连接池,及时释放不活跃连接,并确保数据库能够高效地处理大量并发事务。在这种模式下,数据库管理员可能需要配置诸如最大连接数、连接超时时间、事务隔离级别等参数,以提高并发处理能力并保证数据的一致性。

在实际的生产环境中,选择合适的模式是根据应用的特性和需求来决定的。对数据库系统进行适当的配置和调优可以帮助达到最佳的性能表现和资源利用率。例如,对于一个分析型数据库,可能会分配较多的内存给数据处理和聚合计算;而对于一个高并发的Web应用,可能需要优化数据库的连接池和事务处理能力。

以下是在使用 ShardingSphere 时可以考虑的一些通用配置方向:

  1. 针对内存限制

    • 如果你的应用主要进行复杂查询和大量的数据聚合,你可能需要为每个数据库实例配置足够的内存,以支持这些操作。这可能包括调整数据库缓存大小、工作内存(比如 PostgreSQL 的 work_mem)和其他相关内存参数。
    • 在 ShardingSphere 配置中,你可能需要关注 SQL 执行的优化,确保复杂查询能够有效分发到合适的分片上执行。
  2. 针对连接限制

    • 对于需要处理高并发事务的应用,确保数据库连接池参数(如最大连接数、最小空闲连接数、连接超时时间等)得到适当配置非常关键。
    • ShardingSphere 可以配置读写分离规则,将读操作路由到从库从而减轻主库的压力。
    • 考虑使用数据库连接池(如 HikariCP、DBCP、C3P0 等)来管理数据库连接。
  3. 分片策略配置

    • 对于分库分表策略,合理地定制分片算法和分片键可以帮助平衡跨多个数据库实例和表的数据分布和查询负载。
  4. 监控和调试

    • 启用监控功能来跟踪数据库的性能和资源利用情况,这样你可以在出现性能瓶颈时快速定位问题并进行优化。

在配置 ShardingSphere 或任何数据库中间件时,重要的是要充分理解你的业务需求和数据库的负载特征,以便做出恰当的决策。建议在进行任何重大更改之前对配置进行测试,以确保它们能够达到预期的效果,并且不会对现有的系统产生负面影响。

最佳配置很大程度上取决于具体的应用场景,包括数据模式、访问模式、硬件资源和性能目标。因此,最好的做法是进行基准测试和监控来逐步调整和优化设置。

逻辑表:没有后缀的表,前缀一致的表,分表前的名字

真实表:分表后的完整名

绑定表:用同样的分片逻辑能保持一致,不会出现太多笛卡尔积的结果

广播表:每个库都有的表,就是字典表

建议:自研,适合自己的业务才是最合适的。

在使用分库分表框架,如 Apache ShardingSphere 进行数据库设计时,你会遇到几个专有名词:逻辑表、真实表、绑定表和广播表。以下是它们的含义:

  1. 逻辑表 (Logical Table): 逻辑表是指用户在编写 SQL 时使用的表名。这个名称并不对应数据库中的实际物理表,而是一个虚拟的概念,代表了可能分散在多个真实表或分片表中的数据集合。在分库分表策略中,逻辑表通常由多个真实表组成,它们共同承载了逻辑表数据。

    例如,你有一个逻辑表 user,它由 user_0, user_1, user_2 等真实表组成。

  2. 真实表 (Actual Table): 真实表或物理表是指数据库中实际存在的表。这些表是根据分表策略从逻辑表中分出来的,每个真实表存储逻辑表的一部分数据。

    如果逻辑表 user 根据用户 ID 分为三个真实表,那么 user_0, user_1, user_2 就是具有特定后缀的真实表的名称。

  3. 绑定表 (Binding Table): 绑定表是指一组逻辑表,它们之间有着相同的分片策略。在进行关联查询时,绑定表之间的数据分布方式保证了关联查询可以在相同的数据节点上执行,从而避免跨节点的关联操作,这有助于减少不必要的数据笛卡尔积和网络开销。

    举例来说,如果 orderorder_item 是绑定表,并且它们按照相同的订单 ID 进行分片,当你根据订单 ID 关联这两个表时,查询会自然地在相同分片上执行。

  4. 广播表 (Broadcast Table): 广播表是一个特殊的表,它的数据在所有的数据库实例中都是一样的。通常用于那些数据量小但需要频繁访问的公共数据,例如配置数据、字典数据等。

    在分库的环境下,广播表会在每个数据库实例中都有一份完整的副本。例如,一个包含国家代码和名称的 country 表可能就是一个广播表,因为每个数据库实例都需要访问这些共享数据。

当你设计和实施分库分表策略时,理解这些概念是很重要的,因为它们会影响你的数据模型、查询性能和整体架构。ShardingSphere 和其他分库分表解决方案都依赖于这些概念来有效地管理和路由数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535144.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML】1px边框与1px分割线

对比图 箭头标注的是处理过的 1px分割线 使用transform的scaleY进行缩小 码 <div class"mini-heriz"></div><br><div style"border: solid 1px black; width: 300px;height: 1px;"></div> <style> .mini-heriz {wi…

计算机基础:一些你必须知道的名词详解,必须要会的理论知识

软件测试 计算机基本特点 计算机硬件组成 内存储器和外存储器特点 计算机软件系统组成 常见的操作系统软件 编码 计算机数据计量单位 浏览器 图片类型 网页打开过程 客户端、服务器、请求和响应 dos 命令 软件测试 在规定的条件下对程序进行操作&#xff0c;以发现…

清易FDS-150 土壤氮磷钾传感器 工作原理

产品概述 外型小巧轻便&#xff0c;便于携带和连接。 土壤氮磷钾测量传感器由电源模块、变送模块、漂零及温度补偿模块、数据处理模块等组成。传感器内置信号采样及放大、漂零及温度补偿功能&#xff0c;用户接口简洁、方便。 功能及特点 &#xff08;1&#xff09;本传感器…

算法通识|选择排序(简单选择排序、堆排序)

Before Writing 内容参考懒猫老师请多支持。 1 选择排序 1-1 简单排序的原理 简单选择排序的主要思想是&#xff1a;每趟排序在当前待排序序列中选出关键码最小的记录&#xff0c;添加到有序序列中。 1-2 堆选择排序的原理 堆排序主要思想是&#xff1a;每次构造一个堆&…

spring boot 学习

目录 引言&#xff1a; 一、Spring Boot概述 二、Spring Boot的核心特性 1 自动配置 2 起步依赖 3 内嵌容器 4 监控与管理 三、Spring Boot的入门步骤 1 环境安装 2 创建项建 3 编写代码 1 启动类 2 控制器 3服务 4自动装配 5配置属性 6 JPA实体 4 运行与调试…

HarmonyOS-页面跳转Router实例演示

本文将以APP的登录和修改昵称为例演示官网的几种页面跳转、返回以及这些流程携带参数&#xff0c;实例的形式记录学习HarmonyOS的页面跳转。 “页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块&#xff0c;通过不同的url地址&#xff0c;…

C语言例2-1:从键盘输入两个整数,计算其乘积

代码如下&#xff1a; //从键盘输入两个整数&#xff0c;计算其乘积 #include<stdio.h> int main(void) /*主函数*/ {int n1, n2, result; /*定义保存两个整数及其乘积的变量*/printf("please inp…

让手机变相机,微单变全画幅的外设-斯莫格摄影套装开箱

大家好&#xff0c;我是Circaboy&#xff0c;近期给我的手机和相机入了一整套专业的摄影外设套装&#xff0c;然后我发现专业设备加持下的摄影着实是比我之前的要好很多&#xff0c;所以我就写了个文章做个简单的介绍和专业外设加持下的摄影对比。 本次入手的是斯莫格摄影套装…

海南众乐科技--元宇宙场景星球乐园与上海普思签署战略投资协议

3月12日,上海普思投资有限公司与海南众乐科技有限公司正式签署了战略合作协议,上海普思投资有限公司首期投资180万元资金支持推动元宇宙场景项目星球乐园的开发。双方本着互利共赢的原则、达成长期、全面性的战略合作关系,推动数字场景业务共同发展。 星球乐园是海南众乐科技有…

AI新工具(20240313) 世界上第一个完全自主的AI软件工程师Devin 已经开始接外包了;又一个开源本地知识库问答系统

1: Cognition AI Devin 世界上第一个完全自主的AI软件工程师Devin 已经开始接外包了 Devin是世界上第一个完全自主的AI软件工程师&#xff0c;具备长期推理和规划的能力&#xff0c;能够执行复杂的工程任务&#xff0c;包括学习、修复错误、与用户实时合作等。Devin可以学习并…

Mysql 学习(十七)事务隔离级别和MVCC

前提准备 首先创建一个表&#xff1a; CREATE TABLE hero (number INT,name VARCHAR(100),country varchar(100),PRIMARY KEY (number) ) EngineInnoDB CHARSETutf8;INSERT INTO hero VALUES(1, 刘备, 蜀);事务隔离级别 mysql 是一个 客户端 和 服务器架构的软件&#xff0c…

SQL进阶(四):Window 函数技巧

目录 1. 课前小问答1. 什么是 Windows 函数&#xff1f;&#xff08;窗口函数&#xff09;2. Window 函数的功能强大之处在哪里呢&#xff1f; 2. 开始之前的准备3. Window 函数核心&#xff1a;frame3.1 “轴”的范围控制&#xff1a;frame 参数✍️ 小练习 1&#xff1a; 尝试…