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

深入解析MySQL数据库分库分表技术

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。

随着互联网应用的快速发展,单一数据库在面对大规模数据时可能会遇到性能瓶颈。因此,数据库分库分表作为一种常见的扩展技术,已经在众多大型系统中得到广泛应用。本文将深入解析MySQL数据库分库分表的原理、策略以及如何在实际项目中实现。

一、什么是分库分表?

分库分表是一种将数据从单一数据库中拆分到多个数据库或表中的技术,旨在提高数据的存储和查询效率。随着数据量的不断增长,单一数据库在处理高并发请求时可能会遇到性能瓶颈,导致响应时间延长和系统崩溃。因此,分库分表成为了现代数据库设计中不可或缺的一部分。

1. 分库的概念

分库是指将数据按照一定的规则拆分到多个数据库中。每个数据库存储一部分数据,从而减轻单一数据库的负担。分库的主要目的是提高系统的可扩展性和可用性。通过将数据分散到多个数据库中,可以实现负载均衡,避免单点故障。

例如,在一个大型电商平台中,用户数据和订单数据可以分别存储在不同的数据库中。这样,当用户访问时,系统可以快速从用户数据库中获取信息,而订单处理则可以在订单数据库中进行,从而提高整体性能。

2. 分表的概念

分表是指将数据按照一定的规则拆分到多个表中。每个表存储一部分数据,通常是为了避免单个表的数据量过大,导致查询效率低下。分表可以分为水平分表和垂直分表两种方式。

  • 水平分表:将表中的数据按行进行拆分,每个表存储一定范围的数据。例如,用户表可以根据用户ID进行水平分表,用户ID在1-10000的存储在表1,10001-20000的存储在表2,以此类推。这样可以有效减少单个表的数据量,提高查询效率。

  • 垂直分表:将表中的不同列进行拆分,将一些常用列和不常用列分别存储在不同的表中。例如,用户表中的基本信息(如用户名、密码、邮箱)存储在一个表中,而用户的日志信息(如登录记录、操作记录)存储在另一个表中。这样可以提高查询效率,并减少不必要的数据冗余。

通过分库分表,数据能够均匀分布到多个数据库或表中,从而减少单个数据库的压力,提高系统的可扩展性和高可用性。

二、分库分表的策略

在实施分库分表时,选择合适的策略至关重要。不同的业务场景和数据特性决定了不同的分库分表策略。以下是几种常见的分库分表策略:

1. 分库策略

分库策略是将数据按照某种规则拆分到不同的数据库中。常见的分库策略包括:

  • 按业务划分:将不同业务的数据存储在不同的数据库中。例如,一个电商平台可以将用户数据、商品数据和订单数据分别存储在不同的数据库中。这样可以有效隔离不同业务的数据,减少相互之间的影响,提高系统的可维护性。

  • 按数据量划分:当单个数据库的数据量过大时,可以根据数据量将数据拆分到多个数据库中。例如,按照用户ID范围,将用户数据分布到不同的数据库中。这样可以避免单个数据库的性能瓶颈,提高查询效率。

  • 按地域划分:在一些全球化的应用中,可以根据用户的地理位置将数据存储在不同的数据库中。例如,亚洲用户的数据存储在亚洲数据库,欧洲用户的数据存储在欧洲数据库。这样可以减少网络延迟,提高用户的访问速度。

2. 分表策略

分表策略是将数据按表进行拆分,目的是避免单个表的数据量过大导致查询效率低下。常见的分表策略包括:

  • 水平分表:将表中的数据按行进行拆分,每个表存储一定范围的数据。例如,用户表可以根据用户ID进行水平分表,用户ID在1-10000的存储在表1,10001-20000的存储在表2,以此类推。水平分表可以有效减少单个表的数据量,提高查询效率。

  • 垂直分表:将表中的不同列进行拆分,将一些常用列和不常用列分别存储在不同的表中。例如,用户表中的基本信息(如用户名、密码、邮箱)存储在一个表中,而用户的日志信息(如登录记录、操作记录)存储在另一个表中。垂直分表可以提高查询效率,并减少不必要的数据冗余。

  • 时间分表:在一些日志系统或数据量快速增长的场景中,可以根据时间进行分表。例如,将每个月的数据存储在不同的表中。这样可以方便地进行数据归档和清理,提高查询效率。

