- 1 Abschnitt
- 9 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Komplexe Abfragen10
NoSQL-Abfragen
NoSQL-Datenbanken sind nicht-relationale Datenbanksysteme, die für spezifische Anwendungsfälle entwickelt wurden. Sie bieten flexible Datenspeicherung und -verarbeitung und sind besonders geeignet für unstrukturierte oder semi-strukturierte Daten. NoSQL-Datenbanken kommen oft zum Einsatz, wenn traditionelle relationale Datenbanken an ihre Grenzen stoßen, sei es durch Skalierbarkeit, Flexibilität oder Performance.
Typen von NoSQL-Datenbanken
1. Dokumentenbasierte Datenbanken:
- Beispiel: MongoDB
- Eigenschaften: Speichern Daten in dokumentenähnlichen Formaten wie JSON oder BSON. Sie sind ideal für unstrukturierte Daten und bieten hohe Flexibilität.
- Struktur:
{
"_id": "1",
"name": "Max Mustermann",
"email": "max@example.com",
"orders": [
{"order_id": "1001", "product": "Laptop", "quantity": 1},
{"order_id": "1002", "product": "Mouse", "quantity": 2}
]
}
2. Key-Value-Datenbanken:
- Beispiel: Redis
- Eigenschaften: Speichern Daten als Schlüssel-Wert-Paare. Sie sind extrem schnell und eignen sich gut für caching und einfache Datenstrukturen.
- Struktur
"user:1" => {"name": "Max Mustermann", "email": "max@example.com"}
3. Spaltenorientierte Datenbanken:
- Beispiel: Cassandra
- Eigenschaften: Speichern Daten in Spaltenfamilien statt in Zeilen. Sie bieten hohe Schreib- und Lesegeschwindigkeiten und eignen sich gut für große Datenmengen.
- Struktur:
| user_id | name | email |
|---------|-----------------|--------------------|
| 1 | Max Mustermann | max@example.com |
4. Graphdatenbanken:
- Beispiel: Neo4j
- Eigenschaften: Speichern Daten in Knoten und Kanten und sind ideal für die Modellierung und Abfrage von Beziehungsdaten.
- Struktur:
(User:1)-[:ORDERED]->(Order:1001)
Abfragen in dokumentenbasierten Datenbanken (Beispiel: MongoDB)
Grundlegende MongoDB-Abfragen:
1. Finden von Dokumenten:
db.users.find({ name: "Max Mustermann" });
Diese Abfrage findet alle Dokumente in der „users“-Kollektion, in denen der Name „Max Mustermann“ ist.
2. Einfügen von Dokumenten:
db.users.insertOne({
name: "Max Mustermann",
email: "max@example.com",
orders: [
{ order_id: "1001", product: "Laptop", quantity: 1 },
{ order_id: "1002", product: "Mouse", quantity: 2 }
]
});
Diese Abfrage fügt ein neues Dokument in die „users“-Kollektion ein.
3. Aktualisieren von Dokumenten:
db.users.updateOne(
{ name: "Max Mustermann" },
{ $set: { email: "max.mustermann@example.com" } }
);
Diese Abfrage aktualisiert das E-Mail-Feld des Dokuments, in dem der Name „Max Mustermann“ ist.
4. Löschen von Dokumenten:
db.users.deleteOne({ name: "Max Mustermann" });
Diese Abfrage löscht das Dokument, in dem der Name „Max Mustermann“ ist.
Aggregations-Framework:
Das Aggregations-Framework in MongoDB ermöglicht komplexe Datenverarbeitungen wie Filterung, Gruppierung und Transformation.
1. $match:
db.orders.aggregate([
{ $match: { status: "shipped" } }
]);
Filtert Dokumente, die den Status „shipped“ haben.
2. $group:
db.orders.aggregate([
{ $group: { _id: "$product", totalQuantity: { $sum: "$quantity" } } }
]);
Gruppiert Dokumente nach dem Produkt und summiert die Mengen.
3. $project:
db.orders.aggregate([
{ $project: { product: 1, totalQuantity: 1 } }
]);
Projiziert nur die Felder „product“ und „totalQuantity“ in das Ergebnis.
4. $sort:
db.orders.aggregate([
{ $sort: { totalQuantity: -1 } }
]);
Sortiert die Dokumente nach der Menge in absteigender Reihenfolge.
5. $limit:
db.orders.aggregate([
{ $limit: 10 }
]);
Begrenzt die Ausgabe auf die ersten 10 Dokumente.
Abfragen in spaltenorientierten Datenbanken (Beispiel: Cassandra)
CQL (Cassandra Query Language):
1. Einfügen von Daten:
INSERT INTO users (user_id, name, email)
VALUES (1, 'Max Mustermann', 'max@example.com');
Diese Abfrage fügt einen neuen Datensatz in die „users“-Tabelle ein.
2. Abfrage von Daten:
SELECT * FROM users WHERE user_id = 1;
Diese Abfrage ruft den Datensatz mit der user_id 1 aus der „users“-Tabelle ab.
3. Aktualisieren von Daten:
UPDATE users
SET email = 'max.mustermann@example.com'
WHERE user_id = 1;
Diese Abfrage aktualisiert das E-Mail-Feld des Datensatzes mit der user_id 1.
4. Löschen von Daten:
DELETE FROM users WHERE user_id = 1;
Diese Abfrage löscht den Datensatz mit der user_id 1.
Datenmodellierung in Cassandra:
Partitionsschlüssel und Clustering-Schlüssel:
- Partitionsschlüssel: Bestimmt, auf welchem Knoten die Daten gespeichert werden. Es ist wichtig für die Verteilung der Daten im Cluster.
- Clustering-Schlüssel: Bestimmt die Reihenfolge der Daten innerhalb einer Partition.
Beispiel:
CREATE TABLE orders (
order_id UUID PRIMARY KEY,
user_id UUID,
product TEXT,
quantity INT
);
In diesem Beispiel ist order_id der Partitionsschlüssel. Um komplexere Abfragen zu ermöglichen, könnte man auch eine Kombination von Schlüsseln verwenden:
CREATE TABLE user_orders (
user_id UUID,
order_id UUID,
product TEXT,
quantity INT,
PRIMARY KEY (user_id, order_id)
);
Hier ist user_id der Partitionsschlüssel und order_id der Clustering-Schlüssel.
