M165 NoSQL Datenbanken | Block 03¶
Inhaltsverzeichnis¶
Welches DMBS?¶
CAP Theorem¶
| Kategorie | Eigenschaften | Verzichtet auf | Typische Beispiele |
|---|---|---|---|
| CPKonsistenz + Partitionstoleranz | - Daten bleiben korrekt- System toleriert Netzwerkausfälle- Teile des Systems können offline sein | A – Verfügbarkeit | - Finanzsysteme- Geldautomaten (ATM)- kritische Buchungssysteme |
| APVerfügbarkeit + Partitionstoleranz | - Sehr hohe Verfügbarkeit- Funktioniert trotz Netzwerkausfällen- Antworten können veraltet oder inkonsistent sein | C – strikte Konsistenz | - DNS- Social Media (Twitter, Facebook)- viele Cloud-Systeme |
| CAKonsistenz + Verfügbarkeit | - Sofort konsistente Daten- Immer verfügbar solange keine Partition entsteht | P – Partitionstoleranz | - RDBMS-Cluster (klassisch, ohne harte geografische Verteilung) |
Was bedeutet „Eventual Consistency“?
„Eventual Consistency“ bedeutet, dass Daten nach Änderungen nicht sofort, aber mit der Zeit wieder auf allen Knoten übereinstimmen.
Kurzzeitig kann es Unterschiede geben, langfristig entsteht wieder Konsistenz.
¶
Unterschiede zwischen CP-, AP- und CA-Datenbanken
| Typ | Erfüllt | Verzichtet auf | Kurz erklärt |
|---|---|---|---|
| CP | Konsistenz + Partitionstoleranz | Verfügbarkeit | Korrekte Daten wichtiger als ständige Erreichbarkeit |
| AP | Verfügbarkeit + Partitionstoleranz | Strikte Konsistenz | Immer erreichbar, Daten können kurz inkonsistent sein |
| CA | Konsistenz + Verfügbarkeit | Partitionstoleranz | Nur möglich, wenn keine Netzwerkpartitionen auftreten |
CP – Konsistenz wichtiger als Verfügbarkeit
CP-Systeme bleiben korrekt, selbst wenn sie dafür nicht erreichbar sind.
Typisch für Banken oder Finanzsysteme.
AP – Verfügbarkeit über allem
AP-Systeme bleiben immer erreichbar, auch wenn Daten während einer Partition veraltet oder abweichend sein können.
Danach erfolgt die Eventual Consistency.
Beispiel: DNS, Social Media.
CA – nur ohne Netzwerkpartitionen möglich
CA ist nur möglich, wenn im System praktisch nie echte Partitionen vorkommen.
Beispiel: klassische RDBMS-Cluster im selben Rechenzentrum.
Merken
- CP → lieber korrekt als erreichbar
- AP → lieber erreichbar als sofort konsistent
- CA → korrekt + erreichbar, aber nur ohne Partitionen
Crosswords¶
Begriffe Übersicht¶
| Begriff | Beschreibung |
|---|---|
| KONSISTENZ | Alle Knoten haben dieselben Daten zur gleichen Zeit. |
| ISOLATION | Parallele Transaktionen beeinflussen sich nicht gegenseitig. |
| BASE | Lockeres Konsistenzmodell im Gegensatz zu ACID. |
| DAUERHAFTIGKEIT | Erfolgreiche Transaktionen bleiben dauerhaft gespeichert. |
| JSON | Einfaches Schlüssel-Wert-Datenformat für Webanwendungen. |
| PARTITIONSTOLERANZ | System bleibt trotz Netzwerkausfällen funktionsfähig. |
| B-TREE | Baumartige Datenstruktur für schnelle Datenbanksuchen. |
| VERFÜGBARKEIT | Jeder Client erhält garantiert eine Antwort, auch bei Knotenausfällen. |
| AP | NoSQL-Kategorie: Verfügbarkeit + Partitionstoleranz, weniger Konsistenz. |
| ACID | Strenges Transaktionsmodell in klassischen RDBMS. |
Unterschied¶
-
Dokumenten-orientiert: Speichert Daten als Dokumente (z. B. JSON/BSON). Beispiel: MongoDB.
-
Key-Value-Speicher: Einfache Zuordnung von Schlüsseln zu Werten (sehr schnell). Beispiel: Redis.
-
Spalten-orientiert (Wide Column): Optimiert für das Lesen großer Datenmengen über bestimmte Spalten. Beispiel: Cassandra.
-
Graph-Datenbanken: Fokus auf Beziehungen zwischen Datenpunkten (Knoten und Kanten). Beispiel: Neo4j.
JSON¶
JSON Struktur
{"employees":[
{ "firstName":"John", "lastName":"Doe" },
{ "firstName":"Anna", "lastName":"Smith" },
{ "firstName":"Peter", "lastName":"Jones" }
]}
Fragen
Squad Beispiel
squad = {
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
};
squad.squadName; //ergibt "Super hero squad"
squad.members[0].name; //ergibt "Molecule Man"
squad.members[1].age; //ergibt 39
squad.members[2].powers[1]; //ergibt "Heat Immunity"
JSON PUML¶
1. Welche Art von Datenstruktur ist das äussere Element des JSON-Beispiels?
- Das äussere Element ist ein JSON-Objekt, erkennbar an
{}. - Es enthält mehrere Schlüssel-Wert-Paare.
2. Wie viele Schlüssel enthält das äussere JSON-Objekt und wie heissen sie?
- Es gibt 4 Schlüssel.
- Sie heissen:
squadName,formed,activeundmembers.
3. Welchen Datentyp haben die Werte der Schlüssel squadName, formed und active?
squadNameist ein String,formedeine Number,activeein Boolean.- Diese Typen entsprechen dem JSON-Standard.
4. Was befindet sich in der Liste, die unter dem Schlüssel members gespeichert ist?
- Unter
membersliegt ein Array. - Dieses Array enthält mehrere JSON-Objekte, je eines pro Mitglied.
5. Wie greift man auf den Namen des zweiten Mitglieds in der members-Liste zu?
- Zugriff per Index und Schlüsselnamen:
members[1].name. - Arrays beginnen bei Index 0.
6. Welchen Datentyp hat powers und woraus besteht dieses Element?
powersist ein Array.- Es besteht aus mehreren Strings, die Fähigkeiten darstellen.
7. Welchen Datentyp hat der Wert von secretIdentity beim ersten Mitglied?
secretIdentityist ein String.- Strings stehen in JSON immer in Anführungszeichen.
8. Warum stehen Zeichenketten in Anführungszeichen, Zahlen aber nicht?
- Strings benötigen Anführungszeichen, damit sie als Text erkannt werden.
- Zahlen stehen ohne Anführungszeichen, damit sie numerisch verarbeitet werden können.
9. Welche Unterschiede erkennst du zwischen den drei Objekten in der members-Liste?
- Die Mitglieder unterscheiden sich in Namen, Rollen und Identitäten.
- Auch die powers-Listen sind jeweils unterschiedlich.
10. Was passiert, wenn man in einem JSON-Objekt ein Komma zu viel oder zu wenig setzt?
- Das JSON wird ungültig und erzeugt einen Parserfehler.
- Die Datei kann dann nicht korrekt eingelesen werden.
Erste DB¶
Datenbank erstellen¶
Daten einfügen¶
Einzelnen Datensatz einfügen (insertOne)
Mehrere Datensätze einfügen (insertMany)
db.profiles.insertMany([
{
"name": "Philipp Crista",
"klasse": "2FI",
"jahrgang": 2008,
"interessen": ["Gaming", "Csharp", "GYM"],
"lieblingsApps": [
{ "name": "Marktext", "typ": "Editor" },
{ "name": "Visual Studio", "typ": "Program" }
],
"hatLaptop": true,
"stundenProWocheOnline": 20
},
{
"name": "Karel Drapal",
"klasse": "2FI",
"jahrgang": 2008,
"interessen": ["Tennis", "Filme"],
"lieblingsApps": [
{ "name": "Brawl Stars", "typ": "Game" },
{ "name": "YouTube", "typ": "Video" }
],
"hatLaptop": true,
"stundenProWocheOnline": 37
},
{
"name": "Florin Gerig",
"klasse": "2FI",
"jahrgang": 2008,
"interessen": ["Bouldern", "Cello", "Programmieren"],
"lieblingsApps": [
{ "name": "Instagram", "typ": "Social" },
{ "name": "Minecraft", "typ": "Game" }
],
"hatLaptop": true,
"stundenProWocheOnline": 35
},
{
"name": "Lars Hellstern",
"klasse": "2FI",
"jahrgang": 2007,
"interessen": ["Autos", "Crypto", "Gambling"],
"lieblingsApps": [
{ "name": "TikTok", "typ": "Social" },
{ "name": "Gemini", "typ": "KI" },
{ "name": "Snapchat", "typ": "Social" },
{ "name": "Spotify", "typ": "Musik" }
],
"hatLaptop": true,
"stundenProWocheOnline": 20
},
{
"name": "Aldin",
"klasse": "2FI",
"jahrgang": 2008,
"interessen": ["Programmieren", "Fussball", "Gaming"],
"lieblingsApps": [
{ "name": "TikTok", "typ": "Social" },
{ "name": "Gemini", "typ": "AI" },
{ "name": "Fortnite", "typ": "Game" }
],
"hatLaptop": true,
"stundenProWocheOnline": 35
}
]);












