It is currently 5 August 2021, 10:22 Advanced search

Sincronizzazione

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Sincronizzazione

Postby mromini » 15 April 2014, 7:05

Buongiorno a tutti. Sto analizzando cosa succede lato server di sincronizzazione quando un client inizia una sincronizzazione differenziale. La mia applicazione client utilizza il precount ed il maxdocuments con un valore di 1000.

Nel momento della prima richiesta di dati de client, sul server viene eseguita questa query:
select ID, DNA, STATUS, CONTENT from ZZ_SYNC where ID>4993168 order by ID

Perché? Ovvero a cosa serve? Il dubbio mi viene perché se gli elementi dello ZZ_SYNC da inviare sono parecchi questa query può impiegare anche parecchi secondi (nel nostro caso anche 30...).

Poi noto che dopo questa query partono quelle con il limit 1001 per creare i pacchetti da inviare al client.

Grazie in anticipo,
Mario.
mromini
 
Posts: 462
Joined: 6 November 2012, 9:38

Re: Sincronizzazione

Postby m.sirri » 15 April 2014, 14:05

Quella query serve per recuperare dalla ZZ_SYNC le variazioni da inviare al client avvenute dalla sua ultima sincronizzazione.

Nella vostra ZZ_SYNC ci sono così tanti record (milioni)?
User avatar
m.sirri
Pro Gamma
Pro Gamma
 
Posts: 8483
Joined: 30 September 2010, 17:01
Location: Ozzano dell'Emilia (BO)

Re: Sincronizzazione

Postby mromini » 15 April 2014, 14:12

Ciao Matteo, la tua risposta non mi è chiara. Perché chiedere alla zz_sync tutti i record modificati se poi ho il maxdocuments a 1000 elementi e devi comunque rieseguire la query con i limit?

Se ti serve per capire il valore di ID più altro potresti metterli in ordine decrescente e fare la limit 1.

Abbiamo delle zz_sync che superano abbondantemente i 10.000.000 di record perché in alcune nostre installazioni i dati cambiamo molto di frequente (il numero è poi molto elevato perché è anche in funzione del numero dei tablet che si devono collegare). Abbiamo anche implementato un sistema di pulizia della ZZ_SYNC che ogni giorno cancella i record più vecchi di 60 giorni, però a volte non basta a ridurre considerevolmente il numero di record presenti nella tabella.
mromini
 
Posts: 462
Joined: 6 November 2012, 9:38

Re: Sincronizzazione

Postby m.sirri » 15 April 2014, 15:13

Bisognerebbe riguardare un'attimo l'algoritmo di sincronizzazione e vedere anche che rami prende in base al vostro codice.
User avatar
m.sirri
Pro Gamma
Pro Gamma
 
Posts: 8483
Joined: 30 September 2010, 17:01
Location: Ozzano dell'Emilia (BO)

Re: Sincronizzazione

Postby mromini » 16 April 2014, 8:16

Ho aperto un'assistenza così ci guardiamo.

Ciao,
Mario.
mromini
 
Posts: 462
Joined: 6 November 2012, 9:38

Re: Sincronizzazione

Postby g.cassanelli » 16 April 2014, 11:24

Interessante.... fateci sapere...
Informatica ! Meglio lavorare con il granito, è duro, ma è stabile ! - Computer Science ! Better to work with granite, it's hard, but it's stable !

Giuseppe Cassanelli http://www.lab-ud.com
User avatar
g.cassanelli
 
Posts: 2653
Joined: 9 November 2010, 19:00
Location: BOLOGNA

Re: Sincronizzazione

Postby r.bianco » 16 April 2014, 12:15

In effetti mi pare di notare che la zz_sync del server non venga mai svuotata.. questo significa che ogni volta ai client offline viengono rimandati tutti i dati precedentemente segnalati come modificati, anche se non sono stati più toccati?
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4473
Joined: 8 November 2010, 16:46

Re: Sincronizzazione

Postby m.sirri » 16 April 2014, 13:03

Nella ZZ_SYNC in realtà vengono rimossi costantemente i record più vecchi di tot giorni (dove tot corrisponde al valore della proprietà SyncService.MaxAge).
User avatar
m.sirri
Pro Gamma
Pro Gamma
 
Posts: 8483
Joined: 30 September 2010, 17:01
Location: Ozzano dell'Emilia (BO)

Re: Sincronizzazione

Postby r.bianco » 16 April 2014, 13:17

Bene, grazie del chiarimento.
In ogni caso il server manda tutto quello che gli indica la zz_sync, anche se magari sono stati già inviati e non sono stati più modificati, giusto?
Immagino dipenda dal fatto che il server non sa a quanti dispositivi deve mandare i dati..
Sono sulla strada giusta?
(scusate se ho invaso il post)
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4473
Joined: 8 November 2010, 16:46

Re: Sincronizzazione

Postby m.sirri » 16 April 2014, 13:36

Durante la sincronizzazione il client invia al server l'ID dell'ultimo record che il server gli ha inviato durante l'ultima sincronizzazione.

Se lato server il record con quell'ID non c'è più (vedi MaxAge) oppure l'ID non è stato inviato dal client perché non si era mai sincronizzato il server invia i dati in modo "completo" ovvero notifica gli eventi OnResyncClass su tutte le classi da sincronizzare.

Se invece il record viene trovato allora il server invia i dati in modo "differenziale" ovvero invia solo i record presenti nella ZZ_SYNC con ID superiore a quello ricevuto e, se hai gestito i domini, solo quelli con dominio corrispondente o senza dominio.
User avatar
m.sirri
Pro Gamma
Pro Gamma
 
Posts: 8483
Joined: 30 September 2010, 17:01
Location: Ozzano dell'Emilia (BO)

Next

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: d.termini, Google [Bot] and 21 guests