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

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者: reAsOn2010 原文来源: https://tidb.net/blog/612103f3

背景

使用 TiDB 作为我们的全量数据库已经有六七年了,当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的,所以从那个时候开始就有每年的例行升级运维。

而每年暑假都是我们业务的低谷时间,自然选择在7月底8月初左右进行这次的升级。

事实上 TiDB 6.5 在使用上已经相当稳定了,当然我们仍然选择了更新的 LTS 作为这次的升级目标。

官方这次的升级互助活动提供的升级方案基本上都是使用 TiUP 进行的,而我们的 TiDB 集群已经全部纳入 K8S 管理,所以我们这次的升级是通过 TiDB Operator 进行。 升级时间 2024.07.29

升级流程

准备工作

感谢表妹在群里分享的 TiDB 参数变更,一路升级上来除了有一次重建了新集群,其他时候都没有特别去调整参数配置。升级前已经是 6.5 了,所以直接应用一下推荐值,排查发现有2个参数需要变更。

这边整理版本升级到v6.x以上的一些系统变量和配置项默认值改变一些参数,一般情况在升级后可以直接设置,建议排查下刚升级的集群

set global tidb_server_memory_limit="80%"; --该参数请根据实际情况调整

set global tidb_enable_rate_limit_action=false;

set global tidb_enable_paging=ON;

set global tidb_enable_pseudo_for_outdated_stats=OFF;

set global tidb_enable_outer_join_reorder=ON;

set global tidb_stats_load_sync_wait=100;

set global tidb_stats_load_pseudo_timeout=ON;

set global tidb_enable_index_merge=ON;

set global tidb_prepared_plan_cache_size = 50;

TiDB Server 实例内存阈值 <= 64 GiB 时,tidb_prepared_plan_cache_size = 50

TiDB Server 实例内存阈值 > 64 GiB 时,tidb_prepared_plan_cache_size = 100

tidb_ddl_enable_fast_reorg 从 v6.3.0 版本开始引入6.5默认值为on,如需正确使用但需要正确配置temp-dir,如使用该功能可以关闭

set global tidb_ddl_enable_fast_reorg = off;

然后查一下对应的版本,集群将要升级到 7.5,查询官方文档可知 TiDB Operator 的版本推荐为 1.5。所以我们将要升级到 v1.5.3

正式开始

升级 TiDB Operator

先更新 CRD

kubectl replace -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.3/manifests/crd.yaml

我们使用 kustomize 来管理所有 K8S 上的资源,所以升级比较简单,更新掉版本号就好。

diff --git a/tidb-admin/tidb-operator/base/kustomization.yaml b/tidb-admin/tidb-operator/base/kustomization.yaml
index bc77f9d7f..824d79d11 100644
--- a/tidb-admin/tidb-operator/base/kustomization.yaml
+++ b/tidb-admin/tidb-operator/base/kustomization.yaml
@@ -1,19 +1,19 @@namespace: tidb-adminresources: []# - https://raw.githubusercontent.com/pingcap/tidb-operator/v1.4.4/manifests/crd.yamlhelmCharts:- name: tidb-operator
-    version: v1.4.7
+    version: v1.5.3valuesInline:scheduler:create: falsetimezone: "Asia/Shanghai"controllerManager:resources:requests:cpu: 10mmemory: 128Milimits:memory: 128Mirepo: https://charts.pingcap.org/releaseName: tidb-operator

等待新实例启动,观察日志出现类似如下的信息,代表已经完成。理论上升级 TiDB Operator 不会引起 TiDB 本身的更新,兼容性没问题的话,会直接进入 ready 的状态。

I0815 16:12:13.182073 1 tidbcluster_control.go:71] TidbCluster: [ops/bigdata] updated successfully
I0815 16:12:43.204827 1 tidbcluster_control.go:71] TidbCluster: [ops/bigdata] updated successfully

升级 TiDB

更新 CRD 里的 version 参数即可。 同样我们的 CRD 也是用 kustomize 管理的,所以更新版本号

diff --git a/ops/tidb/overlays/prod/tidb.yaml b/ops/tidb/overlays/prod/tidb.yaml
index ac8269805..1d8761a96 100644
--- a/ops/tidb/overlays/prod/tidb.yaml
+++ b/ops/tidb/overlays/prod/tidb.yaml
@@ -10,7 +10,7 @@ spec:######################### TiDB cluster version
-  version: "v6.5.7"
+  version: "v7.5.2"## Time zone of TiDB cluster Podstimezone: Asia/Shanghai

