Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firestore offline cache

Tags:

I'm building an Android application which has to work offline for weeks, but can sync immediately with a remote DB as it goes online.

My question is can Firestore be a good option for this? How long does Firestore keep its offline cache?

like image 327
Balazs Fabian Avatar asked Oct 16 '17 13:10

Balazs Fabian


People also ask

Can firestore be used offline?

Cloud Firestore supports offline data persistence. This feature caches a copy of the Cloud Firestore data that your app is actively using, so your app can access the data when the device is offline. You can write, read, listen to, and query the cached data.

How does firebase offline sync work?

By enabling persistence, any data that the Firebase Realtime Database client would sync while online persists to disk and is available offline, even when the user or operating system restarts the app. This means your app works as it would online by using the local data stored in the cache.

Does firebase cache data?

Firebase Hosting uses a powerful global CDN to make your site as fast as possible. Any requested static content is automatically cached on the CDN. If you redeploy your site's content, Firebase Hosting automatically clears all your cached static content across the CDN until the next request.

How do I clear my firestore cache?

There's no API for manipulating the local cache in any way. The Firestore SDK chooses what to store based on queries that you perform. On Android, users can manually clear the local data for an app without uninstalling it. This will remove all the data locally stored by the app.


2 Answers

Firestore can be configured to persist data for such disconnected/offline usage. I recommend that you read the enable offline persistence section in the docs, which contains this sample of enabling this feature:

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() 
        .setPersistenceEnabled(true)         .build(); db.setFirestoreSettings(settings); 

This persistence is actually enabled by default on Android and iOS, so the call above is not needed.

Your Android code that interact with the database will be the same whether you're connected or not, since the SDK simply works the same. If you want to detect whether data is coming from the cache (and thus potentially stale), read the section Listen to offline data in the docs.

The data in the cache does not expire after a certain amount of time. The only two reasons data is removed from the cache:

  1. The data has been removed from the server, in which case the client will remove it from the disk cache.
  2. The client needs to purge its disk cache to make space for more recent data.
like image 82
Frank van Puffelen Avatar answered Sep 20 '22 14:09

Frank van Puffelen


EDIT-25/5/2020: Francesco is correct, the docs link given in the comment does clarify that. It seems the cache size has been changed, by default it has been decreased to 40MB.

OLD: The following answer follows the official guide in the following link:

Handling Cache size

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()     .setCacheSizeBytes(FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED)     .build(); db.setFirestoreSettings(settings); 

The above code has a flag set for setCacheSize(), which will prevent your cache from being cleared. You can also specify the same in size. If you do not set this by default the size is 100MB.

As per the guide, there is a method to check if the data you query came from cache or the firestore. Also the moment your device is back online the firestore refreshes the cache, and keeps the data synchronized.

To answer your question, as you have to work with offline data for weeks, i suggest every time the data is fetched to store it in json/xml formats, as storing huge amount of data in cache is not a really good approach when thought of in terms of performance.

I hope i helped you clear some things out.

like image 22
Harsh Patalia Avatar answered Sep 17 '22 14:09

Harsh Patalia