当前位置: 首页 > news >正文

MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略

MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略

  • MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略
    • 一、引言
    • 二、为什么需要分库分表
      • 2.1 性能瓶颈
      • 2.2 存储瓶颈
      • 2.3 高并发压力
    • 三、分库分表的方式
      • 3.1 垂直分库
      • 3.2 垂直分表
      • 3.3 水平分库
      • 3.4 水平分表
    • 四、分库分表的实现
      • 4.1 中间件选择
      • 4.2 路由规则配置
      • 4.3 代码实现
    • 五、分库分表带来的问题及解决方案
      • 5.1 跨库跨表查询问题
      • 5.2 数据一致性问题
      • 5.3 数据库管理难度增加
    • 六、总结

MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略

一、引言

在当今数字化时代,随着业务的飞速发展,数据量呈现出爆炸式增长的趋势。对于使用 MySQL 数据库的应用系统来说,单库单表的架构逐渐难以满足性能和存储的需求。查询响应时间变长、写入操作缓慢、存储容量不足等问题日益凸显,严重影响了系统的可用性和用户体验。在这种背景下,分库分表技术应运而生,成为解决数据增长挑战的有效手段。

二、为什么需要分库分表

2.1 性能瓶颈

当数据量不断增大时,单库单表的查询和写入操作会变得越来越慢。这是因为数据库在处理大量数据时,需要进行更多的磁盘 I/O 操作,导致查询响应时间显著增加。例如,在一个电商系统中,订单表可能会随着业务的发展积累数百万甚至数千万条记录,此时对订单表进行查询操作,即使是简单的查询也可能需要较长时间才能完成。

2.2 存储瓶颈

单库的存储容量是有限的,当数据量超过数据库的存储上限时,就会面临存储瓶颈。继续以电商系统为例,随着用户数量的增加和订单的不断产生,订单数据、商品数据等会不断累积,单库可能无法容纳如此大量的数据,从而影响系统的正常运行。

2.3 高并发压力

在高并发场景下,单库单表难以承受大量的读写请求。多个用户同时对数据库进行读写操作,会导致数据库的锁竞争加剧,进一步降低系统的性能。例如,在电商系统的促销活动期间,大量用户同时下单,单库单表可能无法及时处理这些请求,导致系统出现卡顿甚至崩溃。

三、分库分表的方式

3.1 垂直分库

垂直分库是将一个数据库按照业务功能进行拆分,将不同业务模块的数据分别存储在不同的数据库中。例如,在一个电商系统中,可以将用户信息、商品信息、订单信息分别存储在不同的数据库中。每个数据库可以根据自身的业务特点进行独立的优化和扩展,如为订单数据库配置更高的读写性能,以应对高并发的订单处理请求。

垂直分库的优点是可以降低数据库的耦合度,提高系统的可维护性和扩展性。不同业务模块的数据隔离开来,一个数据库出现问题不会影响其他数据库的正常运行。缺点是可能会增加跨库查询的复杂度,需要处理多个数据源之间的关联查询。

3.2 垂直分表

垂直分表是将一个表按照字段进行拆分,将经常一起查询的字段放在一个表中,不经常一起查询的字段放在另一个表中。例如,在用户表中,可以将用户的基本信息(如用户名、密码、手机号码等)和用户的扩展信息(如用户简介、头像地址等)分别存储在不同的表中。

垂直分表的优点是可以减少单表的数据量,提高查询性能。同时,也可以根据字段的访问频率进行优化,如将经常访问的字段存储在内存中,提高查询速度。缺点是增加了表之间的关联查询,需要处理数据的一致性问题。

3.3 水平分库

水平分库是将一个数据库中的数据按照一定的规则拆分到多个数据库中。常见的拆分规则有按照用户 ID、时间、地域等进行拆分。例如,在一个社交系统中,可以按照用户 ID 的哈希值将用户数据拆分到不同的数据库中,每个数据库存储一部分用户的数据。

水平分库的优点是可以将数据均匀地分散到多个数据库中,提高系统的并发处理能力。每个数据库可以独立处理一部分请求,减轻了单库的压力。缺点是增加了数据库的管理难度,需要处理数据的一致性和分布式事务问题。

