sql >> Database >  >> RDS >> SQLite

Firebase DB gebruiken met lokale DB

Als uw firebase-structuur niet te complex is, kunt u ook een interface maken die methoden definieert zoals

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

maak vervolgens 2 klassen die die interface implementeren, de ene met Firebase en de andere met SQLite.

DatabaseImplementation
FirebaseImplementation

Binnen uw Firebase-implementatie zou u de gegevens zoals normaal publiceren en één nieuw knooppunt publiceren naar iets als root/requestUpdate/userId/push/ en push zouden informatie bevatten over waar u een update aanvraagt, en wat deviceId heeft het gepubliceerd.

Laat vervolgens een ValueEventListener aan dat genoemde knooppunt koppelen, en als het een nieuw kind krijgt, laat het dan kijken of de deviceId hetzelfde is of niet. Als dit niet het geval is, moet u de FirebaseImplementation Gegevens met behulp van de informatie die u hebt gekregen, en gebruik vervolgens de DatabaseImplementation , om gegevens toe te voegen .

Dat zou ervoor zorgen dat wanneer er een wijziging wordt aangebracht, elke andere ingelogde client weet dat hij zijn firebase moet bijwerken. Als de klant niet online is, zal hij de volgende keer dat hij online is, dit doen zoals ValueEventListener activeert wanneer het is gekoppeld. Zorg ervoor dat u alle gevraagde updates doorloopt om er zeker van te zijn dat ze allemaal zijn gemaakt. Bewaar ook de push-toetsen van eventuele updates die u hebt voltooid in een lokale database, zodat u niet meer dan één keer bijwerkt.

In principe zal de firebase altijd up-to-date zijn en eventuele wijzigingen die een gebruiker heeft aangebracht opslaan op een apart knooppunt waarnaar door alle clients wordt geluisterd.

Het is duidelijk dat deze oplossing nog steeds veel problemen heeft die u zou moeten oplossen, zoals uitzoeken wanneer het requestUpdate-knooppunt moet worden verwijderd. Logisch nadat elke gebruiker heeft gesynchroniseerd, maar hoe bepaal je dit? ...

Wat betreft de eerste login, zou u een populateDatabaseFromFirebase() moeten schrijven methode die heel wat getDatas en addDatas zal doen. Hoe u dat zou doen, hangt af van hoe uw DB eruitziet. U zou dan opslaan dat de gebruiker al is ingelogd met SharedPreferences en de firebase UID .

Dat gezegd hebbende, dit werkt alleen als je firebase vrij vlak is. Als je een complexe database hebt, wordt alles veel ingewikkelder en verwarder en dan is het misschien de moeite waard om naar een externe bibliotheek te kijken.



  1. SQL, querybuilders en ORM's vergelijken

  2. Datumtype zonder tijd in Oracle

  3. Willekeurige rijen selecteren met MySQL

  4. MySQL - MINST en GROOTSTE vergelijkingsoperators