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

【实战手册】8000w数据迁移实践:MySQL到MongoDB的完整解决方案

🔥 本文将带你深入解析大规模数据迁移的实践方案,从架构设计到代码实现,手把手教你解决数据迁移过程中的各种挑战。

📚博主其他匠心之作,强推专栏

  • 小游戏开发【博主强推 匠心之作 拿来即用无门槛】

沉淀

文章目录

    • 一、场景引入
      • 1. 问题背景
      • 2. 场景分析
        • 为什么需要消息队列?
        • 为什么选择Redis?
        • 技术选型对比
    • 二、技术方案设计
      • 1. 整体架构
      • 2. 核心组件设计
        • 2.1 任务管理模块
          • 2.1.1 MigrationStarter
          • 2.1.2 MigrationTaskManager
        • 2.2 数据读取模块
          • 2.2.1 DataReader
          • 2.2.2 OrderMapper
        • 2.3 Redis队列模块
          • 2.3.1 RedisQueue
        • 2.4 消费者模块
          • 2.4.1 ConsumerManager
          • 2.4.2 ConsumerWorker
          • 2.4.3 MongoWriter
          • 2.4.4 MongoDBMonitor
          • 2.4.5 ConsumerProgressManager
    • 写在最后

一、场景引入

场景:需要将8000w条历史订单数据从原有MySQL数据库迁移到新的MongoDB集群中,你有什么好的解决方案? 大家可以先暂停,自己思考一下。

1. 问题背景

需要将8000w条历史订单数据从原有MySQL数据库迁移到新的MongoDB集群中,主要面临以下挑战:

  • 源库压力:直接读取大量数据会影响线上业务
  • 目标库压力:直接写入大量数据可能导致MongoDB性能下降
  • 数据一致性:确保迁移过程中数据不丢失、不重复
  • 迁移效率:需要在规定时间窗口内完成迁移
  • 异常处理:支持断点续传,避免异常导致全量重试

2. 场景分析

为什么需要消息队列?
  • 源库保护
    • 通过消息队列控制读取速度
    • 避免大量查询影响线上业务
  • 任务解耦
    • 将数据读取和写入解耦
    • 支持独立扩展读写能力
  • 流量控制
    • 控制写入MongoDB的速度
    • 避免瞬时高并发
为什么选择Redis?
  • 性能考虑
    • Redis的list结构天然支持队列操作
    • 单机QPS可达10w级别
  • 可靠性
    • 支持持久化,防止数据丢失
    • 主从架构保证高可用
  • 成本因素
    • 无需额外引入消息队列组件
    • 降低系统复杂度
  • 实现简单
    • 开发成本低
    • 维护成本低
技术选型对比
方案优势劣势是否采用
直接迁移实现简单压力大,风险高
Redis队列实现简单,成本低单机容量有限
Kafka吞吐量大,持久化好部署复杂,成本高
RabbitMQ功能完善过重,维护成本高

二、技术方案设计

1. 整体架构

MySQL(Source) -> Data Reader -> Redis Queue -> Consumer Workers -> MongoDB(Target)↑              ↑               ↑                ↑限流控制     队列监控告警     消费进度监控     写入状态监控

整个迁移过程说起来很简单:从MySQL读数据,写到Redis队列,消费者从Redis读取后写入MongoDB。但魔鬼藏在细节里,让我们一步步看看要注意什么:

MySQL数据读取
首先是MySQL这块,我们不能无脑读取。想象一下,如果不控制读取速度,直接大量读取数据,很可能会影响到线上正常业务。所以这里有两个关键点:

  1. 选择合适的时间。建议在业务低峰期,比如凌晨,这时候可以适当提高读取速率。
  2. 控制读取速度。通过监控MySQL的负载情况,动态调整读取速率。

读取方式
读取数据时要格外注意顺序问题。我们一般用创建时间和ID来排序:

  1. 先按创建时间排序
  2. 如果时间相同,再按ID排序
  3. 每次读取都记录当前的时间点和ID
  4. 下次继续读取时,就从这个位置开始

