Platform manajemen foto open-source Immich telah mengungkap desain ulang lengkap sistem sinkronisasi mobile-nya, mengatasi masalah performa yang sudah lama ada dan membuat frustrasi pengguna dengan perpustakaan foto yang besar. Implementasi Sync v2 yang baru menjanjikan untuk menyelesaikan masalah memori, mengurangi pengurasan baterai, dan menghilangkan kegagalan sinkronisasi yang mengganggu sistem asli.
Arsitektur Streaming Menggantikan Pendekatan Berat Memori
Perubahan paling signifikan melibatkan peralihan dari pemrosesan seluruh potongan data dalam memori ke pendekatan streaming. Sistem baru membaca data dari database PostgreSQL dalam potongan kecil, menserialisasinya secara bertahap, dan mengirimkannya melalui HTTP menggunakan format JSON Lines . Ini menghilangkan kebutuhan untuk memuat sejumlah besar metadata foto ke dalam memori sekaligus, yang sebelumnya menyebabkan aplikasi membeku atau crash selama operasi sinkronisasi.
JSON Lines adalah format data di mana setiap baris berisi objek JSON terpisah, membuatnya lebih mudah untuk memproses informasi bagian demi bagian daripada sekaligus.
Peningkatan Utama Sync v2
- Streaming end-to-end: Data mengalir dalam potongan dari database server ke database mobile
- Sinkronisasi yang dapat dilanjutkan: Gangguan jaringan tidak lagi memerlukan memulai dari awal
- Pembaruan bertahap: Hanya data yang berubah yang ditransmisikan
- Efisiensi memori: Menghilangkan objek JSON besar dalam memori
- Implementasi UUIDv7: Pengenal unik berbasis waktu untuk pengurutan yang andal
- Format JSON Lines: Setiap baris berisi objek JSON terpisah untuk streaming
Sinkronisasi yang Dapat Dilanjutkan Mencegah Memulai dari Awal
Salah satu fitur yang paling diminta mengatasi frustrasi pengguna yang umum di mana gangguan jaringan akan memaksa seluruh proses sinkronisasi untuk dimulai ulang dari awal. Sistem baru menggunakan checkpoint dan token pengakuan untuk melacak kemajuan, memungkinkan pengguna untuk melanjutkan tepat di mana mereka berhenti jika koneksi mereka terputus.
Implementasi ini mengandalkan identifier UUIDv7 , yang menggabungkan timestamp dengan nilai unik untuk menciptakan sistem pengurutan yang dapat diandalkan. Ini memastikan bahwa bahkan jika beberapa foto diproses secara bersamaan, sinkronisasi dapat secara akurat menentukan di mana harus melanjutkan.
UUIDv7 adalah jenis identifier khusus yang menyertakan informasi timestamp dalam 48 bit pertamanya, membuatnya unik dan terurut berdasarkan waktu.
Respons Komunitas Menyoroti Tantangan yang Sedang Berlangsung
Pengguna dalam komunitas Immich telah mengekspresikan antusiasme untuk peningkatan performa sambil menyoroti masalah tambahan yang masih memerlukan perhatian. Beberapa pengguna melaporkan masalah dengan penanganan timestamp dari foto iCloud dan kegagalan upload sesekali yang memerlukan restart aplikasi.
Saya hanya menemukan dua masalah dengan aplikasi mobile, dan salah satunya berkaitan dengan performa - aplikasi akan terjebak saat mengunggah gambar ke server, dan tidak ada waktu tunggu yang akan membuatnya selesai.
Diskusi juga mengungkapkan dukungan komunitas yang kuat untuk proyek ini, dengan banyak pengguna berhasil bermigrasi dari Google Photos ke instalasi Immich yang di-host sendiri. Namun, beberapa pengguna mencatat fitur yang hilang seperti sinkronisasi bidirectional, di mana menghapus foto dari perangkat juga akan menghapusnya dari server.
Detail Implementasi Teknis
Tim pengembangan mengatasi tantangan melacak item yang dihapus dengan mengimplementasikan database trigger yang menyimpan catatan penghapusan sementara. Ini memungkinkan perangkat mobile untuk mempelajari tentang penghapusan selama siklus sinkronisasi berikutnya, memastikan konsistensi data di seluruh platform.
Peralihan dari TypeORM ke Kysely untuk operasi database telah menunjukkan peningkatan performa di bagian lain aplikasi, berkontribusi pada optimisasi sistem secara keseluruhan.
Sistem sinkronisasi baru mewakili langkah kritis menuju rilis stabil Immich , mengatasi salah satu hambatan teknis utama terakhir untuk pengguna yang mengelola koleksi foto besar yang melebihi 100.000 aset.
Referensi: Sync v2