通过litestream 进行sqlite-vec 数据备份以及恢复
实际上就是一个简单的测试,litestream 支持流式复制,比较适合对于sqlite进行备份,同时litestream 还支持对象存储的remote 模式,比较方便
环境准备
- minio
services: s3:image: minio/miniocommand: server /data --console-address ":9001"environment:MINIO_ROOT_USER: minioadminMINIO_ROOT_PASSWORD: minioadminports:- "9000:9000"- "9001:9001"
- litestream 配置
dbs:- path: ./examplev2.dbreplicas:- type: s3bucket: demoendpoint: http://localhost:9000path: db/access-key-id: minioadminsecret-access-key: minioadminregion: us-east-1force-path-style: true # 对 MinIO 必须开启
使用
- 启动服务
./litestream replicate --config ./litestream.yml
- sqlite-vec db 操作
import sqlite3
import numpy as np
import sqlite_vec
from sqlite_vec import serialize_float32
db = sqlite3.connect("examplev2.db")
db.enable_load_extension(True)
sqlite_vec.load(db)
db.enable_load_extension(False)
vector = np.random.rand(2).astype(np.float32)
vector = [1,8]
db.execute('''
CREATE virtual TABLE IF NOT EXISTS vec_documents using vec0 (id INTEGER PRIMARY KEY,embedding FLOAT[2],name text)
''')
# 插入数据
db.execute("INSERT INTO vec_documents (embedding,name) VALUES (?,?)",(serialize_float32(vector),"example_name")
)
result = db.execute('''select * from vec_documents where embedding=?;
''', (serialize_float32(vector),))print(result.fetchall())
db.commit()
db.close()
- 复制效果


- 恢复操作
可以通过cli 使用s3的数据进行恢复
./litestream restore -config ./litestream.yml examplev2.db
效果

说明
如果需要对于基于sqlite-vec 的数据进行备份以及恢复litestream是一个不错的选择,灵活方便,当然sqlite 备份以及恢复工具实际也有不少呢,litefs 也是一个不错的选择
参考资料
https://github.com/asg017/sqlite-vec
https://litestream.io/reference/config/
https://github.com/benbjohnson/litestream
https://litestream.io/reference/restore/
https://litestream.io/reference/replicate/
