SQLite
 sql >> Database >  >> RDS >> SQLite

Usa Firebase DB con DB locale

Se la tua struttura Firebase non è troppo complessa, potresti anche creare un'interfaccia che definisca metodi come

void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);

quindi crea 2 classi che implementano quell'interfaccia, una usando Firebase l'altra usando SQLite.

DatabaseImplementation
FirebaseImplementation

All'interno della tua implementazione Firebase, pubblicheresti i dati normalmente e pubblicheresti un nuovo nodo in qualcosa come root/requestUpdate/userId/push/ e push conterrebbe informazioni su dove richiedi un aggiornamento e quale deviceId lo ha pubblicato.

Quindi avere un ValueEventListener legato a quel nodo menzionato e, se ottiene un nuovo figlio, controlla se deviceId è lo stesso o meno. In caso contrario, avere FirebaseImplementation getData utilizzando le informazioni ottenute, quindi utilizza DatabaseImplementation , per aggiungereDati .

Ciò assicurerebbe che ogni volta che viene apportata una modifica, qualsiasi altro client connesso saprà di aggiornare la sua base di fuoco. Se il client non è online, la prossima volta che sarà online lo farà poiché ValueEventListener si attiva quando è collegato. Assicurati di scorrere tutti gli aggiornamenti richiesti per assicurarti che tutti siano stati eseguiti. Memorizza anche le chiavi push di tutti gli aggiornamenti che hai completato su un database locale in modo da non finire per aggiornare più di una volta.

Fondamentalmente Firebase sarà sempre aggiornato e memorizzerà tutte le modifiche apportate da un utente su un nodo separato che è ascoltato da tutti i client.

Ovviamente questa soluzione ha ancora molti problemi che dovresti risolvere, come capire quando eliminare il nodo requestUpdate. Logicamente dopo che ogni utente si è sincronizzato, ma come lo determini? ...

Per quanto riguarda il primo accesso, dovresti scrivere un populateDatabaseFromFirebase() metodo che farà un sacco di getDatas e addDatas. Il modo in cui lo faresti dipenderà dall'aspetto del tuo DB. Quindi memorizzeresti che l'utente ha già effettuato l'accesso con Preferenze condivise e l'UID di Firebase .

Detto questo, funzionerà solo se la tua base di fuoco è piuttosto piatta. Se hai un database complesso, allora tutto diventa molto più complicato e intricato e quindi potrebbe valere la pena cercare in una libreria esterna.