Preisbeispiele

Auf dieser Seite finden Sie Beispiele für die Berechnung von Abrechnungseinheiten in einigen der häufigsten Szenarien. Beachten Sie, dass jede Abfrage in Bezug auf die verarbeiteten Daten basierend auf Faktoren wie dem Abfrageplan, der Form der Daten und den verfügbaren Indexen variieren kann.

Wir empfehlen, die Funktion Query Explain zu verwenden, um die Kosten und Leistung Ihrer spezifischen Abfragen besser zu verstehen.

Lesevorgänge

Bei den meisten Lesevorgängen wird entweder ein bestimmtes Dokument punktuell gelesen oder ein Datenbereich anhand einer Kennung gescannt. Lesevorgänge verbrauchen Leseeinheiten. Betrachten Sie die folgenden Beispiele.

Die Kosten für Volltextsuchanfragen werden in die Kosten für die Suche in einem Textindex und die Kosten für das Abrufen der Dokumente unterteilt. Die Kosten für die Suche in einem Textindex hängen von der Komplexität der Anfrage und der Menge der Daten ab, die im Index gescannt werden, um die Ergebnisse zu finden. Faktoren, die diese Kosten beeinflussen, sind unter anderem die Anzahl und Art der Suchbegriffe (z.B. Begriffe, Wortgruppen), ob die Relevanzbewertung angewendet wird, und die Anzahl der Indexeinträge, die geprüft werden müssen. Die Kosten für das Abrufen relevanter Dokumente basieren auf der Anzahl und Größe der Dokumente, die nach Abschluss der Suchphase abgerufen werden.

In der folgenden Tabelle sind die Kosten für die Ausführung von Volltextsuchanfragen für einen E-Commerce-Produktkatalog für eine Gärtnerei aufgeführt. In diesem Beispiel wird von einer Sammlung mit 200.000 Produkteinträgen ausgegangen, wobei jedes Dokument für einen Produkteintrag 2 KiB groß ist und der entsprechende Textsuchindex etwa 100 MiB umfasst.

Abfrage Codebeispiel Geschätzte Anzahl der Leseeinheiten, die pro Abfrage verbraucht werden Geschätzte Kosten (Region: us-central1 in USD)
Suchen Sie nach einem seltenen Produkt mit dem Namen „dry water“ (Trockenwasser) in einem Stapel mit flachen Schalen. Es werden drei Dokumente abgerufen.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

10 Leseeinheiten insgesamt

Basierend auf 7 Einheiten für die Volltextsuche und 3 zusätzlichen Einheiten für die zurückgegebenen Dokumente.

0,50 $ pro Million Abfragen
Suche nach allen Zitrusbäumen für den Innenbereich, was zum Abrufen von 36 Dokumenten führt.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

42 Leseeinheiten insgesamt

Basierend auf 6 Einheiten für die Volltextsuche und 36 zusätzlichen Einheiten für die zurückgegebenen Dokumente.

2,10 $ pro Million Anfragen
Suchen Sie nach Balkonkästen, für die es viele Produktübereinstimmungen gibt. Sortiere die Ergebnisse nach Relevanz und beschränke sie auf die 50 wichtigsten Suchergebnisse.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 Leseeinheiten insgesamt

Basierend auf 25 Einheiten für die Volltextsuche und 50 zusätzlichen Einheiten für die zurückgegebenen Dokumente.

3,75 $ pro Million Anfragen

Diese Beispiele veranschaulichen, wie sich unterschiedliche Abfragemuster auf die Kosten auswirken:

  • Die Anfrage „trockenes Wasser“ enthält eine Wortgruppe ("dry water") und zusätzliche Begriffe. Phrasensuche ist komplexer, da die Suchanfrage-Engine die Nähe und Reihenfolge von Tokens prüfen muss. Dies trägt zu den 7 Leseeinheiten für die Suchphase bei. Da nur sehr wenige Dokumente übereinstimmen, sind die Kosten für den Dokumentabruf gering.
  • Bei der Anfrage „indoor“ „citrus“ „tree“ wird nach drei separaten Begriffen gesucht. Die Suche nach einzelnen Begriffen ist zwar etwas weniger komplex als die Suche nach Wortgruppen, es müssen aber trotzdem mehrere Tokens nachgeschlagen werden. Die Kosten für das Scannen des Suchindex sind mit 6 Leseeinheiten etwas niedriger als im Beispiel „trockenes Wasser“, aber es werden 36 Dokumente zurückgegeben, was die Gesamtkosten erhöht.
  • Die Abfrage für Balkonkästen hat mit 25 Einheiten die mit Abstand höchsten Volltextsuchkosten. Das liegt vor allem daran, dass die Ergebnisse nach Relevanz (.sort({score: {$meta: "textScore"}}) ) für Begriffe sortiert werden, die mit vielen Dokumenten übereinstimmen. Um die 50 relevantesten Ergebnisse zu ermitteln, muss die Abfrage-Engine alle potenziellen Übereinstimmungen für „Balkon“ oder „Blumenkasten“ finden, für jede einen Relevanzwert berechnen und sie dann sortieren. Dieser Prozess zum Bewerten und Sortieren einer großen Anzahl von Kandidaten im Index ist rechenintensiv, auch wenn letztendlich nur 50 Dokumente abgerufen werden. Die Breite der Begriffe in Kombination mit dem Aufwand für die Relevanzbewertung macht die Suchphase teurer.

Geospatiale Abfragen

Die Kosten für raumbezogene Abfragen richten sich nach der Komplexität der Abfrage und den verwendeten spezifischen Bedingungen und Sortierungen sowie nach den Ressourcen, die zum Scannen aller Daten im relevanten raumbezogenen Index erforderlich sind.

In der folgenden Tabelle sind die Kosten für die Ausführung von geospatialen Abfragen für eine Kartenanwendung aufgeführt. In diesem Beispiel wird von einer Sammlung von 1.000.000 Dokumenten ausgegangen, die Points of Interest darstellen. Jedes Point-of-Interest-Dokument ist 1 KiB groß und der entsprechende geospatiale Index hat eine Größe von etwa 60 MiB.

Abfrage Codebeispiel Geschätzte Anzahl der Leseeinheiten, die pro Abfrage verbraucht werden Geschätzte Kosten (Region: us-central1 in USD)
Finde alle Points of Interest im Umkreis von maximal 10 km und gib 10 Ergebnisse zurück.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

Insgesamt 16 Leseeinheiten.

Basierend auf 6 Leseeinheiten für die raumbezogene Abfrage und 10 zusätzlichen Einheiten für die zurückgegebenen Dokumente.

0,80 $ pro Million Abfragen
Finde alle POIs mit einer maximalen Entfernung von 100 km und gib die 10 nächstgelegenen POIs von 1.000 Ergebnissen zurück.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

19 Leseeinheiten insgesamt.

Basierend auf 9 Leseeinheiten für die raumbezogene Abfrage und 10 zusätzlichen Einheiten für die zurückgegebenen Dokumente.

0,95 $ pro Million Abfragen

Diese Beispiele veranschaulichen, wie sich unterschiedliche Abfragemuster auf die Kosten auswirken:

  • Abfrage mit 10 km Radius: Bei dieser Abfrage wird ein kleineres geografisches Gebiet gescannt. Da nur 10 Übereinstimmungen innerhalb dieses Radius von 10 km gefunden werden, muss die Abfrage-Engine weniger Arbeit leisten, um diese Punkte nach Entfernung zu identifizieren und zu sortieren (wie $near implizit tut). Das führt zu geringeren Kosten für den Indexscan von 6 Leseeinheiten.
  • Abfrage mit 100 km Radius: Diese Abfrage deckt einen viel größeren Bereich ab. Bei der Abfrage werden 1.000 potenzielle Übereinstimmungen im Umkreis von 100 km gefunden. Um die Anfrage nach den 10 nächstgelegenen Punkten zu erfüllen, muss die Abfrage-Engine Entfernungen berechnen und eine viel größere Menge von Kandidaten (bis zu 1.000 Punkte) im Index sortieren. Diese zusätzliche Rechenarbeit, bei der viel mehr Punkte durchsucht und eingestuft werden müssen, ist der Grund dafür, dass die Kosten für die raumbezogene Abfrage mit 9 Leseeinheiten höher sind als bei der 10-km-Abfrage, obwohl auch hier nur 10 Dokumente zurückgegeben werden.

Punkt-Lesevorgänge

Beispiel für die Abrechnung von Punktlesevorgängen:

  • Punktlesevorgang eines einzelnen 1 KiB-Dokuments. Verbrauch: 1 Leseeinheit
  • Punktlesevorgang eines einzelnen 4 KiB-Dokuments. Verbrauch: 1 Leseeinheit
  • Punktuelles Lesen eines einzelnen 1 MiB großen Dokuments. Verbrauch: 256 Leseeinheiten
  • Punktlesevorgang für 100 Dokumente mit jeweils 1 KiB. Verbrauch: 100 Leseeinheiten

Scannen

Die folgenden Beispiele enthalten Szenarien, in denen Dokumente oder Indexeinträge gescannt werden.

Dokumente scannen

  • Abfrage, bei der 100 Dokumente mit jeweils 1 KiB gescannt werden. Verbrauch: 25 Leseeinheiten

Indexe scannen

Die Scanning-Kosten in Byte sind unabhängig davon, ob ein Dokument oder ein Index gescannt wird. Indexeinträge sind jedoch oft kleiner. Daher können sie oft eine kostengünstigere Möglichkeit zum Scannen von Daten bieten.

  • Abfrage, bei der 100 Indexeinträge mit jeweils 1 KiB gescannt werden. Verbrauch: 25 Leseeinheiten.
  • Abfrage, bei der 100 Indexeinträge mit jeweils 128 Byte gescannt werden. Verbrauch: 4 Leseeinheiten.

Mindestgröße von Dokumenten oder Indexeinträgen