应用后,TiDB Operator 就会马上开始滚动升级,PD → TiKV → TiDB → TiCDC。我们线上是一个最小高可用规模的集群,大概花费半个小时左右的事件就能滚动升级完毕,消耗时间较长的是 TiKV 和 TiCDC,过程中需要迁移 leader 以保证尽可能的平滑,需要等待一些时间。

建议通过观察 TiDB Operator 日志来确定是否升级完毕

升级 DM

我们通过一组 DM 同步 MySQL 数据到 TiDB 当中,升级完 TiDB 后配套升级 DM。

同样是更新 CRD 里的 version 参数

diff --git a/ops/tidb-dm/overlays/prod/dm.yaml b/ops/tidb-dm/overlays/prod/dm.yaml
index dddfe1f55..a0802b168 100644
--- a/ops/tidb-dm/overlays/prod/dm.yaml
+++ b/ops/tidb-dm/overlays/prod/dm.yaml
@@ -3,7 +3,7 @@ kind: DMClustermetadata:name: bigdataspec:
-  version: v6.5.7
+  version: v7.5.2configUpdateStrategy: RollingUpdatepvReclaimPolicy: Deletediscovery:

DM 的升级过程相当快,基本上都可以看作是无状态的服务,重启了就好了。

建议通过观察 TiDB Operator 日志来确定是否升级完毕

升级 TiDB Monitor

更新 TiDB monitor 的版本号。

diff --git a/ops/tidb-monitor/overlays/prod/monitor.yaml b/ops/tidb-monitor/overlays/prod/monitor.yaml
index d9c19bfea..f7fb4ba38 100644
--- a/ops/tidb-monitor/overlays/prod/monitor.yaml
+++ b/ops/tidb-monitor/overlays/prod/monitor.yaml
@@ -10,7 +10,7 @@ spec:- name: bigdatainitializer:baseImage: ccr.ccs.tencentyun.com/patest/tidb-monitor-initializer
-      version: v6.5.7
+      version: v7.5.2alertmanagerURL: alertmanager.ops:9093kubePrometheusURL: http://k8s-prometheus.ops:9090thanos:
@@ -22,7 +22,7 @@ spec:name: thanos-configrequests:cpu: 10m
-      memory: 32Mi
+      memory: 64Miversion: v0.31.0grafana:baseImage: grafana/grafana
@@ -45,7 +45,7 @@ spec:version: v2.45.0initializer:baseImage: ccr.ccs.tencentyun.com/patest/tidb-monitor-initializer
-    version: v6.5.7
+    version: v7.5.2reloader:baseImage: pingcap/tidb-monitor-reloaderlimits:

可能是因为升级之后监控指标变多了, 以前开的非常小的 Thanos sidecar 内存不够用了。

可以看到我们的 initializer baseImage 用的是我们自己打包的镜像,原因是我们希望 DM 和 TiDB 的指标用同一组 Prometheus + Grafana,而官方的 initializer 每次执行时似乎会清理掉原有的配置,所以对镜像里的脚本做了一些简单的魔改,注释掉了清理逻辑。(不知道将来官方是否可以考虑通过参数支持这个需求)

升级完毕后遇到的问题

升级完后整体上业务都没有特别的感知,但有一个我们的业务在重启后出现了无法启动的问题。

  • 业务为 Spring Boot 应用,没有使用 Hibernate 作为数据库的 ORM 库,而是使用的 JetBrains Exposed 框架。
  • 这个框架在进行初始化时会尝试通过访问 INFORMATION_SCHEMA 的一些系统表来验证业务内表名及字段的合法性
  • 升级前后 TiDB 上报的 MySQL 版本发生了变化,从 5.7.x → 8.x
  • JetBrains Exposed 发现是 MySQL 8,尝试访问 INFORMATION_SCHEMA.KEYWORDS
  • TiDB v7.5.2 暂时还不支持这张表

当时也在社区里查了一下这个问题,发现类似情况 https://asktug.com/t/topic/1018669 ,最后选择改 TiDB 参数而不去动业务了