3.4 水平分表

水平分表是将一个表中的数据按照一定的规则拆分到多个表中。常见的拆分规则有按照时间、范围、哈希等进行拆分。例如,在一个订单系统中,可以按照订单的创建时间将订单数据拆分到不同的表中,每个表存储一段时间内的订单数据。

水平分表的优点是可以减少单表的数据量,提高查询和写入性能。同时,也可以根据数据的特点进行优化,如将经常查询的数据存储在性能较好的表中。缺点是增加了表的管理难度,需要处理数据的一致性和跨表查询问题。

四、分库分表的实现

4.1 中间件选择

在实现分库分表时,可以选择使用中间件来简化开发和管理。常见的分库分表中间件有 ShardingSphere - JDBC、MyCAT 等。

ShardingSphere - JDBC 是一个轻量级的 Java 框架,它以 Jar 包的形式提供服务,不需要额外部署。它可以通过配置文件指定分库分表的策略和算法,实现数据的路由和分片。MyCAT 是一个开源的数据库中间件,它可以模拟数据库服务器,对应用程序提供透明的分库分表服务。

4.2 路由规则配置

在使用中间件进行分库分表时,需要配置路由规则。路由规则决定了数据如何被拆分到不同的数据库和表中。常见的路由规则有哈希路由、范围路由、时间路由等。

例如,在使用哈希路由时,可以根据用户 ID 的哈希值将用户数据拆分到不同的数据库中。在使用时间路由时,可以根据订单的创建时间将订单数据拆分到不同的表中。

4.3 代码实现

在代码层面,需要使用分库分表中间件提供的 API 进行数据操作。例如,在使用 ShardingSphere - JDBC 时,可以通过配置数据源和分片规则,然后使用 MyBatis 或 JPA 等数据访问框架进行数据的增删改查操作。

以下是一个简单的使用 ShardingSphere - JDBC 进行分库分表的示例代码:

