Zum Inhalt

Alle_Theorie_bis_jetzt

SQL vs NoSQL

Begriff Bedeutung
SQL Structured Query Language – Standardisierte Sprache für relationale Datenbanken.
NoSQL Not Only SQL – Datenbanken mit flexiblen Strukturen, die nicht ausschliesslich auf SQL basieren.
Aspekt SQL-Datenbanken (Relational) NoSQL-Datenbanken
Datenmodell Relational (Tabellen mit Zeilen und Spalten) Nicht-relational (z. B. Dokumente, Schlüssel-Wert, Graphen)
Schema Festes Schema, Änderungen erfordern Migration Flexibles Schema, keine festen Strukturen notwendig
Skalierung Vertikale Skalierung (Leistungssteigerung durch grössere Server) Horizontale Skalierung (Verteilung auf viele Server)
Abfragesprache SQL (standardisierte Abfragesprache) Keine feste Sprache, oft API- oder spezialisierte Queries
Konsistenz Stark konsistent Eventuell eventual consistency (abhängig vom Modell)
Anwendungsfälle Geeignet für strukturierte Daten und Transaktionen Geeignet für grosse Datenmengen, unstrukturierte Daten
Beispiele MySQL, PostgreSQL, Oracle Database MongoDB, Cassandra, Redis, Neo4j
Transaktionen Unterstützt ACID-Transaktionen (atomicity, consistency, isolation, durability) Oft BASE-Prinzip (basic availability, soft state, eventual consistency)

SQL-Datenbanken sind ideal für klare, strukturierte Daten mit festen Beziehungen, während NoSQL-Datenbanken für flexible und skalierbare Anwendungen geeignet sind.


ACID

alt text

alt text

ACID erklärt

Einfache Übersicht zu ACID:

Buchstabe Bedeutung Beschreibung
A Atomicity (Atomarität) Eine Transaktion wird entweder vollständig durchgeführt oder gar nicht.
C Consistency (Konsistenz) Der Datenbestand bleibt vor und nach der Transaktion gültig und konsistent.
I Isolation (Isolation) Transaktionen beeinflussen sich nicht gegenseitig, auch wenn sie gleichzeitig laufen.
D Durability (Dauerhaftigkeit) Erfolgreich abgeschlossene Transaktionen bleiben dauerhaft gespeichert.

ACID wird vor allem bei SQL-Datenbanken verwendet, um sichere und zuverlässige Transaktionen zu gewährleisten.


MongoDB erkärt

MongoDB ist eine NoSQL-Datenbank, die Daten in JSON-ähnlichen Dokumenten speichert. Es ist flexibel, da kein festes Schema nötig ist, und eignet sich besonders für unstrukturierte oder sich ändernde Daten.

Hauptmerkmale:

  • Dokumentbasierte Speicherung: Daten werden in Collections (ähnlich wie Tabellen) organisiert, und jedes Dokument (ähnlich wie eine Zeile) hat ein flexibles Format.
  • Schemafrei: Kein festes Schema, daher einfach anpassbar.
  • Horizontale Skalierbarkeit: Gut für grosse Datenmengen, da Daten auf mehrere Server verteilt werden können.
  • Leicht verständlich: Verwendet ein Format, das JSON ähnelt, also leicht zu lesen und schreiben.

Anwendungsfälle:

  • Echtzeit-Apps (z. B. Chat-Systeme)
  • Content-Management-Systeme
  • Grosse Datenmengen mit unregelmässigen Strukturen

MongoDB ist ideal, wenn du Flexibilität, Geschwindigkeit und Skalierbarkeit benötigst!


SQL vs No SQL beispiele:

alt text alt text alt text alt text


Berechtigungen IT-Administrator

Rolle und Berechtigungen des IT-Administrators

Aufgabe Beschreibung
Benutzerverwaltung Erstellung und Verwaltung von Konten und Rollen.
Zugriffsrechte Steuerung, wer auf welche Daten zugreifen darf.
Sicherheit Schutz der Daten vor unautorisiertem Zugriff.
Wartung Durchführung von Backups und Updates.
Fehlerbehebung Behebung von Problemen in der Datenbank.

Der IT-Administrator gewährleistet Sicherheit, Effizienz und korrekten Zugriff auf die Filmdatenbank.


Abstraktion

Abstraktion in SQL und NoSQL

Aspekt Beschreibung
Definition Abstraktion vereinfacht Systeme, indem sie nur wichtige Details zeigt und andere verbirgt.
In SQL - Tabellen zeigen die Datenstruktur einfach.
- SQL-Nutzer müssen Speicherungsdetails nicht kennen.
In NoSQL - Daten werden als Dokumente, Schlüssel-Wert-Paare oder Graphen gespeichert.
- Skalierung und Verteilung sind verborgen.
Vorteile - Einfacher Datenzugriff.
- Weniger technische Details für Entwickler und Nutzer.

Abstraktion macht Datenbanken leichter verständlich und nutzbar.


CAP-Theorem

Das CAP-Theorem besagt, dass verteilte Systeme immer nur 2 von 3 Eigenschaften gleichzeitig garantieren können:

Eigenschaft Beschreibung
Konsistenz (C) Alle Knoten haben den gleichen Datenstand, Änderungen sind sofort sichtbar.
Verfügbarkeit (A) Jede Anfrage wird beantwortet, auch bei Teilausfällen des Systems.
Partitionstoleranz (P) Das System bleibt trotz Netzwerkausfällen zwischen Knoten funktionsfähig.
Typ Eigenschaften Beschreibung
CP Konsistenz + Partitionstoleranz Garantiert konsistente Daten trotz Netzwerkpartitionen, jedoch auf Kosten der Verfügbarkeit. (z. B. Banktransaktionen)
AP Verfügbarkeit + Partitionstoleranz Daten bleiben verfügbar trotz Netzwerkpartitionen, jedoch kann es zu inkonsistenten Daten kommen.(z. B. Social-Media-Posts)
CA Konsistenz + Verfügbarkeit Daten sind konsistent und verfügbar, funktioniert jedoch nicht bei Partitionstoleranz (nur in nicht-verteilten Systemen möglich)z. B. auf einem Gerät.

In verteilten Datenbanken ist Partitionstoleranz (P) unverzichtbar, daher wählen sie zwischen CP oder AP je nach Anwendungsfall.

Wiso nicht alle 3 ?

Man kann nicht alle 3 (Konsistenz, Verfügbarkeit, Partitionstoleranz) gleichzeitig garantieren, weil bei Netzwerkausfällen (Partitionen) das System entweder:

  1. Konsistenz wählt (Daten korrekt, aber unzugänglich), oder
  2. Verfügbarkeit wählt (Daten erreichbar, aber evtl. inkonsistent).

Partitionstoleranz ist in verteilten Systemen unverzichtbar, daher muss man zwischen C und A entscheiden.

Netzwerkpartitionen

Begriff Beschreibung
Netzwerkpartitionen Treten auf, wenn Knoten aufgrund von Netzwerkausfällen nicht mehr kommunizieren können.
Auswirkung Systeme müssen sich entscheiden: Konsistenz oder Verfügbarkeit priorisieren.

Graphdatenbanken

Was ist eine Graphdatenbank?

Eine Graphdatenbank speichert Daten als Knoten (Entities) und Kanten (Beziehungen) in einem Graphen-Modell.
- Knoten repräsentieren Objekte, z. B. Personen oder Produkte.
- Kanten zeigen die Beziehungen zwischen den Objekten, z. B. "kennt", "kauft", "gehört zu".
- Eigenschaften können Knoten und Kanten zusätzliche Informationen hinzufügen.

Beispiel: Neo4j, ArangoDB, OrientDB.

Anwendungsfälle von Graphdatenbanken

Anwendungsfall Einsatzbeispiel
Soziale Netzwerke Darstellung von Freundschaften und Interaktionen, z. B. bei Facebook oder LinkedIn.
Empfehlungssysteme Analyse von Beziehungen zwischen Nutzern und Produkten, z. B. Netflix, Amazon.
Betrugserkennung Identifizierung verdächtiger Muster in Netzwerken, z. B. bei Banken.
Logistik und Routenplanung Optimierung von Lieferketten oder kürzesten Wegen, z. B. bei Versanddienstleistern.
Wissensgraphen Darstellung komplexer Wissensnetze, z. B. Google Knowledge Graph.

Graphdatenbanken sind besonders nützlich, wenn Daten stark vernetzt sind und Beziehungen im Fokus stehen.

Beispiel:

alt text


Normalisierung und Denormalisierung

  • Normalisierung:
    Daten werden in mehrere Tabellen aufgeteilt, um Redundanzen zu vermeiden und Datenintegrität zu gewährleisten. Beispiel: 3. Normalform stellt sicher, dass jede Tabelle nur von ihrem Primärschlüssel abhängt.

  • Denormalisierung:
    Daten werden absichtlich in einer weniger strikten Form gespeichert (z. B. mit Redundanzen), um schnelleren Zugriff zu ermöglichen. Statt Daten in mehreren Tabellen zu verteilen, werden sie oft in einem einzigen Dokument oder Datensatz zusammengefasst.

Unterschied:

  • Normalisierung: Ideal für SQL-Datenbanken (klare Struktur, Integrität).
  • Denormalisierung: Typisch in NoSQL-Datenbanken (schnellere Abfragen, flexible Datenmodelle).

Vor- und Nachteile der Denormalisierung in NoSQL-Datenbanken