diff --git a/ops/tidb/overlays/prod/tidb.yaml b/ops/tidb/overlays/prod/tidb.yaml
index 1d8761a96..bcdfcefdd 100644
--- a/ops/tidb/overlays/prod/tidb.yaml
+++ b/ops/tidb/overlays/prod/tidb.yaml
@@ -364,6 +364,8 @@ spec:## tidb-server Configuration## Ref: https://docs.pingcap.com/tidb/stable/tidb-configuration-fileconfig: |
+      server-version = "5.7.44-TiDB-v7.5.2"
+[log][log.file]max-backups = 3

使用 TiDB Operator 时,修改运行参数也很方便,只要直接在 CRD 对应字段里加上,等着滚动升级即可。配置完后问题即得到解决。

总结

升级后遇到的兼容性问题刚好在 TiDB v7.5.3 获得了修复,后续计划再进行一次升级,同时把手动更改的参数恢复到默认值。时间不巧,刚好没赶上。

升级完毕后,整体感觉集群运行更为稳定了。虽然遇到了 MySQL 8 的兼容性问题,但也可以看到 TiDB 正在努力兼容,这也为未来我们全面升级到 MySQL 8 打下了良好的基础。

升级过程可以说非常丝滑,全部升级大概只花了半天的时间 ,整个过程基本上就是看着 TiDB Operator 的日志进行操作,通过 K8S CRD 对集群的抽象配置也进一步减少了人工的介入。去年将集群全部迁移进 K8S 现在来看确实是一件非常值得的事情,一方面提高了机器资源利用率,另一方面也减轻了此后的运维压力。

后续还在升级后的集群上运行了过去的 TiSpark 任务,代码和库都没有变更,也能正常执行,应该没有产生不兼容的变化。

相关文章:

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者&#xff1a; reAsOn2010 原文来源&#xff1a; https://tidb.net/blog/612103f3 背景 使用 TiDB 作为我们的全量数据库已经有六七年了&#xff0c;当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的&#xff0c;所以从那个时候开始就有每…...

Redis的缓存穿透、击穿、雪崩

目录 缓存穿透 定义&#xff1a; 解决方法&#xff1a; 缓存击穿 定义&#xff1a; 解决方案&#xff1a; 缓存雪崩 定义&#xff1a; 解决方案&#xff1a; 缓存穿透、缓存击穿和缓存雪崩的区别 缓存穿透 定义&#xff1a; 查询一个不存在的数据&#xff0c;数据库未…...

【Django开发】前后端分离django美多商城项目第1篇:欢迎来到美多 项目主要页面介绍【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…...

【软件造价咨询】信息化项目预算评审看什么?

在信息化项目预算评审中&#xff0c;各方往往只重视预算金额部分&#xff0c;而忽视了项目建设的全局性和整体性把关&#xff0c;导致信息系统的重复建设、分散建设、业务和系统两张皮、重功能轻数据、重投资轻方案等问题频出&#xff0c;从而大幅降低财政投资效益。 例如&…...

第37讲:Cephfs文件系统的正确使用姿势

文章目录 1.Cephfs文件系统简介2.Cephfs文件系统细节介绍2.1.Cephfs文件系统多客户端隔离挂载2.2.Ceph集群中多个Cephfs如何单独使用 3.挂载多个Cephfs文件系统4.Cephfs文件系统多客户端隔离挂载实战4.1.创建一个Cephfs文件系统4.2.将Cephfs文件系统挂载到本地路径4.3.在Cephfs…...

单片机烧录

在设计芯片的时候&#xff0c;关于烧录的环节是一个不得不考虑的问题。 我们首先排除掉&#xff0c;由外部直接硬件操控FLASH 的方案&#xff0c;这个方案有很多缺点。 1、每个IC使用的FLASH型号是各不相同的&#xff0c;每种型号的FLASH的烧录命令和流程都有差别&#xff0c;这…...

mysql实现分布式锁

利用数据库的悲观锁实现分布式锁,实际应用中要考虑mysql的高可用。 DistributedLock.h #ifndef DistributedLock_H_ #define DistributedLock_H_// // DistributedLock.h: // #include "base/MySQLDriver.h" class CDistributedLock { public://// Construction/D…...

MySQL快速使用

关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表存储数据&#xff0c;格式统一方便维护&#xff1b;使用SQL语言操作&#xff0c;标准统一使用方便 通用语法&#xff1a; …...

LeetCode41.缺失的第一个正数

1. 题目大意 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 2. 思路分析 示例 1&#xff1a; 输入&#xff1a;nums [3,4,-1,1] 输出&#xff1a;2 解释&#xff1…...

