Avatar billede chrisrj Forsker
10. august 2015 - 13:23 Der er 9 kommentarer og
1 løsning

Holde master og device tables opdateret?

Hejsa

Vi er ved at lave et setup, hvor vi har et webbaseret system og nogle devices ude hos kunderne - disse devices vil have deres egen database og en mobil bb forbindelse. Vi har så altså en hjemmeside, hvor kunderne kan sende data(tekst/billeder) til deres device(s), men kunderne kan også sende direkte til deres device(s) via sms. Så langt så godt.

Kunderne vil kunne se på hjemmesiden hvilke dataer de har sendt osv.

Master tabellen ligger på et webhotel, og devices kører win 10/mysql/php.

Som en lille krølle på opgaven kan jeg sige, at vi kan ikke nødvendigvis forvente at kundernes devices er online 24/7 - faktisk gætter vi på, at de vil blive slukket om natten - eller som minimum sat i standby.

Nu mangler jeg "bare" at finde den bedste måde at holde tabellerne opdateret... :)

Såeh, hvordan gør man det??
Avatar billede Michael_Svendsen Nybegynder
10. august 2015 - 14:17 #1
Jeg ville gøre sådan at kundernes devices pinger jeres centrale server nogle gange i døgnet, og derefter henter serveren de seneste data fra devicen.

Altså et simpelt feed, som generere de rækker som den centrale server mangler siden sidst.

Client ping > Server.

Server til client: Den seneste entry jeg har er: ID:1354

Client til Server: Værsgo, her er et feed med alle rækker med ID > 1354


Du kan selvfølgelig også sætte fuld replication op - men kræver mere af serveren, og jeg ved ikke om det stabilt hvis de ofte er offline.

Venligst,
Michael
Avatar billede arne_v Ekspert
11. august 2015 - 04:16 #2
Hvis der altid skal synces central->device, saa er det nemt med id eller timestamp.

Hvis det baade kan vaere central->device og device->central der kan synces, saa bliver det mere tricky!
Avatar billede chrisrj Forsker
11. august 2015 - 08:23 #3
Det er begge veje. Hvilket også er grunden til at jeg spørger. ;)
Avatar billede arne_v Ekspert
11. august 2015 - 15:00 #4
Saa vil mit forslag vaere:
* en primary key som er global unik mellem baade central og devices
* last updated field
* tabel med last sync for hvert device
* sync process som:
  - records som er opdateret baade central og device sendes til manuel behandling
  - records som er opdateret paa central siden sidste sync sendes til device
  - records som er opdateret paa device siden sidste sync sende til central

Det kraever lidt kode, men kan godt goeres.
Avatar billede chrisrj Forsker
11. august 2015 - 15:57 #5
Hmmm...

Hvad mener du mere præcist med dette:

"records som er opdateret baade central og device sendes til manuel behandling"?
Avatar billede arne_v Ekspert
11. august 2015 - 16:08 #6
Hvis den samme record er opdateret centralt via web interface og paa device X, saa har du 3 muligheder:

* central bestemmer indhold og rettelser paa device overskrives

* device bestemmer indhold og rettelser paa central overskrives

* ingen sync men manuel haandtering

Jeg anbefaler det sidste.

Hvis der er lidt logik is sytemet, saa er det forhaabentligt noget som kun vel ske meget sjaeldent.

Men sker det saa mener jeg at det skal flagges for manuel haandtering.
Avatar billede chrisrj Forsker
11. august 2015 - 16:31 #7
Ah, det kan - heldigvis - ikke lade sig gøre. :)

Data kan kun rettes (af brugeren) på web interfacet. Og sansynligheden for at de gør det, er ca. 0,01 %. ;)
Avatar billede chrisrj Forsker
05. november 2015 - 15:11 #8
Godt, så er koden lavet, testet og implementeret. :)

Smid venligst svar begge to. :)
Avatar billede arne_v Ekspert
05. november 2015 - 18:21 #9
svar
Avatar billede chrisrj Forsker
10. november 2015 - 14:57 #10
Fint, så mangler vi bare et svar fra Michael_Svendsen... :)

Kom glad! :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester