Saya telah mengerjakan metode untuk menyinkronkan data inti yang disimpan dalam aplikasi iPhone antara beberapa perangkat, seperti iPad atau Mac. Tidak banyak (jika ada sama sekali) kerangka kerja sinkronisasi untuk digunakan dengan Core Data di iOS. Namun, saya telah memikirkan konsep berikut:
- Perubahan dibuat ke penyimpanan data inti lokal, dan perubahan disimpan. (a) Jika perangkat online, ia mencoba untuk mengirim perubahan ke server, termasuk ID perangkat dari perangkat yang mengirim perubahan tersebut. (B) Jika perubahan tidak mencapai server, atau jika perangkat tidak online, aplikasi akan menambahkan perubahan yang diatur ke antrian untuk mengirim ketika itu online.
- Server, yang duduk di cloud, menggabungkan set perubahan spesifik yang diterimanya dengan database masternya.
- Setelah set perubahan (atau antrian set perubahan) digabungkan pada server cloud, server mendorong semua set perubahan tersebut ke perangkat lain yang terdaftar di server menggunakan semacam sistem polling. (Saya berpikir untuk menggunakan layanan Push Apple, tetapi menurut komentar ternyata ini bukan sistem yang bisa diterapkan.)
Apakah ada hal mewah yang perlu saya pikirkan? Saya telah melihat kerangka kerja REST seperti ObjectiveResource , Core Resource , dan RestfulCoreData . Tentu saja, ini semua bekerja dengan Ruby on Rails, yang saya tidak terikat, tetapi ini adalah tempat untuk memulai. Persyaratan utama yang saya miliki untuk solusi saya adalah:
- Setiap perubahan harus dikirim di latar belakang tanpa menghentikan utas utama.
- Seharusnya menggunakan bandwidth sesedikit mungkin.
Saya telah memikirkan sejumlah tantangan:
- Memastikan bahwa ID objek untuk penyimpanan data yang berbeda pada perangkat yang berbeda terpasang pada server. Artinya, saya akan memiliki tabel ID objek dan ID perangkat, yang diikat melalui referensi ke objek yang disimpan dalam database. Saya akan memiliki catatan (DatabaseId [unik untuk tabel ini], ObjectId [unik untuk item di seluruh database], Datafield1, Datafield2), bidang ObjectId akan merujuk tabel lain, AllObjects: (ObjectId, DeviceId, DeviceObjectId). Kemudian, ketika perangkat mendorong set perubahan, itu akan melewati ID perangkat dan objekId dari objek data inti di penyimpanan data lokal. Kemudian server cloud saya akan memeriksa terhadap objectId dan ID perangkat di tabel AllObjects, dan menemukan catatan untuk berubah di tabel awal.
- Semua perubahan harus diberi stempel waktu, sehingga dapat digabungkan.
- Perangkat harus menyurvei server, tanpa menggunakan baterai terlalu banyak.
- Perangkat lokal juga perlu memperbarui apa pun yang tersimpan dalam memori jika / ketika perubahan diterima dari server.
Apakah ada hal lain yang saya lewatkan di sini? Kerangka kerja seperti apa yang harus saya perhatikan untuk memungkinkan hal ini?