3. 分库分表的切分规则

切分规则是决定数据如何拆分到不同的库或表中的依据。常见的切分规则包括:

  • 范围切分:根据数据的某个字段的值的范围进行切分。例如,按照日期范围进行切分,每个月的数据存储在不同的表中。范围切分适合于数据量相对均匀的场景。

  • 哈希切分:通过哈希算法对某个字段进行计算,确定数据存储在哪个表或库中。哈希切分可以实现较为均匀的负载均衡,适合于数据量较大且分布不均的场景。

  • 复合切分:将多种切分策略结合起来。例如,先按照某个字段范围进行分库,再在每个库中使用哈希切分进行分表。复合切分可以根据具体业务需求灵活调整,提高系统的灵活性和可扩展性。

通过合理的分库分表策略,可以有效提高系统的性能和可扩展性,满足大规模数据存储和查询的需求。选择合适的策略需要根据具体的业务场景、数据特性和系统架构进行综合考虑。

三、分库分表的挑战与解决方案

虽然分库分表可以有效地提升数据库的性能和可扩展性,但在实际操作中也面临着一系列挑战。了解这些挑战并提出相应的解决方案,是确保分库分表成功实施的关键。

1. 数据查询跨库跨表

在进行分库分表后,数据被分散到多个库和表中。大多数查询操作需要跨库或跨表进行联合查询,这使得查询操作变得更加复杂,特别是当数据量非常庞大时,跨库查询的效率和复杂度会大幅提升。具体的挑战包括:

  • 跨库查询性能差:跨库查询需要通过多个数据库实例进行操作,可能涉及到复杂的网络通信和同步问题,导致查询响应时间增加。
  • 数据一致性问题:在跨库查询的过程中,如何保证数据的一致性和完整性也是一个不容忽视的问题。
解决方案
  • 数据路由:通过数据路由机制,在应用层实现智能路由,确保查询仅在需要的数据库或表中进行。这就要求开发者设计清晰的路由规则,并能通过主键或某些条件快速定位到数据所在的库表,从而减少跨库查询的次数和开销。

     

    例如,可以使用哈希算法将数据按某个字段分配到不同的库或表,在查询时根据该字段的值直接路由到相应的库表。这样不仅能避免不必要的跨库查询,还能提高查询效率。

  • 分布式查询引擎:采用分布式查询引擎,将跨库查询转化为多库并行查询,再将结果合并。分布式查询引擎如Apache Hive、Presto等,能够提供较为高效的跨库查询和数据合并功能。尽管实现成本较高,但在极大数据量的情况下,能够大幅提高查询效率。

2. 事务的处理

分库分表后的数据通常分布在多个数据库中,而传统的MySQL事务仅在单个数据库内有效。因此,当操作涉及多个库时,如何保证事务的一致性和原子性是一个重大挑战。

解决方案
  • 两阶段提交(2PC) :两阶段提交协议(2PC)是一种经典的分布式事务协议。它通过保证事务在所有参与者之间一致性提交,确保操作的原子性。尽管2PC能够提供较强的事务一致性保障,但它的性能开销较大,且在网络不稳定时可能导致阻塞。

  • 最终一致性:在一些场景中,可能并不要求实时的强一致性,而是可以容忍一定的延迟,这时可以采用最终一致性策略。使用消息队列(如Kafka、RabbitMQ等)来异步同步数据,确保在短时间内数据最终达成一致。最终一致性方案虽然不能确保即时一致性,但能大幅提高系统性能和可扩展性。

  • 分布式事务框架:一些开源框架,如Seata 和 Saga,提供了更灵活且高效的分布式事务解决方案。通过这些框架,可以在不依赖于传统2PC协议的情况下,实现跨库的事务管理。

3. 数据迁移与扩展

随着时间的推移,分库分表后的数据量仍然可能会增长,原有的分库分表策略可能会变得不再适用。因此,如何灵活地进行数据迁移和扩展也是一个挑战。特别是在没有中断服务的情况下,如何将数据迁移到新的库或表,是实现高可用系统的关键。

