主页

MySQL 数据误删除恢复指南:利用 Binlog 日志逆转 DELETE 操作

MySQL 数据误删除恢复指南:利用 Binlog 日志逆转 DELETE 操作 今天我们来探讨一个常见的数据库问题:误删除数据。MySQL 作为广泛使用的关系型数据库,启用了二进制日志(Binlog)后,我们可以通过它恢复误删除的数据。本文将从如何获取删除部分的 Binlog 日志开始,逐步指导你将 DELETE 操作转换为 INSERT 语句,实现数据恢复。整个过程使用一个简单的 Bash 脚本,高效且易于操作。 本文以一个虚构的测试表 test_db.test_table 为例,模拟误删除记录的恢复过程。注意:恢复前,请确保 MySQL 已启用 Binlog(log_bin 参数),并备份数据库以防万一。 为什么用 Binlog 恢复数据? Binlog 是 MySQL 的...

阅读更多

辣评前端性能优化与构建(十五)

概述 随着辣评前端功能的不断增加,特别是引入了 Element Plus UI 框架、ECharts 图表库和 html2canvas 等大型依赖库,前端应用的构建产物体积和运行时性能面临了严峻挑战。本文档详细记录了 2025 年 9 月进行的前端性能优化工作,包括 Vite 构建优化、Element Plus 循环依赖问题解决、代码分割策略、打包产物优化和开发体验改进等方面的工作。 一、Vite 构建系统概述 1.1 Vite 配置架构 辣评前端采用 Vite 作为构建工具,相比 Webpack 具有以下优势: // admin-vue/vite.config.ts import { defineConfig } from 'vite' import vue from '@...

阅读更多

MySQL 删除重复数据:使用存储过程高效处理

使用存储过程删除表重复数据 概述 本文件提供指导,说明如何使用两个 MySQL 存储过程 DeleteDuplicatesSingleTable 和 BatchDeleteDuplicates 来删除数据库表中的重复记录。这两个存储过程设计用于高效处理单个或多个表,包含错误处理和分批处理功能,以最小化性能影响。 前提条件 MySQL 版本:5.7 或更高版本 用户权限:用户需具备目标数据库的 CREATE、ALTER、DELETE、SELECT 和 EXECUTE 权限。 表结构:表必须包含一个 id 列作为主键或唯一标识符。 备份:在执行删除操作前,始终备份目标数据表。 存储过程 1. D...

阅读更多

辣评后端安全与性能优化(十四)

概述 在辣评项目的发展过程中,随着用户数量的增加和功能的复杂化,后端系统面临着越来越多的安全和性能挑战。本文档详细记录了我们在 2025 年 8 月进行的后端安全与性能优化工作,包括数据库连接池优化、SQL 查询优化、权限验证机制、错误处理与日志系统,以及性能监控等方面的改进。 一、数据库连接池优化 1.1 连接池配置 在 Go + GORM 的架构中,数据库连接池是性能的关键。我们对 SQLite 数据库的连接进行了优化: // cmd/server/database/database.go func InitDB() error { // 配置 SQLite 连接 db, err := gorm.Open(sqlite.Open(dbPath), &...

阅读更多

LCR170-优化逆序对计数算法:从暴力解法到归并排序

优化逆序对计数算法:从暴力解法到归并排序 问题背景 在数组中,逆序对是指满足 i < j 且 record[i] > record[j] 的下标对 (i, j)。给定一个整数数组 record,我们需要计算其逆序对的数量。例如,对于数组 [3, 1, 2],逆序对有 (3, 1) 和 (3, 2),总数为 2。然而,当数组规模较大时,简单的暴力解法会导致“时间超限”(Time Limit Exceeded)。本文将探讨如何从 O(n²) 的暴力解法优化到 O(n log n) 的归并排序解法。 暴力解法及其瓶颈 最初的解法使用两层循环,检查每一对 (i, j)(其中 j < i),如果 record[j] > record[i],则计数加 1。代码如下: ...

阅读更多

91-解码方法的动态规划解法:从字符串到字母序列

解码方法的动态规划解法:从字符串到字母序列 问题背景 给定一个只包含数字的字符串 s,我们需要计算它可以被解码为字母序列的不同方式数量。每个数字或数字组合对应一个字母:1 对应 ‘A’,2 对应 ‘B’,…,26 对应 ‘Z’。例如,字符串 “12” 可以解码为 “AB”(1, 2)或 “L”(12),共 2 种方式。然而,字符串可能包含前导零(例如 “06” 无法解码),且输入长度在 1 到 100 之间,答案保证是 32 位整数。本文将详细介绍如何使用动态规划高效解决这一问题。 为什么用动态规划? 这个问题具有明显的子问题重叠和最优子结构特性: 子问题:字符串 s[0:i] 的解码方式依赖于 s[0:i-1] 和 s[0:i-2] 的解码方式。 最优子结构:通过组合子...

阅读更多

辣评排行榜与星级评定功能(十三)

排行榜系统概述 排行榜系统是辣评平台的重要功能,用于展示用户的评论质量和活跃度排名。通过星级评定机制,系统能够识别和奖励高质量的评论者。 系统目标 提供公平的排名机制 实现灵活的排序功能 支持多维度的筛选 激励用户参与评论 排行榜数据模型 核心数据结构 // Leaderboard 排行榜模型 type Leaderboard struct { ID uint `gorm:"primaryKey"` UserID uint `gorm:"uniqueIndex:idx_user_competition"` CompetitionID uint `gor...

阅读更多

辣评作者自述功能开发(十二)

历史说明 本文主要记录作者自述功能在早期阶段的独立模型设计(如 AuthorBio 方案)。 后续主线实现调整为将自述字段内聚到投稿模型(Submission.Statement、StatementCount、StatementUpdateAt),并通过投稿相关接口维护。 因此,本文中的独立模型与接口示例应理解为阶段性设计,用于保留演进过程。 作者自述功能概述 作者自述功能允许投稿者为自己的作品添加创作背景、灵感来源等信息,增强作品的可读性和吸引力。 功能目标 支持作者自述内容编辑 实现字数统计功能 提供自述内容展示 支持自述内容查看和编辑 功能需求分析 核心需求 编辑功能 - 作者可以编辑自述内容 字数限制 - 设置合理的字数限制 ...

阅读更多