In Memory SQLite 的備份與還原
· 閱讀時間約 3 分鐘
近期在研究一個相對有趣的問題:如何讓 In-Memory SQLite 能夠在程式結束時進行自動備份,並且在程式啟動時自動套用最新的備份。
如果想要備份 SQLite,有幾種方式:
- 使用
.dump將指定表中資料匯出為 SQL- 優點:將資料轉存為 SQL,如果需要跨資料庫(例如 sqlite to mysql)的話相當方便
- 缺點:檔案為 UTF-8 純文字檔案,所需容量較大且需要轉換 SQL 故執行時間會較長
- 使用
VACUUM INTO指令,將 DB 檔案轉存為獨立的檔案- 優點:執行後會將資料碎片彙整,進一步降低所需容量;且生成的檔案可以直接被 sqlite 客戶端讀取
- 缺點:寫入時在極端情況下(例如當機或停電),並不保證資料能夠被完整寫入
- 使用 Online Backup API
- 優點:直接鏡像備份兩個 SQLite 連線;效率較
VACUUM來得高 - 缺點:沒有直接的指令,需使用 SQLite API 達成;因為是鏡像備份,所以包括源資料庫的資料碎片等亦會被保留
- 優點:直接鏡像備份兩個 SQLite 連線;效率較
