Optimiser les performances de la base de données

Il existe différentes manières d'améliorer les performances de la base de données en temps réel Firebase dans votre application. Pour découvrir ce que vous pouvez faire pour optimiser les performances de votre base de données en temps réel, rassemblez des données via les différents outils de surveillance de la base de données en temps réel, puis modifiez votre application ou l'utilisation de votre base de données en temps réel en conséquence.

Surveiller les performances de la base de données en temps réel

Vous pouvez collecter des données sur les performances de votre base de données en temps réel via différents outils, en fonction du niveau de granularité dont vous avez besoin :

  • Aperçu de haut niveau : utilisez l' outil de profilage pour obtenir une liste des requêtes non indexées et un aperçu en temps réel des opérations de lecture/écriture.
  • Estimation de l'utilisation facturée : utilisez les métriques d'utilisation disponibles dans la console Firebase pour voir votre utilisation facturée et les métriques de performances de haut niveau.
  • Analyse détaillée : utilisez Cloud Monitoring pour obtenir un aperçu plus précis des performances de votre base de données au fil du temps.

Améliorer les performances par métrique

Une fois que vous avez collecté des données, explorez les meilleures pratiques et stratégies suivantes en fonction du domaine de performances que vous souhaitez améliorer.

Aperçu des stratégies d'amélioration des performances
Métrique Description Les meilleures pratiques
Charge/Utilisation Optimisez la quantité de capacité de votre base de données utilisée pour traiter les demandes à un moment donné (reflété dans les métriques **Load** ou **io/database_load**). Optimisez votre structure de données
Partager les données entre les bases de données
Améliorer l’efficacité de l’auditeur
Limitez les téléchargements avec des règles basées sur des requêtes
Optimiser les connexions
Connexions actives Équilibrez le nombre de connexions actives simultanées à votre base de données pour rester sous la limite de 200 000 connexions. Partager les données entre les bases de données
Réduire les nouvelles connexions
Bande passante sortante Si les téléchargements depuis votre base de données semblent plus élevés que vous ne le souhaiteriez, vous pouvez améliorer l'efficacité de vos opérations de lecture et réduire la surcharge de chiffrement. Optimiser les connexions
Optimisez votre structure de données
Limitez les téléchargements avec des règles basées sur des requêtes
Réutiliser les sessions SSL
Améliorer l’efficacité de l’auditeur
Restreindre l'accès aux données
Stockage Assurez-vous de ne pas stocker de données inutilisées ou d'équilibrer vos données stockées dans d'autres bases de données et/ou produits Firebase pour rester sous quota. Nettoyer les données inutilisées
Optimisez votre structure de données
Partager les données entre les bases de données
Utiliser le stockage cloud pour Firebase

Optimiser les connexions

Les requêtes RESTful telles que GET et PUT nécessitent toujours une connexion, même si cette connexion est de courte durée. Ces connexions fréquentes et de courte durée peuvent en réalité entraîner des coûts de connexion, une charge de base de données et une bande passante sortante nettement plus élevés que les connexions actives en temps réel à votre base de données.

Dans la mesure du possible, utilisez les SDK natifs pour la plate-forme de votre application, au lieu de l'API REST. Les SDK maintiennent des connexions ouvertes, réduisant ainsi les coûts de chiffrement SSL et la charge de base de données qui peuvent s'accumuler avec l'API REST.

Si vous utilisez l'API REST, envisagez d'utiliser un HTTP keep-alive pour maintenir une connexion ouverte ou d'utiliser des événements envoyés par le serveur , ce qui peut réduire les coûts liés aux négociations SSL.

Partager les données sur plusieurs bases de données

La répartition de vos données sur plusieurs instances de base de données en temps réel, également appelée partitionnement de base de données, offre trois avantages :

  1. Augmentez le nombre total de connexions actives simultanées autorisées sur votre application en les répartissant entre les instances de base de données.
  2. Équilibrez la charge sur les instances de base de données.
  3. Si vous disposez de groupes d'utilisateurs indépendants qui ont uniquement besoin d'accéder à des ensembles de données discrets, utilisez différentes instances de base de données pour un débit plus élevé et une latence plus faible.

Si vous bénéficiez du plan tarifaire Blaze , vous pouvez créer plusieurs instances de base de données au sein du même projet Firebase, en tirant parti d'une méthode d'authentification utilisateur commune entre les instances de base de données.

Apprenez-en davantage sur comment et quand fragmenter les données .