In bestimmten Situationen ist es möglicherweise nicht erforderlich, den Inhalt eines Dokuments oder Indexeintrags zu lesen, um eine Anfrage zu beantworten. Dazu gehören einfache Zählabfragen, z. B. zum Zählen der Gesamtzahl der Dokumente in einer Sammlung. In diesen Fällen fallen Mindestkosten von 32 Byte pro gescanntem Artikel an.

  • Anzahl der Dokumente in einer Sammlung zählen Bei der Abfrage werden 1.000 Elemente in der Sammlung gescannt. Verbrauch: 8 Leseeinheiten.

Kombination aus Scannen und Punktmessungen

Bei vielen Anfragen wird eine Kombination aus Scannen und Punktlesevorgängen ausgeführt, um einen Vorgang auszuführen.

  • Eine Abfrage, bei der 128 Indexeinträge mit jeweils 256 Byte gescannt und 128 Dokumente mit jeweils 4 KiB punktuell gelesen werden. Verbraucht: 136 Leseeinheiten, bestehend aus:
    • 128 Leseeinheiten für Punktlesevorgänge
    • 8 Leseeinheiten für Indexscans

Query Explain

Mit Query Explain können Sie nachvollziehen, wie die Datenbank Ihre Abfragen ausführt. Die bereitgestellten Details können Ihnen helfen, Ihre Anfragen zu optimieren.

Bei der Verwendung von „Query Explain“ fallen die folgenden Kosten an:

  • „Query Explain“ führt die Abfrage aus. Es fallen Abfragekosten an.
  • „Query Explain“ mit der Option „plan only“ (nur Plan). Verbrauch: 1 Leseeinheit (Mindestkosten einer Abfrage)

Schreibvorgänge

Schreibvorgänge (Erstellen, Aktualisieren und Löschen) werden basierend auf der Größe der Dokumente und Indexe berechnet, die während des Vorgangs erstellt, geändert oder gelöscht werden. Schreibvorgänge verbrauchen Schreibeinheiten. Schreibeinheiten werden in Tranchen von 1 KiB berechnet.

Für einfache Schreibvorgänge wie „Aktualisieren nach Dokument-ID“ fallen nur die Kosten für die Schreibvorgänge an. Für Schreibvorgänge, für die eine Abfrage erforderlich ist, um den Vorgang auszuführen, fallen zusätzlich die mit der Abfrage verbundenen Lesekosten an.

Betrachten Sie die folgenden Beispiele.

Erstellt

  • Erstellen Sie ein neues 10 KiB großes Dokument ohne Indexe. Verbrauch: 10 Schreibeinheiten
  • Erstellen Sie ein 1 KiB großes Dokument mit einem Indexeintrag von 256 Byte in der Sammlung. Verbrauch: 2 Schreibeinheiten

Updates

  • Ein 10 KiB großes Dokument anhand der Dokument-ID suchen und ohne Indexe in der Sammlung aktualisieren. Verbrauch: 10 Schreibeinheiten
  • Ein 1 KiB großes Dokument anhand der Dokument-ID finden und ein Feld mit einem Indexeintrag von 256 Byte aktualisieren. Verbrauch: 3 Schreibeinheiten. Hinweis: Wenn Sie einen Indexeintrag in dieser Situation aktualisieren, werden 2 Schreibeinheiten verbraucht – eine zum Löschen und eine zum Neuerstellen des Indexeintrags.
  • Ein 1 KiB großes Dokument anhand der Dokument-ID finden und nichts aktualisieren (keine Änderungen). Verbrauch: 1 Schreibeinheit (die Mindestkosten für Schreibvorgänge)
  • Alle 1-KiB-Dokumente in einer Sammlung abfragen, wobei 1.000 Dokumente gescannt werden, und ein neues 256-Byte-Feld ohne Indexe in die Sammlung einfügen: 1.000 Leseeinheiten und 1.000 Schreibeinheiten.

Löschvorgänge

  • Löschen Sie ein 1 KiB großes Dokument mit einem Index in der Sammlung. Verbrauch: 2 Schreibeinheiten
  • Löschen eines 1 KiB großen Dokuments ohne Indexe in der Sammlung. Verbrauch: 1 Schreibeinheit

Index-Builds

Für Indexerstellungen werden die Indexeinträge in Rechnung gestellt, die während des Erstellungsvorgangs erstellt oder geändert wurden. Diese Kosten fallen immer an, wenn eine Indexdefinition hinzugefügt oder entfernt wird. Die Indexeinträge werden genauso abgerechnet wie Schreibvorgänge, bei denen 1 Schreibeinheit pro 1 KiB anfällt.

  • Sie erstellen einen neuen Index für eine Sammlung mit 500 Dokumenten. Die erstellten Indexeinträge haben jeweils eine Größe von 1 KiB. Verbraucht 500 Schreibeinheiten.
  • Sie löschen einen vorhandenen Index für eine Sammlung mit 500 Dokumenten. Die gelöschten Indexeinträge haben jeweils eine Größe von 1 KiB. Verbraucht 500 Schreibeinheiten.