不卷硬件!用少量计算节省巨量存储的压缩去重与冷热分层实践

存储成本往往是IT预算里最容易被忽视的一项。很多人习惯于“不够就加硬盘”,但我越来越觉得,与其在采购单上加一块磁盘,不如先在计算资源上动动脑子。用少量CPU或GPU做压缩、去重和冷热分层,能省下的空间往往超过想象,这在今天数据量暴涨的背景下,是一条性价比极高的路线。

这篇内容围绕“不卷显卡!用少量‘计算’节省巨量‘存储’”这个主题展开,主要面向负责存储系统设计、数据备份策略、日志归档方案,以及被云存储账单困扰的开发者或运维朋友。我会从成本账、压缩算法选择、块级去重、冷热分层这几个维度,补上原理、选型理由和实操经验,尽量做到可以直接参考和落地。

1. 先算清一笔账:计算比存储“便宜”在哪里

1.1 存储的复利式成本增长

买硬盘和买CPU的区别,不只是单价上的数字差异,而是运营模型的根本不同。一块16TB的企业级硬盘,采购价可能在两千到四千元区间,看起来不贵,但这只是起始成本。磁盘要占机柜的盘位,盘位背后是供电容量和散热预算,再往上还有RAID控制器、HBA卡、网络连接,以及最容易被忽略的机房租金。一台2U服务器如果塞满16块硬盘,整个生命周期里的电力消耗和更换损耗,会逐渐接近甚至超过硬件本身的采购价。

相比之下,压缩、去重这类运算消耗的CPU时间通常以分钟甚至秒为单位。一台服务器哪怕只是增加几条CPU配额,或者在业务低峰期调用空闲核,成本增加也微乎其微。云厂商的定价曲线也有类似逻辑:SSD存储每GB的月费,通常比同等规模的计算实例贵数倍,而且存储费用是按月持续计费,计算却可以按秒按次付费。把高频写入的数据先压缩再落盘,省下的不只是空间,还有持续性的费用。

1.2 数据分层里的“冷热账本”

存储里的数据,活跃度差异非常大。热数据被频繁读取,对响应时间敏感,需要高性能介质;冷数据可能一两个月都不访问一次,却同样占着空间和备份额度。这里最典型的场景是日志归档和数据库历史表,很多团队把一两年前的日志原样保留,动辄几十TB,却从没意识到这些数据完全可以用更高压缩比的方式存放。

假设一份原始文本日志是2TB,用快速压缩算法能做到3:1的压缩比,空间降到700GB左右;如果换成慢但压缩率更高的算法,并且允许更长的压缩时间,可能压到400GB。这个过程中CPU消耗虽然多几倍,但存储减少的绝对量非常可观,而且压缩是一次性成本,收益却持续到数据被删除的那一天。用一天的CPU时间换两年的存储费用,这笔账怎么算都是划算的。

1.3 一个虚拟的成本对比模型

我把这个思路做成一个简化成本模型,方便大家对照自己的项目估算。

项目传统方案(直接加存储)计算换存储方案
数据增量(每年)50TB50TB
有效压缩/去重率1:1(无处理)3:1
实际占用50TB约17TB
新增存储采购成本高(按全量购买)低(只需购买三分之一)
压缩处理资源无占用少量CPU,可调度到低峰期
长期电费与机柜成本按50TB持续支付按17TB持续支付

这个模型里没有算备份副本翻倍的情况,真实环境再加上多副本和容灾拷贝,节省效果会再放大几倍。理解了这个成本结构,后面聊压缩算法和去重机制才有意义。

2. 压缩算法的选型逻辑:按数据特征挑工具,而不是迷信最新

2.1 为什么压缩率不是唯一指标

很多人一想到压缩,第一反应是“压缩率最高的算法最好”,但实际工程里这是个典型误区。压缩性能的评价维度至少有三个:压缩率、压缩速度、解压速度,而这三者往往互相制约。一个算法可以做到极高的压缩率,但如果压缩一TB数据要跑上一整天,或者解压时CPU占用飙到百分百,那它可能只适合冷数据归档,不适合在线读取。

选择压缩算法前,先要搞清楚数据的特点。文本日志、JSON、CSV这类数据冗余度高,压缩率通常很理想;而图片、视频、已压缩格式的文件(如JPEG、MP4、ZIP),再压一遍的效果非常有限,甚至白白浪费CPU。数据库页文件和数据备份集则要看具体内容,有些虚拟机的磁盘镜像里包含大量未分配空间,压缩率反而惊人。这里我一般建议的做法,是先抽样一小批真实数据做基准测试,再决定用哪个算法。

