那个网站可以做logo该网站尚未备案 腾讯云

张小明 2026/1/11 17:22:11
那个网站可以做logo,该网站尚未备案 腾讯云,网站后台登入密码忘记了,舆情监测分析系统咱就是说#xff0c;做开发最怕啥#xff1f;怕上线前老板拍胸脯说“咱这项目撑死百来个用户”#xff0c;结果半年后用户飙到千万#xff0c;数据库直接给你摆烂——查询卡到超时#xff0c;插入慢到转圈#xff0c;监控面板红得像过年的鞭炮#xff0c;运维小哥拿着键…咱就是说做开发最怕啥怕上线前老板拍胸脯说“咱这项目撑死百来个用户”结果半年后用户飙到千万数据库直接给你摆烂——查询卡到超时插入慢到转圈监控面板红得像过年的鞭炮运维小哥拿着键盘追着你问“这表都千万行了你咋不早做准备”别慌今天就给大伙整一个“救命套餐”——SpringBoot ShardingSphere 分库分表实战。手把手教你把一个濒临“猝死”的MySQL改造成能扛千万用户数据的“硬汉”还附带可直接跑的Demo看完就能抄作业先声明这篇文章没有晦涩的理论堆砌全是大白话实战干货哪怕你是刚接触分库分表的“小白”也能看得明明白白。一、先唠唠为啥非要搞分库分表在聊技术之前先给那些还在“裸奔”的兄弟提个醒单库单表不是不能用是扛不住“用户爆炸式增长”。就像你家小电驴平时买菜代步没问题让它拉十吨货不趴窝才怪单库单表的致命问题磁盘扛不住一张千万行的表光数据文件就好几个G查询时磁盘IO直接拉满比蜗牛爬还慢索引扛不住索引文件也跟着变大查询时走索引都要扫半天更别说全表扫描了全表扫描直接宣判死刑并发扛不住MySQL单库的并发连接数有限上千个请求同时打过来直接“堵车”后面的请求全排队超时。而分库分表本质就是“拆大活”——把一个超大的库拆成多个小库一个超大的表拆成多个小表让每个小库小表都“轻装上阵”。就像把十吨货分成十个小包裹每个小电驴拉一吨效率直接拉满今天的主角 ShardingSphere就是一个“拆活小能手”不用你手动管理多个库表它帮你封装好一切你写SQL的时候还跟单库单表一样爽得很二、实战Demo手把手教你搭环境话不多说直接上硬菜。咱们以“用户表”为例实现「分库分表」需求千万用户数据按用户ID取模分2个库db0、db1每个库再按用户ID取模分3个表user_0、user_1、user_2最终共2库6表。1. 环境准备先备齐“食材”JDK 8别用太新的稳定为主SpringBoot 2.7.x主流版本踩坑少ShardingSphere-JDBC 5.1.x核心依赖分库分表全靠它MySQL 8.0两个库db0、db1每个库建3张用户表Maven管理依赖别手动下JAR包会累死人。2. 建库建表先搭好“架子”先手动建两个库db0、db1然后在每个库下执行以下SQL建3张用户表user_0、user_1、user_2-- 以db0为例db1执行同样的SQL CREATE DATABASE IF NOT EXISTS db0 DEFAULT CHARACTER SET utf8mb4; USE db0; -- 用户表分表后缀0、1、2 CREATE TABLE IF NOT EXISTS user_0 ( id BIGINT NOT NULL COMMENT 用户ID, username VARCHAR(50) NOT NULL COMMENT 用户名, phone VARCHAR(20) NOT NULL COMMENT 手机号, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表分表0; CREATE TABLE IF NOT EXISTS user_1 LIKE user_0; CREATE TABLE IF NOT EXISTS user_2 LIKE user_0; -- db1同理创建db1库再建user_0、user_1、user_2三张表提示不用纠结表结构简单核心是演示分库分表逻辑实际项目里按需加字段就行。3. 项目搭建核心步骤抄作业就行3.1 引入依赖pom.xml核心依赖就3个SpringBoot核心、ShardingSphere-JDBC、MySQL驱动其他依赖按需加比如MyBatis-Plus简化CRUDlt;dependenciesgt; !-- SpringBoot核心 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactIdgt; lt;/dependencygt; !-- ShardingSphere-JDBC 核心依赖 -- dependency groupIdorg.apache.shardingsphere/groupId artifactIdshardingsphere-jdbc-core-spring-boot-starter/artifactId version5.1.2/version lt;/dependencygt; !-- MySQL驱动 -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scopegt; lt;/dependencygt; !-- MyBatis-Plus 简化CRUD可选JPA也能凑活 -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version lt;/dependencygt; !-- lombok 省掉getter/setter懒人必备 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies3.2 配置分库分表规则application.yml这是核心中的核心告诉ShardingSphere哪个库是数据源、按什么规则分库、按什么规则分表。注释写得很清楚照着改就行spring: shardingsphere: # 数据源配置两个库db0、db1 datasource: names: db0,db1 # 数据源名称用逗号分隔 # db0 配置 db0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db0?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue username: root # 你的MySQL用户名 password: root # 你的MySQL密码 # db1 配置和db0类似只是库名不同 db1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue username: root password: root # 分库分表规则配置 rules: sharding: # 分库规则按user_id取模分库user_id%20→db0user_id%21→db1 databases: # 逻辑库名随便起和代码里的表名对应 user_db: database-strategy: standard: sharding-column: id # 分库字段用户ID sharding-algorithm-name: db_inline # 分库算法名称和下面对应 # 分表规则按user_id取模分表user_id%30→user_0以此类推 tables: # 逻辑表名随便起代码里操作这个表名就行 t_user: actual-data-nodes: user_db_${0..1}.user_${0..2} # 实际表db0/db1下的user_0~user_2 table-strategy: standard: sharding-column: id # 分表字段用户ID sharding-algorithm-name: table_inline # 分表算法名称和下面对应 # 分片算法配置inline表达式简单高效 sharding-algorithms: # 分库算法user_id%2 → 0或1对应db0、db1 db_inline: type: INLINE props: algorithm-expression: db${id % 2} # 分表算法user_id%3 → 0、1、2对应user_0~user_2 table_inline: type: INLINE props: algorithm-expression: user_${id % 3} # 打印SQL调试用生产环境可以关掉 props: sql-show: true # 端口号随便设不冲突就行 server: port: 80803.3 编写实体类、MapperCRUD基础操作用MyBatis-Plus简化操作不用写XML文件直接注解搞定// 实体类和表结构对应 Data TableName(t_user) // 这里的表名是application.yml里的逻辑表名 public class User { private Long id; // 用户ID分库分表字段 private String username;// 用户名 private String phone; // 手机号 private LocalDateTime createTime; // 创建时间 } // Mapper接口继承BaseMapper自带CRUD方法 Mapper public interface UserMapper extends BaseMapperUser { // 不用写额外方法BaseMapper里有insert、selectById、selectList等方法 } // 启动类加上MapperScan扫描Mapper接口 SpringBootApplication MapperScan(com.example.shardingdemo.mapper) // 改成你的Mapper包路径 public class ShardingDemoApplication { public static void main(String[] args) { SpringApplication.run(ShardingDemoApplication.class, args); } }3.4 编写测试接口验证分库分表效果写两个接口一个新增用户一个查询用户看看数据是不是真的分到了对应的库表RestController RequestMapping(/user) public class UserController { Autowired private UserMapper userMapper; // 新增用户测试分库分表插入 PostMapping(/add) public String addUser(RequestBody User user) { // 这里的id最好是雪花算法生成的分布式ID保证唯一且有序 // 为了演示咱们手动传id比如1、2、3... user.setCreateTime(LocalDateTime.now()); userMapper.insert(user); return 新增成功用户ID user.getId(); } // 根据ID查询用户测试分库分表查询 GetMapping(/{id}) public User getUserById(PathVariable Long id) { // ShardingSphere会自动根据id找对应的库表不用你手动指定 return userMapper.selectById(id); } // 批量新增测试批量插入效果 PostMapping(/batchAdd) public String batchAdd() { for (long i 1; i 10; i) { User user new User(); user.setId(i); user.setUsername(测试用户 i); user.setPhone(1380013800 (i % 10)); user.setCreateTime(LocalDateTime.now()); userMapper.insert(user); } return 批量新增10个用户成功; } }4. 测试效果见证奇迹的时刻启动项目用Postman或浏览器调用接口然后去MySQL里看数据分布调用批量新增接口http://localhost:8080/user/batchAdd查看数据分布db0库id%20会有id2、4、6、8、10的用户分别存在user_02%32不对2%32→user_24%31→user_1...自己算哈db1库id%21会有id1、3、5、7、9的用户同样按id%3分到不同表调用查询接口http://localhost:8080/user/1ShardingSphere会自动去db1库找对应的表返回数据。看到数据自动分到不同库表的那一刻是不是觉得这波操作稳了三、ShardingSphere优点很突出缺点也很“扎心”用了这么久ShardingSphere咱客观聊聊它的优缺点。优点让人爱到不行缺点也得提前避坑1. 优点为啥大家都爱用「透明化操作」这是最大的亮点你写SQL的时候完全不用管数据在哪个库哪个表就跟操作单库单表一样ShardingSphere自动帮你路由到目标库表。不用改业务代码这波血赚「功能超全」支持分库、分表、读写分离、数据加密、分布式事务...基本上你能想到的数据库中间件需求它都能满足不用再搭一堆组件「兼容性强」支持MySQL、PostgreSQL、Oracle等主流数据库还支持MyBatis、JPA等ORM框架接入成本极低「扩展性好」后续数据量再涨想增加库表数量只要修改分片规则不用动历史数据当然历史数据迁移另说但至少扩展方便。2. 缺点这些坑要提前避开「复杂SQL容易翻车」简单的CRUD没问题但如果是复杂的SQL比如多表关联、子查询、聚合函数ShardingSphere可能会路由错误或者直接不支持。建议写复杂SQL前先查官方文档或者做好测试「分布式事务是个坎」虽然支持分布式事务比如XA、SAGA模式但性能和稳定性不如单库事务。如果你的业务对事务一致性要求极高建议谨慎使用或者用其他方案比如最终一致性「运维成本增加」分库分表后库表数量变多监控、备份、故障排查都比单库单表复杂。比如某个表出问题你得先找到它在哪个库再定位问题「分片规则一旦定了难修改」比如你一开始按user_id取模分表后来想改成按地域分表那历史数据迁移就是个大工程。所以分片规则一定要提前设计好别拍脑袋决定四、最后总结什么时候该用ShardingSphere如果你家项目遇到以下情况别犹豫直接上ShardingSphere单库单表数据量超过500万MySQL的性能拐点查询开始变慢并发量越来越高单库扛不住需要水平扩展想做读写分离提高查询性能但又不想改业务代码。最后再叮嘱一句分库分表不是银弹能不分就不分如果能通过优化索引、SQL、缓存解决问题就先别搞分库分表。只有当这些手段都没用了再考虑分库分表。好了今天的实战教程就到这。Demo代码已经给大家了直接抄作业就行。如果运行过程中遇到问题评论区留言咱一起解决最后求个赞创作不易你的点赞就是我更新的动力 比心
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设费属于广宣费吗重庆定制网站开发价格

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring…

