30 lines
1.3 KiB
Python
Executable File
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)
|