Redis队列控制
数据读出来了,不能直接往Redis里写。Redis也是有容量限制的,需要合理控制:

  1. 假设一条订单数据1KB(实际可能2-3KB)
  2. 单实例Redis一般4-8G,按8G算
  3. 建议只用30%给这个任务,也就是2.4GB
  4. 差不多能放2400万条数据,超过就要告警
  5. 如果队列积压严重,要停止写入,等消费者消费一些后再继续

数据写入流程
整个写入过程要严格保证可靠性:

  1. 读取数据
  2. 记录任务进度
  3. 写入Redis
  4. 这几步要在一个事务里完成
  5. 如果失败了要记录下来,方便重试

消费者处理
消费这块要特别注意几个问题:

  1. 从Redis读取数据
  2. 写入MongoDB
  3. 确认消费完成
  4. 记录消费进度
  5. 失败要支持重试
  6. 整个过程要保证幂等性,防止重复消费

MongoDB写入控制
最后写MongoDB时也要注意控制速度:

  1. 监控MongoDB的负载情况
  2. 根据负载动态调整写入速度
  3. 避免写入太快导致MongoDB压力过大

通过这样的设计,我们就能实现一个相对可靠的数据迁移方案。当然,实际实现时还需要考虑更多细节,比如异常处理、监控告警等。

2. 核心组件设计

在开始具体的代码实现之前,让我们先理解每个组件的职责和实现思路。

2.1 任务管理模块

首先来看任务管理相关的代码实现。这部分主要包含两个核心类:MigrationStarterMigrationTaskManager

2.1.1 MigrationStarter

这是整个迁移任务的入口类,负责创建任务并提交给任务管理器。它的主要职责是:

  • 生成唯一的任务ID
  • 创建迁移任务实例
  • 提交任务到管理器
/*** 数据迁移启动器* 作为整个迁移任务的入口*/
@Slf4j
@Component
public class MigrationStarter {@Autowiredprivate MigrationTaskManager taskManager; // 迁移任务管理器/*** 启动迁移任务* @param startTime 开始时间* @param endTime 结束时间*/public void startMigration(LocalDateTime startTime, LocalDateTime endTime) {// 1. 创建迁移任务String taskId = UUID.randomUUID().toString(); // 生成任务IDMigrationTask task = new MigrationTask(taskId, startTime, endTime); // 创建迁移任务// 2. 提交任务taskManager.submitTask(task); // 提交任务log.info("迁移任务已提交,taskId={}", taskId); // 日志记录  }
}
2.1.2 MigrationTaskManager

任务管理器负责任务的具体执行和生命周期管理。它实现了:

  • 线程池管理
  • 任务执行流程控制
  • 异常处理和重试机制
/*** 迁移任务管理器* 负责任务的调度和管理*/
@Slf4j
@Component
public class MigrationTaskManager {@Autowiredprivate DataReader dataReader;@Autowiredprivate MongoWriter mongoWriter;@Autowiredprivate RedisQueue redisQueue;// 线程池配置private final ExecutorService executorService = new ThreadPoolExecutor(5, 10, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new ThreadFactoryBuilder().setNameFormat("migration-pool-%d").build());/*** 提交迁移任务*/@Transactional(rollbackFor = Exception.class)public void submitTask(MigrationTask task) {executorService.submit(() -> {try {// 1. 初始化任务task.init();// 2. 执行数据读取while (task.hasNext()) {// 读取数据List<Order> orders = dataReader.readNextBatch(task);// 在事务中执行更新进度和写入Redis队列transactionTemplate.execute(status -> {try {// 先更新任务进度(持久化)task.updateProgress(orders);// 原子性写入Redis队列redisQueue.pushBatchAtomic(orders);return true;} catch (Exception e) {status.setRollbackOnly();throw new RuntimeException("处理批次数据失败", e);}});}// 3. 完成任务task.complete();} catch (Exception e) {log.error("任务执行异常", e);task.fail(e);}});}
}
2.2 数据读取模块

数据读取是整个迁移过程的起点,需要特别注意读取性能和源库压力控制。这部分包含两个关键类:

2.2.1 DataReader

数据读取器负责从MySQL中批量读取数据,实现了:

  • 动态批次大小调整
  • 读取速率控制
  • 异常处理机制
