Utilizare aplicatie online

Started by NicoNicol, Mar 25, 2024, 10:10 AM

Previous topic - Next topic

NicoNicol

Buna ziua,
Exista o versiune online? Sau o aplicatie pe telefon? Ar fi mult mai usor de folosit deoarece nu suntem in permanenta la birou.
Multumesc.

Serghei

Buna ziua,

Am în lucru o versiune pentru iOS, problema este că nu știm cum o să facem cu baza de date, că nu prea vrem să ținem la noi pe server datele clienților, din motive de confidențialitate...

macmac

Poate e fezabila folosirea unui serviciu comun de stocare online (gdrive, icloud etc) pentru stocare si sincronizare intre device-uri. Icefact doar sa poate fi pus sa foloseasca locatia data pentru stocare (adica ceva mai elegant decat symlink-uri / hardlink-uri spre path-ul hardcodat), iar configurarea serviciului sa ramana in sarcina utilizatorului.

Serghei

Din pacate genul asta de sincronizare nu prea functioneaza cand este vorba de baze de date relationale. Daca sync-ul se executa exact in mijlocul unei tranzactii, exista sanse foarte mari ca baza de date sa fie corupta si sa se piarda toate datele.

SOMI

Corect, aveți mare dreptate.

macmac

Fisierul sqlite nu poate fi corupt de catre sync in sine, pentru ca sync-ul va "impinge" tot fisierul.
Singura problema este atunci cand sunt pornite instante multiple ale aplicatiei / bazei de date in acelasi timp. Fisierul intr-adevar poate fi suprascris de oricare dintre instante si se pot pierde date.
Dar cat timp utilizatorul / utilizatorii inteleg aceasta limitare si se asigura ca nu mai are nimeni altcineva deschisa aplicatia, treaba cu stocarea shared functioneaza cu absolut zero probleme.

Serghei

Era bine sa fie atat de simplu, din pacate mecanismul la baze de date relationale este ceva mai complicat.

Scrierea in baza de date se face in mai multi pasi, in cadrul unei tranzactii. In momentul tranzactiei (dintre BEGIN si COMMIT), baza de date este intr-o stare inconsistenta. Daca sync-ul incepe exact in mijlocul unei tranzactii, dezastrul este garantat.

Din acest motiv nu este recomandat ca bazele de date sa fie copiate direct sau sa fie pe fileshare.

Mai mult, va fi imposibil de lucrat cu mai multe device-uri simultan, pentru ca se vor desincroniza numerele de ordine, vor aparea conflicte etc.

macmac

Quote from: Serghei on Apr 10, 2024, 10:34 AMIn momentul tranzactiei (dintre BEGIN si COMMIT), baza de date este intr-o stare inconsistenta.
Cred ca ne invartim un pic in jurul cozii. :) Inconsistenta poate exista doar din prisma unei alte instante a aplicatiei care ar accesa-o in acea stare.
Clientul de sync lucreaza pe fisier doar cand un mecanism care detecteaza modificari pe el (i.e. inotify) ii semnaleaza acest lucru. Daca avem o singura instanta de aplicatie deschisa, doar scrierile ei in fisierul sqlite va genera sincronizari spre server. Care sunt foarte rapide si pot fi considerate instantanee. Practic serverul, apoi si ceilalti clienti ai storage-ului vor primi imediat si ei modificarile.
Quote from: Serghei on Apr 10, 2024, 10:34 AMDaca sync-ul incepe exact in mijlocul unei tranzactii, dezastrul este garantat.
Dezastru pentru cine? Daca nimeni altcineva nu are aplicatia deschisa (ceea ce am zis ca ar trebui sa te asiguri oricum cand folosesti un astfel de setup, pentru a asigura integritatea datelor), continutul fisierului dintr-un moment dat e irelevant. Aplicatia va executa COMMIT-ul, tranzactia se va finaliza si starea finala a fisierului va fi impinsa in stocarea shared, iar ceilalti clienti ai stocarii o vor primi si ei.

Serghei

Corect, soluția ar putea funcționa DACĂ și NUMAI DACĂ utilizatorii se asigură că IceFact rulează pe un singur device la un moment dat.

Ok... în versiunea următoare o sa adăugăm un parametru de genul "-d /director/baze/de/date" și vedem ce-o ieși.