2.2 主流算法的相对定位

我日常接触最多的是几个通用压缩库,这里用表格梳理它们的大致定位,方便按场景挑选:

算法压缩速度压缩率解压速度适合场景
LZ4极快低极快在线实时压缩,热数据
GZIP/DEFLATE中等中等中等日志归档、通用文件
Zstandard(ZSTD)快高快通用场景,冷热皆可
Brotli中很高中文本类静态资源
LZMA/XZ慢极高中冷数据归档、安装包

ZSTD是这些年的一个折中优选,它在压缩率接近老牌高压缩算法的同时,速度和内存占用控制得相当好。很多对象存储网关和备份软件默认都在用ZSTD,不只是因为它新,而是它在不同预设级别下的表现非常灵活。LZ4则适合那些要求低延迟、在线写入的场景,虽然体积省得少,但一丁点CPU开销换回来的性能稳定性非常值。GZIP虽然“年纪大”,但兼容性无敌,老系统集成不会出问题。

2.3 不要忽视“解压速度”这个隐藏成本

压缩动作往往发生在写入路径上,可能是一次性的;但解压会发生在读取路径上,用户或者业务系统每一次访问都要经过它。某些高压缩率算法的解压速度很慢,如果你的存储系统后面连着在线访问请求,那解压CPU可能成为新的瓶颈,省下的空间换来了更慢的响应,业务上就得不偿失。

一个相对稳妥的做法是给不同层级的数据配置不同的压缩策略:最新数据用LZ4快速压缩,保证写入和读取都不拖后腿;超过一定年龄的历史数据,再用ZSTD高压缩级别重压一遍,丢到冷存储层。这个思路其实和缓存淘汰策略异曲同工,按访问热度决定用多少CPU来换空间,后面会有专门小节展开讲。

3. 块级去重与哈希指纹:用CPU识别“事实上重复”的数据

3.1 去重为什么比压缩更能“省巨量存储”

压缩是在单个文件内部寻找冗余,去重则是跨文件、跨快照找出完全相同的数据块。一个典型的例子是虚拟机磁盘备份:十台虚拟机如果都装了同一个操作系统,系统文件在磁盘上的二进制内容可能高度一致;如果按整个文件做MD5,因为文件元数据不同,可能识别不出来,但把文件切成固定大小的数据块后按块计算哈希,就会发现大量相同的块。这些块只需要保存一份,其他全部用引用代替。

去重节省的空间往往比压缩大一个量级。压缩能做到3:1或5:1已经很不错,但虚拟化环境里去重率10:1甚至30:1都不稀奇。它的原理其实很朴素:用CPU做一次哈希计算,把每个数据块映射为一个几十字节的指纹,然后查指纹索引决定这个块是否已经存在。哈希计算的CPU开销远小于要节省的存储空间,这正是“用计算换存储”的一种极致形态。

3.2 变长分块:解决“增删一个字节导致全部失效”的问题

固定大小分块的去重实现简单,但有个硬伤:如果在数据流里插入或删除几个字节,后续所有分块的边界都会偏移,导致本应相同的块全部无法匹配。比如一份文档在开头加了一个空格,后面几MB内容的实际数据没变,但固定分块的哈希全都变了,去重率立刻掉到接近零。

实际部署中,很多方案采用基于内容定义的分块,常见的是Rabin指纹算法,也叫CDC。它通过滑动窗口计算哈希,在哈希值满足某种条件时切块,这样即使数据中间发生插入或删除,只有受影响的那一小部分块边界发生变化,其余大量块仍能正确匹配。类似技术在很多开源备份工具里已经有封装,直接拿来的成本远低于自己实现。

3.3 哈希碰撞与去重安全性的取舍

去重系统把数据块指纹当作判断依据,就必然要面对哈希碰撞的概率问题。MD5、SHA-1这种摘要长度较短的算法,碰撞概率理论上虽低,但面对恶意构造的数据时存在安全隐患。工程上更稳妥的做法是分层校验:先用SHA-256计算指纹做索引,命中后可以再比对块长度甚至抽样校验内容,或者干脆用SHA-256这种碰撞概率极低的算法作为指纹。

