RocksDB WAL 深度解析:写入路径、组提交与崩溃恢复机制
1. 为什么我们要关心 RocksDB 的 WALRocksDB 在存储圈里的地位不用我多吹单机嵌入式 KV 引擎里它几乎是默认选项。但很多人用 RocksDB 的方式是调几个参数、压测一下、上线然后就不管了。直到某天机器掉电重启后发现数据对不上才开始回头翻 WAL 的文档。WAL全称 Write-Ahead Log预写日志。它的核心承诺只有一句话在任何数据落到 SST 文件之前先把这次修改写进日志。这样即使进程崩溃、机器断电重启后也能靠这份日志把内存里丢掉的数据补回来。听起来简单但 RocksDB 在这块做了非常多的工程取舍涉及写放大、组提交、日志格式、恢复策略、生命周期管理等一系列问题。这篇文章适合谁看如果你正在用 RocksDB 做存储层或者你在自研存储引擎时参考了它的设计又或者你单纯想搞清楚“一条 Put 到底经历了什么”那这篇内容会对你有用。我会从整体设计思路讲到具体实现细节包括日志格式、写入路径、组提交机制、恢复流程以及我在实际调试中踩过的坑。所有内容基于 RocksDB 的公开实现逻辑和常见工程实践展开不涉及任何特定公司的内部代码。先说结论RocksDB 的 WAL 不是一个“写完就完事”的组件它是一套围绕持久性、吞吐、恢复速度三者做平衡的系统。理解它的关键在于搞清楚三个问题——日志长什么样、什么时候写、崩了怎么恢复。2. WAL 的整体设计与核心思路拆解2.1 为什么不能直接写 SST要理解 WAL 存在的意义先得理解 LSM-Tree 的写入模型。RocksDB 基于 LSM-Tree数据先写内存中的 MemTableMemTable 写满后冻结为 Immutable MemTable再后台刷成 SST 文件。SST 文件一旦生成就不可变后续的修改靠 Compaction 合并。这个模型有个致命问题MemTable 在内存里。进程一崩内存数据全没了。如果每次写都直接落 SST那写入延迟会高到无法接受因为 SST 是排好序的、可能跨多层、还要考虑合并。所以需要一个“快速落盘”的中间层这就是 WAL。WAL 的定位很明确顺序追加、不做排序、不做合并、写完即返回。它牺牲了查询效率日志本身不提供读能力换来了极低的写入延迟。等 MemTable 刷成 SST 之后对应的 WAL 就可以删掉了因为数据已经有了持久化归宿。2.2 WAL 在写入路径中的位置一条 Put 请求进入 RocksDB 后大致经历这几个阶段写入 WriteBatch可能包含多条操作写入 WAL如果开启了 WAL写入 MemTable返回成功注意顺序先 WAL后 MemTable。这个顺序不能反。如果先写 MemTable 再写 WAL那么在两步之间崩溃MemTable 的数据丢了WAL 里也没有数据就真丢了。先写 WAL 的话最坏情况是 WAL 写了但 MemTable 没写恢复时重放 WAL 即可数据不丢。这里有个细节WAL 的写入并不是每条 Put 都单独 fsync。RocksDB 用了组提交Group Commit机制多个线程的写请求可以合并成一次 fsync大幅提升吞吐。这个后面会详细讲。2.3 设计上的关键取舍RocksDB 在 WAL 设计上做了几个重要取舍理解这些取舍比记 API 更重要取舍一WAL 是顺序写的但恢复是顺序读的。顺序写保证了写入吞吐顺序读保证了恢复速度。如果 WAL 设计成随机写那写入性能会崩如果恢复时需要随机读那恢复时间会不可控。取舍二WAL 可以关闭。RocksDB 允许你通过WriteOptions.disableWAL关闭单条写的 WAL。这适合那些“丢了也无所谓”的场景比如缓存预热、批量导入。但如果你关了 WAL 又指望数据不丢那就是自己骗自己。取舍三WAL 文件会滚动。单个 WAL 文件不会无限增长达到阈值后会切换到新文件。旧文件在对应的 MemTable 刷盘后删除。这个机制保证了磁盘空间不会失控但也带来了恢复时需要扫描多个文件的问题。取舍四WAL 和 MemTable 是绑定的。每个 MemTable 对应一组 WAL 文件。MemTable 刷盘后对应的 WAL 才能删。这个绑定关系是恢复逻辑的基础。3. WAL 的文件格式与底层结构3.1 日志文件的基本组成RocksDB 的 WAL 文件由一系列**固定大小的块Block**组成默认块大小是 32KB。每个块里存放若干条记录Record。这种设计的好处是读取时可以按块加载不需要一次性把整个文件读进内存写入时按块对齐方便管理。每个块内部记录是连续存放的。一条记录包含头部和数据两部分。头部有 7 个字节4 字节的 CRC 校验码2 字节的长度1 字节的记录类型记录类型有几种Full完整记录、First分片的第一段、Middle分片中间段、Last分片最后一段。为什么要分片因为一条记录可能很大超过一个块的剩余空间就需要跨块存储。3.2 记录分片机制假设当前块还剩 100 字节但你要写一条 500 字节的记录。这时候 RocksDB 不会浪费这 100 字节而是把记录切成多段第一段填满当前块的剩余空间类型标记为 First中间段填满后续的完整块类型标记为 Middle最后一段放在新块里类型标记为 Last如果一条记录刚好能放进当前块类型就是 Full。如果块剩余空间太小小于头部长度会用零填充Trailer跳过这部分。这个机制看起来简单但实际实现时要处理很多边界情况比如块剩余空间刚好等于头部长度怎么办、记录长度为 0 怎么办、CRC 校验覆盖哪些部分。这些细节在调试时非常关键。3.3 WriteBatch 与 WAL 记录的关系一条 WAL 记录不一定对应一条 Put。RocksDB 的写入单位是 WriteBatch一个 WriteBatch 可以包含多条 Put、Delete、Merge 操作。整个 WriteBatch 会被序列化成一条 WAL 记录如果太大就分片。WriteBatch 的内部格式是这样的8 字节的序列号Sequence Number4 字节的操作计数然后是若干条操作每条包含类型、Key、Value序列号是全局递增的用于保证操作的顺序性。恢复时RocksDB 会按照序列号重放操作确保最终状态一致。这里有个容易忽略的点WriteBatch 里的操作是有顺序的。如果同一个 Key 先 Put 再 Delete重放时必须保持这个顺序否则结果就错了。RocksDB 在序列化和反序列化时都保证了这一点。3.4 CRC 校验的设计考量每条记录都有 CRC 校验用的是 CRC32 算法。校验范围包括记录类型、长度和数据部分。为什么需要校验因为磁盘写入可能不完整或者存储介质可能出错。没有校验的话恢复时可能读到损坏的数据导致更严重的问题。CRC 校验的代价是计算开销。RocksDB 用了硬件加速如果 CPU 支持 SSE4.2 的 CRC32 指令来降低开销。在软件实现下CRC32 的计算速度也能达到 GB/s 级别对写入吞吐的影响可控。注意CRC 校验只能发现错误不能纠正错误。如果校验失败RocksDB 在恢复时会停止重放后续记录因为无法保证数据完整性。这意味着校验失败点之后的数据都会丢失。所以 WAL 所在的磁盘一定要可靠。4. WAL 的写入路径与组提交机制4.1 一条写入的完整旅程让我把一条 Put 的写入路径拆开讲。假设你调用db-Put(write_options, key, value)内部发生了什么第一步构造 WriteBatch。即使是单条 PutRocksDB 也会把它包装成 WriteBatch因为 WAL 和 MemTable 的写入单位都是 WriteBatch。第二步获取序列号。每个 WriteBatch 会分配一个起始序列号内部操作按顺序递增。第三步写入 WAL。这一步会调用DBImpl::WriteToWAL把 WriteBatch 序列化后追加到当前 WAL 文件。如果开启了sync还会调用 fsync 确保落盘。第四步写入 MemTable。WAL 写成功后数据写入 MemTable。MemTable 可能是跳表SkipList或哈希跳表取决于配置。第五步更新序列号并返回。如果开启了 WAL 且 sync 成功返回时数据已经持久化。这个流程里第三步是性能关键。如果每条写都 fsync吞吐会非常低机械盘上可能只有几百 IOPS。所以 RocksDB 引入了组提交。4.2 组提交的工作原理组提交的核心思想是多个线程的写请求合并成一次 fsync。具体流程是这样的第一个进入写路径的线程成为 leader它负责收集其他线程的 WriteBatch合并成一个大的 WriteBatch然后一次性写入 WAL 并 fsync。其他线程成为 follower它们把自己的 WriteBatch 交给 leader 后等待。leader 收集的时机是当它准备写 WAL 时会检查队列里是否还有其他等待的写请求。如果有就一起合并。合并后的 WriteBatch 可能包含几十甚至上百条操作一次 fsync 就全部持久化了。这个机制的效果非常明显。在 NVMe SSD 上单条 fsync 的延迟大约是几十微秒如果每条写都 fsync吞吐大概几万 QPS。组提交之后一次 fsync 可以覆盖几十条写吞吐能提升一个数量级。但组提交也有代价延迟增加。因为 follower 要等 leader 收集并完成 fsync 才能返回。如果 leader 收集的请求多单个请求的等待时间就长。RocksDB 通过控制收集窗口来平衡吞吐和延迟。4.3 sync 与 disableWAL 的选择WriteOptions 里有两个关键参数sync和disableWAL。synctrue表示写入 WAL 后要 fsync。这是最安全的模式但也是最慢的。syncfalse表示写入 WAL 后不 fsync依赖操作系统的刷盘机制。这种情况下如果进程崩溃但操作系统没崩数据还在页缓存里不会丢但如果机器断电页缓存里的数据就丢了。disableWALtrue表示完全不写 WAL。这种模式下数据只写 MemTable进程崩溃就丢。适合批量导入、缓存预热等场景。实际使用中我的建议是核心业务数据synctrue配合组提交吞吐可以接受非核心数据或可重建数据syncfalse定期手动 flush批量导入disableWALtrue导入完成后手动 flush提示syncfalse并不意味着数据一定会丢。如果只是进程崩溃比如 segfault操作系统仍然会把页缓存刷盘。只有机器断电或操作系统崩溃才会丢数据。所以如果你的部署环境有 UPSsyncfalse是可以接受的。4.4 WAL 文件的生命周期管理WAL 文件不是写完就删的。它的生命周期和 MemTable 绑定创建当 MemTable 被创建时会分配一个新的 WAL 文件或者复用当前文件写入所有写向这个 MemTable 的操作都会追加到对应的 WAL冻结MemTable 写满后变为 Immutable对应的 WAL 也停止写入刷盘Immutable MemTable 刷成 SST 文件删除SST 刷盘成功后对应的 WAL 文件被标记为可删除后台线程负责实际删除这个流程保证了只要 WAL 还在数据就能恢复WAL 删除时数据已经在 SST 里了。但这里有个细节多个 MemTable 可能共享一个 WAL 文件。RocksDB 有一个max_total_wal_size参数控制 WAL 总大小。如果 WAL 总大小超过阈值会强制切换 MemTable从而创建新的 WAL 文件。这个机制防止 WAL 无限增长。5. WAL 的恢复流程与关键细节5.1 恢复的整体流程RocksDB 启动时的恢复流程大致如下第一步扫描 WAL 目录找到所有 WAL 文件。文件名包含序列号按序列号排序。第二步从最新的 SST 文件开始确定哪些 WAL 文件需要重放。具体来说找到所有序列号大于最新 SST 序列号的 WAL 文件。第三步逐个读取 WAL 文件解析记录重放到 MemTable。重放时会校验 CRC如果校验失败停止重放。第四步重放完成后MemTable 可能已经写满需要刷盘。刷盘后恢复完成。这个流程看起来简单但实际实现时要处理很多问题WAL 文件可能不完整最后一条记录写了一半、可能有多个 Column Family、可能有事务相关的特殊记录。5.2 不完整记录的处理WAL 文件最后一条记录可能是不完整的因为写入过程中崩溃了。RocksDB 在恢复时会检测这种情况如果记录头部不完整不足 7 字节停止重放如果记录数据不完整长度字段声明的长度超过实际可读数据停止重放如果 CRC 校验失败停止重放停止重放意味着后续记录都被忽略。这是合理的因为无法保证后续记录的完整性。但这也意味着如果 WAL 中间某条记录损坏后面的数据都会丢。所以 WAL 文件的完整性非常重要。注意RocksDB 有一个wal_recovery_mode参数可以控制恢复行为。默认是kPointInTimeRecovery遇到损坏就停止。还有kTolerateCorruptedTailRecords会容忍尾部损坏。选择哪种模式取决于你对数据完整性的要求。5.3 恢复时的序列号处理序列号是恢复的关键。每个操作都有一个全局递增的序列号恢复时必须保证序列号的连续性。RocksDB 在恢复时会做几件事从 SST 文件中读取最大的序列号从 WAL 中读取最小和最大的序列号确保 WAL 中的序列号大于 SST 中的序列号重放时按序列号顺序应用操作如果序列号出现断层比如 WAL 中缺少某个序列号RocksDB 会报错或停止恢复。这种情况通常意味着 WAL 文件丢失或损坏。5.4 多 Column Family 的恢复如果使用了多个 Column Family每个 CF 有自己的 MemTable 和 WAL 记录。恢复时需要把 WAL 记录分发到对应的 CF。WAL 记录里包含了 Column Family ID恢复时根据这个 ID 找到对应的 MemTable。如果某个 CF 的 MemTable 已经刷盘对应的 WAL 记录会被跳过。这里有个容易踩的坑CF 的创建和删除也会写入 WAL。如果恢复时 CF 不存在需要先创建 CF 再重放数据。RocksDB 在恢复时会处理这些元操作。6. 常见问题与排查技巧实录6.1 WAL 写入失败怎么办WAL 写入失败通常有几种原因磁盘满WAL 目录所在磁盘空间不足权限问题进程没有写权限IO 错误磁盘硬件故障文件句柄耗尽打开文件数超过限制排查思路先看日志RocksDB 会打印具体的错误信息。如果是磁盘满清理空间或调整max_total_wal_size。如果是权限问题检查目录权限。如果是 IO 错误检查磁盘健康状态。提示WAL 写入失败后RocksDB 会进入只读模式或直接崩溃取决于配置。生产环境建议配置监控及时发现 WAL 目录的空间和 IO 异常。6.2 恢复时间过长怎么优化恢复时间取决于 WAL 的大小和数量。如果 WAL 文件很多、很大恢复会很慢。优化思路减小max_total_wal_size让 WAL 更频繁地滚动和删除增大write_buffer_size减少 MemTable 切换频率使用更快的磁盘存放 WAL开启avoid_flush_during_recovery避免恢复时触发刷盘但要注意减小 WAL 大小会增加 MemTable 切换频率可能影响写入性能。需要根据实际负载权衡。6.3 WAL 文件损坏的排查WAL 文件损坏的表现是恢复时报 CRC 校验失败。排查步骤确认损坏的文件和位置检查磁盘是否有坏道检查是否有异常断电记录如果损坏在尾部可以尝试kTolerateCorruptedTailRecords模式恢复如果损坏在中间只能接受部分数据丢失预防措施使用可靠的存储介质、配置 UPS、定期备份。6.4 常见问题速查表问题现象可能原因排查方向解决建议写入延迟高fsync 频繁检查 sync 配置开启组提交调整收集窗口恢复时间长WAL 文件多检查 WAL 目录减小 max_total_wal_size数据丢失WAL 未开启检查 disableWAL核心数据开启 WALCRC 校验失败磁盘损坏检查磁盘健康更换磁盘从备份恢复WAL 目录满空间不足检查磁盘空间清理空间调整滚动策略恢复后数据不一致序列号断层检查 WAL 完整性从备份恢复6.5 实操心得我在调试 WAL 相关问题时总结了几个实用技巧技巧一用ldb工具查看 WAL 内容。RocksDB 提供了ldb命令行工具可以 dump WAL 文件的内容。命令是ldb --wal_dir/path/to/wal dump_wal。这个工具能看到每条记录的序列号、类型、Key、Value对排查问题非常有帮助。技巧二监控 WAL 目录的大小和文件数。WAL 目录异常增长通常意味着 MemTable 刷盘跟不上或者 Compaction 阻塞。及时发现可以避免磁盘满。技巧三压测时区分 sync 和 non-sync。很多性能问题只在 sync 模式下出现。压测时一定要覆盖 synctrue 的场景否则上线后可能遇到意外的延迟抖动。技巧四恢复测试要定期做。不要等到真出事了才测试恢复流程。定期模拟崩溃、重启、恢复确保流程可靠。技巧五WAL 和 SST 放在不同磁盘。如果条件允许把 WAL 放在更快的盘上比如 NVMeSST 放在大容量盘上。这样既能保证写入性能又能控制成本。7. 从 WAL 看存储引擎的设计哲学WAL 这个组件看似简单但它折射出存储引擎设计的几个核心原则。原则一持久化和性能可以兼得但需要巧妙的机制。组提交就是一个典型例子。单条 fsync 很慢但批量 fsync 就快得多。关键在于如何在不牺牲持久性的前提下批量处理。原则二恢复路径和写入路径一样重要。很多系统在设计时只关注写入性能忽略了恢复速度。但恢复速度直接影响系统的可用性。WAL 的顺序写和顺序读设计就是为了让恢复尽可能快。原则三没有银弹只有取舍。sync 还是 non-sync、WAL 开还是关、WAL 文件大还是小每个选择都有代价。理解这些取舍才能根据实际场景做出合理决策。原则四边界情况决定系统可靠性。WAL 的大部分代码都在处理边界情况记录分片、CRC 校验、不完整记录、序列号断层。这些情况在正常情况下不会出现但一旦出现就是致命的。我在实际使用 RocksDB 的过程中最大的体会是不要等到出问题才去理解 WAL。提前搞清楚它的工作原理、配置参数、恢复流程在设计和运维阶段就能避免很多坑。比如如果你知道syncfalse在断电时会丢数据就会在关键业务上开启synctrue如果你知道 WAL 文件会滚动就会监控 WAL 目录的大小。最后分享一个我常用的检查清单每次部署 RocksDB 前都会过一遍WAL 是否开启核心业务必须开启sync 是否配置根据数据重要性选择WAL 目录是否有足够空间至少预留 2 倍 max_total_wal_size是否有 WAL 目录的监控文件数和总大小都要监控恢复流程是否测试过定期模拟崩溃恢复是否有备份机制WAL 不能替代备份这套清单看起来简单但能避免大部分 WAL 相关的生产事故。存储这东西稳比快重要。

