Exemples de tarification

Cette page inclut des exemples de calcul des unités de facturation dans certains des scénarios les plus courants. Notez que chaque requête peut différer en termes de données traitées en fonction de facteurs tels que le plan de requête, la forme des données et les index disponibles.

Nous vous recommandons d'utiliser la fonctionnalité Query Explain pour mieux comprendre le coût et les performances de vos requêtes spécifiques.

Opérations de lecture

La plupart des opérations de lecture impliquent soit d'effectuer une lecture ponctuelle d'un document spécifique, soit d'analyser une plage de données en fonction d'un identifiant. Les opérations de lecture consomment des unités de lecture. Consultez les exemples suivants.

Les frais liés aux requêtes de recherche en texte intégral sont répartis entre le coût d'exécution d'une recherche sur un index de texte et le coût de récupération des documents. Le coût d'une recherche sur un index de texte est déterminé par la complexité de la requête et la quantité de données analysées dans l'index pour trouver les résultats. Les facteurs qui influencent ce coût incluent le nombre et la nature des termes de recherche (par exemple, des termes ou des expressions), l'application ou non d'un score de pertinence, et le nombre d'entrées d'index à examiner. Le coût de récupération des documents pertinents est basé sur le nombre et la taille des documents récupérés une fois la phase de recherche terminée.

Le tableau suivant décrit les frais associés à l'exécution de requêtes de recherche en texte intégral pour un catalogue de produits d'e-commerce d'une pépinière. Cet exemple suppose une collection de 200 000 fiches produit, chaque document de fiche produit faisant 2 Kio, et une taille d'index de recherche de texte correspondante d'environ 100 Mio.

