2013-03-22 9 views
21

Zaczynam konfigurować główny model danych dla aplikacji na dużą skalę i miałem nadzieję na uzyskanie informacji zwrotnej na temat właściwych metod/technik synchronizacji, jeśli chodzi o bazę danych serwera i możliwości trybu offline.iOS - Podstawowe informacje o synchronizacji baz danych i danych serwera

Używam PHP i mySQL dla mojego serwera/bazy danych.

już wiem, jak podłączyć, odbierać dane, sklepu do danych bazowych, itp itd szukam bardziej o pomoc z metodologii i szczególnych przypadkach śledzenia zmian danych do:

a) zapewnić aplikację i serwer jest zsynchronizowany podczas korzystania z Internetu i offline (np. aktywność w trybie offline zostanie przywrócona po powrocie do trybu online). B) Zoptymalizuj szybkość zapisywania danych w aplikacji.

Moje główne pytania:

Jaki jest najlepszy sposób, aby sprawdzić, jakie nowe/Aktualizacja danych w aplikacji nadal musi być zsynchronizowane (po użytku w trybie offline)?

(tj. We wszystkich moich kluczowych jednostkach danych wstawiam atrybut "zsynchronizowany" typu BOOL, a następnie zaktualizuję "TAK" po pomyślnym przesłaniu, a odpowiedź zostanie odesłana z serwera). Czy to najlepszy sposób?

Jaki jest najlepszy sposób na optymalizację szybkości zapisywania danych z serwera na podstawowe dane?

(tj. Jak mogę aktualizować dane w podstawowych danych, starsze niż te znajdujące się w bazie danych serwera bez wykonywania iteracji przez każdy z nich i aktualizacji tylko za każdym razem)? Czy jest to możliwe bez dodawania kolumny bazy danych serwera do śledzenia znaczników czasu aktualizacji do KAŻDEJ tabeli?

Ponownie, już wiem, jak pobierać dane i przechowywać je w Core Data, szukam tylko pomocy w zakresie najlepszych praktyk w zapewnianiu synchronizacji między bazami danych aplikacji i serwerów, zapewniając jednocześnie zoptymalizowany czas przetwarzania.

+0

zobaczyć http://stackoverflow.com/questions/413086/ klient-serwer-wzorzec-algorytm synchronizacji – danh

Odpowiedz

9

Przechowuję ostatnio zmodyfikowany znacznik czasu w bazie danych zarówno na rekordach danych podstawowych w telefonie, jak i tabelach mysql na serwerze.

Telefon wyszukuje wszystko, co zmieniło się od czasu ostatniej synchronizacji i wysyła je na serwer wraz ze znacznikiem czasowym ostatniej synchronizacji, a serwer odpowiada na wszystko, co zmieniło się po zakończeniu dostarczonego znacznika czasu synchronizacji.

Wydajność jest problemem, gdy zmieniło się wiele rekordów. Wykonuję synchronizację na tle NSOpeartion, który ma własny kontekst obiektu zarządzanego. Kiedy wątek tła zakończył wprowadzanie zmian w jego kontekście obiektu zarządzanego, istnieje interfejs API do scalania wszystkich zmian w kontekście obiektu zarządzanego głównego wątku - który można skonfigurować tak, aby po prostu wyrzucał wszystkie zmiany, jeśli wystąpią konflikty spowodowane przez użytkownik zmienia dane podczas synchronizacji. W takim przypadku czekam tylko kilka sekund, a następnie spróbuj ponownie wykonać synchronizację.

Na starszym sprzęcie, nawet po wielu optymalizacjach, konieczne było przerwanie synchronizacji, jeśli użytkownik zacznie robić rzeczy w aplikacji. Po prostu używało zbyt wielu zasobów systemowych. Wydaje mi się, że bardziej nowoczesne urządzenia z systemem iOS są prawdopodobnie wystarczająco szybkie, nie trzeba tego już robić.

(swoją drogą, kiedy powiedział: „wiele zapisów zostały zmienione” miałem na myśli 30.000 lub tak wierszy jest aktualizowany lub umieszczany na telefon)

+0

Ditto. Używam również daty modyfikacji w każdej z moich jednostek, w której przechowuję czas ostatniego udanego połączenia z serwerem. Przy każdym wywołaniu API przekazuję to do serwera, który ma wyzwalacze, które ustawiają podobną kolumnę w każdej tabeli, gdy tylko coś się zmieni. I używam trój-kontekstowego modelu, jak w [tym pytaniu] (http://stackoverflow.com/questions/10542097/implementing-fast-and-efficient-core-data-import-on-ios-5), aby obsłużyć aktualizacje asynchronicznie. – enjayem

+0

Zarządzam także synchronizacją przy użyciu ostatnio zsynchronizowanych danych i datetestampów rekordów tabel. –

+1

W jaki sposób można się upewnić, że sygnatura czasowa telefonu i znacznik czasu serwera używają dokładnie tego samego czasu. Na przykład, jeśli sygnatura czasowa telefonu jest 10 sekund wcześniejsza od serwera i nastąpi zmiana między tymi godzinami, dane zostaną utracone –

Powiązane problemy