Pracuję nad zwykłą aplikacją na iPhone'a, która pobiera dane z serwera (XML, JSON itp.) I zastanawiam się, jaki jest najlepszy sposób na wdrożenie danych synchronizujących . Kryteria to szybkość (mniejsza wymiana danych w sieci), solidność (odzyskiwanie danych w przypadku niepowodzenia aktualizacji), dostęp w trybie offline i elastyczność (można dostosować, gdy struktura bazy danych ulega niewielkim zmianom, np. Nowa kolumna). Wiem, że to zależy od aplikacji, ale czy możesz podzielić się swoją strategią/doświadczeniem?Najlepsza strategia synchronizowania danych w aplikacji iPhone'a
Dla mnie, mam na myśli coś takiego:
1) Sklep data ostatniej modyfikacji w iPhone
2) Po uruchomieniu, wysłać wiadomość jak getNewData.php lastmodifieddate = ...?
3) Serwer przetworzy i wyśle tylko zmodyfikowane dane z ostatniego czasu.
4) Te dane są formatowane jako tak:
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
Nie chcę, aby < +>, < ->, <%> ... także dla każdego atrybutu, ponieważ byłoby to zbyt skomplikowane, więc prawdopodobnie po odebraniu pola <%> po prostu usunę dane z określonym identyfikatorem, a następnie dodaj go ponownie (zakładając, że id tutaj nie jest polem automatycznie automatycznie zwiększanym).
5) Gdy wszystko zostanie pobrane i zaktualizowane, zaktualizuję pole Ostatnia modyfikowana data.
Głównym problemem związanym z tą strategią jest: Jeśli sieć ulegnie awarii podczas aktualizacji czegoś => Ostatnia aktualizacja daty nie została jeszcze zaktualizowana => następnym razem, gdy uruchomię ponownie aplikację, będę musiał przejść przez to samo jeszcze raz. Nie wspominając o potencjalnie niespójnych danych. Jeśli użyję tabeli tymczasowej do aktualizacji i sprawię, że cała sprawa będzie atomowa, to będzie działać, ale potem znowu, jeśli aktualizacja jest zbyt długa (wiele zmian danych), użytkownik musi długo czekać, aż nowe dane będą dostępne. Czy powinienem używać Stopnio-Zmodyfikowanej daty dla każdego pola danych i aktualizować dane stopniowo?