Immich 行動應用程式獲得重大效能升級,推出全新同步系統

BigGo 社群部
Immich 行動應用程式獲得重大效能升級,推出全新同步系統

開源照片管理平台 Immich 推出了行動同步系統的完整重新設計,解決了長期以來困擾擁有大型照片庫用戶的效能問題。全新的 Sync v2 實作承諾解決記憶體問題、減少電池耗電量,並消除困擾原始系統的同步失敗問題。

串流架構取代記憶體密集型方法

最重要的變化是從在記憶體中處理整個資料塊轉換為串流方法。新系統以小塊方式從 PostgreSQL 資料庫讀取資料,逐步序列化,並使用 JSON Lines 格式透過 HTTP 傳送。這消除了一次性將大量照片中繼資料載入記憶體的需求,先前這種做法會導致應用程式在同步操作期間凍結或當機。

JSON Lines 是一種資料格式,每一行包含一個獨立的 JSON 物件,使得逐一處理資訊變得更容易,而不是一次處理所有資訊。

Sync v2 關鍵改進

  • 端到端串流傳輸:資料以區塊形式從伺服器資料庫流向行動裝置資料庫
  • 可恢復同步:網路中斷不再需要重新開始
  • 增量更新:僅傳輸已變更的資料
  • 記憶體效率:消除記憶體中的大型 JSON 物件
  • UUIDv7 實作:基於時間的唯一識別碼,確保可靠排序
  • JSON Lines 格式:每行包含獨立的 JSON 物件以支援串流傳輸

可恢復同步避免重新開始

其中一個最受歡迎的功能解決了用戶常見的困擾,即網路中斷會強制整個同步程序從頭開始重新啟動。新系統使用檢查點和確認權杖來追蹤進度,允許用戶在連線中斷時從中斷的確切位置恢復。

實作依賴於 UUIDv7 識別碼,它結合時間戳記與唯一值來建立可靠的排序系統。這確保即使同時處理多張照片,同步也能準確判斷從何處繼續。

UUIDv7 是一種特殊類型的識別碼,在其前 48 位元中包含時間戳記資訊,使其既獨特又按時間排序。

社群回應突顯持續挑戰

Immich 社群的用戶對效能改善表達了熱忱,同時也強調了仍需關注的其他問題。數位用戶回報了來自 iCloud 照片的時間戳記處理問題,以及偶爾需要重新啟動應用程式的上傳失敗問題。

「我只注意到行動應用程式有兩個問題,其中一個與效能有關 - 它會卡在上傳圖片到伺服器的過程中,無論等待多久都無法完成。」

討論也顯示了社群對專案的強力支持,許多用戶成功從 Google Photos 遷移到自架的 Immich 安裝。然而,一些用戶注意到缺少雙向同步等功能,即從裝置刪除照片也會從伺服器移除它們。

技術實作細節

開發團隊透過實作資料庫觸發器來暫時保存刪除記錄,解決了追蹤已刪除項目的挑戰。這允許行動裝置在下次同步週期中了解刪除情況,確保跨平台的資料一致性。

從 TypeORM 轉換到 Kysely 進行資料庫操作已在應用程式的其他部分顯示效能改善,有助於整體系統最佳化。

新的同步系統代表了 Immich 邁向穩定版本的關鍵一步,解決了管理超過 100,000 個資產的大型照片收藏用戶面臨的最後一個主要技術障礙。

參考資料:Sync v2