Hacker News 의견
  • SQLite는 공식 도구를 제공함. 페이지 수준에서 작동하며, 복제본이 각 페이지의 암호화 해시를 원본 측에 보내고, 해시가 일치하지 않는 페이지의 전체 내용을 원본이 다시 보냄
  • 실행 중인 데이터베이스 파일을 복사하면 손상될 수 있음. 안전한 복제를 위해 Litestream을 사용할 수 있음
  • 데이터베이스를 컴퓨터 간에 복사하는 방법으로는 원을 보내고 나머지 부분은 무시하는 방법이 있음
    • 증분 rsync가 더 빠르지만, SQL 문을 보내는 것이 데이터베이스를 보내는 것보다 빠르다는 주장에 동의하지 않음. SQL 문을 실행하고 최적화 및 진공 작업을 수행해야 함
    • CSV 파일에서 데이터베이스를 "증분적으로 재구축"해야 하는 시나리오가 있음. 데이터베이스를 처음부터 다시 만드는 것이 더 최적이지만, 메모리 내 빈 데이터베이스에 배치 삽입을 실행하는 데만 30분이 걸림
  • 최근에 출시된 sqlite_rsync 유틸리티는 SQLite 데이터베이스의 내부 구조에 최적화된 rsync 알고리즘 버전을 사용함. 내부 데이터 페이지를 효율적으로 비교하고 변경되거나 누락된 페이지만 동기화함
  • 텍스트 파일로 저장하는 것은 비효율적임. VACUUM INTO를 사용하여 sqlite 데이터베이스를 저장함
    • VACUUM 명령어는 백업 API의 대안으로, 결과 백업 데이터베이스가 최소 크기여서 파일 시스템 I/O가 줄어듦
  • rsync가 제공하는 압축 기능을 사용하지 않은 것이 놀라움. gzip으로 압축한 후 전송하는 것이 더 빠를 수 있음
  • DuckDB에서는 Parquet로 내보내어 데이터 크기를 줄일 수 있음. 전송 및 로드 속도가 더 빠름
  • SQLite는 세션 확장을 제공하여 테이블의 변경 사항을 추적하고 이전 버전의 SQLite 데이터베이스를 패치할 수 있는 변경 집합/패치 집합을 생성함
  • gzip의 "--rsyncable" 옵션을 사용하여 최적화할 수 있음. 압축을 약간 줄이지만 차이점을 국지화하여 전체 압축 출력에 영향을 주지 않음
    • 덤프 출력의 압축을 건너뛰고 rsync가 이전 비압축 덤프와 현재 덤프의 차이점을 계산하도록 한 후, rsync가 네트워크를 통해 전송하는 변경 집합을 압축하도록 할 수 있음
  • 2008년에 Postgres를 사용하여 여러 기계에 백업을 전송해야 했던 경험이 있음. 네트워크가 포화 상태가 되어 udpcast를 사용하여 백업을 한 번에 모든 목적지로 전송함