相关新闻

vllm-ascend EPD 解耦架构实战指南:Disaggregated Encoder 原理、部署与源码解析

vllm-ascend EPD 解耦架构实战指南:Disaggregated Encoder 原理、部署与源码解析

人工智能大模型模型推理服务AscendCANN 【免费下载链接】vllm-ascend Community maintained hardware plugin for vLLM on Huawei Ascend 项目地址: https://gitcode.com/gh_mirrors/vl/vllm-ascend 点击查看 免费下载 Disaggregated Encoder(解耦编码器…

2026/10/15 17:27:48 阅读更多 →
Python_Requests接口测试速查版

Python_Requests接口测试速查版

Python Requests 接口测试速查版:照着抄就能调通接口不讲大道理,只给能直接用的东西:发请求的骨架、三种传参怎么选、鉴权怎么写、登录态怎么保持、断言怎么写、批量怎么跑、坑怎么躲。所有代码基于 httpbin.org / jsonplaceholder 公开测试接…

2026/10/16 17:57:56 阅读更多 →
Python依赖管理实战:virtualenv安装、使用与避坑指南

Python依赖管理实战:virtualenv安装、使用与避坑指南

平时开发Python项目时,最让人头疼的往往不是业务逻辑本身,而是依赖管理。尤其当你同时维护着多个项目,这个要Requests 2.x,那个要Requests 3.x,还有的项目必须锁死在Python 3.6,装新库怕影响旧项目&#xf…

2026/10/15 17:27:48 阅读更多 →

最新新闻

MATLAB EMD工具箱实战:从经验模态分解到HHT时频分析

MATLAB EMD工具箱实战:从经验模态分解到HHT时频分析

简介:Matlab EMD经验模态分解工具箱,面向信号处理、故障诊断与振动分析领域的研究人员与工程师,用于对非线性、非平稳信号做自适应分解并提取有物理意义的本征模态函数分量。压缩包共38个文件,其中10个m脚本承担核心算法与在线/局…

2026/10/16 19:42:22 阅读更多 →
教务管理系统源码解析:技术选型、数据库设计与二次开发避坑指南

教务管理系统源码解析:技术选型、数据库设计与二次开发避坑指南

简介:这是一套面向计算机专业学生与Java Web开发者的教务管理系统完整源码,适合作为课程设计、毕业设计或企业级项目练手参考,帮助理解教育管理信息化的业务逻辑与技术落地。资源包共746个文件,约5.46MB,涵盖html、css…

2026/10/16 19:42:22 阅读更多 →
E7-2 AXOS everyPON 数据服务实施:从订户模板到策略映射实战指南

E7-2 AXOS everyPON 数据服务实施:从订户模板到策略映射实战指南

简介:Calix E7-2 AXOS everyPON数据服务实施课程的官方介绍文档,面向负责二层数据服务部署的技术员、网络运营者、规划师与工程师。资源包内仅含1个PDF文件,容量74KB,以精炼篇幅浓缩了4小时讲师授课的核心内容:E7-2 AX…

