web-dev-qa-db-fra.com

Quand devez-vous utiliser les transactions Firebase

Je comprends que les transactions Firebase permettent la mise à jour atomique d'une certaine valeur, étant donné son ancienne valeur et sa nouvelle valeur

Mais étant donné que Firebase est une base de données en temps réel, je suppose que l'on ne doit utiliser les transactions qu'avec parcimonie et non dans des "fonctionnalités en temps réel"

voici un exemple:

  1. Je comprends que si vous effectuez une opération mathématique sur une valeur (en ajoutant des "j'aime" ou l'équivalent), il est logique d'utiliser la transaction

  2. Je ne comprends pas s'il est judicieux d'utiliser des transactions dans le cas d'utilisation suivant: Supposons qu'un champ de texte puisse être mis à jour par un certain nombre d'utilisateurs, et nous sommes intéressés par toutes les mises à jour, car elles se produisent en temps réel. Firebase recommande-t-il d'utiliser la transaction dans ce cas? Ou est la dernière "opération persistante" qui se produit sur la valeur, uniquement limitée à une seule "opération persistante" par granularité d'horodatage de l'horloge du serveur Firebase?

De plus, est-il garanti que les événements seront livrés dans l'ordre dans lequel les valeurs finales ont été persistées?

21
7hacker

Chaque fois que vous utilisez des transactions sur une base de données, vous sacrifiez une partie de votre évolutivité afin d'avoir une meilleure garantie de cohérence des données. Les transactions sur la base de données Firebase ne sont pas différentes, sauf peut-être que les développeurs ont tendance à utiliser Firebase dans des situations plus concurrentes.

Avec tout système transactionnel: la clé pour garder le système évolutif est de minimiser le nombre de clients qui prétendent mettre à jour les mêmes données. Dans le cas de Firebase, vous accomplirez cela en exécutant votre transaction aussi bas que possible dans votre arborescence JSON. C'est à dire. un compteur est un exemple de quelque chose qui pourrait bien fonctionner dans le cadre d'une transaction.

Pour des éléments de données plus volumineux, comme votre exemple d'édition de texte, l'utilisation d'une transaction ne sera pas bien mise à l'échelle. Pour de tels cas d'utilisation, il est préférable de trouver un moyen d'éviter complètement le conflit. Très souvent, cela revient à stocker le delta que chaque utilisateur crée, au lieu de stocker l'état mis à jour. Un bon exemple de cela est dans le exemple Firepad , qui utilise la transformation opérationnelle pour créer un éditeur collaboratif hautement simultané au-dessus de la base de données Firebase.

19
Frank van Puffelen