📄 一句话概括
事实只有一份(JSONL 流水),视图随便派生:SQL 库、统计、标题、大纲……视图是派生的,坏了可以重算——实测还有 projection-cache 给视图缓存。
📝 本节和前面几节的关系
6.4 立了【事实与视图分离】,这一节把【视图】这个词讲透——它的学名叫 Projection(投影)。
一、什么是 Projection
从同一组事实按需生成的不同视图:
- 完整事件流水(persistence-jsonl)——给重建、回放。
- SQL 可查询库(query-sqlite)——给排查。
- 统计(stats)——给面板。
- 标题(title)——给会话列表。
- 轮次大纲(turn-outline)——给导航。
事实一份,视图任意——加一个视图不用动事实,删一个视图事实毫发无损。
二、实测:连缓存都是独立的包
配置里有 session-projection 和 session-projection-cache 两件——
视图的计算与缓存都各自成包:算过的视图存起来,下次直接用。
这再次印证 3.7 的判断:细到【视图缓存】都是一个插件。
三、派生品的规矩
- 可重算:视图坏了、过时了,从事实重新生成——不心疼。
- 不回写:视图永远只读事实,不改事实——单向数据流。
- 可增删:明天想加【按工具统计】的视图,事实一个字节不用动。
判断设计好坏的尺子:事实动过没有?
四、和 2.6 方法的会师
2.6 说【做差集看结构】,6.4 说【配置不会撒谎】—— Projection 是同一哲学的数据面:事实是唯一的真源,其余都是它的投影。
排查问题时也一样:先看事实(流水),再看投影(视图)——投影不一致,重算就好;事实不一致,才是真问题。
五、动手 Demo:Projection——同一组事实,不同视图
五个视图、三条规矩:
views = ["完整事件流水", "SQL 可查询库", "统计", "标题", "轮次大纲"]
for v in views:
print(" 视图: %s" % v)
print()
print(" 规矩: 可重算 / 不回写 / 可增删")
print(" 尺子: 排查先看事实, 投影不一致就重算")
实跑输出:
--------------------------------------------------------------------
Projection——同一组事实,不同视图
--------------------------------------------------------------------
事实只有一份(JSONL 流水),视图可以有很多:
视图 从哪来 给谁用
-----------------------------------------------------
完整事件流水 persistence-jsonl 重建、回放
SQL 可查询库 session-query-sqlite 排查
统计 session-stats 面板
标题 session-title 会话列表
轮次大纲 session-turn-outline 导航
-----------------------------------------------------
实测还有一件 `session-projection-cache`——**视图算过就缓存**。
关键性质:**视图是派生的,事实只有一份**——
视图随便加、随便改,不会污染事实;
事实坏了才是真坏了。这是 6.6 整节的支点。
事实一份,视图任意——增删视图不动事实,这是分离的价值。 projection-cache 单独成包——细到缓存都是插件(3.7 再证)。 排查尺子:投影不一致重算就好,事实不一致才是真问题。
30 秒实验
- 在配置树里数一数 session 系列里几个是【事实】、几个是【视图】。
- 举一个你想加的新视图,说明它从事实怎么算出来。
- 用【事实动过没有】这把尺子检查你手头的一个数据系统。
常见误区
- 错误:Projection 是数据库的投影查询。——纠正:这里是从事件事实派生视图的机制——思想相通,对象不同。
- 错误:视图也可以直接改,反正是自己用的。——纠正:视图只读事实——回写会破坏唯一真源。
- 错误:视图多了系统会乱。——纠正:乱不了——视图互相独立、坏了重算,事实不动如山。
自测三问(点开对答案)
1. Projection 是什么? —— **从同一组事实按需生成的不同视图**——SQL 库、统计、标题、大纲都是。 2. 派生品的三条规矩是什么? —— **可重算、不回写、可增删**——事实永远只读。 3. 排查时的尺子是什么? —— **投影不一致重算就好;事实不一致才是真问题。**- ☐ 下一节(6.6.4 上下文压缩也必须保持可解释)
相关笔记
- Session 不是简单的消息数组 —— 事实与视图分离的出处
- 本章小结 —— 【配置不会撒谎】的同一哲学
- 简单的虚拟化基础设施 —— 同样是【一份底座,多种呈现】
- 🐳 DeepSeek Harness · 索引