写完数据重启进程,collection 变成空的,count 返回 0,可磁盘上明明有文件在增长。

这类报错背后常见的原因有几处,逐个排除就行。用的是内存模式,进程结束数据就没了;持久化目录写在了临时路径;容器重启后挂载点丢失;客户端参数与写入时不是同一个目录。

第一件事是确认客户端是否指定了持久化目录

client = chromadb.PersistentClient(path='/data/chroma')

随后列出目录下的数据库文件

python -c "import os;print(os.listdir('/data/chroma'))"

接着写入后检查集合数量

python -c "print(client.get_collection('docs').count())"

剩下的就是容器启动时把目录挂载出来

docker run -v /data/chroma:/data/chroma chromadb/chroma

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

恢复的判定其实很直接。重启后集合仍在且数量不变,检索结果与写入前一致,目录里的文件持续增长。

提醒一点。内存模式不会报任何警告,写进去看起来完全正常,只有重启才会暴露,开发阶段很容易踩这个坑。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189