Sincronizare conturi utilizatori printr-un API

Salutare si la multi ani!

Lucrez in prezent la o aplicatie care permite postarea de job-uri pe un site de companie si respectiv crearea de conturi de candidati si completarea profilului online. Am construit un API prin care preiau conturile de pe site in aplicatia de backoffice. As vrea sa stiu care este din punctul vostru de vedere cea mai buna metoda de a verifica datele la sincronizare in scopul de a nu crea inregistrari duplicate in baza de date?

Informatiile candidatilor sunt stocate in mai multe tabele, fiecare inregistrare din tabel avand doua coloane de tipul “date_created”, “last_modified_on”.

In principiu o verificare dupa aceste doua informatii ar trebui sa fie suficienta, dar ma gandesc ca in timp numarul candidatilor poate creste si odata cu el creste si numarul de verificari ce trebuie facute de scriptul de sincronizare.

Inca ceva: verificarea datelor nu as vrea sa o fac direct in SQL, ci prin compararea a doi vectori asociativi (candidatii de pe site, candidatii din backoffice), pentru un spor de performanta.

Multumesc.

pai ce anume da unicitatea unui user?

Unicitatea o da adresa de mail.

Dar pe langa datele de autentificare, utilizatorul completeaza datele in CV (locuri de munca, skill matrix, descriere a catorva proiecte), acestea fiind stocate in tabele separate, fiecare tabel putand avea mai multe inregistrari (de exemplu daca a lucrat la 3 firme pana in prezent).

pai faci o functie syncUser() si faci sync doar la aia care nu exista in partea cealalta. sau nu inteleg eu exact challenge-ul.
compararea n-are cum sa-ti iasa mai rapida cu “vectori asociativi” decat cu un query sql optimizat cat de cat.

Challenge-ul este ca, la fiecare iteratie, trebuie sa verific in 8 tabele, deci din start 8 interogari urmate sau nu de un insert/update.

Am în queue un proiect ce va trebui să facă sincronizare între server și o app mobilă (ce trebuie să funcționeze și când e offline dar care să se sincronizeze când dă de net). Deci să zicem că e o situație asemănătoare.

Cea mai practică soluție găsită până acum este asta. Pe scurt, este vorba de o DB nosql (couch) ce permite un soi de diff.

Aplicația de backoffice consumă API în timp real? Sau există și posibilitatea de a funcționa offline?

Related:

A, deci tu vrei sa faci si update la datele existente. E one way sau in ambele sensuri?

@iamntz, sincronizarea se va face o data la o ora.

@AdrianBasalic, da, update daca exista, sau insert daca nu exista. One way, dinspre site spre backoffice.

e pe alt server? ma gandesc sa inlocuiesti tabelele cu totul. fast and easy.

E pe alt server, da.

Sa inlocuiesc la modul de TRUNCATE si apoi INSERT de fiecare data?

Cred că varianta propusă de Adrian funcționează bine dacă ești 100% sigur că vei avea doar perechea server+UN client și că utilizatorii nu vor cere server+N clienți.

sau mai sigur, faci

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

si nu mai e nevoie de truncate, si merge din 8 query-uri, cred. trebuie testat.

@AdrianBasalic, nu stiam de metoda asta. Am sa incerc. Multumesc.

@iamntz, da, intotdeauna va fi perechea server + UN client.