Aspekt Vorteile Nachteile
Performance Schnellerer Datenzugriff, da weniger Abfragen nötig sind. Kann zu redundanten Daten und höherem Speicherverbrauch führen.
Komplexität Einfachere Abfragen durch zusammengefasste Daten. Änderungen erfordern Anpassungen an mehreren Stellen.
Skalierung Gut für verteilte Systeme mit schnellem Zugriff. Schwerer bei vielen verknüpften Daten und häufigen Änderungen.

Fazit

Denormalisierung erhöht die Performance, kann aber Redundanz und Konsistenzprobleme verursachen. Ideal, wenn Geschwindigkeit wichtiger als Datenintegrität ist.


Verschiedene DBs und Arten von No-SQL

Art Hauptmerkmale Beispiele
Dokumentenbasiert Daten in JSON-ähnlichen Dokumenten, flexibel. MongoDB, CouchDB
Schlüssel-Wert Einfache Speicherung als Schlüssel-Wert-Paare, extrem schnell. Redis, DynamoDB
Spaltenorientiert Speichert Daten spaltenweise, gut für grosse Datenanalysen. Cassandra, HBase
Graphenbasiert Modelliert Datenbeziehungen als Knoten und Kanten. Neo4j, ArangoDB
Zeitserienbasiert Speziell für zeitgestempelte Daten wie Logdaten oder Sensoren. InfluxDB, TimescaleDB

Die Art beschreibt den Ansatz, während die genannten Beispiele spezifische Implementierungen sind.


Datenkonsistenz in verteilten Systemen

Herausforderungen:

  • Netzwerkausfälle: Daten können vorübergehend inkonsistent sein.
  • Replikation: Verzögerte Synchronisation zwischen Knoten.
  • Gleichzeitige Zugriffe: Konflikte bei gleichzeitigen Änderungen.

Lösungen:

  • CAP enscheiden

Movies DB etc.

Erklärung des Codes:

  1. Verbindung zur MongoDB herstellen:
    client = MongoClient("mongodb://localhost:27017/")
    
  2. Stellt eine Verbindung zur MongoDB-Instanz her, die auf localhost (Standard: Port 27017) läuft.

  3. Datenbank auswählen:

    db = client["mflix_labs"]
    

  4. Wählt die Datenbank mflix_labs. Wenn sie nicht existiert, wird sie bei der ersten Verwendung erstellt.

  5. Collection auswählen:

    movies_collection = db["movies"]
    

  6. Greift auf die Collection movies innerhalb der Datenbank mflix_labs zu. Wird automatisch erstellt, wenn ein Dokument hinzugefügt wird.

Verschachtelungen & JSON

Verschachtelte Bewertungen hinzufügen

Bewertungen können als eingebettete Daten in einem Dokument gespeichert werden, z. B.:

{
    "title": "Beispiel",
    "year": 2021,
    "ratings": {
        "Quelle1 (zb IMDB)": 9.2,
        "Quelle2 (zb Tomatometer)": 50
    }
}

Überprüfung von Dokumenten und fehlerhaften Einträgen (zb. in MongoDB)

  1. Prüfen auf fehlende Felder:
    Eine Abfrage kann genutzt werden, um Dokumente ohne bestimmte Felder (z. B. title, year, genres) zu finden:

    fehlerhafte_dokumente = movies_collection.find({
        "$or": [
            {"title": {"$exists": False}},
            {"year": {"$exists": False}},
            {"genres": {"$exists": False}}
        ]
    })
    for dokument in fehlerhafte_dokumente:
        print(dokument)
    

  2. Fehlerhafte Einträge anzeigen:
    Dokumente, bei denen die Felder fehlen, werden ausgegeben. So können sie leicht überprüft und korrigiert werden.

In MongoDB wird mit "$exists": False geprüft, ob ein bestimmtes Feld nicht vorhanden ist.

Erklärung:

  • $exists: True: Das Feld existiert im Dokument.
  • $exists: False: Das Feld fehlt im Dokument.

Beispiel:

movies_collection.find({"title": {"$exists": False}})
- Findet alle Dokumente, bei denen das Feld title fehlt.
- Praktisch, um fehlerhafte oder unvollständige Einträge zu identifizieren.

Das hilft, fehlerhafte Daten schnell zu finden.


Rollen und Berechtigungen in der Datenbankverwaltung (GYM-Beispiel)

Rolle Berechtigungen
Administrator Vollzugriff: Benutzer erstellen, Rechte verwalten.
Trainer Zugriff auf Mitgliedsdaten und Trainingspläne, keine Zahlungsdaten.
Mitglied Zugriff nur auf eigene Daten, z. B. Trainingspläne. sonst nichts

Das Rollenspiel verdeutlicht, wie klare Berechtigungen Daten schützen und Fehlzugriffe verhindern.