不过并不是所有系统都必须追求极端安全。内部备份系统里的数据来自自己的服务器,不涉及外部用户恶意上传的话,SHA-1或更高位的摘要已经足够使用。但如果你的系统允许外部客户端上传数据,那就需要认真考虑“故意构造碰撞块”的威胁模型,这是另一个话题,但去重方案选型时一定要提前确认。

3.4 去重索引的存储开销也是成本

去重系统本身需要维护一个指纹索引,每个块对应几十字节的哈希信息和元数据。一个存储池内有2亿个数据块,索引就可能占掉几十GB内存。索引放内存是为了查询速度,但如果内存容量有限,就要考虑分片或写回磁盘的方案,这会直接影响写入性能。设计去重系统时,这是不得不权衡的点:到底用多少内存去换存储节省率。

我做过一个小规模实验,用开源工具对几台虚拟机的磁盘镜像做块级去重预分析,先把所有磁盘切成4KB固定块并计算SHA-256,然后统计唯一块数量。结果发现,系统镜像类的数据块去重率非常高,而用户数据分区里因为大量加密文件和压缩包的存在,去重效果几乎为零。这个结论说明了两件事:去重不是万能钥匙,它适合数据内容高度标准化的场景;做任何去重改造之前,最好先对自己的数据跑一轮采样分析。

4. 冷热分层与重压缩:把计算用在数据“变冷”的那一刻

4.1 数据的“半衰期”与存储策略切换

数据热度会随时间衰减。数据库订单表刚生成的时候,线上系统高频读取;三个月后变成报表查询的冷数据;一年之后可能只在审计需求里翻出来。如果所有数据都放在同一个高性能存储集群、用同一种副本策略,那中间有大量成本在为“万一访问”买单。这里的核心操作,是定义一个清晰的数据生命周期策略,在不同时间点自动迁移并重新压缩。

以日志系统举例,比较常见的做法是:最近7天的日志放在热存储上,保留原始格式或只做LZ4快速压缩,因为可能要被实时检索;7天到90天的日志迁移到标准存储,用ZSTD默认级别压缩;超过90天的日志进入冷归档存储,用ZSTD最高级别或XZ压缩,并且可以只保留一份副本。整个迁移由调度任务在凌晨或业务低峰期执行,对在线服务几乎没有影响。

4.2 重压缩:一次写入,两次压缩,反而更快

可能有人会问:“既然最终要压成高压缩比格式,为什么不一开始就用最高压缩级别?”原因很好理解,最新数据的写入路径上往往有实时写入压力,用高压缩级别会让写入速度变慢,而且热数据通常需要快速读回。先快写,等数据变冷后再用高压缩比算法重压一遍,这样写入性能不受影响,冷数据的空间占用也能达到最优,这就是“重压缩”的价值。

我见过不少团队担心重压缩的CPU消耗,实际执行效果却比预想中好。比如一个几十TB的归档目录,分批重压,每批几百GB,放在夜间的备用计算资源上跑,一个周期下来能腾出很大空间。如果公司有容器化调度平台,甚至可以把它做成一个优先级很低的批处理任务,随时能被在线服务抢占,最大化利用闲置计算。这种用低峰期计算换存储的做法,在预算紧张时尤其有价值。

4.3 冷数据介质也要考虑“整块读”特性

十几年前,冷存储最理想的选择似乎是磁带,但是磁带驱动器昂贵、随机读取能力弱,只在极大规模的合规归档场景里有优势。当前更常见的选择是对象存储加冷存储类别,以及蓝光光盘库,或者干脆用在线的低速大容量机械硬盘。这些介质有一个共同特性:顺序读很快,随机读和反复改写成本很高。所以冷数据最好按“大块”压缩,一个归档文件一个包,而不是拆成海量小文件,否则索引和元数据管理的开销会吃掉压缩省下的空间收益。

比如归档日志时,可以按天或按小时打包成一个ZSTD压缩文件,并在外部维护一个“归档包内文件清单”的索引文件。查询时先查索引,再解压包内对应的那一段内容,效率远高于直接对几千个小散文件做处理。这也是一个很多团队容易忽略的运维细节:压缩之前先把文件合并成大块,能同时优化CPU开销和存储系统IOPS。

5. 实测经验与排查思路:为什么压缩配置“看着对”却没省下空间

5.1 一个典型场景:备份集越压越大

有朋友遇到过这样一个问题:对一批数据库备份文件做压缩,压缩后体积反而比原来大。这个现象看起来违反直觉,但发生频率并不低。根因通常是备份文件内部本来就是高度压缩或加密的数据。数据库备份文件如果使用压缩备份选项,或者数据本身是大量随机化的测试数据,那么再压一遍,算法找不到冗余,甚至还要额外存储压缩协议的开销,体积自然降不下来。

排查思路很简单,先对样本文件跑一下熵检测。高熵数据意味着每个字节几乎等概率出现,这类数据没有压缩空间。用任何主流压缩工具的默认级别压一遍,观察压缩后体积变化率是否低于百分之几,基本就可以判断数据是否“可压”。另一种情况是备份工具自己已经内置了去重和压缩,外部再套一层属于重复劳动,CPU和耗时白白增加。

5.2 压缩吞吐成了写入瓶颈

还有一种情况恰恰相反:压缩率很好,但压缩速度跟不上写入速度。在线高并发日志写入的场景最容易踩这个坑。如果每个日志写入请求同步做压缩,而压缩算法级别又选得很高,CPU会瞬间打满,写入延迟直线上升。这个地方的关键是先分清写入模型:数据可以接受异步写,那压缩放在后台没问题;数据必须同步落盘,那就要用最快的那一档压缩算法,甚至考虑直接用低成本硬件(比如带有压缩卸载能力的存储卡)来分担CPU压力。

实测中,我发现LZ4在大多数服务端CPU上可以达到数GB每秒的压缩吞吐,处理日志足够用;ZSTD的默认级别大约在几百MB每秒到1GB每秒之间,具体看核心型号和内存带宽。如果你的写入峰值接近这个上限,就该考虑做缓冲队列,让压缩任务排队,避免压缩阻塞业务写入。

5.3 去重块大小选择与内存压力

块大小直接决定去重效率和内存占用。块太小(比如4KB),唯一块数量巨大,指纹索引会撑爆内存;块太大(比如8MB),虽然索引小了,但识别重复的粒度变粗,小块数据相同也无法匹配。现实中很多系统选4KB到64KB之间的分块,并建议按存储池容量估算索引内存。我用一个对比实验说明差异:对同一份虚拟磁盘镜像,4KB分块能识别出约80%的重复块,内存占用峰值约1.2GB;64KB分块识别率降到约60%,内存占用只有原五分之一。这个取舍要看你的机器是内存更富裕还是空间更紧缺。

此外,还要考虑哈希计算的开销。CPU支持SHA扩展指令的话,SHA-256计算速度非常快,不要因为担心性能放弃安全系数更高的算法。如果在很老的CPU上做批量去重,可以考虑用CRC64做初步过滤,命中后再用SHA-256校验,减少整体计算量。

5.4 从环境变量到算法级参数,先改一个维度再验证

最后聊一个经验法则:压缩系统的调优,一次只改一个变量。很多人看到配置项密密麻麻,急着同时调压缩级别、分块大小、索引内存、并发线程数,结果性能反而下降,又说不清是哪一项参数造成的。正确路径是先固定其他参数,每次只调整一个维度,记录吞吐率、压缩率、CPU占用三组数据,跑完一轮再决定下一步。参数对比至少要跑三轮取中位数,避免系统抖动引起误判。

如果能把这个参数矩阵整理成一份基准测试表,后面无论换硬件还是扩容,都能快速定位新的最佳参数,不用从头折腾。我自己习惯把这类测试脚本化,往CI任务里塞一条命令,数据变更时自动给出现行配置的对比结果,省了很多手工调参的时间。

6. 收尾一点实在话

我不太喜欢把优化方案讲得神乎其神,实际落地的时候一定会有跟理论不一致的意外。比如某些文件系统本身已经支持透明压缩,你再在外面套一层压缩就多此一举;又比如虽然ZSTD很强,但某些老旧的业务进程无法识别新格式,换算法还得考虑兼容性。做“用计算换存储”这件事,最需要的是先理解自己的数据,再决定工具,而不是拿到一把锤子就看什么都像钉子。

我个人实际运作中的体会是:先用小规模样本快速验证压缩率和去重率,再决定是不是值得投入改造。很多时候,头十分钟的采样分析就能给出一份合理预期,接下来无非是选一个低峰期把任务跑起来而已。如果你正在被存储账单和扩容审批折腾,不妨先拿一台不忙的服务器,把数据特征测一遍,多半会发现省空间这件事根本不需要换硬盘。

相关新闻

多目标跟踪实战指南:检测器、卡尔曼滤波与关联参数调优

多目标跟踪实战指南:检测器、卡尔曼滤波与关联参数调优

简介:多目标跟踪是计算机视觉中的核心任务,这份vibe-kalman资源将VIBE前景检测与卡尔曼滤波跟踪相结合,面向希望学习或复现经典跟踪方案的开发者。VIBE通过像素级背景建模提取运动前景,卡尔曼滤波器则对每个目标进行状态预测与更新…

2026/10/20 7:18:58 阅读更多 →
用CPU压缩换存储空间:数据压缩与重删实战指南

用CPU压缩换存储空间:数据压缩与重删实战指南

1. 先说结论:这条赛道,属于会算账的人最近两年大家都在冲大模型、冲训练集群,显卡成了硬通货。我身边不少人一聊到性能优化,第一反应就是“加卡”“上线更大显存”。但是很少有人认真算过一笔账:你的数据真的需要那么多…

2026/10/20 7:18:58 阅读更多 →
LinkSwift:基于Tampermonkey的合规网盘直链工具深度解析

LinkSwift:基于Tampermonkey的合规网盘直链工具深度解析

在云存储资源日益普及但直链获取日趋复杂的背景下,基于浏览器用户脚本的下载辅助工具成为技术爱好者与重度用户关注的焦点。本文深入解析LinkSwift这款基于JavaScript与Tampermonkey开发的开源工具,剖析其在技术实现、合规性声明、安全机制升级及多渠道分…

2026/10/20 7:17:57 阅读更多 →

最新新闻

Agent上线就崩?从状态管理到可观测性,拆解工程化落地的五大核心难题

Agent上线就崩?从状态管理到可观测性,拆解工程化落地的五大核心难题

1. 演示与上线之间的鸿沟到底在哪做 Agent 项目的人大概都经历过这种场面:内部演示的时候,Agent 流畅地理解需求、调用工具、多步推理、最后给出一个漂亮的答案,会议室里一片掌声。然后老板说“下周上线吧”,结果一上线&#xff0…

2026/10/20 8:13:30 阅读更多 →
查IP地址不用装App:一条命令分清内网IP与公网IP

查IP地址不用装App:一条命令分清内网IP与公网IP

查IP地址这件事,听着特简单,真做起来却有一堆让人上火的小状况。我经常被朋友问“你帮我看看我电脑IP是多少”,结果他说的是宽带师傅问他“你家庭网关的公网IP变没变”,俩人鸡同鸭讲。实际上,“查IP地址”至少分成三个…

2026/10/20 8:13:30 阅读更多 →
大模型跨文化推理评估全指南:从方法到避坑实践

大模型跨文化推理评估全指南:从方法到避坑实践

去年我们团队接了个挺特别的评估任务:给一个大语言模型的推理能力做跨文化适应性测试。最初大家都觉得这活儿不复杂——把现成的英文推理评测集翻译成中文、日文、阿拉伯文,跑一遍看分数不就完了?结果第一次试跑就翻车了。同一道逻辑推理题&a…

2026/10/20 8:13:30 阅读更多 →
AGI核心突破已实现?从理论到智能体落地的工程实践指南

AGI核心突破已实现?从理论到智能体落地的工程实践指南

在 AI 圈子里待久了,你会发现一个规律:每隔几个月,就会有一句“石破天惊”的话炸出来,让行业内外都跟着兴奋或焦虑一回。最近这两天,某前沿AI机构前首席研究官的一番表态,就精准踩中了这个节奏——他直接放…

2026/10/20 8:13:30 阅读更多 →
MySQL 8.0 WITH子句详解:从基础语法到递归CTE优化

MySQL 8.0 WITH子句详解:从基础语法到递归CTE优化

你回想一下,早几年写稍微复杂一点的分析SQL,是不是每次都得先建临时表、再join几层子查询,到了第三层嵌套自己都看不下去?MySQL 8.0的通用表达式(WITH)出来后,这个问题基本算是翻篇了。我最早接…

2026/10/20 8:13:30 阅读更多 →
S7-1200与博途V16在生物发酵控制系统中的实施经验

S7-1200与博途V16在生物发酵控制系统中的实施经验

做自动化这些年,液体、流量、温控项目接过不少,但真正让人睡不踏实的,还是生物发酵这一类。罐子里养的是活物,微生物不会等我把PID调完再繁殖,迟到一小时,整罐料可能就废了。制药厂对批次记录、灭菌温度曲线…

2026/10/20 8:12:29 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →