Zum Hauptinhalt springen

Tag 2

1 Dokumentationsaufträge

1.1 Beschreiben Sie in eigenen Worten die Abkürzung ACID

ACID steht für Atomicity (Atomarität), Consistency (Konsistenz), Isolation (Isolation) und Durability (Dauerhaftigkeit). Es beschreibt/regelt wie mit Transaktionen in Datenbankmanagementsystemen gearbeitet wird, damit die Daten nicht fälschlich sind.

A: Eine Transaktion besteht aus mehreren Aktionen. Die Atomicity sagt, ob die gesamte Transaktion ausgeführt wird oder gar nicht. Tritt zwischen den Aktionen ein Fehler auf, wird der Stand wieder auf den vor der Transaktion gesetzt (Rollback). Eine erfolgreich ausgeführte Transaktion wird im System gespeichert (meistens mittels Logging). Ein Rollback wird komplett aus dem System entfernt, somit ist nicht zu sehen, dass dieser Rollback zustanden gekommen ist.

C: Die Datenbank wir vor und nach einer Transaktion immer auf die Consistency überprüft. Heisst, dass die Daten gültig sein müssen. Z.B. darf bei einem INT-Datenfeld keine Kommazahl enthalten sein. Ist die Gültigkeit nach der Transaktion nicht mehr gegeben, wird ein Rollback ausgeführt.

I: Arbeiten mehrere Prozesse/Benutzer an der Datenbank, ist die Isolation dafür zuständig, dass es keine "Lost Updates" gibt. Heisst, führt Prozess A eine Transaktion von 3sec aus und Prozess B fängt bei 1sec nach Prozess A an, wird die Transaktion von Prozess B gesperrt bis Prozess A mit der Transaktion fertig ist. Somit ist das ungewollte Überschreiben von Daten ausgeschlossen.

D: Die Durability ist dafür zuständig, dass die Daten nach einer erfolgreichen Transaktion dauerhaft gespeichert sind. Somit ist gewährleistet, dass bei einem Systemabsturz die Daten nach dem Neustarten weiterhin verfügbar sind. Dies wird wie bei der Atomicity mit Logging realisiert.

1.2 Beschreiben Sie in eigenen Worten die Abkürzung BASE

BASE steht für Basically Available Soft state Eventual Cosistency. Dieses Prinzip verzichtet auf eine komplette Konsistenz, dafür ist das System schneller und Verfügbarkeit ist erhöht. Es kann passieren, dass es ab und zu inkonsistente Daten gibt. BASE ist das Gegenstück von ACID.

1.3 Beschreiben Sie den Begriff "Transaktion"

Eine Transaktion besteht aus mehreren Aktionen. Die Daten werden erst in die Datenbank geschrieben, wenn die komplette Transaktion erfolgreich ist. Kommt es zu einem Fehler während einer Transaktion, wird ein Rollback ausgeführt (Zustand vor Transaktion). Transaktion und das ACID-Prinzip verhindern das es zu einem inkonsistenten Zustand kommt.

1.4 Beschreiben Sie das "CAP-Theorem"

Von Consistency (Konsistenz), Availabilty (Verfügbarkeit) und Partition Tolerance (Ausfalltoleranz) können immer nur zwei Eigenschaften erfüllt werden. Dass sagt das CAP-Theorem. Das Theorem kann sich als Dreieck vorgestellt werden, wobei jeder Punkt ein Buchstabe ist. Eine Applikation kann immer nur auf einer Kante des Dreiecks sein.

C: Ähnlich wie bei ACID, aber nicht gleich. Bei einem aufgeteilten System müssen nach einer Transaktion auf allen Systemen die gleichen Daten bestehen.

A: Alle Anfragen müssen eine erfolgreiche Antwort geben.

P: Ein System arbeitet weiter, wenn Knoten untereinander nicht mehr kommunizieren können. Heisst, System A kann die Daten nicht mehr zu System B replizieren.

CAP-Theorem

1.4.1 Beispiele

Relationale Datenbankenmanagementsysteme (RDBMS)

Eine RDBMS wie z.B. MySQL haben vorallem Konsistenz im Fokus. Die Daten sollten immer gültig und richtig sein. Die Verfügbarkeit ist dabei auch sehr hoch. Somit fällt RDBMS in die Kategorie CA.

Bank-Anwendung

Für einen Geldautomaten ist das wichtigste die Konsistenz. Ein Kunde sollte nie einen falschen Kontostand haben. Eine Abhebung oder Einzahlung muss immer richtig verbucht werden. Die Anforderungen an die Anwendungen sollte auch weiter funktionieren, wenn Knoten untereinander nicht mehr kommunizieren können. Somit fällt eine Bank-Anwendung in die Kategorie CP.

1.5 Beschreiben Sie was "Transaktionen" sind

Eine Transaktion ist die Ausführung von mehreren Aktionen. Eine Transaktion wird nur ausgeführt, wenn sie fehlerfrei ist. Ansonsten wird nichts gemacht.

Ohne Isolation

