Memento存储架构解密:H.264视频+SQLite FTS5+向量数据库,三位一体打造你的“时间机器“

📅 2026/8/20 18:18:56
Memento存储架构解密:H.264视频+SQLite FTS5+向量数据库,三位一体打造你的“时间机器“
Memento存储架构解密H.264视频SQLite FTS5向量数据库三位一体打造你的时间机器【免费下载链接】MementoMemento is a Python app that records everything you do on your computer and lets you go back in time, search, and chat with a LLM (Large Language Model) to find back information about what you did.项目地址: https://gitcode.com/gh_mirrors/mem/MementoMemento 是一款开源的电脑使用记录工具它像一台个人时间机器每 2 秒截取一次屏幕自动记录你做过的一切然后让你回到过去的任意时刻、全文搜索甚至和 AI 对话找回记忆。而这一切的基础正是它精心设计的存储架构——H.264 视频 SQLite FTS5 向量数据库的三位一体组合。本文带你逐层拆解这套存储方案的设计思路看看它是如何用可接受的磁盘成本换来秒级搜索和智能问答体验的。一、存储架构全景三层数据各司其职Memento 的存储架构可以简单理解为三层每层解决一类问题数据层存储介质解决什么问题数据量参考画面层H.264 视频.mp4 分片保存原始屏幕画面支持回放每小时约 120MB文本层SQLite FTS5 全文索引关键词精确搜索、定位时间点轻量、毫秒级返回语义层Chroma 向量数据库语义检索、LLM 对话问答随记录量增长这三个层次互相配合视频负责看SQLite 负责找向量库负责懂。下面逐一解密。二、第一层H.264 视频用极低码率保存每一帧画面 Memento 的核心诉求之一是高效存储屏幕画面。它没有选择逐张保存 PNG 截图而是把连续截图编码成 H.264 视频流利用视频压缩的帧间冗余大幅降低磁盘占用。关键设计在 memento/utils.py 的Recorder类中每2 秒截取一帧FPS 0.5每10 秒滚动生成一个独立的.mp4分片SECONDS_PER_REC 10分辨率压缩到1920×1080码率压到约 850 kbps的极低水平分片设计非常巧妙视频按时间段切块检索时只需打开对应分片即可快速取帧无需加载全部数据配合 memento/caching.py 中的ReadersCache帧缓存机制回放体验相当流畅。三、第二层SQLite FTS5让关键词搜索毫秒级完成 ⚡画面存下来了怎么快速找到昨天下午我看到的那个关键词Memento 的做法是用 OCR 把屏幕文字抽出来再灌进 SQLite 的 FTS5 全文索引。数据库结构定义在 memento/db.py核心是三张表FRAME记录帧的 ID、窗口标题和时间CONTENT记录每帧中 OCR 识别出的文字及其位置坐标CONTENT_FTSFTS5 虚拟表承载全文检索CREATE VIRTUAL TABLE CONTENT_FTS USING fts5(frame_id, text, x, y, w, h)更巧妙的是Memento 用触发器让 CONTENT 表和 FTS 索引自动同步写入时无需手动维护索引CREATE TRIGGER insert_content AFTER INSERT ON CONTENT BEGIN INSERT INTO CONTENT_FTS (frame_id, text, x, y, w, h) VALUES (new.frame_id, new.text, new.x, new.y, new.w, new.h); end;搜索时只需一条MATCH查询就能按相关度排序返回命中结果SELECT rank, frame_id, text FROM CONTENT_FTS WHERE text MATCH ? ORDER BY rank DESC得益于 FTS5 的倒排索引即使积累了数万帧 OCR 文本关键词搜索依然能毫秒级完成——这正是 memento/timeline/search_bar.py 中搜索栏的底层引擎。四、第三层向量数据库让 AI 理解你的记忆 关键词搜索只能匹配字面相同的内容。但如果你想问我上周看的那个关于深度学习的文章标题是什么这就需要语义理解。Memento 的答案是向量数据库 LLM。后台进程会把每个应用使用片段比如连续在一个文档里操作的一段时间的合并文本用 OpenAI Embeddings 转成向量存入Chroma向量数据库见 memento/background.py。对话时流程是这样的核心代码在 memento/timeline/chat.py用户提问 → 用向量检索找出语义最接近的历史文本片段把命中片段及其帧 ID、时间、窗口标题作为上下文交给 GPT 模型组织答案并返回对应的frames_ids界面自动展示这些历史时刻的截图缩略图点击即可跳转这正是和你的过去聊天的魔法所在——向量数据库让 AI 不再局限于字面匹配而是真正理解你做过什么。五、数据流水线从截屏到可搜索记忆只需几步 把三层存储串起来Memento 后台memento-bg的完整工作流是截屏每 2 秒抓取屏幕同时获取当前活动窗口标题去重用imgdiff计算画面差异画面几乎没变就跳过 OCR节省大量算力编码把截图写入当前 H.264 视频分片OCR后台 worker 用 Tesseract 识别文字提取文本与位置框入库文本写入 SQLite FTS5片段级文本写入向量库元数据帧的时间、窗口、文本位置保存在 JSON 元数据缓存中画面、文本、语义三份数据同步落盘互不干扰又彼此关联通过frame_id一一对应这就是整个存储架构的精髓。六、每小时 120MB这个存储成本划算吗根据项目 READMEMemento 每小时产生约120MB数据。我们来算一笔账每天使用 8 小时 ≈1GB / 天使用 1 个月 ≈30GB一块 1TB 硬盘 ≈ 可记录1 个月以上的完整数字生活考虑到它记录的是全部屏幕内容这个成本其实相当划算——毕竟一部 2 小时的电影高清版通常也要 2~4GB。而且项目还在持续优化压缩方案未来数据量有望进一步下降。七、快速体验三步启动你的个人时间机器 想亲自体验这套存储架构只需三步第一步克隆并安装git clone https://gitcode.com/gh_mirrors/mem/Memento cd Memento pip install -e .第二步安装 OCR 依赖Tesseractsudo apt install tesseract-ocr第三步启动记录与回看memento-bg # 后台开始记录你的屏幕 memento-timeline # 打开时间轴界面在时间轴里你可以滚动浏览历史、CtrlF全文搜索、CtrlT和 AI 对话。若配置了OPENAI_API_KEY还能体验和记忆聊天的完整能力。结语三位一体的存储设计成就可搜索的人生Memento 的存储架构给我们的启示很清晰没有一种存储介质能解决所有问题。视频管画面、SQLite FTS5 管精确检索、向量数据库管语义理解——三者各司其职通过统一的frame_id串联最终拼出了一台真正可回放、可搜索、可对话的个人时间机器。如果你对电脑记录、本地优先的数据管理或 AI 检索感兴趣Memento 这份开源存储架构非常值得研究甚至可以直接改造搭建属于你自己的记忆系统。【免费下载链接】MementoMemento is a Python app that records everything you do on your computer and lets you go back in time, search, and chat with a LLM (Large Language Model) to find back information about what you did.项目地址: https://gitcode.com/gh_mirrors/mem/Memento创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考