import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;public class ShardingExample {public static void main(String[] args) throws SQLException {// 配置数据源Map<String, DataSource> dataSourceMap = new HashMap<>();// 这里需要根据实际情况配置数据源// dataSourceMap.put("ds0", getDataSource("ds0"));// dataSourceMap.put("ds1", getDataSource("ds1"));// 配置分片规则ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();// 配置表规则ShardingTableRuleConfiguration orderTableRuleConfig = new ShardingTableRuleConfiguration("t_order", "ds${0..1}.t_order${0..1}");orderTableRuleConfig.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("user_id", "dbShardingAlgorithm"));orderTableRuleConfig.setTableShardingStrategy(new StandardShardingStrategyConfiguration("order_id", "tableShardingAlgorithm"));shardingRuleConfig.getTables().add(orderTableRuleConfig);// 配置分片算法Properties dbShardingProps = new Properties();dbShardingProps.setProperty("algorithm-expression", "ds${user_id % 2}");shardingRuleConfig.getShardingAlgorithms().put("dbShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("INLINE", dbShardingProps));Properties tableShardingProps = new Properties();tableShardingProps.setProperty("algorithm-expression", "t_order${order_id % 2}");shardingRuleConfig.getShardingAlgorithms().put("tableShardingAlgorithm", new ShardingSphereAlgorithmConfiguration("INLINE", tableShardingProps));// 创建数据源DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new Properties());// 执行查询操作try (Connection conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement("SELECT * FROM t_order WHERE user_id = ?");) {ps.setInt(1, 1);try (ResultSet rs = ps.executeQuery()) {while (rs.next()) {System.out.println(rs.getInt("order_id"));}}}}// 这里需要根据实际情况实现获取数据源的方法// private static DataSource getDataSource(String dataSourceName) {//     // 实现数据源配置//     return null;// }
}

五、分库分表带来的问题及解决方案

5.1 跨库跨表查询问题

分库分表后,跨库跨表的查询变得复杂,需要处理多个数据源和表之间的关联查询。为了解决这个问题,可以采用以下方法:

  • 避免复杂的跨库跨表查询:尽量在设计系统时避免进行复杂的跨库跨表查询,将业务逻辑进行拆分,减少跨库跨表查询的需求。
  • 异步查询和数据汇总:对于必须进行的跨库查询,可以采用异步查询和数据汇总的方式,先在各个数据库中分别查询数据,然后在应用层进行数据的合并和处理。
  • 数据冗余和缓存:可以在不同的数据库中冗余存储一些常用的数据,减少跨库查询的次数。同时,使用缓存技术(如 Redis)缓存经常查询的数据,提高查询性能。

5.2 数据一致性问题

分库分表后,数据的一致性也是一个挑战,尤其是在涉及到多个数据库的事务操作时。为了解决这个问题,可以采用以下方法:

  • 分布式事务解决方案:使用分布式事务解决方案,如 Seata、TCC 等,实现数据的最终一致性。例如,Seata 的 AT 模式可以自动管理分布式事务,确保在不同数据库之间的操作能够正确执行。
  • 消息队列:使用消息队列(如 Kafka、RabbitMQ)来实现数据的异步更新和补偿机制。当一个数据库中的数据发生变化时,发送消息到消息队列,其他数据库监听消息队列,根据消息进行相应的数据更新。

5.3 数据库管理难度增加

分库分表后,数据库的数量和表的数量都会增加,增加了数据库的管理难度。为了解决这个问题,可以采用以下方法:

  • 数据库管理工具:使用数据库管理工具(如 Navicat、DBeaver 等)来管理多个数据库和表,提高管理效率。
  • 自动化脚本:编写自动化脚本(如 Shell 脚本、Python 脚本等)来完成数据库的备份、恢复、监控等操作,减少人工操作的工作量。

六、总结

分库分表是应对 MySQL 数据库数据增长挑战的有效策略。通过垂直分库、垂直分表、水平分库和水平分表等方式,可以将数据分散到多个数据库和表中,提高系统的性能和存储能力。在实现分库分表时,需要选择合适的中间件,配置合理的路由规则,并处理好跨库跨表查询、数据一致性和数据库管理等问题。只有这样,才能确保分库分表方案的顺利实施,为系统的稳定运行和业务的持续发展提供有力保障。

希望本文能够帮助你更好地理解 MySQL 分库分表技术,并在实际项目中应用该技术解决数据增长带来的问题。如果你在分库分表过程中遇到任何问题,欢迎在评论区留言讨论。

相关文章:

MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略

MySQL篇&#xff08;六&#xff09;MySQL 分库分表&#xff1a;应对数据增长挑战的有效策略 MySQL篇&#xff08;六&#xff09;MySQL 分库分表&#xff1a;应对数据增长挑战的有效策略一、引言二、为什么需要分库分表2.1 性能瓶颈2.2 存储瓶颈2.3 高并发压力 三、分库分表的方…...

SonarQube 配置SQL Server 数据库遇到的问题

之前本机跑了一套SonarQube的社区版&#xff0c;默认使用的是H2数据库&#xff0c;那么我把它练到我机器上的SQL Server数据库了&#xff0c;期间遇到以下两个问题&#xff0c;并在配置过程中解决掉&#xff0c;特将这个过程记录下来。 一、JDBC连接SQL Server问题 1. 问题出…...

23种设计模式-行为型模式-备忘录

文章目录 简介问题解决代码关键实现要点功能扩展方向 总结 简介 备忘录是一种行为设计模式&#xff0c; 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 问题 假如你正在开发一款文字编辑器应用。你想加入撤销功能。你可以采用直接的方式来实现: 程序在执行任…...

IDEA/WebStrom操作之commit前批量清除console.log()与debugger

前言&#xff1a; 在前端开发过程中&#xff0c;往往需要频繁用到console.log()与debugger&#xff0c;来观察数据具体情况以及断点调试。在经历了水生火热的开发动作后&#xff0c;往往会残留一地console.log()和debugger&#xff0c;若开发者还得手动在多个文件中一个个去除…...

每日算法-250405

34. 在排序数组中查找元素的第一个和最后一个位置 题目 思路 本题的核心思路是二分查找。 解题过程 问题分析&#xff1a;在一个升序排列的数组中查找一个目标值 target 的起始和结束位置。这是一个典型的二分查找应用场景。核心转换&#xff1a;题目要求找到 target 的第一个…...

设计模式简述(四)模板方法模式

模板方法模式 描述基本定义使用 描述 当一系列业务的基本流程是相同的&#xff0c;对于不同的业务可以在各自子类实现 所谓模板方法指的就是父类中固定的那部分代码 其实这里的思想和前面设计原则中开闭原则的描述是一致的&#xff0c;父类中的模板代码就是稳定的部分&#x…...

论文修改时有哪些需要注意的问题?

论文修改是学术写作中不可或缺的环节&#xff0c;直接影响成果的专业性和说服力。许多作者因忽略细节或急于定稿&#xff0c;导致论文质量大打折扣。那么&#xff0c;如何修改才能提升论文的严谨性与可读性呢&#xff1f; 一、逻辑结构 论文修改时&#xff0c;先从头到尾通读…...

JAVA阻塞队列

目录 一、什么是阻塞队列&#xff1f;特点是什么&#xff1f; 二、阻塞队列的两种创建方式&#xff1a; 1、使用 ArrayBlockingQueue<>( ) : 2、使用 LinkedBlockingQueue<>( ) &#xff1a; 三、阻塞队列方法的使用&#xff1a; 阻塞队列关键的两个方法&…...

tomcat与spring-web

文章目录 SpringServletContainerInitializerWebApplicationInitializerWebApplicationInitializer接口AbstractContextLoaderInitializer抽象类AbstractDispatcherServletInitializer抽象类AbstractAnnotationConfigDispatcherServletInitializer抽象类 WebApplicationContext…...

将电脑控制手机编写为MCP server

文章目录 电脑控制手机后,截屏代码复习MCP server构建修改MCP的config文件测试效果困惑电脑控制手机后,截屏代码复习 def capture_window(hwnd: int, filename: str = None) -> dict:""&...

[ctfshow web入门]burpsuite的下载与使用

下载 吾爱破解网站工具区下载burpsuite https://www.52pojie.cn/thread-1544866-1-1.html 本博客仅转载下载链接&#xff0c;下载后请按照说明进行学习使用 打开 配置 burpsuite配置 burpsuite代理设置添加127.0.0.1:8080 浏览器配置 如果是谷歌浏览器&#xff0c;打开win…...

文章记单词 | 第25篇(六级)

一&#xff0c;单词释义 mathematical&#xff1a;形容词&#xff0c;意为 “数学的&#xff1b;数学上的&#xff1b;运算能力强的&#xff1b;关于数学的”trigger&#xff1a;名词&#xff0c;意为 “&#xff08;枪的&#xff09;扳机&#xff1b;&#xff08;炸弹的&…...

讯飞语音合成(流式版)语音专业版高质量的分析

一、引言 在现代的 Web 应用开发中&#xff0c;语音合成技术为用户提供了更加便捷和人性化的交互体验。讯飞语音合成&#xff08;流式版&#xff09;以其高效、稳定的性能&#xff0c;成为了众多开发者的首选。本文将详细介绍在 Home.vue 文件中实现讯飞语音合成&#xff08;流…...

【MediaPlayer】基于libvlc+awtk的媒体播放器

基于libvlcawtk的媒体播放器 libvlc下载地址 awtk下载地址 代码实现libvlc相关逻辑接口UI媒体接口实例化媒体播放器注意事项 libvlc 下载地址 可以到https://download.videolan.org/pub/videolan/vlc/去下载一个vlc版本&#xff0c;下载后其实是vlc的windows客户端&#xff0…...

复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect

这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴&#xff0c;将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器&#xff0c;能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…...

Kafka 如何保证消息有序性?

Kafka 保证消息顺序性&#xff0c;是基于 Partition&#xff08;分区&#xff09;级别的顺序 来实现的。下面我们详细拆解一下&#xff1a; ✅ 同一个 Partition 内&#xff0c;消息是严格有序的 Kafka 在 同一个分区&#xff08;Partition&#xff09;内&#xff0c;消息是按…...

【积木画】——第十三届蓝桥杯(2022)T7思路解析

题目描述 关键词 递推、dp 思路 显然这是一道递推题。 但是为什么我还要写在这呢&#xff1f;因为我虽然看了题解但是还是没想明白&#xff0c;综合了下面两篇 参考文献我才初步理解这题的精髓。所以还是自己写一遍为好。 我们把最终结果记为F(n)。 情况1 直接以一个竖着…...

Android studio xml布局预览中 Automotive和Autotive Distant Display的区别

在 Android Studio 中&#xff0c;Configure Hardware Profile 设置中的 Device Type 选项有两个不同的设置&#xff1a;Android Automotive 和 Android Automotive Distant Display&#xff0c;它们的含义和用途如下&#xff1a; 1. Android Automotive 含义&#xff1a;这个…...

第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》

第十三章 持久化存储 一、Kubernetes存储设计核心概念 &#xff08;1&#xff09;存储抽象模型 PersistentVolume (PV)&#xff1a;集群级别的存储资源抽象&#xff08;如NFS卷/云存储盘&#xff09;PersistentVolumeClaim (PVC)&#xff1a;用户对存储资源的声明请求&#…...

Nginx 基础使用(2025)

一、Nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相…...

Docker基础1

本篇文章我将从系统的知识体系讲解docker的由来和在linux中的安装下载 随后的文章会介绍下载镜像、启动新容器、登录新容器 如需转载&#xff0c;标记出处 docker的出现就是为了节省资本和服务器资源 当企业需要一个新的应用程序时&#xff0c;需要为它买台全新的服务器。这样…...

【奇点时刻】GPT4o新图像生成模型底层原理深度洞察报告

个人最近一直在关注openai的新图像生成特性&#xff0c;以下内容基于现阶段社区及研究者们对 GPT-4O 图像生成功能的公开测试、逆向分析与技术推测综合而成&#xff0c;OpenAI 并未正式发布完整的技术报告&#xff0c;因此本文为非官方推断总结。但从多方信息与技术背景出发&am…...

Java的Selenium的特殊元素操作与定位之模态框

Modal Dialogue Box&#xff0c;又叫做模式对话框&#xff0c;是指在用户想要对对话框以外的应用程序进行操作时&#xff0c;必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。 alert&#xff08;警告&#xff09; //访问本地的HTML文件 chromeDr…...

回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测

回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测&#xf…...

Python菜鸟教程(小程序)

目录 一.简易计算器 二.学生成绩分级 三.密码设置 四.作业选择 点赞收藏,评论支持 一.简易计算器 print(-------使用的运算符-------\n) print(1.加号) print(2.减号) print(3.乘号) print(4.除号) Aint(input(请输入第一个数: )) Bint(input(请输入第二个数: )) Fi…...

类的(多态性、虚函数)基础练习

练习1&#xff1a;&#xff08;简单&#xff09; #include <iostream> using namespace std; class Vehicle { public: virtual void run() const0; }; class Car: public Vehicle { public: void run() const { cout << "run a car. "<<…...

特殊的质数肋骨--dfs+isp

1.dfs全排列组数&#xff0c;an记得还原 2.如果范围确定且只比较质数&#xff0c;isp比线性筛快&#xff0c;主要这个范围太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…...

智能体开发实战指南:提示词设计、开发框架与工作流详解

在大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;Agent&#xff09;快速发展的今天&#xff0c;构建一个实用、智能的Agent已不再遥不可及。无论你是开发法律助手、租房合同分析器&#xff0c;还是通用办公自动化助手&#xff0c;理解提示词工程&#xff08;P…...

jetson orin nano学习(torch+OpenCV+yolov5+)

一&#xff1a;入门第一件事&#xff1a;跟着商家教程配置哈哈 指令&#xff1a;nvidia-smi -h 帮助命令 sudo jtop --查看nvidia的gpu状态 Tip:教程下载的pytorth,cuda,cudnn版本不一定是你项目符合的&#xff0c;要提前想好 1.2 安装虚拟环境包&#xff08;要安…...

client-go如何监听自定义资源

如何使用 client-go 监听自定义资源 在 Kubernetes 中使用 client-go 监听自定义资源&#xff08;Custom Resource&#xff0c;简称 CR&#xff09;需要借助 Dynamic Client 或 Custom Informer&#xff0c;因为 client-go 的标准 Clientset 只支持内置资源&#xff08;如 Pod…...

【51单片机】3-3【定时器/计数器/中断】超声波测距模块测距

1.硬件 51最小系统超声波测距模块 2.软件 #include "reg52.h"//距离小于10cm,D5亮&#xff0c;D6灭&#xff0c;反之相反现象sbit D5 P3^7;//根据原理图&#xff08;电路图&#xff09;&#xff0c;设备变量led1指向P3组IO口的第7口 sbit D6 P3^6;//根据原理图&…...

C语言求3到100之间的素数

一、代码展示 二、运行结果 三、感悟思考 注意: 这个题思路他是一个试除法的一个思路 先进入一个for循环 遍历3到100之间的数字 第二个for循环则是 判断他不是素数 那么就直接退出 这里用break 是素数就打印出来 在第一个for循环内 第二个for循环外...

金仓数据库KCM认证考试介绍【2025年4月更新】

KCM&#xff08;金仓认证大师&#xff09;认证是金仓KES数据库的顶级认证&#xff0c;学员需通过前置KCA、KCP认证才能考KCM认证。 KCM培训考试一般1-2个月一次&#xff0c;KCM报名费原价为1.8万&#xff0c;当前优惠价格是1万&#xff08;趋势是&#xff1a;费用越来越高&…...

leetcode每日一题:替换子串得到平衡字符串

引言 今天的每日一题原题是1863. 找出所有子集的异或总和再求和&#xff0c;比较水&#xff0c;直接对于集合中的每一个元素&#xff0c;都有取或者不取2种情况&#xff0c;直接递归进去求和即可。更换成前几天遇到的更有意思的一题来写这个每日一题。 题目 有一个只含有 Q,…...

2025年数字化社会与智能计算国际学术会议 (ICDSIC 2025)

基本信息 官网&#xff1a;www.icdsic.net 时间&#xff1a;2025年4月18-20日 地点&#xff1a;中国-深圳 主题 数字化社会 智能计算 数字化制造、经济 数字化政务、转型 数字化农业、水利、管理 数字化医疗、学习、社区 数字基建、通信、交通 数字…...

BN测试和训练时有什么不同, 在测试时怎么使用?

我们来彻底搞懂 Batch Normalization&#xff08;BN&#xff09; 在训练和测试阶段的区别&#xff0c;以及 测试时怎么用。 &#x1f9e0; 一句话总结&#xff1a; 训练时&#xff1a;使用 当前 mini-batch 的均值和方差 测试时&#xff1a;使用 整个训练集估计的“滑动平均均值…...

为什么卷积神经网络适用于图像和视频?

我们常听说“卷积神经网络&#xff08;CNN&#xff09;擅长图像和视频”&#xff0c;但其实 CNN 的核心本质远不止图像领域。我们先搞懂它为啥适合图像/视频。 &#x1f9e0;CNN 为什么适用于图像和视频&#xff1f; 主要因为 图像/视频具有空间局部性和结构平移性&#xff0c…...

python爬虫:DrissionPage实战教程

如果本文章看不懂可以看看上一篇文章&#xff0c;加强自己的基础&#xff1a;爬虫自动化工具&#xff1a;DrissionPage-CSDN博客 案例解析&#xff1a; 前提&#xff1a;我们以ChromiumPage为主&#xff0c;写代码工具使用Pycharm&#xff08;python环境3.9-3.10&#xff09; …...

【Python爬虫高级技巧】BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!

大家好&#xff0c;我是唐叔&#xff01;上期我们聊了 BeautifulSoup的基础用法 &#xff0c;今天带来进阶篇。我将分享爬虫老司机总结的BeautifulSoup高阶技巧&#xff0c;以及那些官方文档里不会告诉你的实战经验&#xff01; 文章目录 一、BeautifulSoup性能优化技巧1. 解析…...

【动手学深度学习】卷积神经网络(CNN)入门

【动手学深度学习】卷积神经网络&#xff08;CNN&#xff09;入门 1&#xff0c;卷积神经网络简介2&#xff0c;卷积层2.1&#xff0c;互相关运算原理2.2&#xff0c;互相关运算实现2.3&#xff0c;实现卷积层 3&#xff0c;卷积层的简单应用&#xff1a;边缘检测3.1&#xff0…...

IPSG 功能协议

IPSG&#xff08;IP Source Guard&#xff09;即 IP 源保护&#xff0c;是一种基于 IP 地址和 MAC 地址绑定的安全功能&#xff0c;用于防止 IP 地址欺骗和非法的 IP 地址访问。以下是配置 IPSG 功能的一般步骤&#xff1a; 基于端口的 IPSG 配置 进入接口配置模式&#xff1…...

19.go日志包log

核心功能与接口 基础日志输出 Print 系列&#xff1a;支持 Print()、Println()、Printf()&#xff0c;输出日志不中断程序。 log.Print("常规日志") // 输出: 2025/03/18 14:47:13 常规日志 log.Printf("格式化: %s", "数据") Fatal…...

横扫SQL面试——TopN问题

横扫SQL面试 电商平台的"销量Top10商品"&#x1f6cd;️&#xff0c;内容社区的"热度Top5文章“”&#x1f525;&#xff0c;还是金融领域的"交易额Top3客户"&#x1f4b0;——TopN问题无处不在&#xff01; 无论是日常业务分析&#x1f4ca;&#x…...

高级:微服务架构面试题全攻略

一、引言 在现代软件开发中&#xff0c;微服务架构被广泛应用于构建复杂、可扩展的应用程序。面试官通过相关问题&#xff0c;考察候选人对微服务架构的理解、拆分原则的掌握、服务治理的能力以及API网关的运用等。本文将深入剖析微服务架构相关的面试题&#xff0c;结合实际开…...

使用MATIO库读取Matlab数据文件中的cell结构数据

使用MATIO库读取Matlab数据文件中的cell结构数据 MATIO是一个用于读写Matlab数据文件(.mat)的C/C库。下面我将展示如何使用MATIO库来读取Matlab文件中的cell结构数据。 示例程序 #include <stdio.h> #include <stdlib.h> #include <matio.h>int main(int …...

pyTorch框架使用CNN进行手写数字识别

目录 1.导包 2.torchvision数据处理的方法 3.下载加载手写数字的训练数据集 4.下载加载手写数字的测试数据集 5. 将训练数据与测试数据 转换成dataloader 6.转成迭代器取数据 7.创建模型 8. 把model拷到GPU上面去 9. 定义损失函数 10. 定义优化器 11. 定义训练…...

新能源汽车电子电气架构设计中的功能安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

使用binance-connector库获取Binance全市场的币种价格,然后选择一个币种进行下单

一个完整的示例,展示如何使用 api 获取Binance全市场的币种价格,然后选择一个最便宜的币种进行下单操作 代码经过修改,亲测可用,目前只可用于现货,合约的待开发 获取市场价格:使用client.ticker_price()获取所有交易对的当前价格 账户检查:获取账户余额,确保有足够的资…...

HikariCP 源码核心设计解析与 ZKmall开源商城场景调优实践

HikariCP 作为 Spring Boot 默认数据库连接池&#xff0c;其高性能源于独特的无锁设计、轻量级数据结构和精细化生命周期管理。以下从源码解析与 ZKmall开源商城性能调优两个维度展开&#xff1a; 一、HikariCP 源码核心设计解析 ​无锁并发控制与 ConcurrentBag 容器 ​Concur…...

P1036 [NOIP 2002 普及组] 选数(DFS)

题目描述 已知 n 个整数 x1​,x2​,⋯,xn​&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4 个整数分别为 3,7,12,19 时&#xff0c;可得全部的组合与它…...