Requête Exemple de code Estimation des unités de lecture consommées par requête Coûts estimés (région : us-central1 en USD)
Recherchez un produit rare de type "dry water stack flat tray" (plateau plat pour empiler de l'eau sèche). Trois documents sont récupérés.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

10 unités de lecture au total

Basé sur sept unités pour la recherche en texte intégral et trois unités supplémentaires pour les documents renvoyés.

0,50 $ par million de requêtes
Rechercher tous les agrumes d'intérieur, ce qui permet de récupérer 36 documents.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

42 unités de lecture au total

Basé sur six unités pour la recherche en texte intégral et 36 unités supplémentaires pour les documents renvoyés.

2,10 $ par million de requêtes
Recherchez des jardinières de balcon pour lesquelles il existe de nombreux produits correspondants. Triez les résultats par pertinence et limitez-les aux 50 premiers résultats de recherche.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 unités de lecture au total

Basé sur 25 unités pour la recherche en texte intégral et 50 unités supplémentaires pour les documents renvoyés.

3,75 $ par million de requêtes

Ces exemples illustrent l'impact de différents schémas de requête sur les coûts :

  • La requête"dry water" implique une expression ("dry water") et des termes supplémentaires. Les recherches d'expressions sont plus complexes, car le moteur de requête doit vérifier la proximité et l'ordre des jetons, ce qui contribue aux sept unités de lecture de la phase de recherche. Comme très peu de documents correspondent, le coût de récupération des documents est faible.
  • La requête "indoor" "citrus" "tree" recherche trois termes distincts. Bien qu'elle soit légèrement moins complexe par terme qu'une recherche d'expression, elle nécessite toujours de rechercher plusieurs jetons. Le coût d'analyse de l'index de recherche est légèrement inférieur (six unités de lecture) à celui de l'exemple "dry water", mais 36 documents sont renvoyés, ce qui augmente le coût total.
  • La requête "jardinière de balcon" présente le coût de recherche en texte intégral le plus élevé (25 unités), et de loin. Cela est principalement dû au fait qu'elle demande que les résultats soient triés par pertinence (.sort({score: {$meta: "textScore"}})) sur des termes qui correspondent à de nombreux documents. Pour déterminer les 50 résultats les plus pertinents, le moteur de requête doit trouver toutes les correspondances potentielles pour "balcon" ou "jardinière", calculer un score de pertinence pour chacune d'elles, puis les trier. Ce processus de notation et de tri sur un grand nombre de candidats dans l'index est gourmand en ressources de calcul, même si seulement 50 documents sont finalement récupérés. La largeur des termes combinée à la surcharge du calcul du score de pertinence rend la phase de recherche plus coûteuse.

Requêtes géospatiales

Les frais liés aux requêtes géospatiales sont déterminés par la complexité de la requête, les conditions et le tri spécifiques utilisés, ainsi que les ressources nécessaires pour analyser toutes les données de l'index géospatial concerné.

Le tableau suivant décrit les frais associés à l'exécution de requêtes géospatiales pour une application de cartographie. Cet exemple suppose une collection de 1 000 000 de documents représentant des points d'intérêt, chaque document de point d'intérêt étant de 1 Kio, et une taille d'index géospatial correspondante d'environ 60 Mio.

Requête Exemple de code Estimation des unités de lecture consommées par requête Coûts estimés (région : us-central1 en USD)
Rechercher tous les points d'intérêt dans un rayon de 10 km maximum, en renvoyant 10 résultats.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

16 unités de lecture au total.

Sur la base de six unités de lecture pour la requête géospatiale et de 10 unités supplémentaires pour les documents renvoyés.

0,80 $ par million de requêtes
Rechercher tous les points d'intérêt situés à une distance maximale de 100 km et renvoyer les 10 points d'intérêt les plus proches parmi 1 000 correspondances
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

19 unités de lecture au total.

Basé sur 9 unités de lecture pour la requête géospatiale et 10 unités supplémentaires pour les documents renvoyés.

0,95 $ par million de requêtes

Ces exemples illustrent l'impact de différents schémas de requête sur les coûts :

  • Requête dans un rayon de 10 km : cette requête analyse une zone géographique plus petite. Comme il ne trouve que 10 correspondances dans ce rayon de 10 km, le moteur de requête a moins de travail à faire pour identifier et classer ces points par distance (comme le fait implicitement $near). Cela se traduit par un coût d'analyse d'index inférieur de six unités de lecture.
  • Requête de rayon de 100 km : cette requête couvre une zone beaucoup plus vaste. La requête trouve 1 000 correspondances potentielles dans un rayon de 100 km. Pour répondre à la requête des 10 points les plus proches, le moteur de requête doit calculer les distances et trier un ensemble de candidats beaucoup plus important (jusqu'à 1 000 points) dans l'index. Ce travail de calcul supplémentaire consistant à trier et à classer un plus grand nombre de points explique pourquoi le coût de la requête géospatiale est plus élevé (9 unités de lecture), par rapport à la requête de 10 km, même si elle ne renvoie que 10 documents.

Lectures ponctuelles

Exemple de facturation pour les lectures ponctuelles :

  • Lecture ponctuelle d'un seul document de 1 Kio. Consomme : 1 unité de lecture
  • Lecture ponctuelle d'un seul document de 4 Kio. Consomme : 1 unité de lecture
  • Lecture ponctuelle d'un seul document de 1 Mio. Consommation : 256 unités de lecture
  • Lecture ponctuelle de 100 documents de 1 Kio chacun. Consommation : 100 unités de lecture

Analyse

Les exemples suivants incluent des scénarios qui analysent des documents ou des entrées d'index.

Numérisation de documents

  • Requête qui analyse 100 documents de 1 Kio chacun. Consommation : 25 unités de lecture

Analyser des index

Le coût d'analyse, en termes d'octets, est le même, qu'il s'agisse d'un document ou d'un index. Cependant, les entrées d'index sont souvent plus petites. Par conséquent, ils peuvent souvent offrir un moyen plus économique d'analyser les données.

  • Requête qui analyse 100 entrées d'index de 1 Kio chacune. Consommation : 25 unités de lecture.
  • Requête qui analyse 100 entrées d'index de 128 octets chacune. Consommation : quatre unités de lecture.

Taille minimale d'un document ou d'une entrée d'index

Dans certains cas, il n'est pas nécessaire de lire le contenu d'un document ou d'une entrée d'index pour répondre à une requête. Cela inclut les requêtes de décompte simples, comme le décompte du nombre total de documents dans une collection. Dans ce cas, un coût minimal de 32 octets s'applique par élément analysé.

  • Compter le nombre de documents dans une collection. La requête analyse 1 000 éléments de la collection. Consommation : 8 unités de lecture.

Combinaison de l'analyse et des lectures ponctuelles

De nombreuses requêtes effectuent une combinaison d'analyses et de lectures ponctuelles pour satisfaire une opération.

  • Requête qui analyse 128 entrées d'index de 256 octets chacune et effectue une lecture ponctuelle de 128 documents de 4 Kio chacun. Consommation : 136 unités de lecture, composées de :
    • 128 unités de lecture pour les lectures ponctuelles
    • 8 unités de lecture pour les analyses d'index

Explication de la requête

Query Explain vous aide à comprendre comment la base de données exécute vos requêtes. Les détails fournis peuvent vous aider à optimiser vos requêtes.

Les coûts suivants s'appliquent lorsque vous utilisez Query Explain :

  • Query Explain qui exécute la requête : le coût de la requête s'applique.
  • Explication de requête à l'aide de l'option "Plan uniquement". Consommation : 1 unité de lecture (coût minimal d'une requête)

Opérations d'écriture

Les opérations d'écriture (créations, mises à jour et suppressions) sont facturées en fonction de la taille des documents et des index créés, modifiés ou supprimés au cours de l'opération. Les opérations d'écriture consomment des unités d'écriture. Les unités d'écriture sont calculées par tranches de 1 Kio.

Les opérations d'écriture simples, telles que la mise à jour par ID de document, n'entraînent que le coût des écritures. Les opérations d'écriture qui nécessitent une requête pour être exécutées entraînent également des coûts de lecture associés à la requête.

Consultez les exemples suivants.

Création

  • Créez un document de 10 Kio sans index. Consomme : 10 unités d'écriture
  • Créez un document de 1 Kio avec une entrée d'index de 256 octets sur la collection. Consomme : 2 unités d'écriture

Mises à jour

  • Rechercher un document de 10 Kio par ID de document et le mettre à jour sans index sur la collection. Consomme : 10 unités d'écriture
  • Rechercher un document de 1 Kio par ID de document et mettre à jour un champ avec une entrée d'index de 256 octets. Consommation : trois unités d'écriture. Remarque : Dans ce cas, la mise à jour d'une entrée d'index consomme deux unités d'écriture : une pour supprimer l'entrée d'index et une autre pour la recréer.
  • Rechercher un document de 1 Kio par ID de document et ne rien mettre à jour (aucune modification). Consomme : 1 unité d'écriture (coût d'écriture minimal)
  • Interroger tous les documents de 1 Kio d'une collection, ce qui analyse 1 000 documents, et insérer un nouveau champ de 256 octets sans index sur la collection : 1 000 unités de lecture et 1 000 unités d'écriture.

Suppressions

  • Supprimer un document de 1 Kio, qui comporte un index sur la collection. Consomme : 2 unités d'écriture
  • Supprimez un document de 1 Kio, qui ne comporte aucun index sur la collection. Consomme : 1 unité d'écriture

Créations d'index

Les compilations d'index sont facturées pour les entrées d'index créées ou modifiées lors de l'opération de compilation. Ces coûts sont engagés chaque fois qu'une définition d'index est ajoutée ou supprimée. Les entrées d'index sont facturées de la même manière que les écritures, à raison d'une unité d'écriture par Kio.

  • Créez un index pour une collection contenant 500 documents. Les entrées d'index créées font 1 Kio chacune. Consomme 500 unités d'écriture.
  • Suppression d'un index existant pour une collection contenant 500 documents, les entrées d'index supprimées font 1 Kio chacune. Consomme 500 unités d'écriture.