ee trade:黄金投资与股票投资的区别

黄金和股票&#xff0c; 是金融市场中两种常见的投资工具&#xff0c; 它们拥有截然不同的特点和风险&#xff0c; 了解它们的差异&#xff0c; 可以帮助投资者制定更合理的投资策略。 一、 投资性质&#xff1a; 避险与成长&#xff0c; 两种投资方向 黄金&#xff1a; 被视…...

AI视频创作原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败

解决办法&#xff0c;查看node_modules所在盘&#xff0c;右击点击属性-工具&#xff0c;点击检查驱动&#xff0c;查完后修复即可&#xff0c; 就能够成功删除损坏的文件了...

Linux下编译安装-单机模式

1.1 Linux下编译安装-单机模式 1.1.1 安装 (1).把安装包放在Linux文件系统下 (2).解压缩 tar -zxf redis-4.0.2.tar.gz (3).切换到解压后的目录 cd redis-4.0.2(4).编译 make(5).进入到src目录 cd src(6).执行安装 make install(7) .返回上级目录 cd .. (8) .修改配置&…...

RSSI定位算法

文章目录 一、定位算法简介1.1. 定位技术原理1.2. 定位算法二、RSSI测距原理2.1. 建模与测量终端到基站的距离三、定位3.1. 三边定位算法3.2. 加权三边定位算法3.3. 加权三角形质心定位算法3.4. 程序定位算法的执行流程一、定位算法简介 1.1. 定位技术原理 定位终端接收到iBe…...

布局管理(Layouts)-Qt-思维导图-学习笔记

布局管理(Layouts) Qt 提供了非常丰富的布局类&#xff0c;主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理&#xff0c;可以将子部件按行或列排列。根据排列方向的不同&#xff0c;QBoxLayout 分为 QHBoxLayout&#xff08;水平布局&#xff09;和 QVBox…...

《区块链赋能游戏业:破解虚拟资产交易与确权难题》

在当今数字化的时代&#xff0c;游戏行业正以前所未有的速度发展&#xff0c;虚拟资产在游戏中的重要性日益凸显。然而&#xff0c;虚拟资产的交易和确权问题一直困扰着游戏开发者和玩家。随着区块链技术的引入&#xff0c;为解决这些问题带来了新的曙光。 首先&#xff0c;我…...

机器学习第十一章-特征选择与稀疏学习

11.1子集收集与评价 属性称为"特征" &#xff0c;对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程&#xff0c;称为"特征选择"。 特征选择是一个重要的"…...

C#中客户端直接引用服务端Proto文件

gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项&#xff0c;然后继续 到此配置完成&#xff0c;然后就和服务共用一份protocol文件...

SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器

SiLM5932SHO系列是一款单通道隔离驱动器&#xff0c;提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V&#xff0c;输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…...

本地项目上传github

一、先在github&#xff08;GitHub: Let’s build from here GitHub&#xff09;上创建仓库 1&#xff0c;登录github后&#xff0c;点击右上角头像&#xff0c;点击 Your repositories 2&#xff0c;点击new 3&#xff0c;填写仓库名&#xff0c;假设命名 testhub&#xff0…...

使用zip包来安装mysql

下载 下载地址mysql,使用5.7.23 配置环境变量 添加到系统变量中 C:\Users\Admin\Downloads\mysql-5.7.23-win32\bin 添加my.ini配置文件 在C:\Users\Admin\Downloads\mysql-5.7.23-win32目录下添加my.ini [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录 b…...

嵌入式面经篇十——驱动开发

文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么&#xff1f;2、内核程序中申请内存使用什么函数&#xff1f;3、内核程序中申请内存和应用程序时申请内存有什么区别&#xff1f;4、自旋锁和信号量在互斥使用时需要注意什么&#xff1f;在中断服务程序里面的互斥是使用…...

MySQL(四)——常用函数

文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数&#xff0c;是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数&#xff0c;我们只需在合适的场景下调用它们即可&#xff0c;调用函数查询结果直接使用SELECT即可&#xff0c;并且可以嵌套使…...

C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。

C Primer&#xff08;第5版&#xff09; 练习 17.38 练习 17.38 扩展上一题中你的程序&#xff0c;将读入的每个单词打印到它所在的行。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 #include<iostream> #include<…...

NC 丑数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 把只包含质因…...

Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)