解决方案
  • 灰度迁移:在迁移数据时,可以采用灰度迁移策略。即通过分批次迁移数据,逐步将数据从旧库迁移到新库。这种方式不仅避免了一次性迁移可能带来的系统性能问题,还能够在迁移过程中进行监控,及时发现和解决问题。

  • 动态扩容:为了避免数据的单点瓶颈,动态扩容是分库分表策略中的重要环节。动态扩容意味着能够根据业务需求,在不影响现有业务的情况下,实时添加新的数据库或表,并将数据从旧库迁移到新库。为了平滑扩容,可以借助一些中间件或代理层实现透明路由和动态切分,确保在扩容过程中无缝对接。

四、实际应用中的分库分表方案

在实际应用中,分库分表的实施方案必须根据业务需求、数据特点和系统架构等因素来制定。以下是几种常见的实际应用中的分库分表方案:

1. 电商平台的分库分表方案

电商平台通常拥有海量的用户、商品和订单数据,数据量大且增长迅速。因此,电商平台的分库分表方案需要从多个角度来考虑:

  • 按业务分库:用户信息、商品信息和订单信息存储在不同的数据库中。每个业务模块的数据库可以根据具体需求进行优化。例如,用户数据采用高可用、高并发的数据库部署,而订单数据则可以采用支持大数据量快速查询的数据库。

  • 按时间分表:订单数据通常随着时间增长而增加,可以按月或按年分表。每个月的订单存储在一个独立的表中,能够有效地控制单表的数据量,提升查询效率。

  • 按用户ID范围分表:用户数据可以按照用户ID进行水平分表,将ID范围为1-10000的用户数据存储在表1,10001-20000的用户数据存储在表2,以此类推。这样可以有效地均衡不同表之间的负载。

2. 社交平台的分库分表方案

社交平台的数据量也非常庞大,且数据访问的模式更加复杂。社交平台的分库分表方案可以考虑以下几个方面:

  • 按地域分库:用户来自全球各地,社交平台可以根据用户的地理位置进行分库。例如,北美地区的用户数据存储在北美数据库,欧洲地区的用户数据存储在欧洲数据库,从而减少跨区域访问的延迟。

  • 按用户行为分表:社交平台中的用户行为数据(如点赞、评论、转发等)可以根据行为类型进行分表。每种类型的行为数据存储在不同的表中,便于管理和查询。

  • 按时间分表:社交平台的动态数据(如帖子、评论等)可以按照时间进行分表。例如,将每个月的动态数据存储在不同的表中。这样可以简化数据归档和清理操作。

3. 日志系统的分库分表方案

日志数据通常是增量增长的,且查询主要是按照时间范围进行的,因此日志系统的分库分表方案可以采用以下方式:

  • 按时间分表:日志数据一般按天、周或月进行分表。例如,每一天的日志存储在一个表中,定期进行表的归档和清理。按时间分表能够显著提高查询性能,并且便于进行数据归档。

  • 按日志类型分表:日志数据根据不同的日志类型进行分表。常见的日志类型包括操作日志、错误日志、访问日志等。将不同类型的日志存储在不同的表中,有助于提高查询效率,并且能够方便地对不同类型的日志进行优化。

通过这些具体的方案,分库分表不仅能够有效应对大规模数据的存储和查询问题,还能提升系统的可扩展性、可维护性和容错能力。在实际应用中,开发者需要根据具体的业务场景灵活设计分库分表方案,以达到最佳的性能和效果。

五、结语

分库分表是解决大规模数据存储和查询问题的重要手段,但在实际应用中也面临着很多挑战。理解分库分表的原理和策略,选择合适的分库分表方案,对于构建高可用、高性能的分布式系统至关重要。希望本文能够帮助读者更好地理解MySQL数据库的分库分表技术,并在实际开发中能够熟练运用。

相关文章:

深入解析MySQL数据库分库分表技术

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 随着互联网应用的快速发展,单一数据库在面对大规模数据时可能会遇到性能瓶颈。因此,数据库分库分表作为一种…...

【Embedded World 2025:边缘 AI、存储革新与 1X nm 工艺重塑嵌入式未来】

