web-dev-qa-db-fra.com

Quelle est la fiabilité de Firestore en tant que mécanisme de persistance hors ligne?

J'utilise actuellement Firebase Firestore en tant que backend principal permettant de récupérer des données provenant de diverses sources. J'utilise également Android Room pour mon backend mobile. Lorsque le téléphone reçoit des données, celles-ci sont stockées dans la base de données de la salle au cas où l'utilisateur ne se reconnecterait pas pendant des jours voire des semaines.

Après avoir parcouru les fichiers du périphérique, je vois que firestore enregistre les données dans des fichiers du répertoire /data/data/<your-app>/databases.

 enter image description here

Le fichier ressemble à quelque chose comme ceci  enter image description here

J'ai lu les documents de persistance hors ligne sur le magasin de disques et rien n'indique sur la durabilité de la persistance hors connexion. Il est mentionné que les données sont mises en cache, mais pas pour combien de temps. Ma question est la suivante: quelle est la durabilité de la persistance hors ligne de Firestore? Est-il recommandé de l’utiliser plutôt que de disposer d’une base de données locale à part entière pour stocker les données qui ne peuvent pas être synchronisées sur de longues périodes (jours, semaines)?

Il semble déjà gérer correctement la synchronisation des données une fois la connexion rétablie. Je suis juste inquiet qu'après un certain point ce fichier puisse être supprimé par le système et que l'utilisateur perde tout.

8
martinomburajr

Sur Android (au moment d'écrire ces lignes), Firestore utilise SQLite comme mécanisme de persistance. Donc, pendant les périodes intermittentes d'activité hors ligne, vous ne devriez pas avoir de problèmes de performances ou de durabilité.

Toutefois, si vous restez hors ligne pendant des jours ou des semaines (comme vous l'avez dit), il y a certaines choses dont vous devez être conscient:

Performance

Cloud Firestore étant destiné principalement à être utilisé en ligne, les écritures en attente qui n'ont pas encore été synchronisées sur le serveur sont conservées dans une file d'attente. Si vous effectuez de nombreuses écritures en attente sans aller en ligne pour les résoudre, la file d'attente augmentera et ralentira vos performances globales en lecture/écriture. La plupart des garanties de performances de Cloud Firestore proviennent de l'indexation et de la réplication sur le back-end, mais la plupart de ces optimisations n'existent pas lorsque vous travaillez en mode hors connexion uniquement.

Conflits

Le modèle de base de résolution des conflits de Firestore est "la dernière écriture gagne". Ainsi, si de nombreux clients hors ligne écrivent sur le même document, seul le dernier à se mettre en ligne gagnera et conservera sa modification.

Caractéristiques

La plupart des fonctionnalités de Firestore fonctionnent hors ligne, à une exception près: les transactions. Les transactions ne peuvent être exécutées que lorsque vous êtes en ligne. Par conséquent, si votre application utilise des transactions, elle ne fonctionnera pas correctement hors connexion sans traitement spécial.

13
Sam Stern

La documentation officielle ne contient aucune indication sur la durabilité de la persistance hors connexion, car elle est imprévisible. Cette question ne peut pas avoir une réponse exacte, comme 4 semaines ou quelque chose comme ça, car cela dépend du nombre d'écritures effectuées pendant que vous êtes hors ligne.

Je vous recommande pas d'utiliser Firestore comme base de données hors ligne uniquement. Il s'agit en réalité d'une base de données en temps réel en ligne pouvant fonctionner pendant des périodes de déconnexion courtes à intermédiaires.

En mode hors connexion, il garde en file d'attente toutes vos opérations d'écriture. À mesure que cette file d'attente s'allonge, les opérations locales et le démarrage de l'application ralentissent. Mais vous devez savoir que cette opération persistera même si vous redémarrez le périphérique. Tu ne perdras aucune donnée.

2
Alex Mamo