当前各种AI项目层出不穷&#xff0c;但绝大多数都是用python写的&#xff0c;现在Spring开源了Spring AI项目&#xff0c;让Java开发者也可以轻松给自己的springboot项目集成AI能力。目前spring AI正式版本为0.8.1&#xff0c;支持接入openAI、Ollama、Azure openAI、Huggingfa…...

react中 useContext 和useReducer的使用

在React中&#xff0c;useContext 和 useReducer 是两个非常有用的Hooks&#xff0c;它们分别用于管理跨组件的状态和复杂的状态逻辑。下面将分别介绍这两个Hooks的使用方式及其结合使用的场景。 1. useContext useContext 允许你订阅React的Context变化。Context提供了一种在…...

Android:动态更新app启动图标和应用名

一、需求背景 每逢重要佳节&#xff0c;很多应用启动图标会自动更新为对应佳节的图标&#xff0c;应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon&#xff0c;因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...

深入探讨 ElementUI 动态渲染 el-table

在前端开发中&#xff0c;表格是不可或缺的一部分。无论是数据展示、数据录入&#xff0c;还是数据分析&#xff0c;表格都扮演着重要的角色。而在 Vue.js 生态系统中&#xff0c;ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...

数据炼金术:用Python爬虫精炼信息

标题&#xff1a;数据炼金术&#xff1a;用Python爬虫精炼信息 在数据泛滥的互联网时代&#xff0c;Python爬虫不仅是搜集信息的利器&#xff0c;更是清洗和格式化数据的炼金术。本文将带你走进数据清洗和格式化的世界&#xff0c;展示如何使用Python爬虫从海量网络信息中提取…...

C++第三十八弹---一万六千字使用红黑树封装set和map

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、set/map基本结构 2、红黑树基本结构改造 3、红黑树的迭代器 4、set的模拟实现 5、map的模拟实现 6、完整代码 1、set/map基本结构 在封装…...

★ C++基础篇 ★ vector 类

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…...

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现HTML文件导入需要的文件HTML文件中实现导出函数HTML总代码实现汇总&#xff08;直接复制代码&#xff0c;注意js引入路径&#xff09; 原生js用Expo…...

急需翻译PDF文件怎么办?pdf翻译在线快速帮你解决

面对满屏幕密密麻麻的pdf文件&#xff0c;我常常感到头疼&#xff01; 语言障碍让我在获取信息的道路上踌躇不前&#xff0c;但自从我发现了pdf在线翻译成中文的神奇工具&#xff0c;一切问题似乎都迎刃而解。 这些软件不仅让我能够快速跨过语言壁垒&#xff0c;还让我在学术…...

线程安全的集合类和并发数据结构

在Java中&#xff0c;线程安全的集合类和并发数据结构对于处理多线程环境下的数据共享和同步至关重要。这些集合和数据结构通过不同的机制来确保在多线程环境下数据的一致性和完整性。以下是一些常见的线程安全的集合类和并发数据结构&#xff1a; 线程安全的集合类 Vector 描…...

Linux环境下运行介绍

1. 文件编程函数介绍 如果在Linux系统下学习C语言&#xff0c;就会了解到两套文件编程接口函数&#xff1a; C语言标准的文件编程函数: fopen、fread、fwrite、fclose Linux下提供的文件编程函数: open、read、write、close 传参的区别: 基于文件指针: fopen fclose fread…...

Adobe Media Encoder ME 2023-23.6.6.2 解锁版下载安装教程 (专业的视频和音频编码渲染工具)

前言 Adobe Media Encoder&#xff08;简称Me&#xff09;是一款专业的音视频格式转码软件&#xff0c;文件格式转换软件。主要用来对音频和视频文件进行编码转换&#xff0c;支持格式非常多&#xff0c;使用系统预设设置&#xff0c;能更好的导出与相关设备兼容的文件。 一、…...

在go语言里io.EOF怎么理解呢?

Go语言在处理文件和其他I/O流时&#xff0c;会使用io.EOF常量来表示文件结束&#xff08;End Of File&#xff09;的情况。 io.EOF是Go标准库中io包定义的一个错误值&#xff0c;用于在读取操作达到文件末尾时返回。它是处理文件读取和I/O操作时常见的错误类型之一。当读取操作…...

日常编码工作与提升式学习两不误

