Prüfungsvorbereitung LB2
1 Erklären Sie den Unterschied zwischen ACID
und BASE
ACID
garantiert die Konsistenz, ist allerdings nicht so flexibel und langsamer. Bei BASE
kann es zustanden kommen, dass die Daten nicht immer konsistent sind, dafür ist es skalierbar und hochverfügbar.
2 Erklären Sie das CAP-Theorem mit Hilfe von einem Beispiel-DBMS
Das CAP-Theorem sagt, dass es nicht möglich ist alle drei Punkte (Consistency, Availability, Partitioning) zu erfüllen. Es muss sich für zwei der drei Punkte entschieden werden.
MySQL ist auf Konsistenz und Verfügbarkeit ausgelegt. MySQL ist nicht darauf ausgelegt das System auf verschiedene Knoten zu verteilen.
3 Erklären Sie was Transaktionen sind und was Anomalien sind. Erklären Sie in diesem Zusammenhang die Einstellungen zur Perfomancesteigerung
Transaktionen sind Abläufe die komplett oder gar nicht ausgeführt werden. Somit wird immer ein konsistenter Zustand zurückgelassen.
Ohne dem I von ACID kann es zu verschiedenen Problemen kommen.
Dirty Read: Daten von einer nicht abgeschlossenen Transaktion werden gelesen.
Lost Updates: Zwei Transaktionen arbeiten an dem gleichen Datensatz. Nach Abschluss der Transaktionen wird nur die Änderung der zweiten Transaktion geschrieben.
Non-Repeatable Read: Gleiche Lesevorgänge auf einem Datensatz liefern andere Ausgaben.
Phantom Read: Ein Lesevorgang von einer Transaktion liest Daten die gleichzeitig von einer anderen Transaktion geschrieben/bearbeitet werden.
Möchte man alle diese Probleme umgehen, geht das sehr auf die Kosten der Performance. Folgende Tabelle zeigt mögliche Einstellungen die diese Probleme umsetzen können.
Isolationsebene | Dirty Read | Lost Updates | Non-Repeatable Read | Phantom |
---|---|---|---|---|
Read Uncommitted | möglich | möglich auch bei Db2 CS | möglich | möglich |
Read Committed | unmöglich | möglich auch bei Db2 CS | möglich | möglich |
Repeatable Read | unmöglich | unmöglich | unmöglich | möglich |
Serializable | unmöglich | unmöglich | unmöglich | unmöglich |
4 Erklären Sie mysql_secure_installation
mysql_secure_installation
wird nach der Installation des MySQL Servers aufgerufen. Das ist ein Skript welches Sicherheitseinstellungen an der MySQL Installation vornimmt. Es kann folgendes konfiguriert werden:
- Root Passwort: Ein sicheres Passwort für den Root User setzen.
- Remote Root Login: Root User nur auf dem Server direkt erlauben.
- Anonymous User: Mit einem Anonymous User kann jeder ohne Passwort auf das System zugreifen. Dieser sollte entfernt werden.
- Test DB: Test Datenbank löschen.
- Rechtetabelle neuladen: Rechte der User neu laden.
5 Erklären Sie wie Linux in Kombination mit MySQL-Versionen funktioniert
Wird eine neue Linux-Version veröffentlicht, wird die Software auch geupdated. Somit muss bei einer neuen Linux-Version gegebenfalls auch eine andere MySQL-Version, als auf dem alten System installiert werden.
Eine Übersicht der MySQL-Version mit Zusammenhang der Ubuntu Version, kann hier gefunden werden.
6 Erklären Sie was Storage Engines in MySQL sind. Benennen und beschreiben Sie die zwei wichtigsten Exemplare
Storage Engines legen fest, wie die Daten gespeichert und organisiert werden.
Die meisten SE's implementieren eine Art von Datenhaltung.
- flat files (einfache Text-Files)
- Hash-Tables
- Tree-Strukturen
- Heaps
7 Wo die Daten bei MySQL effektiv gespreichert werden
Wo die Daten gespeichert werden kann in der Datei /etc/mysql/mysql.conf.d/mysqld.cnf
festgelegt werden. Dafür muss die Variable datadir
angepasst werden. Standardmässig ist das /var/lib/mysql
.
8 Erklären Sie FK und PK Indexierungen
Beide Indexierungen dienen dazu, die Leistung des DBMS zu steigern und um sicherzustellen, dass die Daten konsistent und korrekt sind. Beide können auf eine oder mehrere Spalten angewendet werden.
Die Fremdschlüssel-Indexierung wird genutzt, damit die Daten auf einer anderen Tabelle referenziert werden können. Somit können Verknüpfungen zwischen Tabellen erstellt werden.
Die Primärschlüssel-Indexierung wird genutzt, damit sichergestellt werden kann, dass die Daten eindeutig identifizierbar sind.
9 Erklären Sie die die Datentypen JSON, ENUM, XY und machen Sie ein Beispiel für die Anwendung dieser Datenypen
Tag 4 - Kapitel 2.1.3, Frage 2 & 3
10 Vorgehen erklären beim Import und Export / Verschiedene Aufgabenstellungen vorformuliert
Der Import und Export von Daten in und aus einer MySQL-Datenbank ist ein wichtiger Bestandteil der Datenbankverwaltung.
Folgend ein paar Beispielaufgabenstellungen:
- Migration von Datenbank(server): Es können Daten in Form von SQL-Dateien exportiert und diese auf der Zielseite importiert werden.
- Sicherung von Daten: Backups einer Datenbank können am Einfachsten mit SQL-Dateien gemacht werden, sind aber auch mit CSV-Dateien möglich.
Ablauf von Import und Export kann bei Tag 5 gefunden werden.
11 Verschiedene Backupvarianten vergleichen und argumentieren
-
Full:
Bei einer vollständigen Sicherung werden alle Daten in der Datenbank gesichert. Dies ist die einfachste Art von Backup, da alle Daten gesichert werden und eine Wiederherstellung relativ einfach ist. Der Nachteil einer vollständigen Sicherung besteht jedoch darin, dass sie viel Zeit und Speicherplatz in Anspruch nehmen kann, insbesondere wenn die Datenbank sehr groß ist. -
Incremental:
Eine inkrementelle Sicherung sichert nur die Änderungen seit dem letzten Backup. Dadurch können Backups schneller durchgeführt werden, und es wird weniger Speicherplatz benötigt. Der Nachteil besteht darin, dass die Wiederherstellung komplizierter sein kann, da mehrere inkrementelle Backups wiederhergestellt werden müssen. -
Differential:
Ein Differential Backup sichert nur die Änderungen seit der letzten vollständigen Sicherung. Dadurch ist die Wiederherstellung schneller und einfacher als bei einer inkrementellen Sicherung, da nur zwei Backups wiederhergestellt werden müssen. Der Nachteil besteht jedoch darin, dass mehr Speicherplatz benötigt wird als bei einer inkrementellen Sicherung. -
Online:
Ein Online-Backup sichert die Datenbank, während sie aktiv ist und keine Ausfallzeiten verursacht. Der Vorteil besteht darin, dass es keine Ausfallzeiten gibt und das Backup automatisch erfolgt. Der Nachteil besteht darin, dass es möglicherweise langsamer ist als eine Offline-Sicherung, da die Datenbank gleichzeitig gelesen und geschrieben werden muss. -
Offsite:
Ein Offsite-Backup wird auf einem anderen Server oder in der Cloud gespeichert. Der Vorteil besteht darin, dass die Daten im Falle eines Serverausfalls oder einer Katastrophe sicher sind. Der Nachteil besteht darin, dass es möglicherweise langsamer ist als ein Backup auf einem lokalen Server, und es können zusätzliche Kosten für die Speicherung anfallen.
12 Verschiedene Migrationsvorgehen erläutern und vergleichen können
Migration per SSH und ZIP-Datei:
# Dump erstellen und direkt zippen
mysqldump --single-transaction -u root -p DB | gzip -9 > /tmp/DUMP_DB.sql.gz
# Files auf einen anderen Server kopieren, meistens über SSH
scp /tmp/DUMP_DB.sql.gz root@ANDERERSERVERIP:/tmp/
# Auf dem Zielserver neue NEUEDB erstellen
# Direktes Entzippen und importieren
gunzip < DUMP_DB.sql.gz | mysql -u root -p NEUEDB
Dieses Vorgehen braucht viel Zeit und Speicherplatz, da zuerst auf dem lokalen Server ein ZIP erstellt wird.
Direkte Verbindung:
# Export von local to remote:
mysqldump --single-transaction -u user -pPASS dbname -h localhost | mysql -u root -pPASS -h 192.168.1.1 dbname
# Import von Remote to local:
mysqldump --single-transaction -u user -pPASS dbname -h 192.168.1.1 | mysql -u root -pPASS -h localhost dbname
Hier gibt es zwei Möglichkeiten. Die erste wäre, man ist auf dem aktuellen Server verbunden und macht einen mysqldump
per PIPE auf den neuen Server. Die zweite wäre, man ist auf dem neuem Server verbunden und holt sich mit mysqldump
die Datenbank auf den neuen Server.
Der Nachteil von diesem Vorgehen ist, dass der TCP-Port 3306 (sofern Default) geöffnet sein muss und die Übertragung unverschlüsselt ist.
SSH und PIPE:
mysqldump --single-transaction -u root -pPASS DBNAME | ssh user@SERVER2 'mysql -u USER -pPASS NEWDB'
Hier ist man auf dem aktuellen Server verbunden und führt einen mysqldump
aus. Dieser wird per PIPE an eine SSH-Verbindung übergeben. Über diese Verbidung ist die Übertragung verschlüsselt.
13 Angriffsvektoren anhand von einer Beispielapplikation analysieren und erläutern
14 Beispiel-Importdatei auf Stored Procedures, Views und Triggers interpretieren
15 Stored Procedures: Sinn, Anwendung und Syntax erläutern
Stored Procedures sind gespeicherte Prozeduren, die in der Datenbank gespeichert sind und von Benutzern aufgerufen werden können, um Daten in der Datenbank zu verarbeiten oder abzurufen. Stored Procedures sind ähnlich wie Programme, die innerhalb der Datenbank ausgeführt werden.
CREATE PROCEDURE delete_customer(IN customer_id INT)
BEGIN
DELETE FROM customers WHERE id = customer_id;
END;
CALL delete_customer(1234);
16 Views: Sinn, Anwendung und Syntax erläutern
Views sind virtuelle Tabellen in einer Datenbank, die auf der Grundlage von Abfragen erstellt werden. Views sind eine wichtige Funktion in einer Datenbank, da sie es Benutzern ermöglichen, Daten aus einer oder mehreren Tabellen auf eine spezifische Weise abzurufen und zu analysieren, ohne dass die zugrunde liegenden Tabellen verändert werden müssen. Views sind hilfreich, wenn ein komplexer JOIN
vereinfacht werden soll.
CREATE VIEW customer_order_count AS
SELECT customers.id, customers.name, COUNT(orders.id) AS order_count
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
GROUP BY customers.id;
SELECT * FROM customer_order_count;
17 Triggers: Sinn, Anwendung und Syntax erläutern
Triggers werden automatisch ausgeführt, wenn bestimmte Ereignisse in einer Datenbank auftreten. Sie können auf verschiedene Arten konfiguriert werden, um bestimmte Aktionen auszulösen, wie z.B. das Aktualisieren von Daten in einer Tabelle oder das Senden einer E-Mail-Benachrichtigung.
CREATE TRIGGER update_customer_order_count
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customers SET order_count = order_count + 1 WHERE id = NEW.customer_id;
END;
18 Auftrag : (Theorie) Schlechte Query - verbessern Sie die Performance
19 Auftrag : (Theorie) - Vor- und Nachteile von MongoDB erläutern
20 Auftrag : (Theorie) - Begrifflichkeiten von MongoDB vs. MySQL
21 Vorgehen erklären beim Import und Export
Für Import kann der Befehl mongoimport
genutzt werden. Der Befehl für den Export heisst mongoexport
.
Die wichtigsten Flags für beide Befehle sind --db=<DATABASE>
und --collection=<COLLECTION>
. Für den Import muss die Flag --file=<FILE>
genutzt werden. Hier wird das zu importierende File definiert werden. Das Export-Flag dazu ist --out=<FILE>
.
22 Erläutern Sie das Konzept der Benutzerverwaltung in MongoDB
Es gibt zwei Built-in Roles in MongoDB. Einmal für Administratoren und für normale Benutzer. Mit db.createUser()
auf der Datenbank admin
können neue Benutzer erstellt werden. Bei der Erstellung kann konfiguriert werden, auf welche Datenbank(en) der User Zugriff hat.
23 Erläutern Sie das Konzept der URIs (in Bezug auf Datenbankmanagementsysteme und MongoDB im Speziellen)
Mit URIs (Uniform Ressource Identifiers) können verschiedene Ressourcen genau identifiziert werden. Das wohl bekannteste URI ist die Web-URI. In MongoDB können URIs genutzt werden, um auf eine MongoDB-Instanz zuzugreifen. Somit kann man Benutzername, Passwort, Host, Port und Datenbank in einem String angegeben.
mongodb://[username:password@]host1[:host1][,hostN[:portN]][/database]
# Beispiel
mongodb://admin:admin@localhost:27017/admin
24 Erklären Sie eine Design-Umsetzung anhand von einem praktischen Beispiel
Um die Datenbank für eine Applikation perfekt zu nutzen (bzw. zu konfigieren) können die verschiedenen Designs genutzt werden. Dabei können die folgenden Fragen beim Entscheiden des korrekten Designs helfen:
- Ist unsere Applikation lese- und/oder schreibintensiv?
- Welchen Datensätze werden oft gemeinsam aufgerufen?
- Welche Performance-Anforderungen haben wir an die Applikation?
- In welcher Form werden unsere Daten (vermutlich) anwachsen? Sich verändern?
Beispiel
Applikation: Blog-Seite
Eine Blog-Seite besteht aus verschiedenen Entitäten (Benutzer, Posts, Kommentare, Kategorien, etc.). In einem RDBMS würde jede Entität seine Tabelle bekommen. In MongoDB stellt man dies am Besten mit Nested Documents dar.
{
"post_title": "Mein erster Blogpost",
"post_text": "Das ist der Text meines ersten Blogposts...",
"post_date": "2023-06-08",
"author": "Max Mustermann",
"comments": [
{
"comment_text": "Toller Blogpost!",
"comment_date": "2023-06-09",
"comment_author": "Erika Musterfrau"
},
{
"comment_text": "Ich stimme zu, sehr informativ.",
"comment_date": "2023-06-10",
"comment_author": "Otto Normalverbraucher"
}
]
}
Dieses Design hat den Vorteil, dass alle Informationen zu diesem Blog-Post in einem Document vorhanden sind. Allerdings kommt es drauf an, ob auf den Blogs viele Kommentare geschrieben werden. In diesem Fall würde dieses Design nicht viel machen, da für jeden Kommentar das gesamte Document aktualisiert werden muss, was zu Leistungsproblemen führen kann. Daher würde es mehr Sinn machen, die Kommentare als eigene Documents zu erstellen und diese per Referencing
auf das Blog-Document zu zeigen.
25 Eräutern Sie die Begriffe Sharding und Replication
Beim Sharding werden die Daten auf mehrere Server verteilt. Somit wird die Last verteilt und die Leistung auf den einzelnen Nodes verbessert. Damit die Shards zusammen arbeiten können, braucht es einen Config-Servert, der weiss wo, welche Daten liegen.
Replication ist das Kopieren auf mehrere Server. Dies erhöht die Datenverfügbarkeit und -sicherheit. Dafür muss ein primärer Node definiert werden, welcher die Schreiboperationen durchführt. Diese Änderungen gibt er dann an die (mehreren) sekundären Server weiter. Die sekundären Server werden für die Leseoperationen genutzt.
26 Erläutern Sie das Vorgehen bei schlechter Query Performance
(explain()
und Indexierung)
Wenn Abfragen lange und langsam sind, können diese mit explain()
analysiert werden.
db.collection.explain("executionStats").find( { field: "value" } )
In dieser Übung kann ein Beispiel gefunden werden. Dabei sind die drei Punkte executionTimeMillis
, totalDocsExamined
und stage
wichtig zu beachten.
Quellen: