通過litestream 進(jìn)行sqlite-vec 數(shù)據(jù)備份以及恢復(fù)
實際上就是一個簡單的測試,litestream 支持流式復(fù)制,比較適合對于sqlite進(jìn)行備份,同時litestream 還支持對象存儲的remote 模式,比較方便
環(huán)境準(zhǔn)備
- minio
services:
s3:
image: minio/minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "9000:9000"
- "9001:9001"
- litestream 配置
dbs:
- path: ./examplev2.db
replicas:
- type: s3
bucket: demo
endpoint: http://localhost:9000
path: db/
access-key-id: minioadmin
secret-access-key: minioadmin
region: us-east-1
force-path-style: true # 對 MinIO 必須開啟
使用
- 啟動服務(wù)
./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)
''')
# 插入數(shù)據(jù)
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()
- 復(fù)制效果


- 恢復(fù)操作
可以通過cli 使用s3的數(shù)據(jù)進(jìn)行恢復(fù)
./litestream restore -config ./litestream.yml examplev2.db
效果

說明
如果需要對于基于sqlite-vec 的數(shù)據(jù)進(jìn)行備份以及恢復(fù)litestream是一個不錯的選擇,靈活方便,當(dāng)然sqlite 備份以及恢復(fù)工具實際也有不少呢,litefs 也是一個不錯的選擇
參考資料
https://github.com/asg017/sqlite-vec
https://litestream.io/reference/config/
https://github.com/benbjohnson/litestream
浙公網(wǎng)安備 33010602011771號