张小明 2026/1/5 17:37:09 网站建设

初中做网站用什么软件公司要做网站去哪里

文章目录前言【视频教程】1.关于FastSend2.Docker部署3.简单使用FastSend4.安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结FastSend 与 cpolar 的结合,扩展了文件传输的使用场景,让跨网络共享变得简单高效,适合需要频繁交换大文件…

张小明 2026/1/5 14:12:57 网站建设

清新区城乡建设局网站媒体网站的销售怎么做

PyTorch-CUDA-v2.6 镜像是否支持自监督学习?MoCo 对比学习实验深度解析 在当前 AI 研究快速迭代的背景下,一个稳定、高效且开箱即用的训练环境,往往决定了从想法到验证之间的“最后一公里”能否走通。尤其是在自监督学习(Self-Sup…

张小明 2026/1/6 6:14:41 网站建设

wordpress主题整站网站建设开户行查询

第一章:智谱开源Open-AutoGLM模型网址 智谱AI推出的Open-AutoGLM是一款面向自动化图学习任务的开源模型,旨在降低图神经网络在实际应用中的使用门槛。该模型集成了自动特征工程、图结构构建与超参数优化能力,适用于金融风控、社交网络分析和知…

张小明 2026/1/7 12:52:01 网站建设

深圳网站建设品牌wordpress 批量创建目录结构

👋 你好,我是 daner。 一个美好得故事 今天认识了Agent 一、一句话总结 在探索任何一个复杂概念时,我们最好从一个简洁的定义开始。在人工智能领域,智能体被定义为任何能够通过传感器(Sensors)感知其所处环…

张小明 2026/1/9 3:42:00 网站建设

网站用字体我想学室内设计怎么学

很多用户在使用空压机的时候 经常会在面板上看到C01故障,停机 那么形成这个故障的原因,现在北岳空压机技术人员给大家分析一下首先螺杆空压机的 C01 故障多集中在供电、电机、设备负载及散热等核心运行环节,不同品牌机型对该故障的定义略有差异,但常见原…

张小明 2026/1/6 0:03:42 网站建设