Bir iPhone uygulamasında saklanan çekirdek verileri iPad veya Mac gibi birden fazla cihaz arasında senkronize etmek için bir yöntem üzerinde çalışıyorum. İOS'ta Temel Verilerle kullanmak için çok fazla (varsa) senkronizasyon çerçevesi yoktur. Ancak, aşağıdaki kavram hakkında düşünüyorum:
- Yerel çekirdek veri deposunda bir değişiklik yapılır ve değişiklik kaydedilir. (a) Aygıt çevrimiçi ise, değişiklik kümesini gönderen aygıtın aygıt kimliği de dahil olmak üzere, değişiklik kümesini sunucuya göndermeye çalışır. (b) Değişiklik kümesi sunucuya ulaşmazsa veya cihaz çevrimiçi değilse, uygulama çevrimiçi olduğunda gönderilecek değişikliği bir kuyruğa ekler.
- Bulutta oturan sunucu, aldığı ana değişiklik kümesini ana veritabanıyla birleştirir.
- Bulut sunucusunda bir değişiklik kümesi (veya bir değişiklik kümesi kuyruğu) birleştirildikten sonra, sunucu tüm bu değişiklik kümelerini bir tür yoklama sistemi kullanarak sunucuya kayıtlı diğer aygıtlara gönderir. (Apple'ın Push hizmetlerini kullanmayı düşündüm, ancak görünüşe göre bu yorumlara göre bu uygulanabilir bir sistem değil.)
Düşünmem gereken bir şey var mı? ObjectiveResource , Core Resource ve RestfulCoreData gibi REST çerçevelerine baktım . Tabii ki, bunların hepsi bağlı olmadığım Ruby on Rails ile çalışıyor, ama başlamak için bir yer. Çözümüm için sahip olduğum temel gereksinimler:
- Herhangi bir değişiklik ana iş parçacığı duraklatılmadan arka planda gönderilmelidir.
- Mümkün olduğunca az bant genişliği kullanmalıdır.
Bir takım zorlukları düşündüm:
- Farklı cihazlardaki farklı veri depoları için nesne kimliklerinin sunucuya bağlı olduğundan emin olun. Yani, veritabanında depolanan nesneye bir başvuru ile bağlı bir nesne kimlikleri ve aygıt kimlikleri tablosu olacak. Bir kayıt (DatabaseId [bu tabloya benzersiz]], ObjectId [tüm veritabanındaki öğeye benzersiz], Datafield1, Datafield2), ObjectId alanı başka bir tablo, AllObjects: (ObjectId, DeviceId, DeviceObjectId) başvurulacaktır. Ardından, aygıt bir değişiklik kümesini yukarı ittiğinde, yerel veri deposundaki çekirdek veri nesnesinden aygıt kimliği ve objectId boyunca geçer. Daha sonra bulut sunucum AllObjects tablosundaki objectId ve cihaz kimliğini kontrol eder ve ilk tabloda değiştirilecek kaydı bulur.
- Tüm değişikliklerin birleştirilebilmesi için zaman damgası uygulanmalıdır.
- Cihazın çok fazla pil kullanmadan sunucuyu yoklaması gerekir.
- Yerel aygıtların, sunucudan değişiklik alındığında / alındığında bellekte tutulan her şeyi güncellemesi gerekir.
Burada özlediğim başka bir şey var mı? Bunu mümkün kılmak için ne tür çerçevelere bakmalıyım?