2026/10/16 19:42:22 阅读更多 →
gemma-skills新手必读:Google官方两大技能如何让AI Agent具备Gemma开发与微调能力

gemma-skills新手必读:Google官方两大技能如何让AI Agent具备Gemma开发与微调能力

【免费下载链接】gemma-skills Skills for the Gemma and model/agent interactions 项目地址: https://gitcode.com/gh_mirrors/ge/gemma-skills 点击查看 免费下载 如果你是刚接触 Gemma 模型的新手,gemma-skills 会是一个绝佳的起点。这是 Google 官…

2026/10/16 19:41:22 阅读更多 →
DeepSeek-V3-W4A8-Pruing权重文件怎么读?safetensors三分片结构与index索引完全解析

DeepSeek-V3-W4A8-Pruing权重文件怎么读?safetensors三分片结构与index索引完全解析

【免费下载链接】DeepSeek-V3-W4A8-Pruing 项目地址: https://ai.gitcode.com/hf_mirrors/vllm-ascend/DeepSeek-V3-W4A8-Pruing 点击查看 免费下载 初次接触 DeepSeek-V3-W4A8-Pruing 模型仓库时,面对 3 个 safetensors 分片文件、一个 578KB 的 index…

2026/10/16 19:41:22 阅读更多 →
整车控制器开发源代码:模块划分、状态机设计与工程落地

整车控制器开发源代码:模块划分、状态机设计与工程落地

简介:整车控制器(VCU)开发源代码包主要面向电动汽车与混合动力汽车控制系统的开发者、算法工程师及嵌入式软件研究者,用于解决VCU底层驱动、控制策略、状态机管理与故障处理等核心开发问题。包内文件共88个,以C源文件、…

2026/10/16 19:40:21 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →