Preisbeispiele

Auf dieser Seite finden Sie Beispiele für die Berechnung von Abrechnungseinheiten in einigen der häufigsten Szenarien. Beachten Sie, dass sich die verarbeiteten Daten je nach Abfrage aufgrund von Faktoren wie dem Abfrageplan, der Form der Daten und den verfügbaren Indexen unterscheiden können.

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

Lesevorgänge

Bei den meisten Lesevorgängen wird entweder ein Punktlesevorgang für ein bestimmtes Dokument ausgeführt oder ein Datenbereich basierend auf einer ID gescannt. Lesevorgänge verbrauchen Leseeinheiten. Betrachten Sie die folgenden Beispiele.

Die Kosten für Volltextsuchabfragen werden in die Kosten für die Suche in einem Textindex und die Kosten für den Abruf der Dokumente unterteilt. Die Kosten für die Suche in einem Textindex hängen von der Komplexität der Abfrage und der Menge der Daten ab, die im Index gescannt werden, um die Ergebnisse zu finden. Zu den Faktoren, die diese Kosten beeinflussen, gehören die Anzahl und Art der Suchbegriffe (z.B. Begriffe, Wortgruppen), ob eine Relevanzbewertung angewendet wird, und die Anzahl der Indexeinträge, die geprüft werden müssen. Die Kosten für den Abruf 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 Volltextsuchabfragen 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 mit einem Produkteintrag 2 KiB groß ist und der entsprechende Textsuchindex eine Größe von etwa 100 MiB hat.

Abfrage Codebeispiel Geschätzte Leseeinheiten pro Abfrage Geschätzte Kosten (Region: us-central1 in USD)
Suche nach einem seltenen Produkt „dry water“ (Stapel-Flachschale), wodurch 3 Dokumente abgerufen werden.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

10 insgesamt gelesene Einheiten

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, wodurch 36 Dokumente abgerufen werden.
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 Abfragen
Suche nach Balkonpflanzkästen, bei der viele Produktübereinstimmungen gefunden werden. Ergebnisse nach Relevanz sortieren und auf die 50 besten Suchergebnisse beschränken.
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 Abfragen

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

  • Die Abfrage „dry water“ enthält eine Wortgruppe ("dry water") und zusätzliche Begriffe. Suchen nach Wortgruppen sind komplexer, da die Abfrage-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 niedrig.
  • Bei der „indoor“ „citrus“ „tree“ Abfrage wird nach drei separaten Begriffen gesucht. Sie ist zwar pro Begriff etwas weniger komplex als eine Suche nach einer Wortgruppe, erfordert aber dennoch das Nachschlagen mehrerer Tokens. Die Kosten für den Scan des Suchindex sind mit 6 Leseeinheiten etwas niedriger als im Beispiel „dry water“, aber es werden 36 Dokumente zurückgegeben, was die Gesamtkosten erhöht.
  • Die Abfrage nach Balkonpflanzkästen hat mit 25 Einheiten die mit Abstand höchsten Kosten für die Volltextsuche. Das liegt vor allem daran, dass die Ergebnisse nach Relevanz sortiert werden sollen (.sort({score: {$meta: "textScore"}}) ) und die Begriffe mit vielen Dokumenten übereinstimmen. Um die 50 relevantesten Ergebnisse zu ermitteln, muss die Abfrage-Engine alle potenziellen Übereinstimmungen für „Balkon“ oder „Pflanzkasten“ finden, für jede einen Relevanzwert berechnen und sie dann sortieren. Dieser Bewertungs- und Sortiervorgang für eine große Anzahl von Kandidaten im Index ist rechenintensiv, obwohl letztendlich nur 50 Dokumente abgerufen werden. Die allgemeine Natur der Begriffe in Kombination mit dem Aufwand für die Relevanzbewertung macht die Suchphase teurer.

Geografische Abfragen

Die Kosten für geografische Abfragen hängen von der Komplexität der Abfrage und den verwendeten spezifischen Bedingungen und Sortierungen sowie den Ressourcen ab, die zum Scannen aller Daten im relevanten geografischen Index erforderlich sind.

In der folgenden Tabelle sind die Kosten für die Ausführung geografischer Abfragen für eine Kartenanwendung aufgeführt. In diesem Beispiel wird von einer Sammlung mit 1.000.000 Dokumenten ausgegangen, die POIs darstellen. Jedes Dokument mit einem POI ist 1 KiB groß und der entsprechende geografische Index hat eine Größe von etwa 60 MiB.

Abfrage Codebeispiel Geschätzte Leseeinheiten pro Abfrage Geschätzte Kosten (Region: us-central1 in USD)
Alle POIs in einem Umkreis von maximal 10 km finden und 10 Übereinstimmungen zurückgeben.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

16 Leseeinheiten insgesamt.

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

0,80 $ pro Million Abfragen
Alle POIs in einem Umkreis von maximal 100 km finden und die 10 nächstgelegenen POIs aus 1.000 Übereinstimmungen zurückgeben.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

19 Leseeinheiten insgesamt.

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