/*** 数据读取器*/
@Slf4j
@Component
public class DataReader {private final RateLimiter rateLimiter;@Autowiredprivate MySQLMonitor mysqlMonitor;private int currentBatchSize = 1000; // 初始批次大小private static final int MIN_BATCH_SIZE = 100;private static final int MAX_BATCH_SIZE = 5000;public DataReader() {// 初始速率设置this.rateLimiter = RateLimiter.create(100); // 每秒100个请求}/*** 动态调整读取速率*/private void adjustReadingRate() {if (!mysqlMonitor.checkMySQLStatus()) {// 降低速率和批次大小rateLimiter.setRate(rateLimiter.getRate() * 0.8);currentBatchSize = Math.</

相关文章:

【实战手册】8000w数据迁移实践:MySQL到MongoDB的完整解决方案

🔥 本文将带你深入解析大规模数据迁移的实践方案,从架构设计到代码实现,手把手教你解决数据迁移过程中的各种挑战。 📚博主其他匠心之作,强推专栏: 小游戏开发【博主强推 匠心之作 拿来即用无门槛】文章目录 一、场景引入1. 问题背景2. 场景分析为什么需要消息队列?为…...

本地部署DeepSeek-R1,搭建本地知识库

本地部署DeepSeek-R1,搭建本地知识库 本章节内容是参照哔哩哔哩上的【一拳S7】作者分享的视频教程&#xff08;【喂饭教程】20分钟教会你本地部署DeepSeek-R1&#xff0c;并搭建自己的知识库&#xff01;小白也能轻松上手&#xff01;!&#xff09;搭建的。 概述&#xff1a;本…...

多链协议和跨链桥

文章目录 多链协议和跨链桥一、核心功能与分类二、主流协议技术对比三、关键技术机制四、典型应用场景五、核心风险与挑战 多链协议和跨链桥 一、核心功能与分类 多链协议与跨链桥旨在解决区块链生态的孤岛效应&#xff0c;实现资产与数据的跨链互通。 主要分为两类&#xf…...

2025.4.9 华为机考 第1题-补丁版本升级

目录 题目内容样例1样例2思考思路算法思路实现代码&#xff08;封装Class中&#xff09; 题目内容 样例1 样例2 思考思路 题目让我们找出所有迭代次数最多的补丁版本&#xff0c;并且按字典序排列输出。迭代次数指的是从该版本到根节点的路径长度&#xff0c;而根节点的迭代次…...

Qt平台+三维建模+动画演示+工业风展示

三维建模不止于形&#xff0c;界面定制不止于皮&#xff0c;实时交互不止于快。 我们专注程序界面定制&#xff0c;尤其擅长&#xff1a; &#x1f527; Qt平台 精准开发 &#x1f9ca; 三维建模 动画演示 工业风展示 ⚡ 实时交互系统 支持多线程响应、动态数据绑定 &#x1…...

通付盾风控智能体(RiskAgent): 神烦狗(DOGE)

在数字化业务高速发展的今天&#xff0c;风控系统已成为企业抵御黑产、欺诈、保障交易安全的核心防线。然而传统风控面临人力依赖高与策略滞后性等挑战&#xff0c;数据分析师需每日从海量数据中手动提炼风险特征、设计防护规则&#xff0c;耗时费力&#xff1b;新策略从发现到…...

Anaconda环境管理及 pycharm、jupyter notebook 的配置

为什么要Anaconda环境管理&#xff0c;因为不同的项目可能使用的环境是不一样的&#xff0c;比如说有一个项目要用到pytorch0.4&#xff0c;另一个要用到pytorch1.0&#xff0c;我们不可能在一个环境中既装pytorch0.4&#xff0c;又装pytorch1.0&#xff0c;因此我们在用pytorc…...

DevOps与功能安全:Perforce ALM通过ISO 26262合规认证,简化安全关键系统开发流程

本文来源perforce.com&#xff0c;由Perforce中国授权合作伙伴、DevSecOps解决方案提供商-龙智翻译整理。 近日&#xff0c;Perforce ALM&#xff08;原Helix ALM&#xff09;通过了国际权威认证机构 TV SD的ISO 26262功能安全流程认证&#xff01;该认证涵盖Perforce ALM解决方…...

OpenCV 伪彩色处理

伪彩色处理是将灰度图像通过颜色映射转换为彩色图像的技术&#xff0c;常用于增强可视化效果或突出显示特定灰度范围。OpenCV 提供了多种方法实现伪彩色处理。 1. 使用 applyColorMap 函数 OpenCV 提供了 cv::applyColorMap() 函数&#xff0c;支持多种预定义的色彩映射&…...

【物联网】PWM控制蜂鸣器

文章目录 一、PWM介绍1.PWM的频率2.PWM的周期 二、PWM工作原理分析三、I.MX6ull PWM介绍1.时钟信号2.工作原理3.FIFO 四、PWM重点寄存器介绍1.PWM Control Register (PWMx_PWMCR)2.PWM Counter Register (PWMx_PWMCNR)3.PWM Period Register (PWMx_PWMPR)4.PWM Sample Register…...

centos-stream-9上安装nvidia驱动和cuda-toolkit

这里写目录标题 驱动安装1. 更新系统2. NVIDIA GPU安装检查系统是否安装了 NVIDIA GPU2.1 首先&#xff0c;使用以下命令更新 DNF 软件包存储库缓存&#xff1a;2.2 安装编译 NVIDIA 内核模块所需的依赖项和构建工具2.3 在 CentOS Stream 9 上添加官方 NVIDIA CUDA 软件包存储库…...

嵌入式---烧录器

一、核心定义与本质功能 烧录器&#xff08;Programmer&#xff09;是一种将用户编写的程序代码&#xff08;如.hex/.bin文件&#xff09;写入单片机内部存储器&#xff08;Flash/EEPROM/ROM&#xff09;的专用工具&#xff0c;核心功能包括&#xff1a; 程序烧写&#xff1a…...

centos-LLM-生物信息-BioGPT-使用1

参考&#xff1a; GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT&#xff1a;用于生物医学文本生成和挖掘的生成式预训练转换器 |生物信息学简报 |牛津学术 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…...

Golang|协程

文章目录 go func 和 WaitGroup协程 v.s. 线程GMP 并发模型 go func 和 WaitGroup 在 Go 语言中&#xff0c;协程&#xff08;goroutine&#xff09;之间并没有严格的父子关系。一个协程中可以启动其他协程&#xff0c;即使启动它的协程已经结束&#xff0c;所启动的新协程仍会…...

免费下载地图切片数据以及通过CesiumEarth在Windows和安卓本地浏览

免费下载地图切片数据 本文概述​ 互联网存在许多免费的地图资源&#xff0c;但是这些资源都需要在互联网环境下使用&#xff0c;如果使用场景是在离线或本地设备上&#xff0c;没有在线调用地图的途径&#xff0c;这时如果没有自己制作地图的能力&#xff0c;只能提前下载地…...

Enovia许可使用限制

在数字化时代&#xff0c;企业的研发与创新活动越来越依赖于先进的软件工具。Enovia&#xff0c;作为一款功能强大的产品生命周期管理&#xff08;PLM&#xff09;解决方案&#xff0c;为众多行业的企业提供了从概念到生产的全方位支持。然而&#xff0c;为了确保软件的合规性与…...

“米其林.网址”中文域名仲裁案:知名企业如何保护网络知产权益?

中文域名与商标协同保护经典案例解析 近期&#xff0c;国际知名的轮胎制造商米其林公司&#xff08;Compagnie Gnrale des tablissements Michelin&#xff09;通过仲裁程序成功夺回了被抢注的中文域名<米其林.网址>。这一案件再次引发了公众对企业网络知识产权保护和域名…...

TCP专题

一、TCP连接建立 1、TCP的四元组 TCP属于面向连接——在发送数据之前&#xff0c;需要先建立一条点到点的连接。 TCP的四元组&#xff1a;源IP地址、目标IP地址、源端口、目标端口。可以唯一的区分和标识一条TCP的连接。 2、TCP报文结构 序列号&#xff1a;TCP是基于”字节…...

力扣热题100刷题day63|49.字母异位词分组

一、哈希表相关理论 代码随想录刷题day15|&#xff08;哈希表篇&#xff09;242.有效的字母异位词、383.赎金信-CSDN博客 二、思路 首先&#xff0c;创建一个map集合&#xff0c;遍历字符串数组&#xff0c;对数组中每一个字符串&#xff08;单词&#xff09;比如"abc&…...

BERT - 今日头条新闻分类任务实战

1. 自定义模型组件 MultiHeadAttention 类 实现了多头自注意力机制。 通过将输入分割成多个“头”&#xff0c;从不同角度学习输入数据的特征。 注意力分数计算后应用了缩放点积注意力&#xff0c;并支持掩码操作。 class MultiHeadAttention(nn.Module):def __init__(se…...

leetcode-419.棋盘上的战舰

leetcode-419.棋盘上的战舰 文章目录 leetcode-419.棋盘上的战舰一.题目描述二.第一次代码提交三.第二次代码提交 一.题目描述 二.第一次代码提交 class Solution { public:int countBattleships(vector<vector<char>>& board) {int m board.size(); //列数i…...

Python爬虫第11节-解析库Beautiful Soup的使用上篇

目录 前言 一、Beautiful Soup 简介 1.1 Beautiful Soup概述 1.2 准备工作 1.3 解析器 二、基本使用 三、节点选择器的使用 3.1 选择元素 3.2 提取信息 3.2.1 获取名称 3.2.2 获取属性 3.2.3 获取内容 3.3 嵌套选择 3.4 关联选择 3.4.1 子节点和子孙节点 3.4.2…...

host模式容器compose建立记录

需要一个host模式的容器&#xff0c;用来跑gpu程序。同时最好使用ssh来直接远程连接。 以前是直接建立容器然后手动安装ssh的。但是最近突然又不行了&#xff0c;不知道为什么。我知道原因是容器的systmctl不能使用。但是为什么以前能用呢&#xff1f; 一、安装结构 总之换成…...

LeetCode算法题(Go语言实现)_39

题目 给定一个二叉树的根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 一、代码实现 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }func rightSideView(root *TreeNode) []int {i…...

算法训练之动态规划(五)——简单多状态问题

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

深度学习-156-RAG技术之在ubuntu中的安装部署RAGFlow和简单应用

文章目录 1 ubuntu中安装RAGFlow1.1 RAGFlow简介1.2 安装部署1.2.1 硬件要求1.2.2 修改max_map_count1.2.3 下载仓库代码1.2.4 自动拉取镜像1.2.5 查看端口占用(如果提示的话)1.2.6 启动与关闭RAGFlow2 访问应用2.1 添加模型2.2 创建知识库2.2.1 输入名称点击确定2.2.2 填写相关…...

自学Matlab-Simscape(初级)- 2.1 Simscape Multibody 模块之关节(运动副)

Matlab-Simscape自学系列文章目录 1.了解Simscape Multibody Link模块 2.掌握Simscape Multibody 模块 3.掌握Simscape Electrical模块 4.掌握Simscape Driveline 模块 5.了解Simscape Fluids模块 6.了解Simscape Battery模块 7.掌握Simscape Mechanical Interfaces 模块 8.掌…...

再次重拾jmeter之踩坑

1.添加“csv数据文件设置”&#xff0c;运行时提示 java.lang.IllegalArgumentException: Filename must not be null or empty检查多次后才发现因为我运行的是整个线程组&#xff0c;所以对应http请求下不能包括空的csv文件 2. 填写ip时不能加/&#xff0c;要在路径里加&…...

第六周作业

好的&#xff0c;这是移除外层代码块&#xff0c;并保留内部 Markdown 格式的作业内容&#xff1a; SQL 注入作业 1、联合注入实现“库名-表名-字段名-数据”的注入过程 &#xff08;1&#xff09;前端注入 尝试使用 database() 这个函数进行库名爆破 1 union select 1,data…...

学科发展视域下教师数字素养提升的多维路径研究

学科发展视域下教师数字素养提升的多维路径研究 —— 基于技术融合与教学创新的双重逻辑 一、引言&#xff1a;数字时代的学科教育转型 1.1 研究背景与意义 在当今时代&#xff0c;人工智能与教育数字化战略正以迅猛之势重塑着教育的格局&#xff0c;成为推动学科教学范式深…...

QEMU学习之路(6)— RISC-V 启动Linux

QEMU学习之路&#xff08;6&#xff09;— RISC-V 启动Linux 一、前言 参考&#xff1a;QEMU 启动方式分析&#xff08;1&#xff09;&#xff1a;QEMU 及 RISC-V 启动流程简介 QEMU 启动方式分析&#xff08;2&#xff09;: QEMU virt 平台下通过 OpenSBI U-Boot 引导 RISC…...

人工智能图像识别Spark Core3

Spark Core3 Spark-Core编程&#xff08;三&#xff09; 1.key-value类型&#xff1a; 23) sortByKey 函数签名 def sortByKey(ascending: Boolean true, numPartitions: Int self.partitions.length): RDD[(K, V)] 函数说明 在一个(K,V)的 RDD 上调用&#xff0c;K 必…...

STM32 模块化开发指南 · 第 5 篇 STM32 项目中断处理机制最佳实践:ISR、回调与事件通知

本文是《STM32 模块化开发实战指南》第 5 篇,聚焦于 STM32 裸机开发中最核心也最容易被忽视的部分——中断服务机制。我们将介绍如何正确、高效地设计中断处理函数(ISR),实现数据与事件从中断上下文传递到主逻辑的通道,并构建一个清晰、可维护、非阻塞的事件通知机制。 一…...

Vue报错解决方案

1.ResizeObserver loop completed with undelivered notifications. 解决方案&#xff1a; 在App.vue文件中添加以下代码&#xff1a; <script > const callLimit (callback, delay) > {let timer null;return function () {let context this;let args arguments;…...

vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

项目场景&#xff1a; <el-table-column label"税率" prop"TaxRate" width"180" align"center" show-overflow-tooltip><template slot-scope"{row, $index}"><el-form-item :prop"InquiryItemList. …...

STM32 模块化开发指南 · 第 4 篇 用状态机管理 BLE 应用逻辑:分层解耦的实践方式

本文是《STM32 模块化开发实战指南》第 4 篇,聚焦于 BLE 模块中的状态管理问题。我们将介绍如何通过有限状态机(Finite State Machine, FSM)架构,实现 BLE 广播、扫描、连接等行为的解耦与可控,并配合事件队列驱动完成主从共存、低功耗友好、状态清晰的 BLE 应用。 一、为…...

计算机网络-传输层基础概念

传输层基础概念 1. 传输层基础概念1.1 传输层的定义与作用1.2 传输层在网络模型中的位置OSI七层模型中的传输层TCP/IP四层模型中的传输层传输层的数据单元传输层的地址机制 1.3 传输层与其他层的关系与网络层的关系与应用层的关系数据流转过程 1.4 传输层的主要功能1.4.1 复用与…...

使用Mybatis时在XML中SQL高亮显示的方法

如图所示&#xff0c;上方的SQL代码很像是一个字符串&#xff0c;那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢&#xff1f; 1.选中SQL中的一部分代码&#xff0c;此时左侧会出现一个黄色的灯泡图案&#xff0c;点击2.选择这个注入语言或者引用...

Dify+DeepSeek能做出什么来?快速构建可扩展的 AI 应用

将 Dify&#xff08;开源 LLM 应用开发平台&#xff09;与 DeepSeek&#xff08;深度求索公司的高性能大模型&#xff0c;如 DeepSeek-R1 或 DeepSeek-Lite&#xff09;结合使用&#xff0c;可以充分发挥两者的优势&#xff0c;快速构建高效、灵活且可扩展的 AI 应用。以下是具…...

Python 类型转换详解

文章目录 Python 类型转换详解基本类型转换函数1. 转换为整数 (int())2. 转换为浮点数 (float())3. 转换为字符串 (str())4. 转换为布尔值 (bool()) 容器类型转换1. 转换为列表 (list())2. 转换为元组 (tuple())3. 转换为集合 (set())4. 转换为字典 (dict()) 特殊类型转换1. AS…...

针对deepseek的核心论文写作提示词模板(适用于SCI论文、CCF会议论文、北大核心论文、南大核心论文)

以下是一个适用于撰写核心论文的提示词模板,涵盖论文结构、关键内容和注意事项,帮助你高效组织思路和内容: 核心论文写作提示词模板(5000字) 1. 标题(Title) 提示词:简洁、明确、关键词、研究领域、创新点示例: “基于XX方法的XX问题研究”“XX现象对XX的影响:以XX为…...

Linux基础命令解释

目录 一、文件和目录操作命令 1. ls 2. cd 3. pwd 4. mkdir 5. rm 6. cp 7. mv 二、查看和编辑文件命令 1. cat 2. less 三、系统信息相关命令 四、网络相关命令 五、用户和权限管理命令 Linux是由Linus Torvalds于1991年开发的开源类Unix操作系统内核&#xff0…...

vue2基于video.js,v8.21.0自己设计一个视频播放器

刚开始在网上下了点视频教程想着用些电脑自带的播放器。后来级数太多了&#xff0c;操作不方便。就开始自己捣鼓了。 痛点是是视频教程本身带来的&#xff0c;不方便反复的找重点。过去了不好快退等。 就基于video.js,设计了各种功能&#xff0c;鼠标移到上方显示 播放、暂停…...

Spring Boot 中集成 Disruptor_高性能事件处理框架

1. 引言 1.1 什么是 Disruptor Disruptor 是一个高性能的事件处理框架,广泛应用于金融交易系统、日志记录、消息队列等领域。它通过无锁机制和环形缓冲区(Ring Buffer)实现高效的事件处理,具有极低的延迟和高吞吐量的特点。 1.2 为什么使用 Disruptor 高性能:通过无锁机…...

如何关闭MacOS中鼠标滚轮滚动加速

一、背景 想要关闭滚轮的 “滚动加速”&#xff0c;即希望滚动了多少就对应滚动页面固定行数&#xff0c;现在macOS是加速滚动的&#xff0c;即滚动相同的角度会根据你滚动滚轮的速度不同最终页面滚动的幅度不同。这点很烦&#xff0c;常导致很难定位。 macOS本身的设置是没有…...

QT Sqlite数据库-教程001 创建数据库和表-下

【1】创建带名称的数据库 #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> QString path QDir::currentPath(); QApplication::addLibraryPath(pathQString("/release/plugins")); QPluginLoader loader…...

玄机靶场-webshell查杀WP

0x01.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 方法一 先去网站根目录找/var/www/html在文件中寻找 flag 方法二 直接使用工具 D 盾。 0x02黑客使用的什么工具的shell 把代码直接复制网上搜索即可。 https://github.com/BeichenDream/Godzilla 0x03 黑客隐…...

游戏引擎学习第217天

运行游戏并在 FreeVariableGroup 中遇到我们的断言 其实在美国&#xff0c;某些特定的小糖果&#xff08;例如小糖蛋&#xff09;只在圣诞节和复活节期间出售&#xff0c;导致有些人像我一样在这段时间吃得过多&#xff0c;进而增加体重。虽然这种情况每年都会发生&#xff0c…...

13、nRF52xx蓝牙学习(GPIOTE组件方式的任务配置)

下面再来探讨下驱动库如何实现任务的配置&#xff0c;驱动库的实现步骤应该和寄存器方式对应&#xff0c;关 键点就是如何调用驱动库的函数。 本例里同样的对比寄存器方式编写两路的 GPOITE 任务输出&#xff0c;一路配置为输出翻转&#xff0c;一路设 置为输出低电平。和 …...

基础数学:线性代数与优化理论

本篇文章简单带您复习线性代数与优化理论&#xff08;主要是我发表的文章中涉及过的或相关联的&#xff09; 微积分和概率与统计由此进&#xff1a;基础数学&#xff1a;微积分和概率与统计-CSDN博客 二、线性代数 1.矩阵运算 (1) 基础操作与几何意义 矩阵乘法&#xff1…...