Embedded World 2025于3月11-13日在德国纽伦堡举办,作为全球嵌入式系统领域顶级盛会,汇聚超千家展商与3万专业观众,聚焦嵌入式智能、安全管理及行业解决方案。展会呈现边缘AI、低功耗MCU、5G RedCap、新型存储及车规级技术等前沿方向&#xf…...

【人工智能基础2】机器学习、深度学习总结

文章目录 一、人工智能关键技术二、机器学习基础1. 监督、无监督、半监督学习2. 损失函数:四种损失函数3. 泛化与交叉验证4. 过拟合与欠拟合5. 正则化6. 支持向量机 三、深度学习基础:深度神经网络1、概念与原理2、多层神经网络训练方法 一、人工智能关键…...

MySQL如何存储表情符号?

存储表情符号 默认mysql的字符集是utf8,排序规则为 utf8_general_ci INSERT INTO department (name) VALUES (😄)在存储表情的时候会报 1366 - Incorrect string value: \xF0\x9F\x98\x84 for column name at row 1, Time: 0.007000s 这时需要修改字符…...

Unity Shader 学习16:全局光照 概念理解

- 全局光照 直接光 间接光&#xff0c;在没有开启GI的情况下是不计算间接光的&#xff08;如果放了光照探针 倒是可以模拟间接光 <光照探针只影响动态物体>&#xff09;&#xff1b; - 处理对象&#xff1a;静态物体(static) 、 非静态(动态)物体&#xff1b; - 计算方…...

Jobby、Quarkus 和 Spring Boot对比

Jobby、Quarkus 和 Spring Boot 是三种不同的 Java 框架&#xff0c;各自有不同的设计目标和适用场景。以下是对它们的详细对比&#xff1a; 1. 设计目标 框架设计目标Jobby轻量级的任务调度框架&#xff0c;专注于任务调度和执行。Quarkus面向云原生和 Kubernetes 的 Java 框…...

Dubbo 服务发现

总览 学习 Dubbo 的服务发现机制&#xff0c;可以从以下几方面入手&#xff1a; 注册中心的配置服务的注册客户端拉取服务列表服务列表的本地缓存服务提供者列表变更的监听机制服务发现的接口设计 注册中心的配置 Dubbo 通过解析用户配置决定使用的注册中心。比如用户配置了…...

Pytorch使用手册—自定义 C++ 和 CUDA 运算符(专题五十一)

你将学到什么 如何将用 C++/CUDA 编写的自定义运算符与 PyTorch 集成如何使用 torch.library.opcheck 测试自定义运算符先决条件 1. PyTorch 2.4 或更高版本 2. 对 C++ 和 CUDA 编程有基本了解 注意 本教程也适用于 AMD ROCm,无需额外修改。 PyTorch 提供了一个庞大的运算符库…...

Linux 实时同步服务实现(Rsync 结合 Inotify)

文章目录 1. 实时同步服务介绍2. Inotify 机制介绍3. Inotify-toolRsync 实时同步实践3.1 确认远程数据传输服务部署完成3.2 检查Linux系统是否支持Inotify实时监控3.3 安装inotify-tools3.4 命令测试3.5 重要监控事件汇总3.6 使用步骤 4. Sersync 工具使用&#xff08;重点&am…...

用Java写斗地主前期工作的一些小想法

目前我们并不是要实现一个游戏,而是要对斗地主游戏做准备,主要是做牌+洗牌+发牌+给发的牌进行排序。在这个过程中我希望通过集中方式来实现: 1. 使用集合+方法+字符串的运用完成以上功能 2. 使用面向对象思想,对1做改进,主要是对其排序的改进,从而理解面向对象的真正意…...

鸿蒙数据持久化之首选项

场景介绍 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。当用户希望有一个全局唯一存储的地方&#xff0c;可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中&#xff0c;当用户读取…...

将bin文件烧录到STM32

将bin文件烧录到STM32 CoFlash下载生成hex文件hex2bin使用下载bin到单片机 CoFlash下载 选择需要安装的目录 在Config中可以选择目标芯片的类型 我演示的是 stm32f103c8t6 最小系统板 Adapter&#xff1a;烧录器类型 Max Clock&#xff1a;下载速度 Por&#xff1a;接口类型&am…...

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…...