0,95 $ pro Million Abfragen

Diese Beispiele veranschaulichen, wie sich verschiedene 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 10-km-Radius gefunden werden, muss die Abfrage-Engine weniger Arbeit leisten, um diese Punkte anhand der Entfernung zu identifizieren und zu sortieren (wie es $near implizit tut). Das führt zu niedrigeren Kosten für den Indexscan von 6 Leseeinheiten.
  • Abfrage mit 100-km-Radius: Diese Abfrage deckt ein viel größeres Gebiet ab. Die Abfrage findet 1.000 potenzielle Übereinstimmungen innerhalb des 100-km-Radius. Um die Anfrage nach den 10 nächstgelegenen Punkten zu erfüllen, muss die Abfrage-Engine Entfernungen berechnen und eine viel größere Anzahl von Kandidaten (bis zu 1.000 Punkte) im Index sortieren. Diese zusätzliche Rechenarbeit, bei der viel mehr Punkte durchsucht und bewertet werden müssen, führt dazu, dass die Kosten für die geografische Abfrage mit 9 Leseeinheiten höher sind als bei der Abfrage mit 10 km, obwohl auch hier nur 10 Dokumente zurückgegeben werden.

Punktlesevorgänge

Beispiel für die Abrechnung von Punktlesevorgängen:

  • Punktlesevorgang für ein einzelnes 1-KiB-Dokument. Verbrauch: 1 Leseeinheit
  • Punktlesevorgang für ein einzelnes 4-KiB-Dokument. Verbrauch: 1 Leseeinheit
  • Punktlesevorgang für ein einzelnes 1-MiB-Dokument. 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 Kosten für das Scannen 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 für Dokumente oder Indexeinträge

In bestimmten Situationen ist es möglicherweise nicht erforderlich, den Inhalt eines Dokuments oder Indexeintrags zu lesen, um eine Abfrage zu beantworten. Dazu gehören einfache Zählabfragen wie das Zählen der Gesamtzahl der Dokumente in einer Sammlung. In diesen Fällen fallen Mindestkosten von 32 Byte pro gescanntem Element 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 Punktlesevorgängen

Bei vielen Abfragen wird eine Kombination aus Scannen und Punktlesevorgängen verwendet, um einen Vorgang auszuführen.

  • Abfrage, bei der 128 Indexeinträge mit jeweils 256 Byte gescannt und 128 Dokumente mit jeweils 4 KiB punktgelesen werden. Verbrauch: 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 Abfragen zu optimieren.

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

  • Query Explain, bei dem die Abfrage ausgeführt wird: Es fallen Abfragekosten an.
  • Query Explain mit der Option „Nur Plan“. Verbrauch: 1 Leseeinheit (Mindestkosten für eine Abfrage)

Schreibvorgänge

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

Bei einfachen Schreibvorgängen wie dem Aktualisieren nach Dokument-ID fallen nur die Kosten für die Schreibvorgänge an. Bei Schreibvorgängen, für die eine Abfrage erforderlich ist, um den Vorgang auszuführen, fallen zusätzlich die Lesekosten für die Abfrage an.

Betrachten Sie die folgenden Beispiele.

Erstellen

  • Ein neues 10-KiB-Dokument ohne Indexe erstellen. Verbrauch: 10 Schreibeinheiten
  • Ein 1-KiB-Dokument mit einem Indexeintrag von 256 Byte in der Sammlung erstellen. Verbrauch: 2 Schreibeinheiten

Aktualisieren

  • Ein 10-KiB-Dokument nach Dokument-ID suchen und ohne Indexe in der Sammlung aktualisieren. Verbrauch: 10 Schreibeinheiten
  • Ein 1-KiB-Dokument nach Dokument-ID suchen und 1 Feld mit einem Indexeintrag von 256 Byte aktualisieren. Verbrauch: 3 Schreibeinheiten. Hinweis: Das Aktualisieren eines Indexeintrags in dieser Situation verbraucht 2 Schreibeinheiten – eine zum Löschen und eine zum Neuerstellen des Indexeintrags.
  • Ein 1-KiB-Dokument nach Dokument-ID suchen und nichts aktualisieren (keine Änderungen). Verbrauch: 1 Schreibeinheit (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 der Sammlung einfügen: 1.000 Leseeinheiten und 1.000 Schreibeinheiten.

Löschen

  • Ein 1-KiB-Dokument löschen, das einen Index in der Sammlung hat. Verbrauch: 2 Schreibeinheiten
  • Ein 1-KiB-Dokument löschen, das keine Indexe in der Sammlung hat. Verbrauch: 1 Schreibeinheit

Indexerstellung

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

  • Einen neuen Index für eine Sammlung mit 500 Dokumenten erstellen. Die erstellten Indexeinträge sind jeweils 1 KiB groß. Verbrauch: 500 Schreibeinheiten.
  • Einen vorhandenen Index für eine Sammlung mit 500 Dokumenten löschen. Die gelöschten Indexeinträge sind jeweils 1 KiB groß. Verbrauch: 500 Schreibeinheiten.