xiaowei-system/scripts/lance_compact.py

30 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""LanceDB VACUUM: optimize(compaction+prune) memoryweave 35G 治理 v3"""
import lancedb, time, os
from datetime import timedelta
start = time.time()
db = lancedb.connect("/var/lib/memoryweave")
def human(n):
return f"{n/1024**3:.2f}G" if n > 1024**3 else f"{n/1024**2:.0f}M"
def dir_size(p):
return sum(os.path.getsize(os.path.join(dp, f)) for dp, _, fns in os.walk(p) for f in fns if os.path.isfile(os.path.join(dp, f)))
for name in ["memories", "episodes"]:
t0 = time.time()
t = db.open_table(name)
before = dir_size(f"/var/lib/memoryweave/{name}.lance")
print(f"=== [{name}] VACUUM 开始 rows={t.count_rows()} size={human(before)} ===", flush=True)
try:
t.optimize(cleanup_older_than=timedelta(days=0), delete_unverified=False, retrain=False)
print(f" optimize OK ({time.time()-t0:.0f}s)", flush=True)
except Exception as e:
print(f" optimize 失败: {e}", flush=True)
after = dir_size(f"/var/lib/memoryweave/{name}.lance")
print(f" [{name}] 完成: rows={t.count_rows()} size {human(before)}{human(after)} ({time.time()-t0:.0f}s)", flush=True)
print(f"\n=== 全部完成 总耗时 {time.time()-start:.0f}s ===", flush=True)
print(f"memoryweave 总大小: {human(dir_size('/var/lib/memoryweave'))}", flush=True)