Was ist der Unterschied zwischen Scan und Abfrage in dynamodb? Wann benutze Scan / Abfrage?

8

Eine Abfrageoperation wie in der DynamoDb-Dokumentation angegeben:

  

Eine Abfrageoperation durchsucht nur Primärschlüsselattributwerte und unterstützt eine Untergruppe von Vergleichsoperatoren für Schlüsselattributwerte, um den Suchprozess zu verfeinern.

und der Scanvorgang:

  

Ein Scanvorgang durchsucht die gesamte Tabelle. Sie können Filter angeben, die nach dem vollständigen Scan auf die Ergebnisse angewendet werden, um die an Sie zurückgegebenen Werte zu verfeinern.

Welches ist am besten basierend auf Leistung und Kosten Überlegungen.

    
samson 17.04.2017, 13:12
quelle

3 Antworten

10

Sie haben dynamodb Tabellenpartitionsschlüssel / Primärschlüssel als customer_country . Wenn Sie die Abfrage verwenden, ist customer_country das obligatorische Feld für die Abfrageoperation. Alle Filter können nur Elemente gemacht werden, die zu customer_country gehören.

Wenn Sie einen Tabellenscan durchführen, wird der Filter für alle Partitionsschlüssel / Primärschlüssel ausgeführt. Zuerst wurden alle Daten abgerufen und nach dem Abrufen aus der Tabelle Filter angewendet.

zB:

here customer_country ist der Partitionsschlüssel / Primärschlüssel und id ist der Sortierschlüssel

%Vor%
  • Wenn Sie eine Abfrageoperation ausführen, gilt dies nur für customer_country value. Der Wert sollte nur der gleiche Operator (=) sein.

  • Es werden also nur Elemente abgerufen, die diesem Partitionsschlüssel / Primärschlüsselwert entsprechen.

  • Wenn Sie einen Scanvorgang ausführen, ruft er alle Elemente in dieser Tabelle ab und filtert Daten heraus, nachdem diese Daten erfasst wurden.

Hinweis: Führen Sie keinen Scanvorgang durch, der Ihre RCU überschreitet.

    
user5811898 17.04.2017 13:41
quelle
4

In puncto Leistung finde ich es gut, Ihre Tabelle so zu gestalten, dass Anwendungen Query anstelle von Scan verwenden. Da bei einer Scanoperation immer die gesamte Tabelle gescannt wird, bevor die gewünschten Werte herausgefiltert werden, ist mehr Zeit und Platz für die Verarbeitung von Datenoperationen wie Lesen, Schreiben und Löschen erforderlich. Weitere Informationen finden Sie im offiziellen Dokument

    
Liutong Chen 11.09.2017 00:44
quelle
2

Wählen Sie beim Erstellen einer Dynamodb-Tabelle Primärschlüssel und lokale sekundäre Indizes (LSIs) aus, damit eine Abfrageoperation die gewünschten Elemente zurückgibt.

Scanvorgänge sind in der Regel langsamer und teurer, da die Operation jedes Element in Ihrer Tabelle durchlaufen muss, um die angeforderten Elemente abzurufen.

Beispiel:

%Vor%

In diesem Beispiel können Sie eine Abfrageoperation verwenden, um Folgendes zu erhalten:

  1. Elemente basierend auf bedingten Filtern von CustomerId
  2. Elemente basierend auf bedingten Filtern nach AccountType, dh Alle Kunden mit Pro-Konten

Um zurückzukehren, muss eine Scan-Operation verwendet werden:

  1. Elemente basierend auf bedingten Filtern nach Land, dh Alle Kunden aus den USA
  2. Elemente, die auf bedingten Filtern von LastPurchase basieren, dh Alle Kunden, die im letzten Monat einen Kauf getätigt haben

Um Scan-Operationen bei häufig verwendeten Operationen zu vermeiden, die einen lokalen sekundären Index (LSI) oder globalen sekundären Index (GSI) erstellen.

Beispiel:

%Vor%

Damit können Query-Operationen abgerufen werden:

  1. Elemente basierend auf bedingten Filtern von CustomerId
  2. Elemente basierend auf bedingten Filtern nach AccountType, dh Alle Kunden mit Pro-Konten
  3. Elemente basierend auf bedingten Filtern nach Land, dh Alle Kunden aus den USA
Kinman 25.02.2018 04:14
quelle

Tags und Links