-
1. Data: 2011-07-25 13:21:20
Temat: replikacja prostej bazy - czy da się lepiej?
Od: Szyk <s...@o...pl>
Witam
Mam zamiar zrobić prostą aplikację opartą na bazie Sqlite z 4 tabelami
do replikacji. Aplikacja ma być dostępna na PC i smartfony . Replikacja
ma się odbywać między PC i smartfonami (standardowo z jednym) w pełni
automatycznie. Rekordów będzie gdzieś 10k na dzień dobry, standardowo
dziennie przyrastać będzie do 500 rekordów.
Mam 2 przypadki replikacji:
1) replikacja z nową wersją bazy (instalka nowej wersji programu)
2) replikacja z bazami mobilnymi (na PC i smartfonach można dodawać nie
zależnie dane do bazy które później muszą być synchronizowane)
Mam taki pomysł:
1) każda zainstalowana baza ma mieć ID 64bit generowane (nie
sekwencyjne). Baza instalacyjna ma ID = 0
2) ID rekordów we wszystkich tabelach bazi: unikalne, 64bit, generowane
(nie sekwencyjne), ID Bazy i TimeStamp ostatniej modyfikacji (ID Bazy
jest konieczne przy pierwszej replikacji, kiedy trzeba brać pod uwagę
wszystko co nie wjechało z bazą instalacyjną)
3) w bazie jest tabela "replikacja" z ID Bazy i datą ostatniej
replikacji z tą bazą
4) standardowo przy replikacji wybieram rekordy dodane, zmienione i
usunięte po dacie ostatniej replikacji z daną bazą
5) przy pierwszej replikacji pobieram tabelę "replikacja" bazy na
smartfonie, sprawdzam czy się data zgadza z wersją na PC (baza musi mieć
tą samą wersję) i pobieram wszystkie rekordy o ID bazy różne od 0.
Podgrywam nowe rekordy na smartfon. Na koniec wrzucam odpowiednie
rekordy z ID Bazy i datą do tablic "replikacja" na PC i smartfonie.
Oczywistą wadą jest to, że każdy rekord w bazie będzie miał IDBazy z
której pochodzi i będzie to wykorzystane tylko przy pierwszej
replikacji. Jednak jest to konieczne bo ktoś może mieć pierwszą wersję
bazy, dodać sobie jakieś rekordy ręcznie i aktualizować do drugiej
wersji i dopiero potem replikować dane z PC. Gdyby nie było IDBazy i
gdybym oparł się jedynie na dacie replikacji bazy 0 (instalacyjnej) to
rekordy dodane ręcznie nie zostałyby replikowane.
Pytanie:
Czy macie lepszy pomysł jak zrobić replikację tej bazy?
dzięki
Szyk
-
2. Data: 2011-07-25 15:47:54
Temat: Re: replikacja prostej bazy - czy da się lepiej?
Od: Mariusz Marszałkowski <m...@g...com>
On Jul 25, 3:21 pm, Szyk <s...@o...pl> wrote:
> Witam
>
> Mam zamiar zrobić prostą aplikację opartą na bazie Sqlite z 4 tabelami
> do replikacji. Aplikacja ma być dostępna na PC i smartfony . Replikacja
> ma się odbywać między PC i smartfonami (standardowo z jednym) w pełni
> automatycznie. Rekordów będzie gdzieś 10k na dzień dobry, standardowo
> dziennie przyrastać będzie do 500 rekordów.
>
> Mam 2 przypadki replikacji:
> 1) replikacja z nową wersją bazy (instalka nowej wersji programu)
> 2) replikacja z bazami mobilnymi (na PC i smartfonach można dodawać nie
> zależnie dane do bazy które później muszą być synchronizowane)
>
> Mam taki pomysł:
> 1) każda zainstalowana baza ma mieć ID 64bit generowane (nie
> sekwencyjne). Baza instalacyjna ma ID = 0
> 2) ID rekordów we wszystkich tabelach bazi: unikalne, 64bit, generowane
> (nie sekwencyjne), ID Bazy i TimeStamp ostatniej modyfikacji (ID Bazy
> jest konieczne przy pierwszej replikacji, kiedy trzeba brać pod uwagę
> wszystko co nie wjechało z bazą instalacyjną)
> 3) w bazie jest tabela "replikacja" z ID Bazy i datą ostatniej
> replikacji z tą bazą
> 4) standardowo przy replikacji wybieram rekordy dodane, zmienione i
> usunięte po dacie ostatniej replikacji z daną bazą
> 5) przy pierwszej replikacji pobieram tabelę "replikacja" bazy na
> smartfonie, sprawdzam czy się data zgadza z wersją na PC (baza musi mieć
> tą samą wersję) i pobieram wszystkie rekordy o ID bazy różne od 0.
> Podgrywam nowe rekordy na smartfon. Na koniec wrzucam odpowiednie
> rekordy z ID Bazy i datą do tablic "replikacja" na PC i smartfonie.
>
> Oczywistą wadą jest to, że każdy rekord w bazie będzie miał IDBazy z
> której pochodzi i będzie to wykorzystane tylko przy pierwszej
> replikacji. Jednak jest to konieczne bo ktoś może mieć pierwszą wersję
> bazy, dodać sobie jakieś rekordy ręcznie i aktualizować do drugiej
> wersji i dopiero potem replikować dane z PC. Gdyby nie było IDBazy i
> gdybym oparł się jedynie na dacie replikacji bazy 0 (instalacyjnej) to
> rekordy dodane ręcznie nie zostałyby replikowane.
>
> Pytanie:
> Czy macie lepszy pomysł jak zrobić replikację tej bazy?
Chyba nie zrozumialem co jest istota problemu.
Pozdrawiam
-
3. Data: 2011-07-25 18:49:27
Temat: Re: replikacja prostej bazy - czy da się lepiej?
Od: Michoo <m...@v...pl>
1. Tobie chyba chodzi o synchronizację a nie replikację...
2. Możesz opisać jeszcze raz co z czym, w jakiej ilości i kiedy się
synchronizuje? I jakie dane (czy np te wprowadzone przez usera też?). Bo
opisałeś to trochę chaotycznie...
Anyway - wygląda na to, że wystarczy w każdej bazie trzymać jej uuid
(choćby połączenie macadresu hosta i timestampu), tabelkę mapującą
uuid->id_wewnętrzny_bazy a klucze postaci
(id_wewnętrzny_bazy,nr_sekwencyjny_w_obrębie_bazy), albo po prostu
klucze postaci (uuid,nr_sekwencyjny_wg_tego_uuid) i tabelę
uuid->timestamp ostatniej synchronizacji.
Wtedy synchronizacja może być przechodnia, w różnej kolejności, etc -
jak w rozzproszonych systemach kontroli wersji.
--
Pozdrawiam
Michoo