DynamoDB -Filterausdrücke alles, was Sie wissen müssen

DynamoDB -Filterausdrücke alles, was Sie wissen müssen
Filterausdrücke werden in der NO-SQL-DynamoDB-Funktion verwendet, bei denen Klauseln, die in SQL-Datenbanken gemeinsam sind. Da DynamoDB jedoch eine No-SQL-Datenbank ist, verhalten sich Filterausdrücke aufgrund der Art und Struktur von NO-SQL-Datenbanken ganz anders als Klauseln.

Dieser Artikel konzentriert sich auf Filterausdrücke. Daher definieren wir die Filterausdrücke, erklären, warum und wann sie anwendbar sind, und geben eine Schritt-für-Schritt-Anleitung zur Verwendung durch relevante Beispiele an.

Was sind Filterausdrücke?

Filterausdrücke sind eine beliebte Technik, um die Daten in DynamoDB während der Abfrage- und Scan -Operationen zu filtern. In DynamoDB verlassen sich die richtige Datenmodellierung und -organisation auf Filterung. Während die meisten Anwendungen immer unzählige gespeicherte Daten haben, benötigen Sie möglicherweise dringend einen Artikel aus dem riesigen Chaos.

Ihre Fähigkeit, die richtigen Daten abzurufen, wenn Sie diese benötigen, hängt von den Filterfunktionen Ihrer Datenbank ab, und hier helfen die Filterausdrücke Hilfe. Sie geben die Ergebnisse in dem Abfrageelement an, die Sie an Sie zurückgeben möchten, da sie den Rest der Elemente verwerfen.

Sie können die Filterausdrücke auf den serverseitigen Filtern auf Elementattributen anwenden, nachdem ein Abfragevorgang abgeschlossen ist, bevor der Server jedoch die Ergebnisse Ihres Abfrageanrufs zurückbringt. Dies impliziert, dass Ihre Abfrage immer noch die gleiche Menge an Lesekapazität verbraucht, unabhängig davon, ob Sie einen Filterausdruck verwenden.

Außerdem erfolgt Ihre 1 -MB -Datengrenze für Abfragevorgänge wie gewöhnliche Abfragevorgänge vor der Bewertung Ihres Filterausdrucksbetriebs. Sie können diesen Vorgang verwenden, um die Nutzlast zu reduzieren, nach bestimmten Elementen zu suchen und die Einfachheit und Lesbarkeit während der Anwendungsentwicklung zu verbessern.

Filterexpressionssyntax und Beispiele

Insbesondere verwenden sowohl Filterausdrücke als auch Schlüsselausdrücke dieselbe Syntax. Außerdem können Filterausdrücke und Zustandsausdrücke auch dieselben Funktionen, Komparatoren und logischen Operatoren verwenden.

Die anderen Operatoren, die die Ausdrücke filtern, können auch den Operator, den oder den Operator, den Not-Equals () -Operator, den In-Operator, den Zwischenbetreiber, den Begins_With-Operator, den Größenoperator und den Exists Operator enthalten.

Beispiel 1: Abfragen mit AWS CLI und DynamoDB Primärschlüssel

In diesem Beispiel wird die Musiktabelle für ein bestimmtes Genre (Partitionschlüssel) und einen bestimmten Künstler (Sortierschlüssel) abgefragt. Das Dienstprogramm bringt nur ein Ergebnis für die Elemente zurück, die mit dem jeweiligen Partitionschlüssel übereinstimmen, und sortieren Sie den Schlüssel für die Songs mit den meisten Ansichten.