jasypt-spring-boot-starter项目如何使用jasypt加密密码

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.iv.RandomIvGenerator; import org.jasypt.salt.RandomSaltGenerator;/*** 加密密码的工具** author xxx* since 2025-03-17*/ public class JasyptTest {public static void main(String[] a…...

[AI速读]混合语言IP集成:挑战与高效解决方案

在现代SoC(系统级芯片)设计中,IP(知识产权模块)复用是提升开发效率的关键。然而,当设计涉及多种硬件描述语言(如SystemVerilog、VHDL、SystemC)时,如何高效集成不同语言的IP模块成为一大难题。本文将从实际设计场景出发,探讨混合语言IP集成的核心挑战,并介绍一套方法…...

SpringSecurity——如何获取当前登录用户的信息

目录 1. 直接注入 Principal 2. 直接注入 Authentication 3. 注入 UsernamePasswordAuthenticationToken 4. 通过 SecurityContextHolder 获取 5. 使用自定义工具方法 总结 如何获取更多的用户信息 自定义用户实体类 如何忽略某些字段&#xff08;不返回前端&#xff…...

ospf动态路由

一、为什么使用动态路由 OSPF&#xff08;open shortest path first开放最短路径优先&#xff09;是内部网关协议(IGP)的一种&#xff0c;基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2)&#xff0c;核心重点协议 OSPF共三个版本&#xff0c;OSPFV1主要是实验室…...

在react当中利用IntersectionObserve实现下拉加载数据

目录 一、传统的下拉加载方案 二、存在问题 1.性能较差 2.不够精确 三、IntersectionObserve版本下拉加载 1、callback 2、options 四、IntersectionObserver实例 1、Intersection的优势 2、实现思路 3、代码实现 在进行前端开发的过程中&#xff0c;常常会碰到下拉…...

SpringBoot之如何集成SpringDoc最详细文档

文章目录 一、概念解释1、OpenAPI2、Swagger3、Springfox4、Springdoc5. 关系与区别 二、SpringDoc基本使用1、导包2、正常编写代码&#xff0c;不需要任何注解3、运行后访问下面的链接即可 三、SpringDoc进阶使用1、配置文档信息2、配置文档分组3、springdoc的配置参数**1. 基…...

Transaction rolled back because it has been marked as rollback-only问题解决

transaction rolled back because it has been marked as rollback-only 简略总结> 发生场景&#xff1a;try-catch多业务场景 发生原因&#xff1a;业务嵌套&#xff0c;事务管理混乱&#xff0c;外层业务与内层业务抛出异常节点与回滚节点不一致。 解决方式&#xff1a;修…...

单片机写的小液晶屏驱动+汉字滚屏

单片机写的小液晶屏驱动汉字滚屏 stm32f401freertos内置HZK16 单片机汉字滚屏...

SpringBoot整合LangChain4j操作AI大模型实战详解

一、引言 在当今这个人工智能飞速发展的时代&#xff0c;AI大模型已经逐渐渗透到我们生活的方方面面&#xff0c;为企业和开发者带来了前所未有的机遇。然而&#xff0c;如何高效地接入并利用这些AI大模型&#xff0c;成为了摆在许多开发者面前的一道难题。SpringBoot作为一款…...

深度解析 | Android 13 Launcher3分页指示器改造:横线变圆点实战指南

一、需求背景与技术挑战 在Android 13系统定制开发中&#xff0c;我们面临将Launcher3桌面从传统双层架构优化为现代单层布局的挑战。原生系统采用的分页横线指示器在视觉呈现上存在两点不足&#xff1a; 风格陈旧不符合Material You设计规范 空间占用较大影响屏幕利用率 通…...

【Qt】private槽函数可以被其他类中的信号连接

private槽函数可以被其他类中的信号连接。 即使 B 类的槽函数是 private 的&#xff0c;A 类通过信号连接 B 类的槽函数也没有问题。这是因为 Qt 的信号和槽机制是通过元对象系统&#xff08;Meta-Object System&#xff09;实现的&#xff0c;而不是直接调用函数。只要信号和…...

C语言每日一练——day_7

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第七天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…...

Python --**kwargs

在 Python 中&#xff0c;**kwargs 是一个特殊语法&#xff0c;用于在函数定义中接收任意数量的关键字参数&#xff08;即键值对参数&#xff09;&#xff0c;并将这些参数以字典形式存储。它是 Python 中处理动态参数的强大工具&#xff0c;适用于需要灵活传递参数的场景。 1.…...

网络编程之客户端通过服务器与另外一个客户端交流

服务器使用select模型搭建&#xff0c;客户端1使用线程搭建&#xff0c;客户端2使用poll模型搭建&#xff0c; 使用时需要先运行服务器&#xff0c;具体编译可看我最后的图片 head.h头文件 #ifndef __HEAD_H_ #define __HEAD_H_ #include <stdio.h> #include <string…...

mybatis集合映射association与collection

官方文档&#xff1a;MyBatis的一对多关联关系 一、用途 一对一&#xff1a;association 一对多&#xff1a;collection 二、association 比较容易理解&#xff0c;可参考官方文档 三、collection <?xml version"1.0" encoding"UTF-8"?> &l…...

windows克隆项目找不到,修改git bash中存储的账号密码

git clone项目找不到&#xff0c;提示&#xff1a;remote: The project you were looking for could not be found. 有可能是地址错误、没有权限、账号密码错误 1.地址错误 从新检查git地址&#xff0c;确保地址是正确的。 2.没有权限 确保你有访问该项目的权限 3.账号密码…...

Linux中安装redis

Redis的安装包&#xff0c;从官方下载下来的是c语言的源码包&#xff0c;我们需要自己编译安装。具体操作步骤如下&#xff1a; 安装redis 上传redis资源包 安装C语言的编译环境 gcc yum install -y gcc-c 解压redis源码在当前目录 tar -zxvf redis-6.2.4.tar.gz 进入解压目录…...

Springboot项目打包成war包

1、首先创建一个springboot工程&#xff0c;然后我们改造启动类如&#xff1a; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuil…...

Word:双栏排版操作步骤及注意事项

将word单栏文字排版为双栏是论文投稿前的重要步骤&#xff0c;也是非常容易出错的一步。但事实上排版的操作并不复杂&#xff0c;本篇博客旨在把操作过程及注意事项简单记录下来&#xff0c;便于日后浏览和查询。 【Step1】打开“显示/隐藏段落标记” &#xff08;ctrl*&#…...

ArcGIS10. 8简介与安装,附下载地址

目录 ArcGIS10.8 1. 概述 2. 组成与功能 3. 10.8 特性 下载链接 安装步骤 1. 安装准备 2. 具体步骤 3.补丁 其他版本安装 ArcGIS10.8 1. 概述 ArcGIS 10.8 是由美国 Esri 公司精心研发的一款功能强大的地理信息系统&#xff08;GIS&#xff09;平台。其核心功能在于…...

MySQL:数据库基础

数据库基础 1.什么是数据库&#xff1f;2.为什么要学习数据库&#xff1f;3.主流的数据库&#xff08;了解&#xff09;4.服务器&#xff0c;数据库&#xff0c;表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库&#xff1f; 数据库(Database,简称DB)&#x…...

数据结构-----初始数据结构、及GDB调试

一、数据结构核心概念 相互之间存在一种或多种特定关系的数据元素的集合。 1. 数据结构定义 // 嵌入式场景示例&#xff1a;传感器网络节点结构 struct SensorNode {uint16_t node_id; // 2字节float temperature; // 4字节uint32_t timestamp; // 4字节struct Se…...

go面向对象编程三大特性,封装、继承和多态

1.简介 go具有面向对象编程的封装、继承和多态的特性,只是实现的方式和其它OOP语言不一样,下面看下go的三大特性是如何实现的。 2.封装 2.1基本介绍 封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的操作(方法),才能…...

华为ISC+战略规划项目数字化转型驱动的智慧供应链革新(169页PPT)(文末有下载方式)

资料解读&#xff1a;华为ISC战略规划项目数字化转型驱动的智慧供应链革新 详细资料请看本解读文章的最后内容。 华为的ISC战略规划项目是其供应链数字化转型的核心&#xff0c;旨在通过智慧供应链的革新&#xff0c;提升企业的竞争力和运营效率。本文将从多个维度详细解读这…...

算法刷题记录——LeetCode篇(10) [第901~1000题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 994. 腐烂的橘子 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每…...

Python中的字典:深度解析与应用实践

一、字典的本质与特性 Python字典&#xff08;Dictionary&#xff09;是以**键值对&#xff08;Key-Value Pair&#xff09;**形式存储数据的无序集合&#xff0c;使用大括号{}定义。其核心特性包括&#xff1a; 快速查找&#xff1a;基于哈希表实现&#xff0c;通过键&#…...

jmeter配件元素

jmeter配件元素 CSV Data Set Config名词解释测试场景Recycle on EOF:False配置测试结果 Recycle on EOF:True配置测试结果 Sharing mode:All Threads配置测试结果 Sharing mode:Current thread group配置测试结果 Sharing mode:Current thread配置测试结果 HTTP Header Manage…...

VSCode + CMake

参考文献&#xff1a; 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统&#xff1a;WSLWSL&#xff1a;桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…...

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别&#xff1a; VMw…...

SpringCloud网关:Gateway路由配置与过滤器链

文章目录 引言一、Gateway基本架构二、路由配置方式2.1 配置文件方式2.2 Java代码方式 三、内置断言工厂四、内置过滤器工厂4.1 请求路径相关过滤器4.2 请求和响应头过滤器4.3 功能性过滤器 五、自定义过滤器5.1 自定义GatewayFilter5.2 自定义过滤器工厂 六、全局过滤器总结 引…...

Git 分支使用规范全解(多人协作开发适用)

🚀 Git 分支使用规范全解(多人协作开发适用) 本文将为你梳理一套清晰、标准、适合企业/团队使用的 Git 分支管理策略,适用于前后端、边缘端、AI项目等多种场景。 🧩 为什么要规范分支管理? 防止多人协作混乱、冲突频发清晰区分:开发中 / 待发布 / 已上线 的版本快速定…...

【华三】路由器交换机忘记登入密码或super密码的重启操作

【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备&#xff1a;路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记&#xff0c;或者说本地用户的密码忘记&#xff0c;其实这时候是登入不了路由器的&am…...

Linux驱动开发进阶 - 文件系统

文章目录 1、前言2、学习目标3、VFS虚拟文件系统3.1、超级块&#xff08;Super Block&#xff09;3.2、dentry3.3、inode3.4、file 4、文件系统的挂载5、文件系统的注册5.1、文件系统的注册过程5.1.2、定义文件系统类型5.1.3、注册文件系统5.1.4、注销文件系统 5.2、文件系统的…...

Mac:JMeter 下载+安装+环境配置(图文详细讲解)

&#x1f4cc; 下载JMeter 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi &#x1f4cc; 无需安装 Apache官网下载 JMeter 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目…...

蓝桥杯备考:图论之Prim算法

嗯。通过我们前面的学习&#xff0c;我们知道了&#xff0c;一个具有n个顶点的连通图&#xff0c;它的生成树包括n-1个边&#xff0c;如果边多一条就会变成图&#xff0c;少一条就不连通了 接下来我们来学一下把图变成生成树的一个算法 Prim算法&#xff0c;我们从任意一个结…...

Linux 文件操作-标准IO函数3- fread读取、fwrite写入、 fprintf向文件写入格式化数据、fscanf逐行读取格式化数据的验证

目录 1. fread 从文件中读取数据 1.1 读取次数 每次读取字节数 < 原内容字节数 1.2 读取次数 每次读取字节数 > 原内容字节数 2.fwrite 向文件中写入数据 2.1写入字符串验证 2.2写入结构体验证 3. fprintf 将数据写入到指定文件 4. fscanf 从文件中逐行读取内容…...

汽车一键启动系统使用方便,舒适出行,轻松匹配

汽车一键启动系统 系统定义 移动管家汽车一键启动系统是装置在智能汽车上的一部分&#xff0c;是实现简约打火和熄火过程的一个按钮装置。它可以在原车钥匙锁头的位置改装&#xff0c;也能独立面板改装&#xff0c;现在很多高低配置的车辆都可安装。 功能特点 基本功能 启…...