오, 이건 내가 만든 Go용 sqlite vfs 모듈을 사용하고 있음
내가 만든 코드가 다른 사람에게 도움이 된다는 걸 알게 될 때마다 정말 기쁨 psanford/sqlite3vfs
잘 작동했음. 덕분에 고마움
결국 우리가 인생에서 바라는 건 이런 순간임
이건 정말 멋짐. Litestream VFS가 유닉스 철학을 그대로 담고 있음
SQLite는 평소처럼 작동하고, Litestream은 그 위에서 투명하게 동작함
즉, SQL과 SQLite pragma만으로 즉시 시점 복구(PITR) 를 구현할 수 있음.
프로덕션 데이터셋을 직접 만지지 않고도 과거 데이터를 빠르게 조회할 수 있음
인터페이스 디자인이 정말 깔끔함
환경 변수로 S3 버킷을 지정하고, SQLite에서 .load litestream.so 후 PRAGMA litestream_time = '5 minutes ago';로 과거 시점 데이터를 바로 조회할 수 있음
macOS에서는 brew install sqlite3 후 .load litestream sqlite3_litestreamvfs_init처럼 init 함수 이름을 직접 지정해야 함
bun:sqlite로도 성공적으로 작동시켰음 "LITESTREAM_REPLICA_URL"과 AWS 키 환경 변수만 설정하면 됨 temp.loadExtension("/path/to/litestream.dylib", "sqlite3_litestreamvfs_init")로 확장 로드 후 file:my.db?vfs=litestream으로 열면 바로 사용 가능함
이건 주로 JavaScript 서버(bun) 환경에서 쓰이는 용도인지 궁금함
잘 작동했다니 멋짐. 그런데 .dylib 파일 경로는 어떻게 찾았는지 궁금함
참고로, 이 예시에서 환경 변수 설정 부분은 dotenv로는 작동하지 않음. 반드시 실행 시 직접 지정해야 함
정말 멋진 기능임.
내 사용 사례는 S3에 저장된 읽기 전용 SQLite DB를 웹사이트에서 직접 사용하는 것임
DB는 cron 작업 등으로 갱신되고, 웹사이트는 Litestream VFS를 통해 최신 데이터를 읽기만 함
이런 방식으로 사용해도 괜찮은지, 그리고 Python 통합 모듈이 있는지도 궁금함
현재는 Flask 앱이 Google Spreadsheet에서 데이터를 가져와 SQLite로 변환 후 매일 갱신함 내 앱 코드 참고
작성자임. Litestream VFS는 1초마다 백업 데이터를 자동으로 폴링해서 최신 상태를 유지함
추가적인 Python 코드 없이 SQLite CLI에서도 그대로 작동함
Go용 SQLite 드라이버에도 이미 구현해둠 ncruces/go-sqlite3 예시 코드
환경 변수 없이 프로그램 코드로 제어할 수 있고, 여러 DB를 동시에 다룰 수 있음
단, PRAGMA litestream_time은 커넥션 단위로 적용되므로 커넥션 풀 사용 시 주의 필요함
.load litestream.so를 보고 바로 ncruces/go-sqlite3가 떠올랐음
wasm 환경에서도 작동시키는 게 어려웠는지 궁금함
최근 DuckDB를 배우며 SQLite와의 차이를 느끼고 있음
DuckDB의 “DuckLake” 확장은 트랜잭션마다 스냅샷을 만들어 “시간 여행” 기능을 제공함
이는 Litestream VFS의 PITR과 유사함
OLTP에서는 이를 복구 기능이라 부르고, OLAP에서는 “Time Travel”이라 함
DuckLake는 외부 카탈로그 DB(PostgreSQL/MySQL/SQLite)를 이용해 다중 프로세스 접근을 조율함
반면 Litestream은 S3의 불변 LTX 파일을 통해 여러 리더가 동시에 접근 가능함
두 세계 모두 “공유 스토리지 + 메타데이터 + 압축(compaction)” 구조로 수렴 중임
이런 프로젝트 간의 교차 협업이 더 많아지면 좋겠음
샌드위치 애호가로서, 그 샌드위치 평점 데이터가 정말 궁금함
흥미롭긴 한데, 정확히 어떤 소프트웨어가 발표된 건지 헷갈림. Litestream의 새 버전인가?
작성자임. 맞음, Litestream v0.5.3이 새로 릴리스되었고, 읽기 전용 VFS 옵션이 추가됨 v0.5.3 릴리스 노트
이번 버전에는 멀티 테넌트 DB용 디렉터리 복제 지원도 포함되어 있음. 훌륭한 추가 기능임
sqlite 확장 기능들과도 함께 작동하는지 궁금함
예를 들어 sqlite-vec이나 vss 같은 벡터 검색 확장을 사용 중일 때,
Litestream으로 S3에 실시간 백업하고 Litestream VFS로 원격 조회가 가능한지 알고 싶음
나도 궁금함. 아마 쿼리는 로컬에서 실행되고, 필요한 페이지 단위로 S3에서 가져오는 구조라면 그냥 작동할 듯함
직접 테스트해보는 수밖에 없을 것 같음
Hacker News 의견들
내가 만든 코드가 다른 사람에게 도움이 된다는 걸 알게 될 때마다 정말 기쁨
psanford/sqlite3vfs
SQLite는 평소처럼 작동하고, Litestream은 그 위에서 투명하게 동작함
즉, SQL과 SQLite pragma만으로 즉시 시점 복구(PITR) 를 구현할 수 있음.
프로덕션 데이터셋을 직접 만지지 않고도 과거 데이터를 빠르게 조회할 수 있음
환경 변수로 S3 버킷을 지정하고, SQLite에서
.load litestream.so후PRAGMA litestream_time = '5 minutes ago';로 과거 시점 데이터를 바로 조회할 수 있음brew install sqlite3후.load litestream sqlite3_litestreamvfs_init처럼 init 함수 이름을 직접 지정해야 함"LITESTREAM_REPLICA_URL"과 AWS 키 환경 변수만 설정하면 됨temp.loadExtension("/path/to/litestream.dylib", "sqlite3_litestreamvfs_init")로 확장 로드 후file:my.db?vfs=litestream으로 열면 바로 사용 가능함.dylib파일 경로는 어떻게 찾았는지 궁금함내 사용 사례는 S3에 저장된 읽기 전용 SQLite DB를 웹사이트에서 직접 사용하는 것임
DB는 cron 작업 등으로 갱신되고, 웹사이트는 Litestream VFS를 통해 최신 데이터를 읽기만 함
이런 방식으로 사용해도 괜찮은지, 그리고 Python 통합 모듈이 있는지도 궁금함
현재는 Flask 앱이 Google Spreadsheet에서 데이터를 가져와 SQLite로 변환 후 매일 갱신함
내 앱 코드 참고
추가적인 Python 코드 없이 SQLite CLI에서도 그대로 작동함
S3만 외부 의존성으로 사용하며 SQLite와도 잘 맞음
ZeroFS SQLite 성능 참고
ncruces/go-sqlite3 예시 코드
환경 변수 없이 프로그램 코드로 제어할 수 있고, 여러 DB를 동시에 다룰 수 있음
단,
PRAGMA litestream_time은 커넥션 단위로 적용되므로 커넥션 풀 사용 시 주의 필요함.load litestream.so를 보고 바로 ncruces/go-sqlite3가 떠올랐음wasm 환경에서도 작동시키는 게 어려웠는지 궁금함
DuckDB의 “DuckLake” 확장은 트랜잭션마다 스냅샷을 만들어 “시간 여행” 기능을 제공함
이는 Litestream VFS의 PITR과 유사함
OLTP에서는 이를 복구 기능이라 부르고, OLAP에서는 “Time Travel”이라 함
DuckLake는 외부 카탈로그 DB(PostgreSQL/MySQL/SQLite)를 이용해 다중 프로세스 접근을 조율함
반면 Litestream은 S3의 불변 LTX 파일을 통해 여러 리더가 동시에 접근 가능함
두 세계 모두 “공유 스토리지 + 메타데이터 + 압축(compaction)” 구조로 수렴 중임
이런 프로젝트 간의 교차 협업이 더 많아지면 좋겠음
v0.5.3 릴리스 노트
예를 들어 sqlite-vec이나 vss 같은 벡터 검색 확장을 사용 중일 때,
Litestream으로 S3에 실시간 백업하고 Litestream VFS로 원격 조회가 가능한지 알고 싶음
직접 테스트해보는 수밖에 없을 것 같음