Sie können die Anzahl der Ansichten (#V) im Befehl angeben. Zum Beispiel markieren wir unsere Mindestgrenze auf 1.000 Ansichten, um zu implizieren, dass nur die Ergebnisse für die Songs mit über 1000 Ansichten zurückkommen werden.

$ aws dynamodb query \
--Tischname Musik \
--Schlüssel-Kondition-Expression "Genre =: fn und Artist =: sub" \
--Filter-Expression "#v> =: num (1000)" \
--Expression-attribut-names '"#v": "Ansichten"' \
--Expression-attribute-values ​​Datei: // Werte.JSON

Beispiel 2: Verwenden Sie AWS CLI mit Zustandsausdruck

Wir können die gleiche Abfrage wie im vorherigen Beispiel umstrukturieren, jetzt aber mit Bedingungsschlüssel neben unseren Filtern. Es enthält nicht die Sortierschlüssel. Stattdessen ruft es alle Aufzeichnungen für den angegebenen Künstler mit mehr als 1.000 Ansichten ab. Es kann auch rekonstruiert werden, um Bestellungen über eine bestimmte Nummer für einen bestimmten Benutzernamen (Customer_ID) zu erteilen.

$ aws dynamodb query \
--Tischname Musik \
--Schlüssel-Kondition-Expression "Benutzername =: Benutzername" \
--Filter-Expression "Betrag>: Betrag" \
--Expression-Attribut-Werte '
": Benutzername": "S": "Künstler",
": Menge": "n": "1000"
'\
$ Lokal

Ein Beispiel für das Ergebnis sieht so aus:

Die angegebene Illustration zeigt, dass aus den 56 Song -Titeln für denselben Künstler nur sieben Songs mehr als 1.000 Aufrufe haben. Wir haben die Figur jedoch für Kürzezwecke abgeschnitten und nur die ersten und die letzten Ergebnisse in der Liste einbezogen.

Beispiel 3: Verwenden von Filterausdrücken mit dem Bediener no-equal ()

Im folgenden Java -Dienstprogramm möchten wir unsere Tabelle (Filmkollektion) für alle Filme abfragen, die nicht dem „Film X“ entsprechen. Stellen Sie sicher, dass Sie einen Filterausdruck mit einem Attribut (#Name) neben einem Ausdrucksattributwert (: Name) verwenden, wie in Folgendes dargestellt:

const aws = fordern ("aws-sdk");
AWS.Konfiguration.update (Region: "eu-west-1");
const dynamodb = new AWS.Dynamode.DocumentClient ();
var params =
TABLENAME: 'Filmkollektion',
KeyConditionExpression: '#pk =: pk',
Filterexpression: "#Name: Name", (Filterausdruck)
ExpressionAttributenamen: "#PK": "PK", "#Name": "Name", (Zustandsausdruck)
ExpressionAttributeValues:
': Pk': 'ogejhhrdrs453hgd4ht44',
': Name': "Film X"

;
Dynamode.Abfrage (Parameter, Funktion (Err, Daten)
if (err) Konsole.log (err);
sonst Konsole.Logdaten);
);

Beispiel 4: Verwenden von Filterausdrücken mit dem Scan -Operator

Während der vorherige Befehl verwendet wird, um nur die Elemente zu holen, die dem Filmnamen Movie X nicht gleich sind, stellen Sie sicher, dass Sie hier zusammen mit dem Filterausdruck die Ausdrucksformen der Schlüsselbedingung verwenden. Dies liegt daran.

var params =
TABLENAME: 'Filmkollektion',
Filterexpression: "PK =: PK und #Name: Name",
ExpressionAttributenamen: "#Name": "Name",
ExpressionAttributeValues:
': Pk': 'ogejhhrdrs453hgd4ht44',
': Name': "Film X"

;
Dynamode.scannen (Parameter, Funktion (err, data)
if (err) Konsole.log (err);
sonst Konsole.Logdaten);
);

Abschluss

Das ist das Ende unseres DynamoDB -Tutorials über Filterausdrücke. Sie können die Filterausdrücke verwenden, um einen Satz bevorzugter Daten abzurufen, die abgerufenen Daten nach einer Scan oder Abfrage zu filtern oder einen Datensatz an einen Client zurückzugeben. Während es mit einer Reihe von Tools anwendbar ist, gibt es Instanzen, wenn die Verwendung der Filterausdrücke nicht tragfähig ist. Beispiel.