在快速迭代的编程世界中&#xff0c;程序员们不仅需要高效完成日常编码任务&#xff0c;还需不断学习新技术、深化专业知识&#xff0c;以应对日益复杂的项目挑战。然而&#xff0c;如何在繁忙琐碎的编码工作与个人成长之间找到平衡&#xff0c;是不少程序员都面临的一个难题。…...

推荐被Stars5.8k的Java框架RuoYi

一直想做一款后台管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序&#xff0c;如网站管理后台&#xff0c;网站会员中心&#xff0c;CMS&#xff0c;CRM&#xff0c…...

聊聊适配器模式

目录 适配器模式概念 主要实现方式 主要组成 UML用例图 代码示例 生活场景 应用场景 适配器模式概念 适配器模式属于结构型设计模式&#xff0c;它的主要目的是将一个类的接口转换成客户端所期望的另一种接口形式&#xff0c;使得原本接口不兼容的类可以一起工作。 主…...

韩国服务器的性能如何提升

韩国服务器的性能可以通过硬件升级、网络优化、缓存优化和软件优化来提升。具体方法如下&#xff0c;rak小编为您整理发布韩国服务器的性能如何提升。 1. 硬件升级 CPU升级&#xff1a;选择高性能的多核处理器&#xff0c;可以显著提升计算速度和响应能力。 内存升级&#xff1…...

体育器材管理系统的设计与实现---附源码 76709

摘 要 本文介绍了一种基于Spring Boot框架的体育器材管理系统&#xff0c;该系统旨在优化学校或教育机构对体育器材的管理流程。通过集成Spring Boot、MySQL、MyBatis以及前端HTML、CSS、JavaScript等技术&#xff0c;实现了器材信息的录入、查询、修改&#xff0c;器材的借用…...

ArcEngine提取面要素公共边的实现方法

1、前言 很久没写ArcEngine的内容了&#xff0c;正好这次有同志提了一个问题&#xff1a;如何用ArcEngine实现批量提取面要素之间的公共边&#xff1f;捣鼓了半天总算是解决了&#xff0c;下面就来说一说解决思路。 2、ArcMap的实现方法 首先准备一份测试数据&#xff0c;如…...

高可用集群keepalived 原理+实战

keepalived 1.高可用集群1.1简介1.2原理1.3 集群类型1.4实现高可用1.5VRRP&#xff1a;Virtual Router Redundancy Protocol1.5.1 VRRP 相关术语1.5.2VRRP 相关技术 2.实验2.1keepalived环境部署2.2抢占模式和非抢占模式2.2.1非抢占模式2.2.2抢占延迟模式 preempt_delay 2.3VIP…...

保姆级教程,带你复现病理AI的经典模型CLAM(一)|项目复现·24-08-19

小罗碎碎念 推文概述 复现CLAM的第一期推文 通过这期推文你首先会学会如何在服务器端使用jupyter编程&#xff0c;比你用其他的编译器&#xff08;例如PyCharm、VS&#xff09;会更加的清晰&#xff0c;对新手也更友好。 接着我会介绍如何进行数据预处理&#xff0c;以及你应…...

数据可视化之旅,从数据洞察到图表呈现,可视化的产品设计

图表作为数据可视化的重要工具&#xff0c;是对原始数据进行深度加工与解读的有效手段&#xff0c;它助力我们洞悉数据背后的真相&#xff0c;使我们能更好地适应这个由数据驱动的世界。无论是工作汇报、项目实施、产品设计、后台界面还是数据大屏展示&#xff0c;图表都扮演着…...

ArrayList 和 LinkedList 的区别是什么

数据结构实现&#xff1a;ArrayList 是动态数组的数据结构实现&#xff0c;而 LinkedList 是双向链表的数据结构实现。随机访问效率&#xff1a;ArrayList 比 LinkedList 在随机访问的时候效率要高&#xff0c;因为 LinkedList 是线性的数据存储方式&#xff0c;所以需要移动指…...

在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换

在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换 目录 在Matlab中进行射频电路S、Z、Y、ABCD等参数的转换1、转换案例-3dB电桥2、将转换结果应用到ADS中制造理想3dB电桥器件 在微带线的ABCD矩阵的推导、转换与级联-Matlab计算实例&#xff08;S、Z、Y参数转换&#xff09;中&…...

渗透实战——为喜欢的游戏“排忧解难”

本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何不良后果及损失&#xff0c;与本账号及作者无关。 资料查询来源- 安全社区与AI模型结合探索【文末申请免费…...