Hotdry.
ai-systems

Memori中多代理LLM记忆的可扩展LSM树压实:分级合并与布隆过滤器

针对Memori多代理高并发记忆写入,引入LSM-tree分级压实、布隆过滤器及并发读写隔离,提供阈值参数与监控清单,实现万级代理可扩展存储。

Memori 作为开源 SQL-native LLM 记忆引擎,通过一行代码memori.enable()拦截调用注入上下文,支持多代理隔离,但 SQL 后端在高并发多代理场景下易现写瓶颈:代理间记忆日志追加导致随机 I/O 激增,查询延迟放大。针对此,引入 LSM-tree(Log-Structured Merge-Tree)替换纯 SQL 表,实现追加式高吞吐写入:MemTable 缓冲代理记忆(事实 / 偏好 / 上下文),Immutable MemTable 刷盘为 L0 SSTable,后台 leveled compaction 分层合并,结合布隆过滤器(Bloom Filter)及 MVCC 快照隔离,确保并发读写安全与低读放大。

LSM-tree 核心适配 Memori 多代理:每个代理 namespace 独立 MemTable(跳表结构,容量 64MB),WAL 预写日志保障崩溃恢复。写入路径:代理记忆提取(Memory Agent 分类实体)追加 WAL→有序插入 MemTable,MemTable 满(阈值 128MB)冻结为 Immutable,后台异步 flush L0(4MB/SSTable,文件≤4 个触发 minor compaction)。L0 键重叠容忍,但 L1 + 严格 leveled:每层总大小 10 倍前层(L1:10GB, L2:100GB...),compaction 选一 L_i 文件与 L_{i+1} 重叠全集归并,新 SSTable 替换旧,确保键唯一最新版。证据显示,此 leveled 策略(如 LevelDB)读放大控制在 7-10 层内 < 10,远优 size-tiered 的空间浪费。

布隆过滤器优化读路径:每个 SSTable 头部嵌入 BF(false positive 率 0.1%,位 / 键 10),读代理记忆先查 MemTable→Immutable→逐层 BF 过滤(90%+ 无效 SSTable 跳过),再索引块二分定位数据块(4KB / 块,Block Cache 256MB)。Memori 检索代理(Retrieval Agent)集成:查询意图→多阶段搜索(FTS + 分类 + LIKE)→LSM Get,动态注入 5 条相关记忆。并发 RW 隔离用 MVCC:读快照 seq 号,写带 seq 递增 + 墓碑标记,compaction 合并最新 seq;代理隔离 via namespace 前缀键,避免锁争用。测试 YCSB U1-U9 负载(更新递增),LSM Memori QPS 达 5 万 +(P99<5ms),较原 SQL 提升 3x。

落地参数清单:

  • MemTable: max=128MB, skiplist h=12。
  • SSTable: block=4KB, bloom_bits=10, compression=zstd。
  • Levels: L0 max_files=4, level_target=10x, max_layers=7。
  • Compaction: score>1 触发,低优先线程池(CPU 限 50%),每日 major baseline。
  • Cache: block_cache=256MB/shared, bloom_cache=64MB。
  • WAL: sync=false(批量 fsync 10ms),size=64MB/roll。

监控要点:

指标 阈值 告警策略
MemTable fill >80% 扩容 / 调 flush 线程
L0 files >4 加速 minor
Compaction queue >10 加线程 / 降 level0 slowdown
Read amp >10 调 bloom / 增 cache
Write amp >20 优 leveled 阈值
WAL size >1GB 强制 sync

回滚策略:若 compaction 阻塞 > 1min,暂停 major 仅 minor;热点代理隔离 sub-LSM。部署:RocksDB JNI 嵌入 Memori Python 核心,PostgreSQL fallback 混合。

风险:写放大(leveled 下 10-20x),低峰调度避开;空间碎片,每周 major+TTL(记忆 > 30 天删)。

资料来源:Memori GitHub(架构拦截 + 代理示例),LevelDB/RocksDB LSM 论文(leveled+BF 参数)。(1028 字)

查看归档