ZeitpunktTransaktion 1Transaktion 2Ergebnis
1Aktion 1Keine Einträge gefunden.
2Aktion 1Keine Einträge gefunden.
3Aktion 2Eintrag wird hinzugefügt.
4Aktion 2Eintrag wird nochmal hinzugefügt.

Mit Isolation

ZeitpunktTransaktion 1Transaktion 2Ergebnis
1Aktion 1Keine Einträge gefunden.
2[Aktion 1]Tabelle gesperrt: Transaktion muss warten.
3Aktion 2Eintrag wird hinzugefügt.
4Aktion 1Transaktion wird fortgeführt. Neuer Datensatz wird gefunden.

1.6 Suchen Sie sich ein DBMS aus dem Internet raus (nicht MySQL, nicht MongoDB, nicht neo4j) und beschreiben Sie das DBMS. Versuchen Sie dabei so gut als möglich die Abkürzungen ACID und BASE einzusetzen

DBMS: CouchDB

CouchDB ist ein Open-Source DBMS von Apache. Es ist eine NoSQL-Datenbank, die ihre Daten mit JSON-Dokumenten speichert. Es nutzt das BASE-Prinzip um die Daten zu verarbeiten. Es ist auf Ausfalltoleranz und Verfügbarkeit aufgebaut, somit im CAP-Theorem in der Kategorie AP. Es nutzt BASE, um eine höhere Verfügbarkeit und Skalierbarkeit zu erreichen. Um die Inkonsistenten Daten zu vermindern, nutzt CouchDB einen Mechanismus um Konflikte zu beheben. Die Dokumente werden mit Versionen und Zeitstempeln gespeichert. Die möglichen konfliktbehafteten Dokumente werden markiert. Wie mit dem Konflikt umgegangen wird, liegt in den Händen des Programmierers.

2 Übungen

2.1 Installation eines RDBMS - MySQL

2.1.1 Recherche

HerstellerOracle (seit 2008, davor MySQL AB)
LizenzenGPLv2, proprietär, kommerziell
SupportCommunity Edition -> mind. 5 Jahre
Enterprise Edition -> mind. 3 Jahre
Software-FeaturesSkalierbarkeit, Verfügbarkeit, Integrität
Software-Releasezyklen12-18 Monate

2.1.2 Voraussetzungen der Installation

Welches Betriebssystem setzen Sie ein? Hardware?

Ich setze Ubuntu ein. Empfohlen wird eine Dual-Core-CPU mit mindestens 2.0Ghz und 4GB RAM. Für das Netzwerk wird 1Gbit/s empfohlen und 2GB Speicherplatz.

In welcher Version ist Ihr Betriebssystem vorhanden? Kernel?

lsb_release -a
[...]
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
uname -r
5.15.0-58-generic

Aus welcher Quelle installieren Sie Ihre Software?

MySQL bietet den Download direkt auf der offiziellen Seite an. Für Linux kann die Installation per APT gemacht werden.

sudo apt install mysql-server

In welcher Version installieren Sie Ihre Software (und deren Abhängigkeiten)?

Um die Version des Installation-Paket herauszufinden, kann folgender Command ausgeführt werden.

sudo apt show mysql-server

In meinem Fall wird die Version 8.0.32-ubuntu0.22.04.2 installiert.

Welche Dienste laufen sonst noch auf dem Server?

Aktuell läuft auf dem Server noch nichts. Laufende Dienste können mit dem Befehl top angezeigt werden.

2.1.3 Prozess der Installation

Als erstes installiere ich "mysql-server" per APT. Alle Abhängigkeiten werden mitinstalliert (siehe Bild).

APT Installation mysql-server

Nach der Installation kann der Dienst gestartet werden. Anschliessend muss das Root Passwort gesetzt werden und das "mysql_secure_installation" Skript ausgeführt werden.

mysql-server Dienst starten und mysql_secure_installation
mysql_secure_installation Teil 2

Danach kann das IDENTIFIED WITH wieder auf auth_socket gesetzt werden. Somit kann sich ohne Passwort als sudo angemeldet werden.

auth_socket IDENTIFIED WITH

Immer mit dem Root User zu arbeiten ist nicht sicher. Daher erstelle ich einen neuen User, der nur SELECT, CREATE, INSERT usw. ausführen kann.

MySQL User

Als letztes überprüfe ich noch, ob der Dienst und die richtige Version läuft.

MySQL Status

Eine ausführliche Anleitung kann hier (Digital Ocean) gefunden werden.

2.1.4 Test der Installation

Kann der Dienst gestartet werden und läuft er danach ohne Fehler?

sudo systemctl start mysql.service
systemctl status mysql.service

Auf DBMS per Konsole zugreifen.

sudo mysql -u root -p

Alle Datenbanken anzeigen.

SHOW DATABASES;

Alle User anzeigen.

USE mysql; SELECT user FROM user;

Version des DBMS anzeigen.

SELECT version();

Datenbank und Tabellen erstellen und löschen.

CREATE DATABASE testing_installation;
USE testing_installation;
CREATE TABLE test_table (test varchar(255));
SHOW TABLES;
SELECT * FROM test_table;
DROP DATABASE testing_installation;

Quellen: