服务热线 176-0134-6471 商务邮箱 eric_sun@starryeraai.cn
满星纪元Manxing Era

断网不丢数:边缘缓存的三种工程实现

边缘缓存听起来只是「写本地」,但实现方式选错,数据量一上来就会在恢复补传时把设备拖垮。三种常见实现各有明确的适用边界。

内存队列 写入最快 · 实现最简单 写入 环形缓冲(内存) 掉电即丢 掉电安全:否 本地时序库 支持按时间范围查询 写入 批量提交 本地时序库 掉电安全:是 文件日志 + 索引 当前采用 · 可恢复 写入 追加日志 索引 + 落盘 掉电安全:是 · 当前方案
示意图:三种缓存实现的写入路径与掉电安全性差异。

三种实现

  • 内存队列:写入快、读取快,实现最简单。问题是掉电即丢,且容量受限于设备内存。
  • 本地时序库:支持按时间范围查询与聚合,压缩率高。代价是引入数据库进程,对存储寿命与资源占用都有额外要求。
  • 文件日志 + 索引:按时间分片写入追加日志,旁挂一个轻量索引文件。写入路径短、掉电安全性好,恢复时按分片顺序读取。

怎么选

实现掉电安全适合的数据量恢复速度
内存队列否小,分钟级缓存快
本地时序库是中,天级缓存中
文件日志 + 索引是大,周级缓存中

我们的选择

Autonet 边缘侧最终选择了文件日志 + 索引,原因是它在掉电安全、容量与实现复杂度之间最平衡。内存队列只保留为一级缓冲,用来吸收写入抖动。

cache/
  2026-03-27/00.seg   # 追加写入的原始数据
  2026-03-27/00.idx   # 旁挂索引:时间范围 -> 偏移

为什么补传顺序很重要

按分片顺序补传,可以让上层看到的数据始终时间有序。如果并发补传多个分片,即使一个字节都没丢,曲线也会来回跳变,反而比缺失更难排查。