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

优化MySQL性能:主从复制与读写分离实践指南

目录

一、知识介绍

1.MySQL主从复制原理

2.MySQL读写分离原理

二、资源清单

三、案例实施

1.修改主机名

2.搭建MySQL主从复制

3.搭建MySQL读写分离


一、知识介绍

1.MySQL主从复制原理

  • MySQL支持的复制类型
    • 基于语句的复制
    • 基于行的复制
    • 混合模型复制
  • 工作过程
    • 主(master)数据库启动bin二进制日志,这样会有一个Dump线程,这个线程是把主(master)数据库的写入操作都会记录到这个bin的二进制文件中。

    • 然后从(slave)数据库会启动一个I/O线程(监控主服务器的二进制日志的变化),这个线程主要是把主(master)数据库的bin二进制文件读取到本地,并写入到中继日志(Relay log)文件中。

    • 最后从(slave)数据库其他SQL线程,把中继日志(Relay log)文件中的事件再执行一遍,更新从(slave)数据库的数据,保持主从数据一致,重新写入数据库

2.MySQL读写分离原理

  • 分类
    • 基于程序代码内部实现
      • 根据select、insert进行路由分配,在目前生产环境应用广泛。
      • 优点:性能较好,不需要增加额外的设备作为硬件开支
      • 缺点:需要开发人员来实现,运维人员无从下手
    • 基于中间代理层实现
      • 位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后数据
      • 代表性程序:
        • MySQL-Proxy:为MySQL开源项目,通过自带的lua脚本进行SQL判断
        • Amoeba:该程序由Java语言进行开发,用于生成环境,不支持事务和存储过程
        • MyCAT是一款开源的分布式关系型数据库中间件,主要用于解决大规模数据存储和高效查询的需求。它支持分布式SQL查询,兼容MySQL通信协议,能够通过数据分片提高数据查询处理能力。
  • 工作过程
    • 读写分离就是只在主服务器上写,只在从服务器上读

    • 基本原理是让主数据库处理事务性查询(select,update,insert),而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。

二、资源清单

主机

操作系统

IP地址

应用

Master

openEuler 24.03

192.168.16.142

Mysql-server

Slave1

openEuler 24.03

192.168.16.143

Mysql-server

Slave2

openEuler 24.03

192.168.16.144

Mysql-server

Mycat

openEuler 24.03

192.168.16.145

Mycat2

客户端

openEuler 24.03

192.168.16.146

mysql

三、案例实施

1.修改主机名

hostnamectl set-hostname Master
hostnamectl set-hostname Slave1
hostnamectl set-hostname Slave2
hostnamectl set-hostname mycat

2.搭建MySQL主从复制

        1.安装MySQL数据库(Master、Slave1、Slave2)

dnf install -y tartar zxf autoinstall-mysql.tar.gzcd autoinstall-mysql
./start.sh
cd
source /etc/profile
mysql -uroot -p'临时密码'
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql -uroot -p123456

        2.配置Master主服务器(Master上)

  • 在/etc/my.cnf中修改或增加以下内容

    vi /etc/my.cnf[mysqld]
    log-bin=master-bin    #启用二进制日志并指定其存储路径
    binlog_format = MIXED    #定义二进制日志的记录格式为混合模式
    server-id=1    #为mysql实例分配一个唯一的服务器标识符
  • 重启MySQL服务

    systemctl restart mysqld
    ls /usr/local/mysql/data/
  • 登录MySQL程序,给从服务器授权

    mysql -uroot -p123456#创建用户
    CREATE USER 'myslave'@'%' IDENTIFIED BY '123456';
    #授权同步给所有用户
    GRANT REPLICATION SLAVE ON  *.* TO 'myslave'@'%';
    #修改密码
    ALTER USER 'myslave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    #刷新配置
    FLUSH PRIVILEGES;
    #查看状态 
    show master status;
    +--------------------+----------+--------------+------------------+-------------------+
    | File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +--------------------+----------+--------------+------------------+-------------------+
    | master-bin.000001 |     1148 |              |                  |                   |
    +--------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

        3.配置Slave从服务器(Slave1、Slave2)

  • 在/etc/my.cnf中修改或增加以下内容(注:server-id不能相同)
    • Slave1
      vi /etc/my.cnf[mysqld]
      log-bin=slave1-bin    #启用二进制日志并指定其存储路径
      binlog_format = MIXED    #定义二进制日志的记录格式为混合模式
      server-id=2    #为mysql实例分配一个唯一的服务器标识符systemctl restart mysqld
      ls /usr/local/mysql/data/
    • Slave2
      vi /etc/my.cnf[mysqld]
      log-bin=slave2-bin    #启用二进制日志并指定其存储路径
      binlog_format = MIXED    #定义二进制日志的记录格式为混合模式
      server-id=3    #为mysql实例分配一个唯一的服务器标识符systemctl restart mysqld
      ls /usr/local/mysql/data/
  • 登录MySQL,配置并启动同步
    • Slave1
      mysql -uroot -p123456
      #连接主节点
      change master to master_host='192.168.16.142',master_user='myslave', master_password='123456',master_log_file='master-bin.000001',master_log_pos=1148;
      #开启同步
      start slave;
      #查看状态
      show slave status\G#查看出来显示#            Slave_IO_Running: Yes#           Slave_SQL_Running: Yes
    • Slave2
      mysql -uroot -p123456
      #连接主节点
      change master to master_host='192.168.16.142',master_user='myslave', master_password='123456',master_log_file='master-bin.000001',master_log_pos=1148;
      #开启同步
      start slave;
      #查看状态
      show slave status\G#查看出来显示#            Slave_IO_Running: Yes#           Slave_SQL_Running: Yes

        4.验证主从复制效果

  • 在主服务器上新建db_test数据库(Master上)

    create database db_test;
  • 在两台从服务器上分别查看数据库(Slave1、Slave2)

    show databases;

3.搭建MySQL读写分离

  1.安装Mycat2(Mycat上)
dnf -y install jdk-8u171-linux-x64.rpm
 2.安装并配置mycat软件(Mycat上)
  • 解压软件包到/usr/local/,并重命名为”mycat“
    unzip mycat2-install-template-1.20.zip -d /usr/local
    ls /usr/local/mycat
  • 把依赖包复制到指定目录
    cp mycat2-1.21-release-jar-with-dependencies.jar mysql-connector-java-8.0.18.jar /usr/local/mycat/lib
  • 为Mycat命令添加执行权限
    chmod -R +x /usr/local/mycat/bin
  • 添加环境变量
    echo 'export PATH=$PATH:/usr/local/mycat/bin' >>/etc/profile 
    source /etc/profile
  • 验证安装正确性
    mycat -h
 3.配置Mycat读写分离
  • 创建Mycat2工作所需要的账号(Master上)
    mysql -uroot -p123456create user 'mycat'@'%' identified by 'pwd123';
    grant all on *.* to 'mycat'@'%';
    ALTER USER 'mycat'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd123';
    flush privileges;
  • 调整Mycat配置文件(Mycat上)
    vi /usr/local/mycat/conf/datasources/prototypeDs.datasource.json{"dbType":"mysql","idleTimeout":60000,"initSqls":[],"initSqlsGetConnection":true,"instanceType":"READ_WRITE","maxCon":1000,"maxConnectTimeout":3000,"maxRetryCount":5,"minCon":1,"name":"prototypeDs","password":"pwd123","type":"JDBC","url":"jdbc:mysql://192.168.16.142:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8","user":"mycat","weight":0
    }

  • 启动Mycat服务(Master上)
    mycat start
    ss -tnl | grep 8066
    cat /usr/local/mycat/conf/users/root.user.json
  • Mycat配置读写分离
    • 验证连接(Slave2上)
      mysql -uroot -p123456 -P8066 -h192.168.16.145
    • Mycat增加数据源(Slave2上)
      • 增加主库master
        /*+ mycat:createDataSource{ "name":"master","url":"jdbc:mysql://192.168.16.142:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","instanceType":"WRITE","user":"mycat","password":"pwd123"} */;
      • 增加从库slave1和slave2
        #增加slave1
        /*+ mycat:createDataSource{ "name":"slave1","url":"jdbc:mysql://192.168.16.143:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","instanceType":"READ","user":"mycat","password":"pwd123"} */;
        #增加slave2
        /*+ mycat:createDataSource{ "name":"slave2","url":"jdbc:mysql://192.168.16.144:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","instanceType":"READ","user":"mycat","password":"pwd123"} */;
      • 查看数据源信息
        /*+ mycat:showDataSources{} */\G#如果配置有误可使用重置:/*+ mycat:resetConfig{} */; 
    • 创建Mycat集群
      • 创建Mycat集群的SQL语句(Slave2上)
        /*! mycat:createCluster{"name":"cls01","masters":["master"],"replicas":["slave1","slave2"]} */;
      • 查看并修改集群配置(Mycat上)
        vi /usr/local/mycat/conf/clusters/cls01.cluster.json"readBalanceType":"BALANCE_ALL_READ","balance": 1,

      • 修改负载均衡给策略为轮询(Mycat上)
        vi /usr/local/mycat/conf/server.jsonBalanceRoundRobin

      • 重启Mycat服务(Mycat上)
        mycat restart
4.验证Mycat读写分离
  • 登录mycat集群,创建测试库(客户端上)
    dnf -y install mariadb
    mysql -uroot -p123456 -P8066 -h192.168.16.145create database kgc;
  • 修改配置文件(mycat上)
    cd /usr/local/mycat/conf/schemas
    vi kgc.schema.json 
    #添加 "targetName":"cls01",{"customTables":{},"globalTables":{},"normalProcedures":{},"normalTables":{},"schemaName":"kgc","targetName":"cls01","shardingTables":{},"views":{}
    }#重启服务
    mycat restart
    ss -tnl | grep 8066
  • 登录mycat集群,创建测试表(客户端上)
    
    mysql -uroot -p123456 -P8066 -h192.168.16.145use kgc;
    create table kcs74(id int);
  • 在master和slave1、slave2创建测试数据
    • master上
      mysql -uroot -p123456 use kgc;
      insert into kcs74 values(1);
    • slave1上
      mysql -uroot -p123456 use kgc;
      insert into kcs74 values(2);
    • slave2上
      mysql -uroot -p123456use kgc;
      insert into kcs74 values(3);
  • 测试读操作(客户端上)
    mysql -uroot -p123456 -P8066 -h192.168.16.145select * from kgc.kcs74;
  • 测试写操作(客户端上)
    mysql -uroot -p123456 -P8066 -h192.168.16.145
    use kgc;
    insert into kcs74 values(6);
  • 测试(Master、Slave1、Slave2上)
    mysql -uroot -p123456use kgc;
    select * from kgc.kcs74;

相关文章:

优化MySQL性能:主从复制与读写分离实践指南

目录 一、知识介绍 1.MySQL主从复制原理 2.MySQL读写分离原理 二、资源清单 三、案例实施 1.修改主机名 2.搭建MySQL主从复制 3.搭建MySQL读写分离 一、知识介绍 1.MySQL主从复制原理 MySQL支持的复制类型 基于语句的复制基于行的复制混合模型复制 工作过程 主&#…...

Foupk3systemX5OS系统产品设备

