sql >> Databasteknik >  >> RDS >> SQLite

Använd Firebase DB med lokal DB

Om din brandbasstruktur inte är alltför komplex kan du också skapa ett gränssnitt som definierar metoder som

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

skapa sedan två klasser som implementerar det gränssnittet, den ena använder Firebase och den andra använder SQLite.

DatabaseImplementation
FirebaseImplementation

Inuti din Firebase-implementering skulle du publicera data som vanligt och publicera en ny nod till något som root/requestUpdate/userId/push/ och push skulle innehålla information om var du begär en uppdatering och vilket enhets-ID publicerade den.

Ha sedan en ValueEventListener kopplad till den nämnda noden, och om den får ett nytt barn, låt den se om enhets-ID är detsamma eller inte. Om det inte är det, ha FirebaseImplementation getData använd informationen du fick och använd sedan Databasimplementering , för att addData .

Det skulle säkerställa att när en ändring görs, kommer alla andra inloggade klienter att veta att uppdatera sin brandbas. Om klienten inte är online, nästa gång han är online kommer han att göra det som ValueEventListener utlöser när den ansluts. Se till att gå igenom alla begärda uppdateringar för att se till att alla är gjorda. Lagra även tryckknapparna för alla uppdateringar du har gjort i en lokal databas så att du inte kommer att uppdatera mer än en gång.

I grund och botten kommer brandbasen alltid att vara uppdaterad och lagra alla ändringar en användare gjort på en separat nod som lyssnas på av alla klienter.

Uppenbarligen har den här lösningen fortfarande många problem som du skulle behöva fixa, som att ta reda på när noden requestUpdate ska tas bort. Logiskt efter att varje användare har synkat men hur bestämmer du detta? ...

När det gäller den första inloggningen skulle du behöva skriva en populateDatabaseFromFirebase() metod som kommer att göra en hel del getDatas och addDatas. Hur du skulle göra det beror på hur din DB ser ut. Du skulle då lagra att användaren redan har loggat in med Delade inställningar och brandbasens UID .

Med detta sagt kommer detta bara att fungera om din eldbas är ganska platt. Om du har en komplex databas så blir allt mycket mer komplicerat och intrasslat och då kan det vara värt att titta in i ett externt bibliotek.



  1. Använd DB_ID() för att returnera ID:t för en databas i SQL Server

  2. Hur Strftime()-funktionen fungerar i SQLite

  3. Lagring av binära datatyper i SQL Server

  4. Här är tre skäl till varför du kan se toppaktivitet i din SQL-instans