Firebase Realtime Database offers powerful synchronisation across clients... But it does seem to have rather high bandwidth charges.

I was hence wondering if it is possible to perform an "initial sync" on clients, so to speak, where we load a reasonably recent version of the database from elsewhere (with lower bandwidth charges), and then have the Firebase SDK (flutter, web) sync from there instead of downloading all the required parts of the database. Maybe a "load from JSON" sort of function or similar.

Seeing as to how the Firebase SDKs do seem to store some state locally on clients (for offline operation) and sync up with Firebase once online again, I was wondering if it might be possible to:

  1. set the local state to our "recent version" downloaded from another source, along with that version's timestamp
  2. trick the client SDK into thinking that we are recovering from an "offline" state
  3. then let the SDK communicate with the Firebase server to get changes since our last timestamp

Are there any approaches to achieve the effect of saving bandwidth through performing an initial sync from a cheaper source? Thanks in advance!

Solution 1: Tarik Huber

Unfortunately every get() and every realtime listener will load all data it needs from the database. I had the same idea when started working with the Firebase RTDB but unfortunately at this moment it's not possible.

The only way to reduce the bandwith is to read data in smaller chunkgs as possible.

Solution 2: Ewout Stortenbeker

You might want to take a look at AceBase, which is an open source alternative for the Firebase RTDB. It offers the same functionality, has powerful indexing and querying options, offline support, synchronization etc. Easy to setup and you can host it anywhere you want. You can even use it as a standalone realtime database in the browser, so you could also use it in combination with Firebase to perform custom synchronization between your front and backend db's. AceBase is free and its full source code is public.