Ein kostenloses Probekapitel meines neuen Hörbuchs zur Vorbereitung auf das Fachgespräch zum Thema NoSQL gibt es in der einhundertvierten Episode des Anwendungsentwickler-Podcasts.
TL;DR
Für dein Fachgespräch als Fachinformatiker:in Anwendungsentwicklung gehe ich die fünf im Hörbuch behandelten NoSQL-Datenbankmodelle durch und zeige dir passende Einsatzgebiete. NoSQL steht für "Not Only SQL" und umfasst Konzepte, die du je nach Aufgabe gemeinsam mit relationalen Datenbanken einsetzen kannst. Du erfährst, wie die einzelnen Modelle Daten speichern und welche Systeme du im Fachgespräch als Beispiele nennen kannst. Mein neues Datenbank-Hörbuch enthält außerdem allgemeine Hinweise dazu, wie du dich auf Fragen vorbereitest und auf Prüfer:innen reagierst.
Podcast: Play in new window | Download (Duration: 30:05 — 11.6MB)
Abonnieren: Apple Podcasts | Spotify | RSS
Kapitelmarken
- [00:00:01] Einstieg ins Fachgespräch
- [00:00:37] Neues Datenbank-Hörbuch und Umfang
- [00:01:41] Allgemeine Hinweise zu Fragen im Fachgespräch
- [00:02:48] NoSQL-Kapitel als Hörprobe
- [00:04:16] Was NoSQL bedeutet und wofür es eingesetzt wird
- [00:08:23] Fünf Arten von NoSQL-Datenbanken
- [00:09:10] Spaltenorientierte Datenbanken
- [00:12:04] Objektorientierte Datenbanken
- [00:13:59] Key-Value-Stores und In-Memory-Caches
- [00:16:04] Dokumentendatenbanken
- [00:19:28] Graphdatenbanken und Cypher
- [00:23:05] Bekannte NoSQL-Systeme und Antworten im Fachgespräch
- [00:24:55] Umfang und Download der Hörbücher
- [00:26:12] Preise und Rabattaktion bis Mai 2017
- [00:27:45] Fragenlisten, Hörproben und Rückgaberecht
- [00:28:45] Website und weitere Inhalte der Hörbücher
Inhalt
Das Hörbuch findest du hier: Das perfekte Fachgespräch.
NoSQL
- Was ist NoSQL und wofür braucht man das?
- Steht für „Not only SQL“. Fasst die „modernen“ Datenbanken zusammen. Sinnvolle Ergänzung zu relationalen Datenbanken.
- Welche Arten von NoSQL-Datenbanken gibt es?
- spaltenorientierte Datenbanken
- objektorientierte Datenbanken
- Key-Value-Stores
- Dokumentendatenbanken
- Graphendatenbanken
- Wie funktionieren spaltenorientierte Datenbanken?
- Die Datenbank speichert ihre Datensätze nicht zeilenweise, sondern spaltenweise. Dadurch sind bestimmte Auswertungen (wie z.B. die Summe über alle Werte einer Spalte) einfacher und performanter durchführbar.
- Wie funktionieren objektorientierte Datenbanken?
- Die Datenbank legt Objekte im Sinne der Objektorientierung direkt ab.
- Wie funktionieren Key-Value-Stores?
- Sie bilden ein assoziatives Array (Schlüssel-/Wert-Paare, auch Hash bzw. Dictionary genannt) ab.
- Wie funktionieren Dokumentendatenbanken?
- Die Datenbank speichert komplette unstrukturierte Dokumente ggfs. mit eingebetteten Unterdokumenten.
- Wie funktionieren Graphendatenbanken?
- Die Datenbank speichert vernetzte Informationen in Form von Graphen, die aus Knoten und Kanten bestehen. So kann sie Gebrauch von etablierten Graphenalgorithmen machen, um bspw. die kürzeste Verbindung zwischen zwei Knoten zu finden.
- Welche bekannten NoSQL-Datenbanken gibt es und wie heißen ggfs. die Hersteller?
- spaltenorientierte Datenbanken
- Cassandra von Apache
- HBase von Apache
- objektorientierte Datenbanken
- db4o
- Key-Value-Stores
- Riak
- Redis
- Dokumentendatenbanken
- Lotus Notes
- MongoDB
- CouchDB von Apache
- Graphendatenbanken
- Neo4J
- spaltenorientierte Datenbanken
Literaturempfehlungen
Eine kurze und gut verständliche Einführung in verschiedene NoSQL-Datenbanken und ihre Stärken und Schwächen.
Links
Weitere Infos zum Fachgespräch
Du suchst noch mehr Tipps rund um das Fachgespräch? Dann schau doch mal in diese Artikel- und Podcast-Kategorie: Alle Artikel rund um das Fachgespräch.
Kennst du schon meine Hörbücher zur Vorbereitung auf das Fachgespräch? Unter dasperfektefachgespraech.de kannst du sie herunterladen. In insg. über 10 Stunden gehe ich über 200 Fragen im Detail durch und gebe Tipps für die Beantwortung.
Und wenn du dich für meinen Newsletter einträgst, bekommst du immer direkt alle Neuigkeiten von dieser Seite in dein Postfach geliefert.
Jetzt anmelden!Zusammenfassung
NoSQL im Fachgespräch
Mit einem Kapitel aus meinem Datenbank-Hörbuch bereite ich dich auf mögliche Fragen zu NoSQL vor. Der Begriff steht für "Not Only SQL", ausgeschrieben "Not Only Structured Query Language". SQL steht dabei stellvertretend für relationale Datenbanken.
Unter NoSQL werden je nach Literatur verschiedene Datenbankmodelle zusammengefasst. Die fünf hier behandelten Modelle haben jeweils eigene Eigenschaften und Einsatzgebiete. Einige lassen sich mit SQL abfragen; andere bringen eigene Abfragesprachen mit.
In einer Anwendung können mehrere Datenbankmodelle zusammenarbeiten. Wenn ich etwa einen Warenkorb aus zahlreichen relationalen Tabellen zusammenstelle, kann ich das Ergebnis in einem Key-Value-Store zwischenspeichern. Bei späteren Anfragen lässt sich der gesamte Warenkorb über einen Schlüssel abrufen, wodurch die relationale Datenbank entlastet wird. Für die zugrunde liegenden Daten kann sie weiterhin zuständig bleiben.
Auch die Struktur der Daten spielt bei der Wahl eine Rolle. Beziehungen zwischen Personen in einem sozialen Netzwerk lassen sich beispielsweise als Graph darstellen.
Spaltenorientierte Datenbanken
Wenn du den Durchschnittspreis aller Artikel berechnen möchtest, brauchst du die Werte einer bestimmten Spalte. Eine spaltenorientierte Datenbank legt solche Werte physisch hintereinander ab, sodass sie sich effizient lesen und auswerten lassen.
Um einen vollständigen Datensatz zusammenzustellen, muss die Datenbank die zugehörigen Werte aus den einzelnen Spalten zusammenführen. Welche Ablage geeignet ist, hängt deshalb davon ab, welche Abfragen du durchführen möchtest.
Typische Einsatzgebiete sind Data Warehouses und Anwendungen, in denen du regelmäßig Statistiken über ganze Spalten berechnest. Spaltenorientierte Datenbanken lassen sich häufig mit SQL abfragen.
Als Beispiele für diesen Bereich nenne ich Apache Cassandra und Apache HBase.
Objektorientierte Datenbanken
Beim Speichern von Objekten in einer relationalen Datenbank müssen Objektreferenzen auf Fremdschlüssel abgebildet werden. Beim Lesen werden daraus wieder Referenzen. Diese Unterschiede zwischen den Datenmodellen werden als Impedance-Mismatch bezeichnet.
Eine objektorientierte Datenbank speichert Objekte samt ihren Referenzen direkt. Dadurch entfällt das Mapping zwischen der objektorientierten Anwendung und der relationalen Ablage. Du kannst einen Objektbaum speichern und später wieder einlesen.
Das passt zu Anwendungen, die du objektorientiert entwickelst, weil sich das Datenmodell deiner Programmiersprache unmittelbar ablegen lässt. Ein genannter Vertreter ist db4o, ausgeschrieben "Database for Objects".
Key-Value-Stores
Aus einer HashMap oder einem Dictionary kennst du das Prinzip bereits: Unter einem eindeutigen Schlüssel liegt ein Wert, auf den du über diesen Schlüssel zugreifst.
Der Wert kann ein umfangreiches JSON-Dokument sein, das einen komplexen Objektbaum enthält. Beim hier beschriebenen Modell erfolgt der Zugriff über den Schlüssel.
Key-Value-Stores werden häufig als Cache eingesetzt. Darin lassen sich Ergebnisse aufwendiger Datenbankabfragen oder Berechnungen ablegen, damit sie bei einer späteren Anfrage mit einem Zugriff verfügbar sind.
Bei einem In-Memory-Cache liegen die Inhalte im Arbeitsspeicher. Dadurch lassen sich häufig angefragte Werte schnell bereitstellen. Als Beispiele nenne ich Riak und Redis.
Dokumentendatenbanken
In einer Dokumentendatenbank werden zusammengehörige Daten als Dokumente abgelegt. Die Sammlung solcher Dokumente heißt je nach System beispielsweise Collection.
Ein Dokument kann Unterdokumente und Arrays enthalten, wodurch sich hierarchische Strukturen speichern lassen. Auch Referenzen auf andere Dokumente sind möglich. Wenn alle zugehörigen Daten eingebettet sind, stehen sie beim Lesen mit einem Zugriff bereit.
Innerhalb einer Collection können Dokumente unterschiedliche Attribute besitzen. In einer Sammlung von Personen könnte beispielsweise ein Dokument Hobbys enthalten, während ein anderes einen zusätzlichen Namensbestandteil führt. Über die Attribute lassen sich dennoch Daten suchen und Indizes anlegen.
Diese Flexibilität eignet sich für Rapid Prototyping, wenn sich die benötigte Datenstruktur während des Entwickelns noch verändert. Attribute lassen sich ergänzen oder umbenennen, ohne dafür jedes Mal eine starre Tabellenstruktur anzupassen.
JSON-Dokumente lassen sich zudem gut mit JavaScript verarbeiten, weil die eingelesenen Daten als Objekte weiterverwendet werden können. Genannte Systeme sind MongoDB und Apache CouchDB. Auch Lotus Notes, das vielen als E-Mail-Anwendung bekannt ist, basiert auf einer Dokumentendatenbank.
Graphdatenbanken
Mit einem Graphen kannst du beispielsweise darstellen, welche Person eine andere kennt. Die Personen bilden Knoten, ihre Beziehungen werden als Kanten gespeichert. Eine Kante kann eine Bezeichnung wie "kennt" tragen.
Sowohl Knoten als auch Kanten können Eigenschaften besitzen. Bei einer Person wären das etwa Name und Alter; an der Beziehung könnte das Datum stehen, an dem sich beide kennengelernt haben.
Graphalgorithmen helfen dabei, Verbindungen zwischen Knoten zu untersuchen. In einem sozialen Netzwerk lässt sich damit beispielsweise ermitteln, über welche Kontakte zwei Personen miteinander verbunden sind.
Weitere Einsatzgebiete sind Navigationssysteme mit Verbindungen zwischen Städten sowie Fertigungsanlagen, deren Stationen über Transportbänder miteinander verbunden sind.
Ein bekanntes System ist Neo4j. Dessen Abfragesprache heißt Cypher und stellt Beziehungen mit Zeichen dar, die an gezeichnete Graphen erinnern.
Antworten im Fachgespräch vertiefen
Wenn du nach NoSQL oder bekannten Datenbanksystemen gefragt wirst, kannst du deine Antwort mit einem konkreten Modell und einem passenden Anwendungsfall ausbauen. Dazu gehören die Eigenschaften des Modells und die Gründe, aus denen es für die jeweilige Aufgabe geeignet ist.
Bei einer Frage nach bekannten Produkten würde ich nach den Namen auf die betreffenden Modelle eingehen und ihre Vor- und Nachteile erläutern. So kannst du zeigen, dass du die Systeme einordnen kannst.
Meine Hörbücher zum Fachgespräch
Das neue Hörbuch zum Bereich Datenbanken enthält rund 5,5 Stunden Audiomaterial mit etwa 97 fachlichen Fragen. Es ergänzt mein bereits veröffentlichtes Hörbuch zu Programmierung und Objektorientierung.
Für beide Hörbücher habe ich den allgemeinen Teil überarbeitet. Rund eine Stunde mit etwa 20 Fragen behandelt, wie du dich auf das Fachgespräch vorbereitest und Fragen beantwortest. Dabei geht es auch darum, wie du auf Unterbrechungen oder auf Kopfnicken und Kopfschütteln von Prüfer:innen reagierst. Allgemein formulierte Fragen wie "Was ist Objektorientierung?" werden ebenfalls aufgegriffen.
Zusammen umfassen die Hörbücher fast elf Stunden und über 200 mögliche Fragen mit Antworten und Erläuterungen. Auf dasperfektefachgespräch.de findest du die vollständigen Fragenlisten sowie Hörproben. Die Domain ist auch mit "ae" anstelle von "ä" erreichbar. Mit den Verkäufen finanziere ich meine Website und den kostenfreien Podcast.
Preise und damaliges Angebot
Die in der Episode genannten Preise lagen bei 19,99 Euro je Hörbuch und 29,99 Euro für das Paket. Mit dem Rabattcode Datenbanken, mit großem D, gab es beide Hörbücher bis zum 31.05.2017 für insgesamt 19,99 Euro.
Beim Kauf wurde außerdem ein 14-tägiges Rückgaberecht ohne Angabe von Gründen angeboten.
Transkription der gesamten Episode
Automatisch erzeugte Transkription der Episode
Hi, hier ist Stefan. In dieser Podcast-Episode geht es ums Fachgespräch.
Wenn du noch mehr Informationen zum Fachgespräch von mir haben willst,
dann schau doch mal auf meiner Website vorbei, dasperfektefachgespräch.de.
Und jetzt wünsche ich dir viel Spaß mit der Podcast-Episode.
Herzlich willkommen zum Anwendungsentwickler-Podcast,
dem Podcast rund um die Ausbildung zum Fachinformatiker für Anwendungsentwicklung.
In dieser Episode geht es um mein neues Hörbuch zur Vorbereitung auf das Fachgespräch.
Viel Spaß!
Hallo und herzlich willkommen zur 104. Episode des Anwendungsentwickler-Podcasts.
Diese Woche wird die Episode ein bisschen kürzer,
denn ich habe die ganze Woche lang ganz was anderes aufgenommen anstatt dieses Podcasts,
und zwar mein neues Hörbuch.
Und das ist jetzt fertig, und zwar geht es um den Bereich Datenbanken,
und damit kannst du dich auf das Fachgespräch vorbereiten.
Ich habe vor einiger Zeit ja schon ein anderes Hörbuch zum Thema Programmierung und Objektorientierung veröffentlicht,
und jetzt kommt dazu passend der große Bereich der Datenbanken.
Und das ist wirklich ein großer Bereich.
Ich dachte, ich hätte nicht ganz so viel zu sagen wie zur Programmierung,
aber wenn ich jetzt mal so auf das Ergebnis schaue,
dann habe ich doch deutlich länger über Datenbanken quatschen können
als über Programmierung und Objektorientierung zusammen.
Denn insgesamt bin ich jetzt bei fünfeinhalb Stunden Audiomaterial rund um Datenbanken
und alles, was damit irgendwie zu tun hat und was man auch im Fachgespräch logischerweise gefragt werden könnte.
Also nicht allzu abstruse Sachen, sondern schon natürlich mit Fokus auf die Abschlussprüfung.
Und zusätzlich habe ich auch noch mal das Intro überarbeitet,
denn ich habe ganz zu Beginn auch bei meinem ersten Hörbuch so ein bisschen locker was erzählt
zur Beantwortung der Fragen im Fachgespräch.
Also wie sollte man darauf reagieren, wenn man zum Beispiel irgendwie einen Kopf nicken
oder einen Kopf schütteln von den Prüfern bekommt oder immer unterbrochen wird?
Oder wie antworte ich auf so völlig allgemeine Fragen wie zum Beispiel, was ist denn die Objektorientierung?
Und das habe ich jetzt mal etwas formalisiert und ich habe eine ganze Liste an möglichen Fragen aufgestellt,
die Prüflinge haben könnten, während sie sich auf das Fachgespräch vorbereiten.
Und diese Liste der Fragen, die bin ich jetzt auch der Reihe nach wirklich in dem neuen Hörbuch durchgegangen.
Und übrigens habe ich auch diese allgemeinen Fragen in das alte Hörbuch natürlich übernommen.
Das heißt, beide, sowohl für die Objektorientierung als auch für die Datenbanken,
enthalten jetzt diese Stunde, also es ist wirklich eine Stunde Audioaufnahme jetzt geworden,
zur Vorbereitung auf die Fragestellung.
Also völlig unabhängig von irgendeinem technischen Hintergrund, sondern wie reagiere ich auf die Fragen,
wie antworte ich am besten, wie bereite ich mich aufs Fachgespräch vor und so weiter.
Das alles ist also im Paket mit drin.
Und die heutige Podcast-Episode besteht jetzt aus einem Kapitel dieses neuen Hörbuchs
und ich habe einfach mal, weil ich das Thema hier noch nie besprochen habe, das kurze Kapitel NoSQL ausgewählt.
Das sind jetzt 20 Minuten aus dem Hörbuch, wo es halt um den Bereich Not Only Structured Query Language geht, also NoSQL.
Und ich hoffe, dass auch für dich noch was Spannendes dabei ist.
Wenn dir der folgende Ausschnitt wirklich sehr gut gefällt, dann schau doch einfach mal auf meiner Website vorbei,
dasperfektefachgespräch.de
Und da findest du dann auch den Download sowohl des ersten als auch des zweiten Hörbuchs.
Und wenn du ganz bis zum Ende dieser Episode wartest, gibt es auch noch ein kleines Highlight für dich,
denn ich habe noch was zusammengestellt, wo du ein super mega klasses Sonderangebot bekommst,
wenn du beide Hörbücher auf einmal dir kaufst.
Und das erfährst du am Ende der heutigen Episode.
Würde mich freuen, wenn du dran bleibst.
Ansonsten erfährst du heute einfach ein bisschen was über NoSQL.
Vielleicht ist auch das ja für dich spannend, aber der Aufbau ist jetzt halt so, wie es in meinem Hörbuch ist.
Also konkrete Fragen, die der Reihe nach beantwortet werden.
Ich lasse das Kapitel jetzt einfach mal ablaufen und freue mich auf dein Feedback
und hoffe, dass ein bisschen was Interessantes für dich dabei ist.
Was ist NoSQL und wofür braucht man das?
NoSQL ist eine Abkürzung für Not Only SQL, also Not Only Structured Query Language,
wobei SQL jetzt als Platzhalter für die relationalen Datenbanken steht,
die ja mit SQL abgefragt werden.
Wichtig ist hier jetzt, dass No steht nicht für No im Sinne von nicht SQL,
sondern Not Only, also nicht nur SQL.
Und das beschreibt, was man mit dieser Art von Datenbanken machen kann.
NoSQL ist eine Art Oberbegriff für etwas modernere Datenbankkonzepte,
die eben nicht nur mit SQL arbeiten, sondern ganz andere Möglichkeiten bieten.
Häufig werden fünf verschiedene Datenbankmodelle unter dem Oberbegriff NoSQL zusammengefasst
und das sind die spaltenorientierten Datenbanken, die objektorientierten Datenbanken,
Key-Value-Stores, Dokumenten-Datenbanken und Grafendatenbanken.
Und alle diese Datenbanken haben eventuell auch die Möglichkeit, mit SQL abgefragt zu werden.
Die meisten haben aber ganz andere Abfragesprachen und auch ganz andere Konzepte,
die sich mit dieser relationalen Algebra zum Beispiel gar nicht verstehen
und deswegen auch nicht mit SQL abgefragt werden könnten.
Grundsätzlich bezieht sich der Begriff aber auch darauf,
dass ich in meinem ganzen Unternehmen nicht eben nur SQL-Datenbanken verwenden muss,
sondern auch andere, die eben nicht mit SQL arbeiten.
Als Beispiel, ich habe eine große relationale Datenbank im Keller, in Anführungszeichen,
benutze aber für bestimmte Use Cases einfach andere Datenbankmodelle,
weil die dafür besser geeignet sind.
Ein schönes Beispiel wäre hier ein Cache, der Benutzeranfragen enthält.
Wenn ich zum Beispiel meinen Warenkorb abfrage
und dieser Warenkorb in meiner relationalen Datenbank auf zehn verschiedene Tabellen verstreut ist,
dann wird eine Select-Abfrage mit einem komplexen Join relativ lange dauern.
Wenn ich diese Inhalte jetzt aber ständig auf meiner Website anzeigen will,
möchte ich eventuell nicht diese große Last erzeugen.
Deswegen könnte ich jetzt die Ergebnisse dieser Abfrage in einem Key-Value-Store zwischenspeichern,
wo einfach nur unter einem konkreten Schlüssel der gesamte Inhalt hinterlegt ist.
Das ist nicht normalisiert und schön dedupliziert oder was auch immer.
Es geht hier dann dabei nur darum, die Geschwindigkeit zu erhöhen,
die mir meine SQL-Datenbank halt nicht liefern kann.
Ich werde also in den meisten Fällen für meine gesamte Datenbasis
immer noch eine relationale Datenbank verwenden,
aber an der einen oder anderen Stelle, wo es eben sinnvoll ist,
ein anderes Konzept nutzen, um zum Beispiel dem Benutzer eine schnellere Antwort liefern zu können.
Es kann aber auch einfach Unternehmen geben,
deren Datenbasis sich nicht gut mit relationalen Datenbanken abbilden lässt,
wie zum Beispiel die berühmten sozialen Netzwerke.
Dort geht es zum Beispiel um Knoten, die miteinander in Beziehung stehen,
also bei Facebook zum Beispiel Personen, die andere Personen als Freunde haben.
Und diese Datenstrukturen lassen sich in klassischen relationalen Datenbanken gar nicht so gut abbilden,
beziehungsweise sie lassen sich abbilden,
aber die Abfrage, die ich gegen diese Daten durchführen möchte, ist meistens sehr, sehr imperformant.
Und dafür bieten sich dann zum Beispiel Grafendatenbanken an,
die genau diese Datenstruktur perfekt abbilden können.
Es geht also bei NoSQL nicht darum, einen Kampf mit den relationalen Datenbanken anzufangen,
sondern es geht darum, aufzuzeigen, dass es andere Möglichkeiten gibt
und wo der Use Case es hergibt, kann man auch von den relationalen Datenbanken abweichen
und Teile seiner Daten oder Teile seines Geschäftskonzepts oder wie auch immer in einer anderen Datenbank umsetzen.
Ich würde jetzt hier direkt die einzelnen schon genannten Datenbankmodelle weiter erläutern
und dann bist du auf jeden Fall schon bei einem langen, langen Monolog,
wenn du dafür auch noch Beispiele bringst oder vielleicht interessante Use Cases oder Unternehmen,
die das einsetzen und wofür das denn besonders gut geeignet ist und so weiter.
Das heißt im Prinzip alle Fragen, die ich jetzt gleich der Reihe nach noch durchgehe,
könntest du hier auf diese erste Frage schon zur Antwort bringen.
Welche Arten von NoSQL-Datenbanken gibt es?
Das hängt ein bisschen davon ab, welche Literatur man heranzieht.
Häufig werden aber fünf verschiedene Datenbankkonzepte unter NoSQL zusammengefasst,
und zwar spaltenorientierte Datenbanken, objektorientierte Datenbanken, Key-Value-Stores, Dokumenten-Datenbanken und Grafendatenbanken.
Bei der Beantwortung dieser Frage würde ich jetzt natürlich der Reihe nach alle diese Datenbankmodelle auch vertiefen,
und das machen wir jetzt auch in den nächsten Fragen, sodass ich mir die Antwort hier einmal spare.
Ich würde allerdings zu jedem Typ auch immer erwähnen, was denn jetzt die Vorteile sind,
also was übliche Use Cases vielleicht sind, die ich mit diesen Datenbanken besonders gut umsetzen kann,
und das wirst du jetzt auch in den nächsten Fragen immer hören.
Wie funktionieren spaltenorientierte Datenbanken?
Spaltenorientierte Datenbanken sind im Vergleich zu den eher zeilenorientierten relationalen Datenbanken intern anders aufgebaut.
Spaltenorientierte Datenbanken kann man meistens genauso abfragen wie zeilenorientierte, nämlich einfach mit SQL.
Sie sind allerdings intern so aufgebaut, dass bestimmte Abfragen sehr performant durchgeführt werden können.
Stellen wir uns einmal vor, eine relationale Datenbank speichert die berühmte Tabelle Personen,
und wir überlegen uns jetzt, wie die Datensätze wohl auf der Festplatte abgelegt werden.
Wenn ich zwei Personen in meiner Tabelle habe, zum Beispiel Stefan Macke und Bill Gates,
dann wird wahrscheinlich auf der Festplatte zunächst der gesamte Datensatz Stefan Macke,
also der Vorname Stefan, dann der Nachname Macke, abgelegt, und danach der gesamte Datensatz 2, also Bill und dann Gates.
Wenn ich jetzt aber eine Auswertung aller Nachnamen erstellen möchte,
muss die Datenbank zunächst den ersten Nachnamen aus dem ersten Datensatz und dann den zweiten Nachnamen aus dem zweiten Datensatz lesen.
Die stehen aber nicht direkt hintereinander, sondern die sind auf der Festplatte verteilt,
weil ja die ganzen anderen Attribute der Datensätze, in diesem Fall ist es nur der Vorname, dazwischen liegen.
Wenn ich die Daten nun intern anders speichere und zum Beispiel alle Vornamen physikalisch hintereinander ablege,
dann ist natürlich eine Auswertung aller Vornamen sehr einfach und performant möglich,
denn ich muss ja einfach nur einen Speicherbereich, der direkt hintereinander liegt, auf der Festplatte auswerten.
Schwieriger wird es dann natürlich, wenn ich den gesamten Datensatz wiederherstellen will,
dann muss ich nämlich den Vornamen aus der einen Liste und den Nachnamen aus der anderen Liste lesen.
Je nachdem, was ich also mit meinen Daten machen möchte, bietet es sich an, die Sachen entweder zeilenweise oder spaltenweise zu speichern.
In einem Data Warehouse, wo ich zum Beispiel viele Durchschnittswerte oder Maxima oder sonstige Sachen suche,
bietet es sich vielleicht an, die Sachen eher spaltenweise abzulegen,
denn bei den Artikeln interessiert mich wahrscheinlich bei einer Auswertung herzlich wenig der Name, sondern vielmehr der Preis.
Und wenn ich jetzt die Durchschnittspreise ermitteln möchte, dann ist es ja viel einfacher,
wenn ich alle Preise direkt hintereinander lesen kann, anstatt bei 7000 Artikeln jeweils die Spalte Preis auszulesen.
Und das wäre auch schon ein perfekter Use Case, wenn ich also meine Daten nicht wahlweise komplett als Datensatz auslesen möchte,
sondern quasi gruppiert über bestimmte komplette Spalten, dann benutze ich eine Spalten-Datenbank.
Und der Klassiker dafür ist ebenso ein Data Warehouse.
Alternativ bietet sich diese Form der Datenspeicherung eben an, sobald ich Statistiken über meine Daten erstellen möchte,
beziehungsweise das mein zentraler Use Case ist.
Objektorientierte Datenbanken speichern ihre Daten analog zur Objektorientierung, also dem bekannten Vorgehensmodell bei der Programmierung.
Die Vorteile sind, dass der sogenannte Impedance-Mismatch wegfällt,
das heißt die Abbildung der objektorientierten Welt auf die relationale Welt.
Beispiel, Objektorientierung kennt keine Fremdschlüssel, relationale Datenbanken benötigen diese aber.
Wenn ich die Daten jetzt in der Datenbank ablege oder daraus lesen möchte, muss ich immer diese Übersetzung machen.
Ich muss also aus den Fremdschlüsseln Objektreferenzen machen und umgekehrt.
Und eine objektorientierte Datenbank verhindert das, indem sie direkt die Referenzen ablegt und gar nicht in Fremdschlüssel übersetzt.
Das heißt, im Gegensatz zur relationalen Datenbank habe ich keinen Unterschied in beiden Datenmodellen,
sondern die Objekte aus meiner objektorientierten Programmiersprache können 1 zu 1 in der Datenbank abgelegt werden,
sodass ich es als Entwickler deutlich einfacher habe.
Ich muss mich nicht mehr damit auseinandersetzen, wie die Kardinalitäten aussehen und irgendwelche Übersetzungsmechanismen schaffen,
sondern die Datenbank übernimmt das einfach für mich und ich kann meinen Objektbaum persistieren und wieder aus der Datenbank auslesen,
ohne irgendein Hin und Her-Gemäppe.
Diese Datenbanken bieten sich logischerweise dann an, wenn ich auch objektorientiert programmiere.
Wenn ich andere Paradigmen nutze, wie die funktionale Programmierung oder die Prozedurale, dann habe ich natürlich nichts gewonnen,
weil die objektorientierten Vorurteile dann ja wegfallen, weil meine Sprache sie gar nicht anbietet.
Aber wenn ich objektorientiert entwickle, dann spare ich mir viel Arbeit, weil dieses Mapping zur relationalen Ablage der Daten wegfällt
und ich kann überspitzt gesagt mit einer Zeile Code meinen gesamten Objektbaum in der Datenbank ablegen bzw. ihn dort wieder auslesen.
Wie funktionieren Key-Value-Stores?
Key-Value-Stores verhalten sich im Prinzip wie eine riesengroße Hash-Map bzw. aus .NET vielleicht bekannt, ein Dictionary.
Es geht hier wirklich um eine Ansammlung von Schlüssel-Wertpaaren und die werden möglichst effizient abgelegt,
sodass ich unter Angabe des Schlüssels direkt auf den entsprechend dort hinterlegten Wert zugreifen kann.
Ganz häufig werden diese Systeme z.B. für Caches benutzt.
Das bedeutet, bestimmte Abfrageergebnisse oder Berechnungsergebnisse werden unter einem eindeutigen Schlüssel in diesem Cache abgelegt,
sodass ich später mit einem einzigen Datenbankzugriff auf diesem Cache diesen Wert mir wieder beschaffen kann.
Im Vergleich dazu müsste ich vielleicht in anderen Datenbanksystemen, objektorientierte oder relationale oder auch dokumentenorientierte Datenbanken,
mehrere Abfragen durchführen, um mein Ergebnis zu bekommen, weil die Daten vielleicht in relationalen Datenbanken normalisiert abgelegt werden.
Ein Key-Value-Store ermöglicht es mir wirklich nur, unter einem Schlüssel einen Wert abzulegen,
wobei dieser Wert natürlich auch ein komplexes Gebilde sein kann.
Ich kann also z.B. ein großes JSON-Dokument dort hinterlegen, was dann einen komplexen Objektbaum aus meiner Programmiersprache abbildet.
Es muss also nicht einfach nur ein Integerwert oder Ähnliches sein.
Ich kann dort also beliebig komplexe Daten hinterlegen, aber sie sind eben nur über diesen einen Schlüssel zugreifbar.
Und genau das ist der Vorteil, weil das natürlich sehr, sehr schnell geht im Vergleich zu komplexen Abfragen in anderen Systemen.
Key-Value-Stores werden häufig als Cache eingesetzt und dann auch als sogenannte In-Memory-Datenbank.
Das heißt, der Cache oder der Inhalt des Caches liegt komplett im Arbeitsspeicher des Computers und muss nicht langsam von der Festplatte geladen werden.
Key-Value-Stores werden eher selten für die persistente Ablage von Daten benutzt, sondern der zentrale Use-Case ist eben genau das.
Ein Cache, der In-Memory gehalten wird, um dem Benutzer möglichst schnell Antworten auf häufige Anfragen geben zu können.
Wie funktionieren Dokumenten-Datenbanken?
Dokumenten-Datenbanken speichern die Daten nicht in Datensätzen, in Tabellen, sondern als Dokumente in etwas, was man je nach konkreter Datenbank zum Beispiel Collection nennt, also Sammlung.
Diese Dokumente, die dort abgelegt werden, sind auch nicht normalisiert, sondern enthalten alle Daten, die zu diesem Dokument gehören, in Form zum Beispiel von Schlüsselwertpaaren.
Einige Datenbanken, wie zum Beispiel MongoDB, speichern die Daten in Form von JSON-Dokumenten.
Das heißt, es wird die JavaScript Object Notation benutzt, um quasi JavaScript-Objekte in dieser Collection abzulegen.
Und dann habe ich, wenn ich auf so einen Eintrag zugreife, ein komplexes Dokument, das dann zum Beispiel auch aus Unterdokumenten bestehen kann oder sogar Arrays enthalten kann, also multiple Werte.
Es ist also nicht eine flache Tabelle wie bei relationalen Datenbanken, sondern ein möglicherweise hierarchisches und komplexes Dokument, was dort abgelegt wird.
Es gibt zwar auch die Möglichkeit, wenn dieses Dokument jetzt Referenzen auf andere Dokumente enthält, da anstelle dieser eingebetteten Dokumente tatsächlich nur Referenzen, also so eine Art Fremdschlüssel, abzulegen.
Aber grundsätzlich kann man sich vorstellen, dass wirklich das gesamte Dokument inklusive aller Werte, Unterdokumente, mehrerer Listen und was auch immer dort alles drin ist, in dieser Collection abgelegt wird.
Das hat jetzt natürlich insbesondere beim Zugriff einen großen Vorteil. Ich muss nämlich zum Beispiel bei komplexen Daten eben nicht mehrere Tabellen abfragen und die joinen, sondern ich habe eben alle Daten, die zu diesem Dokument gehören, mit einem einzigen Zugriff vorliegen.
Des Weiteren müssen die Dokumente in einer Collection nicht immer einem Schema entsprechen. Sie können also durchaus auch unterschiedliche Attribute haben.
Das heißt, wenn wir uns eine Collection vom Typ Person vorstellen, dann kann es durchaus sein, dass nur einige dieser Personen einen Vornamen haben.
Andere haben dafür aber vielleicht sogar ein Mittelinitial. Andere haben ihre Hobbys abgelegt, aber alle haben zum Beispiel einen Nachnamen.
Und all das ist nicht irgendwo festgelegt, sondern die Collection kann das quasi dynamisch handhaben.
Und trotzdem kann man über diese ganzen verschiedenen Dokumente nachher zum Beispiel suchen oder man kann sogar einen Index darauf legen, wenn man nach bestimmten Attributen suchen möchte und so weiter.
Daher werden Dokumentendatenbanken auch sehr gerne beim Rapid Prototyping eingesetzt.
Das heißt, wenn ich noch nicht ganz sicher weiß, wie meine Datenbankstruktur letztendlich aussehen wird, kann ich mit Dokumentendatenbanken, ohne großartig statisch an der Datenbank herum experimentieren zu müssen,
einfach Attribute hinzufügen, umbenennen, wegnehmen, ohne dass ich immer den Overhead habe, die Datenbank anpassen zu müssen.
Außerdem hatte ich schon gesagt, dass viele dokumentenorientierte Datenbanken, wie zum Beispiel ein berühmter Vertreter, die MongoDB, die Daten im JSON-Format ablegen.
Das heißt, ich kann insbesondere mit JavaScript sehr gut auf diese Daten zugreifen, denn ich brauche im Zweifel nur eine Zeile Code, um ein Dokument aus der dokumentenorientierten Datenbank auszulesen.
Und ich habe dann sofort ein echtes JavaScript-Objekt, mit dem ich dann in meiner Programmiersprache eben weiterarbeiten kann.
Wie funktionieren Grafendatenbanken?
Grafendatenbanken speichern die enthaltenen Daten in Form von Grafen.
Ein Graf ist eine Datenstruktur, die aus Knoten und Kanten besteht.
Ein Knoten, das ist auf Englisch auch Note genannt,
eine Information, quasi vergleichbar mit einer Entität, wie zum Beispiel eine Person,
und eine Kante, das ist eine Verbindung zwischen zwei Knoten.
Und diese Verbindung kann jetzt eine Bezeichnung bekommen, wie zum Beispiel kennt.
Und so kann ich zwei Personen, meinetwegen Stefan und Klaus,
mit einer Kante, mit der Bezeichnung kennt, verbinden
und kann darauf schließen, dass jetzt die Person Stefan die Person Klaus eben kennt.
Ich kann also die Beziehung zwischen diesen beiden Knoten mit den Kanten abbilden.
Und sowohl die Knoten als auch die Kanten können Attribute, also Eigenschaften, besitzen.
Die Person könnte zum Beispiel ein Alter und einen Namen haben
und die Beziehung könnte zum Beispiel ein Attribut Kennenlerndatum enthalten.
Der Vorteil von Grafendatenbanken ist jetzt, dass man auf dieser Datenstruktur des Grafen
bestimmte Algorithmen sehr performant oder einfach umsetzen kann.
Wenn ich zum Beispiel, wie üblicherweise in sozialen Netzwerken sehr verbreitet,
herausfinden möchte, über wie viele Ecken eine Person eine andere Person kennt,
also über welche Beziehungen ich von der einen Person zur anderen quasi navigieren kann,
dann kann ich das mit bestimmten Grafenalgorithmen sehr einfach umsetzen.
Das heißt, der Algorithmus, um quasi alle Beziehungen zwischen zwei Knoten herauszufinden,
ist relativ einfach beziehungsweise auch sehr performant umsetzbar.
Wenn ich das gleiche mit relationalen Datenbanken umsetzen möchte
und wir stellen uns vor, die Person ist in einer Tabelle abgelegt
und meinetwegen mit einer M2N-Zuordnungstabelle mit anderen Personen verknüpft,
dann kann man sich überlegen, wie komplex die Abfrage jetzt aussieht,
um herauszufinden, wen eine Person über wie viele Ecken kennt.
Denn für jede Ebene mehr brauche ich quasi ein weiteres Self-Join auf die Tabelle Person
und meine Abfrage wird dann sehr, sehr komplex beziehungsweise eventuell sogar gar nicht lösbar,
weil ich Joins zum Beispiel gar nicht dynamisch angeben kann.
Jetzt ist die Frage, welche Daten kann man denn in so einer Grafendatenbank gut ablegen?
Das sind hauptsächlich die Daten, die eben in irgendeiner Beziehung stehen,
die man als Graf modellieren kann.
Klassisches Beispiel sind eben die sozialen Netzwerke,
wo Knoten sich über bestimmte Beziehungen irgendwie verbinden lassen.
Man kann aber auch klassische betriebswirtschaftliche Probleme damit abbilden,
wie zum Beispiel in einem Navigationssystem,
welche Stadt ist mit welcher anderen Stadt verbunden
oder eine technische Fertigungsanlage,
wo vielleicht Lackierstationen mit Transportbändern untereinander verbunden sind.
Sobald ich in meiner Datenstruktur eben die Form eines Grafens nutzen kann,
kann ich, um diese Daten abzulegen, eine Grafendatenbank nutzen
und habe dann eben die Vorteile, die mir diese Grafenalgorithmen bieten.
Viele Grafendatenbanken bieten auch eine eigene Abfragesprache an.
Ein sehr bekannter Vertreter ist zum Beispiel Neo4j
und die haben eine separate Abfragesprache entwickelt, die Cypher heißt
und die sieht schon fast aus wie gezeichnete Grafen.
Da werden zum Beispiel Pfeile mit spitzen Klammern und Minuszeichen nachgebildet,
sodass ich auch mit wenig technischem Hintergrundwissen
vielleicht nachempfinden kann, welche Abfrage da eigentlich gerade durchgeführt wird.
Welche bekannten NoSQL-Datenbanken gibt es
und wie heißen gegebenenfalls die Hersteller?
Diese Frage ist analog zu sehen zur entsprechenden Frage nach den relationalen Datenbankherstellern.
Hier geht es also einfach nur darum, ein paar Namen zu nennen,
damit man zeigen kann, dass man auch die am Markt verbreiteten Systeme wenigstens mal gehört hat.
Ich gehe jetzt nicht auf die Details der jeweiligen Hersteller oder Produkte ein,
das würde ich aber im Fachgespräch natürlich unbedingt tun.
Das heißt, nachdem man die Antwort gegeben hat, also kurz die Sachen genannt hat,
würde ich auf jeden Fall auf die einzelnen Datenbanksysteme nochmal eingehen,
also quasi die Antwort auf die letzten fünf Fragen geben,
wie die einzelnen Datenbanksysteme sich unterscheiden
und dann würde ich auch vielleicht auf die individuellen Vor- und Nachteile eingehen
oder vielleicht auf mögliche Einsatzgebiete und so weiter und so fort.
Aber wir gehen jetzt erstmal ein paar dieser Hersteller und Systeme durch,
damit du die Frage erstmal beantworten kannst.
Wenn wir im Bereich spaltenorientierte Datenbanken schauen,
da gibt es zum Beispiel von Apache die Datenbank Cassandra.
Auch von Apache ist die HBase. Das sind beides spaltenorientierte Datenbanken.
Dann haben wir eine objektorientierte Datenbank.
Da gibt es eigentlich sehr bekannt nur die DB4O, also Database for Objects.
Da steht es schon im Namen mit drin.
Dann haben wir Key-Value-Stores. Davon gibt es ein paar mehr.
Zwei sehr bekannte sind zum Beispiel REAC und Redis.
Dokumenten-Datenbanken gibt es auch zwei berühmte Vertreter und zwar MongoDB und CouchDB von Apache.
Aber die gibt es schon ziemlich lange, denn auch Lotus Notes,
das dir vielleicht als E-Mail-Applikation bekannt ist, basiert auf einer Dokumenten-Datenbank
beziehungsweise ist eine Dokumenten-Datenbank.
Und als letztes gibt es noch eine sehr bekannte Grafen-Datenbank und das ist die Neo4j.
Ja, das war es zum Thema NoSQL.
Das sind die Fragen, die ich in dem entsprechenden Kapitel meines Hörbuchs für dich beantwortet habe.
Das war jetzt für dich natürlich komplett kostenfrei.
Du hast es ja gerade schon gehört.
Der Rest des Hörbuchs ist dann nicht mehr kostenfrei, denn das hat ganz schön viel Arbeit gemacht.
Deswegen ja auch heute die kurze Podcast-Episode, weil ich da wirklich viel Zeit investiert habe.
Ich habe insgesamt knapp unter 100 Fragen zu Datenbanken aufgenommen.
97 müssten es sein.
Und zusätzlich auch noch ca. 20 Fragen zum allgemeinen Beantworten von Fachgesprächsfragen.
Von daher, da habe ich wirklich viel Zeit investiert.
Und ich hoffe, es ist auch mit einer entsprechenden Qualität mir gelungen,
das Ganze jetzt hier aufzunehmen und rüberzubringen und jetzt auch zum Download anzubieten.
Und wenn du diesen Podcast und meine Seite ein bisschen unterstützen möchtest,
dann würde ich mich freuen, wenn du mal auf der Website vorbeiguckst.
Dasperfektefachgespräch.de
Und da kannst du dir dann die beiden Hörbücher herunterladen oder auch eben nur eins von beiden.
Ganz wie du möchtest.
Und ich hatte ja versprochen, dass es ein besonderes kleines Feature für dich gibt.
Als treuen Podcast-Hörer, wie ich hoffe.
Ich hoffe, dass es ja heute nicht deine erste Episode ist.
Aber mir ist auch egal.
Du kriegst trotzdem den Rabatt, den ich dir jetzt vorgegeben habe.
Und zwar kosten die Hörbücher einzeln jeweils 19,99.
Und ich verkaufe beide zusammen, aber auch im Paketpreis für 29,99.
Und weil du mir halt heute hier immerhin schon 26 Minuten lang zuhörst
und ich das ja irgendwie wieder gut machen muss,
gibt es noch ein super Sonderangebot.
Und zwar kannst du bis Ende Mai 2017, also noch ca. zwei Wochen,
beide Hörbücher, und das sind fast elf Stunden Prüfungsvorbereitung,
für 19,99 Euro kaufen.
Also die allgemeinen Tipps zur Beantwortung der Fragen,
das komplette Hörbuch zur Programmierung und Objektorientierung
und die neuen 5,5 Stunden zum Bereich Datenbanken
bekommst du für 19,99, aber nur noch bis zum 31.05.2017.
Damit du diesen Nachlass bekommst,
musst du allerdings einen Rabattcode eingeben bei der Bestellung.
Und dieser Rabattcode lautet Datenbanken mit großem D bitte.
Also einfach wie das Thema des Hörbuchs Datenbanken als Rabattcode eingeben
und du bekommst beide Hörbücher inklusive den allgemeinen Fragen zum Fachgespräch
für 19,99 Euro anstatt 29,99.
Also wenn du gerade kurz vor deiner mündlichen Prüfung stehst
und es gerade für dich passt, dann schlag zu, denn danach wird es wieder teurer.
Du musst auch übrigens nicht die Katze im Sack kaufen,
denn alle Fragen, die ich beantworte, stehen komplett auf der Website
dasperfektefachgespräch.de.
Da kannst du dir alles in Ruhe vorher anschauen, was ich da beantworte.
Du hast heute eine Beispielepisode zum Thema NoSQL gehört.
Ich habe eine andere Beispielepisode aus dem Hörbuch für Programmierung auch online.
Kannst du dir direkt auf der Website anhören.
Und als letztes, wenn du dir das Buch kaufst, bekommst du sogar ein 14-tägiges Rückgaberecht.
Du kannst also ohne Angabe irgendwelcher Gründe das Ding zurückgeben,
wenn es dir dann doch nicht gefällt.
Wäre sehr schade, denn wie gesagt, damit finanziere ich hier die Website
und den kostenfreien Podcast für alle Prüflinge da draußen.
Von daher wäre es schön, wenn du mich da irgendwie unterstützen würdest.
Aber wenn du meinst, ich erzähle wirklich nur Müll und es hilft dir nicht weiter,
dann kannst du auch ohne irgendwas befürchten zu müssen, das Ding einfach wieder zurückgeben.
Und das sind auch wirklich nur ein paar Klicks.
Es ist also kein Riesenaufwand.
Also, würde mich sehr freuen, wenn du mal auf der Website vorbeischaust.
Das Perfekte Fachgespräch.
Übrigens kannst du es mit Ä schreiben.
Ich habe mir so eine coole Umlautdomain besorgt.
Du kannst es aber auch mit AE schreiben.
Ganz egal, du kommst auf beiden Domains zu dem Hörbuch.
Ja, das würde mich freuen, wenn du einfach mal vorbeischaust.
Und natürlich würde es mich noch mehr freuen, wenn du mich hier irgendwie unterstützt.
Und ich kann dich aber ja auch unterstützen.
Denn wie gesagt, das ist ja jetzt einfach nicht zum Spaß,
sondern es sind wirklich insgesamt über 200 Fragen, die im Fachgespräch gestellt werden könnten
und eine mögliche Antwort darauf mit Erklärung, warum man das so erklären sollte und nicht anders.
Also, ich denke, es ist wirklich eine sehr gute Vorbereitung aufs Fachgespräch.
Und wenn du da noch Unterstützung brauchst, ja, dann schau doch einfach mal vorbei
und besorg dir vielleicht das Hörbuch.
Und ich glaube, jetzt habe ich auch genug zum Hörbuch gequatscht.
Außerdem habe ich heute schon mehrere Stunden lang Audioaufnahmen gemacht.
Und ich habe jetzt einfach ehrlich gesagt auch mal keine Lust mehr.
Deswegen höre ich jetzt hier auch auf zu quatschen und sage für heute vielen Dank fürs Zuhören
und bis zum nächsten Mal. Tschüss!










Neueste Kommentare