Revin cu cateva detalii asupra sincronizarii (acum sunt un pic mai fresh).
Consider ca cea mai buna idee ar fi sa faci ceva general. Cu toate ca acum nu ai nevoie sa sincronizezi decat un tabel, poate mai incolo va trebui sa sincronizezi mai multe.
Solutia mea (era pt Firebird tot un DB relational de tip SQL) era cam asa:
- fiecare tabel care trebuia sincronizat avea triggere pt insert, update, delete care "notau" operatia intr-un tabel de sincronizare;
(De ex se insera numele tabelului, id-ul, numarul de ordine, tipul operatiei)
- pe fiecare server (Win) exista un service care la fiecare X minute se conecta la baza de date si lua toate operatiile in ordine si le replica pe celelalte servere;
(odata ce o operatiune se executa cu succes randul din tabelul de replicare capata o bifa de "done");
Cateva optimizari:
- daca un rand se updata de mai multe ori inainte ca sincronizarea sa ruleze, pe celelalte servere se executa un singur update;
- daca un rand nou inserat era sters inainte de a se sincroniza catre celelalte servere, se stergea randul din tabelul de sincronizare (nu avea rost sa faci insert ca apoi sa faci delete);
Firebird-ul are niste asa numite "generatoare" de ID-uri care mentin unicitatea unei variabile (ca sa nu ii zic generator). Cu toate ca MySQL nu are asa ceva se poate emula foarte usor cu un tabel (sa ii zicem) GENERATOR cu o singura coloana ID (cu autoincrement) pe serverul master.
Sa zicem ca pe serverul 1 se face un insert intr-un tabel. Cererea de numar de ordine (de la master) presupune un insert in tabelul generator si returnarea ID-ului generat.
Bineinteles ca exista problema Master-ul nu raspunde care se poate rezolva in mai multe modalitati:
- se pune un numar foarte mare in loc de numarul de ordine care nu se sincronizeaza pana nu este inlocuit cu un numar real de ordine;
(daca masterul nu raspunde numarul de ordine este 1.000.000.000 [toate numerele de ordine peste 1 miliard nu se sincronizeaza] si va deveni sa zicem 3241 cand raspunde masterul).
Si cam asta e in linii mari ... totul tine de imaginatie, prevenirea erorilor si de regulile jocului.
Bafta![]()




Răspunde cu citat


). eh, in procedura aia stocata pe care o apelez din php, vreau sa fac operatii pe o alta baza de date dintr-un alt server. deci nu cod php, ci cod sql