Construire des structures de données efficaces

Étant donné que Realtime Database récupère les données des nœuds enfants d'un chemin ainsi que du chemin, il est logique de conserver votre structure de données aussi plate que possible. De cette façon, vous pouvez récupérer de manière sélective les données dont vous avez besoin, sans télécharger également de données inutiles vers les clients.

En particulier, pensez aux écritures et aux suppressions lorsque vous structurez vos données. Par exemple, les chemins comportant des milliers de feuilles sont potentiellement coûteux à supprimer. Les diviser en chemins avec plusieurs sous-arbres et moins de feuilles par nœud peut accélérer les suppressions.

De plus, chaque écriture peut représenter 0,1 % de l'utilisation totale de votre base de données. Structurez vos données de manière à vous permettre d'écrire par lots en une seule opération sous forme de mises à jour multi-chemins via les méthodes update() dans les SDK ou les requêtes RESTful PATCH .

Pour optimiser votre structure de données et améliorer les performances, suivez les meilleures pratiques pour les structures de données .

Empêcher tout accès non autorisé

Empêchez les opérations non autorisées sur votre base de données grâce aux règles de sécurité de la base de données en temps réel. Par exemple, l’utilisation de règles pourrait éviter un scénario dans lequel un utilisateur malveillant télécharge à plusieurs reprises l’intégralité de votre base de données.

En savoir plus sur l'utilisation des règles de base de données en temps réel Firebase .

Utiliser des règles basées sur des requêtes pour limiter les téléchargements

Les règles de sécurité de base de données en temps réel limitent l'accès aux données de votre base de données, mais elles peuvent également servir à limiter les données renvoyées via les opérations de lecture. Lorsque vous utilisez des règles basées sur des requêtes, telles que définies par query. Dans des expressions telles que query.limitToFirst , les requêtes récupèrent uniquement les données délimitées par la règle.

Par exemple, la règle suivante limite l'accès en lecture aux 1 000 premiers résultats d'une requête, classés par priorité :

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

En savoir plus sur les règles de sécurité des bases de données en temps réel .

Requêtes d'index

L'indexation de vos données réduit la bande passante totale que vous utilisez pour chaque requête exécutée par votre application.

Réutiliser les sessions SSL

Réduisez les coûts de chiffrement SSL lors de la reprise des connexions en émettant des tickets de session TLS . Ceci est particulièrement utile si vous avez besoin de connexions fréquentes et sécurisées à la base de données.

Améliorer l’efficacité de l’auditeur

Placez vos auditeurs aussi loin que possible pour limiter la quantité de données qu'ils synchronisent. Vos auditeurs doivent être proches des données que vous souhaitez qu'ils obtiennent. N'écoutez pas la racine de la base de données, car cela entraînerait le téléchargement de l'intégralité de votre base de données.

Ajoutez des requêtes pour limiter les données renvoyées par vos opérations d'écoute et utilisez des écouteurs qui téléchargent uniquement les mises à jour des données - par exemple, on() au lieu de once() . Réservez .once() pour les actions qui ne nécessitent vraiment pas de mise à jour des données. De plus, triez vos requêtes à l’aide de orderByKey() , autant que possible, pour obtenir les meilleures performances. Le tri avec orderByChild() peut être 6 à 8 fois plus lent, et le tri avec orderByValue() peut être très lent pour les grands ensembles de données, car il nécessite une lecture de l'intégralité de l'emplacement à partir de la couche de persistance.

Assurez-vous également d'ajouter des écouteurs de manière dynamique et de les supprimer lorsqu'ils ne sont plus nécessaires.

Nettoyer les données inutilisées

Supprimez périodiquement toutes les données inutilisées ou en double de votre base de données. Vous pouvez exécuter des sauvegardes pour inspecter manuellement vos données ou les sauvegarder périodiquement dans un bucket Google Cloud Storage. Pensez également à héberger les données stockées via Cloud Storage pour Firebase .

Expédiez un code évolutif que vous pouvez mettre à jour

Les applications intégrées aux appareils IoT doivent inclure un code évolutif que vous pouvez facilement mettre à jour. Assurez-vous de tester minutieusement les cas d'utilisation, de tenir compte des scénarios dans lesquels vous pourriez développer votre base d'utilisateurs de manière exponentielle et d'intégrer la possibilité de déployer des mises à jour de votre code. Considérez attentivement les modifications majeures que vous pourriez devoir apporter ultérieurement, si, par exemple, vous décidez de partager vos données.