Foupk3systemX5OS TXW8(基于Foupk3systemX5OS系统19.62正式版开发的智能移动设备由Foupk3systemX5OS系统与FOUPK3云服务平台共同自主研发) Foupk3systemX5OS TX6(Foupk3systemX5OS TX6基于Foupk3systemX5OS系统19.60正式版开发的智能平板设备…...

【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin

一、跨域(CORS)是什么? 跨域,指的是浏览器出于安全限制,前端页面在访问不同源(协议、域名、端口任一不同)的后端接口时,会被浏览器拦截。 比如: 前端地址后端接口地址是…...

关于 【Spring Boot Configuration Annotation Processor 未配置问题】 的详细分析、解决方案及代码示例

以下是关于 Spring Boot Configuration Annotation Processor 未配置问题 的详细分析、解决方案及代码示例: 1. 问题描述 当使用 Spring Boot 的配置注解(如 ConfigurationProperties、Value、ConditionalOnProperty 等)时,若未…...

MySQL 的ANALYZE与 OPTIMIZE命令

MySQL 的ANALYZE与 OPTIMIZE命令 一、ANALYZE TABLE - 更新统计信息 1. 基本语法与功能 ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...作用:收集表统计信息用于优化器生成更优的执行计划,主要更新: 索引基数&am…...

【机器学习】人工智能在电力电子领域的应用

摘要: 本文概述了电力电子系统的人工智能 (AI) 应用。设计、控制和维护这三个独特的生命周期阶段与人工智能要解决的一项或多项任务相关,包括优化、分类、回归和数据结构探索。讨论了专家系统、模糊逻辑、元启发法和机器学习四类人工智能的应用。我们对…...

InferType和_checked_type的区别?

在 TVM 的 Relay IR 中,relay.frontend.common.infer_shape(node) 和 node.checked_type.shape 都与**形状(Shape)**信息相关,但它们的用途、实现机制和性能特点有显著区别。以下是详细对比: 1. 功能区别 特性node.ch…...

Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理

Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理 目录 Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理 一、简单介绍 二、Android 端唤起 Flutter …...

vue3 css模拟语音通话不同语音、正在加载等的效果

实现效果如下&#xff1a; 在不同的时间&#xff0c;显示不一样的效果&#xff08;大小是一样的&#xff0c;截图时尺寸发生了变化&#xff09; 具体实现代码如下&#xff1a; <script setup> import {ref} from "vue";const max_hight ref(40px) const min…...

【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第1篇&#xff0c;对应原…...

[Agent]AI Agent入门02——ReAct 基本理论与实战

ReAct介绍 ReAct&#xff08;Reasoning and Acting&#xff09;是一种通过协同推理&#xff08;Reasoning&#xff09;与行动&#xff08;Acting&#xff09;提升大语言模型&#xff08;LLM&#xff09;任务解决能力的技术。其核心思想是在解决复杂问题时交替生成推理和动作&a…...

uniapp自定义头部(兼容微信小程序(胶囊和状态栏),兼容h5)

很早之前就写过自定义头部&#xff0c;但是那时偷懒写死了&#xff0c;现在用插槽重新写了个 有两种形式&#xff1a; type1是完全自定义的&#xff0c;可以自己去组件改也可以用插槽改 type2是正常的返回标题和右边按钮&#xff0c;使用就是 title"标题" rightClic…...

mybatis的xml ${item}总是更新失败

场景 代码如下 void updateStatus(Param("deviceSerialIdCollection") Collection<String> deviceSerialIdCollection, Param("status") Integer status);<update id"updateStatus">UPDATE gb_monitor SET online#{status} WHERE d…...

数据库- JDBC

标题目录 JDBC基本概念JDBC 接口JDBC 工作原理 JDBC APIJDBC工作过程Driver 接口及驱动加载Connection 接口Statemen 接口ResultSet 接口PreparedStatement 接口 JDBC 基本概念 Java Database Connectivity&#xff1a;java访问数据库的解决方案希望用相同的方式访问不同的数…...

[26] cuda 应用之 nppi 实现图像格式转换

[26] cuda 应用之 nppi 实现图像格式转换 讲述 nppi 接口定义通过nppi实现 bayer 格式转rgb格式官网参考信息:http://gwmodel.whu.edu.cn/docs/CUDA/npp/group__image__color__debayer.html#details1. 接口定义 官网关于转换的原理是这么写的: Grayscale Color Filter Array …...

MYSQL-OCP官方课程学习截图

第一节 介绍...

医院信息管理系统全解析

目录 一、医院信息管理系统是什么 1. 概念阐释 2. 核心功能概述 二、医院信息管理系统的种类 1. 医院信息系统&#xff08;HIS&#xff09; 2. 电子病历系统&#xff08;EMR&#xff09; 3. 实验室信息管理系统&#xff08;LIS&#xff09; 三、医院信息管理系统的实际…...

模型上下文协议(MCP):技术解析与生态发展

一、概念与目标 模型上下文协议&#xff08;Model Context Protocol&#xff0c;MCP&#xff09;是由Anthropic于2024年11月推出的开源协议&#xff0c;旨在为大语言模型&#xff08;LLM&#xff09;与外部工具、数据源提供标准化的双向通信框架。其核心目标是打破数据孤岛&am…...

laravel中layui的table翻页不起作用问题的解决

本地测试是好的&#xff0c;部署的时候就发现&#xff0c;翻页不起作用了。但lay_num序号是可以变化的&#xff0c;查看api接口传递的数据&#xff0c;发现数据没有变化&#xff0c;加上page2等翻页&#xff0c;也是不起作用&#xff0c;看来是url参数返回给后台&#xff0c;后…...

python上测试neo4j库

安装完了neo4j库后&#xff0c;如何使用。用python来小试牛刀 1.从其他博客上找来demo #coding:utf-8 from py2neo import Graph,Node,Relationship##连接neo4j数据库&#xff0c;输入地址、用户名、密码 graph Graph(bolt://xx.xx.xx.xx:7687,userneo4j,passwordneo4j1234)…...

云原生周刊:Kubernetes v1.33 正式发布

开源项目推荐 Robusta Robusta 是一个开源的 K8s 可观测性与自动化平台&#xff0c;旨在增强 Prometheus 告警的智能化处理能力。它通过规则和 AI 技术对告警进行丰富化处理&#xff0c;自动附加相关的 Pod 日志、图表和可能的修复建议&#xff0c;支持智能分组、自动修复和高…...

网络安全入门综述

引言 在数字化时代&#xff0c;网络安全&#xff08;Cybersecurity&#xff09;已成为保护个人、企业和政府机构免受数字威胁的关键领域。随着互联网的普及、云计算的兴起以及物联网&#xff08;IoT&#xff09;设备的激增&#xff0c;网络攻击的频率和复杂性不断增加。从数据…...

LLaMA-Factory部署以及大模型的训练(细节+新手向)

LLaMA-Factory 经过一段时间的探索&#xff0c;从手动编写训练代码到寻求框架辅助训练&#xff0c;遇到了各种各样的问题。前面我介绍了dify的部署&#xff0c;但是并没有详细介绍使用方式&#xff0c;是因为我在尝试利用dify的时候碰到了很多困难&#xff0c;总结下来首先就是…...

ASP.NET MVC​ 入门指南四

21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束&#xff0c;你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如&#xff0c;创建一个只允许特定年份的路由约束&#xff1a; csharp public class YearRouteCo…...

rabbitmq-集群部署

场景&#xff1a;单个pod&#xff0c;部署在主节点&#xff0c;基础版没有插件&#xff0c;进阶版多了一个插件 基础版本&#xff1a; --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…...

明远智睿SSD2351开发板:开启工业控制新征程

在工业控制领域&#xff0c;对开发板的性能、稳定性和扩展性有着极高的要求。明远智睿的SSD2351开发板凭借其卓越的特性&#xff0c;为工业控制带来了全新的解决方案。 SSD2351开发板搭载四核1.4GHz处理器&#xff0c;强大的运算能力使其在处理工业控制中的复杂任务时游刃有余。…...

RISCV学习(5)GD32VF103 MCU架构了解

RISCV学习&#xff08;5&#xff09;GD32VF103 MCU架构了解 1、芯片内核功能简介 GD32VF103 MCU架构&#xff0c;采用Bumblebee内核&#xff0c;芯来科技&#xff08;Nuclei System Technology&#xff09;与台湾晶心科技&#xff08;Andes Technology&#xff09;联合开发&am…...

IDEA2022.3开启热部署

1、开启IDEA的自动编译 1.1 具体步骤&#xff1a;打开顶部工具栏 File -> Settings -> Build,Execution,Deployment -> Compiler 然后勾选 Build project automatically 。 1.2 打开顶部工具栏 File -> Settings -> Advanced Settings -> Compiler -> 然…...

《算法吞噬幻想乡:GPT-4o引发的艺术平权运动与版权核爆》

一、引言&#xff1a;现象级AI艺术事件的社会回响 GPT - 4o吉卜力风格刷屏现象 在当今数字化浪潮中&#xff0c;GPT - 4o吉卜力风格的作品在网络上掀起了一阵刷屏热潮。吉卜力工作室以其独特的水彩质感、奇幻氛围和孤独美学&#xff0c;在全球范围内拥有大量粉丝。而GPT - 4o强…...

yolov5 源码 +jupyter notebook 笔记 kaggle

YOLOv5 | Kaggle 直接用的githuab的源码&#xff0c;git clone 后output才有文件 直接gitclone他的源码用Vscode看 好久没见过16g了 怎么这么便宜 https://gadgetversus.com/graphics-card/nvidia-tesla-p100-pcie-16gb-vs-nvidia-geforce-rtx-4060/#google_vignette 好的&am…...

聊天室系统:多任务版TCP服务端程序开发详细代码解释

1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端&#xff0c;如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢? 完成多任务&#xff0c;可以使用线程&#xff0c;比进程更加节省内存资源。 2. 具体实现步骤 编写一个TCP服务端程序&#xff0c;循环等…...

Python(15)迭代器和生成器

在 Python 编程领域中&#xff0c;迭代器和生成器是两个强大且独特的概念&#xff0c;它们为处理数据序列提供了高效且灵活的方式。这篇博客将结合菜鸟教程内容&#xff0c;通过丰富的代码示例&#xff0c;深入学习 Python3 中的迭代器与生成器知识&#xff0c;方便日后复习回顾…...

无刷空心杯电机及机器人灵巧手的技术解析与发展趋势

一、无刷空心杯电机结构与技术解析 1. 核心结构设计 无刷空心杯电机的核心设计突破在于无铁芯转子与电子换向系统的结合。其结构由以下关键部分构成: 定子组件:采用印刷电路板(PCB)或柔性电路板(FPC)作为绕组载体,通过三维绕线技术形成空心杯状绕组,彻底消除齿槽效应…...

如何修复卡在恢复模式下的 iPhone:简短指南

Apple 建议使用恢复模式作为最后的手段&#xff0c;以便在 iPhone 启动循环或显示 Apple 标志时恢复 iPhone。这是解决持续问题的简单方法&#xff0c;但您很少使用。但是&#xff0c;当您的 iPhone 卡住恢复模式本身时&#xff0c;您会怎么做&#xff1f;虽然 iPhone 卡在这种…...

蒋新松:中国机器人之父

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 蒋新松&#xff1a;中国机器人之父 一、生平简介 1. 早年经历与求学道路 蒋新松出生…...

[Windows] MousePlus 5.5.9

[Windows] MousePlus 链接&#xff1a;https://pan.xunlei.com/s/VOOwKJ281kDaZV5_MpP1COd_A1?pwdn69c# MousePlus是一款轻便小巧的鼠标右键增强工具&#xff0c;使用鼠标右键拖动即可唤醒鼠标轮盘&#xff0c;这个功能界面和quicker的轮盘软件界面一样&#xff0c;操作逻辑…...

BT131-ASEMI无人机专用功率器件BT131

编辑&#xff1a;ll BT131-ASEMI无人机专用功率器件BT131 型号&#xff1a;BT131 品牌&#xff1a;ASEMI 封装&#xff1a;TO-92 批号&#xff1a;最新 引脚数量&#xff1a;3 特性&#xff1a;双向可控硅 工作温度&#xff1a;-40℃~150℃ 在智能化浪潮中&#xff0c…...

ETL架构、数据建模及性能优化实践

ETL&#xff08;Extract, Transform, Load&#xff09;和数据建模是构建高性能数据仓库的核心环节。下面从架构设计、详细设计、数据建模方法和最佳实践等方面系统阐述如何优化性能。 一、ETL架构设计优化 1. 分层架构设计 核心分层&#xff1a; 数据源层&#xff1a;对接O…...

30分钟上架鸿蒙原生应用,即时通信IM UI组件库全面适配HarmonyOS 原

自去年 10 月 8 日鸿蒙5开启公测以来&#xff0c;鸿蒙操作系统不断迭代&#xff0c;生态趋向稳健。当前&#xff0c;支持HarmonyOS操作系统的设备数量已超过 10 亿&#xff0c;上架HarmonyOS 5 应用市场的鸿蒙原生应用和元服务已超过2万个。这无疑为广大开发者提供了丰富的应用…...

【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】

虚幻5蓝图Editor Utility Widget 一、基础框架搭建背景&#xff1a;1. 创建Editor Utility Widget2.根控件选择窗口3.界面功能定位与阶段4.查看继承树5.目标效果 二、模块化设计流程1.材质替换核心流程&#xff1a;2.完整代码如下 三、可视化界面UI布局1. 添加标题栏2. 构建滚动…...

机器学习第三篇 模型评估(交叉验证)

Sklearn:可以做数据预处理、分类、回归、聚类&#xff0c;不能做神经网络。原始的工具包文档&#xff1a;scikit-learn: machine learning in Python — scikit-learn 1.6.1 documentation数据集:使用的是MNIST手写数字识别技术&#xff0c;大小为70000&#xff0c;数据类型为7…...

php数据库连接

前言 最近在学习php&#xff0c;刚好学习到了php连接数据库记录一下 总结 //1、与mysql建立连接$conn mysql_connect("127.0.0.1","root","root");//设置编码mysql_set_charset(utf8);//2、选择要操作的数据库mysql_select_db("xuesheng…...

Android Studio学习记录1

Android Studio打包APK 本文为个人学习记录&#xff0c;仅供参考&#xff0c;如有错误请指出。本文主要记录在Android Studio中开发时遇到的问题和回答。 随着学习的深入&#xff0c;项目完成并通过测试之后免不了需要进入打包环节。这篇文章主要记录一下尝试打包APK的过程。我…...

【JAVA ee初阶】多线程(3)

一、出现线程安全的原因 1.【根本原因】线程的调度执行时随机的&#xff08;抢占式执行&#xff09;->罪魁祸首 2.多个线程同时修改同一个变量 如果是一个线程修改一个变量 或者 多个线程读取同一个变量 或者 多个线程修改不同变量 这些都没事。 3.修改操作不是原子的&a…...

【Java ee初阶】多线程(4)

一、java是怎么做到可重入的 java中&#xff0c;通过synchronized进行加锁&#xff0c;指定一个&#xff08;&#xff09;包含了一个锁对象。&#xff08;锁对象本身是一个啥样的对象&#xff0c;这并不重要&#xff0c;重点关注锁对象是不是同一个对象&#xff09; 后面搭配…...

Day15(贪心算法)——LeetCode121.买卖股票的最佳时机55.跳跃游戏

1 LeetCode121.买卖股票的最佳时机(LeetCode121) 1.1 题目描述 题目描述如下:   示例如下&#xff1a; 1.2 问题分析及解决 要求最大利润&#xff0c;即当天与之前天的价格之差最大值。因此我们可以遍历数组&#xff0c;记录下当前遇到的最小值&#xff0c;然后用当天的价…...

2025汽车制造企业数字化转型路径参考

以应用场景作为切入点&#xff0c;引导相关企业推进数字化深度转型和规模化改造&#xff0c;是目前实践探索出来的一条可行路径。 汽车制造行业是相对集聚的制造业领域&#xff0c;通过搭建“转型场景图谱——转型通用工具——转型路径指引”分析框架&#xff0c;聚焦需求侧共…...

雷池WAF的身份认证 - GitHub

雷池支持通过 GitHub 认证的方式&#xff0c;让用户使用 GitHub 身份安全登录应用或网站。使用此功能需要 GitHub 账号 。 第一步&#xff1a;在 GitHub 创建一个 OAuth 应用 可参阅 GitHub 官方文档&#xff0c;创建一个 GitHub OAuth 应用&#xff0c;并获取应用的 ClientI…...

【Linux】第十二章 安装和更新软件包

目录 1. 什么是RPM&#xff1f; 2. dnf是什么&#xff0c;它和rpm有什么联系和区别&#xff1f; 3. RHEL 中如何做才能启用对第三方存储库的支持&#xff1f; 4. 怎么理解RHEL9中的应用流(Application Streams)和模块(Modules)&#xff1f; 5. RHEL9 有两个必要的软件存储…...

【权限模型】RBAC模型详解

大家好&#xff0c;我是jstart千语。今天给大家介绍一下鉴权模型RBAC&#xff0c;传统的鉴权模式就是基于用户和权限之间的多对多关系。而RBAC就更加的精准&#xff0c;更好管理。 RBAC介绍 RBAC&#xff08;Role-Based Access Control&#xff09;是一种通过角色&#xff08;…...