Transkript: PP05 - Datenbanken

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Ja, hallo liebe Hörerinnen und Hörer.

Dominik

Willkommen beim Python Podcast in der mittlerweile fünften Episode.

Dominik

Heute geht es ein bisschen um Datenbanken.

Dominik

Ja, wir haben wieder den schönen Wintergarten vor uns.

Dominik

Ich bin der Dominik und natürlich dabei ist wie immer der Jochen.

Jochen

Jo, hallo.

Jochen

Genau, Datenbanken.

Ja, voll gut.

Jochen

Da freue ich mich schon drauf.

Jochen

Das ist irgendwie ein Thema, mit dem ich schon viel zu tun hatte.

Dominik

Wird wahrscheinlich ein bisschen längere Episode.

Dominik

Wir versuchen wieder ein bisschen Struktur reinzubekommen.

Dominik

Wir wissen auch nicht ganz, wo das gelingt.

Dominik

Wir werden wieder hemmungslos abschweifen.

Dominik

Wenn ihr Fragen, Anmerkungen dazu habt, Kommentare, Lob, alles was ihr uns mitteilen wollt, schickt eine E-Mail an hallo at python-podcast.de.

Dominik

Und wie immer findet ihr die Links und zusätzlichen Infosversendungen in den Shownotes.

Jochen

Ja, wollen wir das eigentlich vielleicht noch erwähnen, welches Datum wir haben?

Jochen

Oder heute ist der 24.2.

Dominik

Oh, wir hatten jetzt Mitte.

2019.

Jochen

Ja, finde ich gut.

Jochen

Oder genau, wir haben das, glaube ich, schon mal gemacht.

Jochen

Haben wir das schon mal gemacht?

Jochen

Ich glaube, dann haben wir es irgendwie nicht mehr gemacht, aber ich glaube, das ist wahrscheinlich eigentlich ganz interessant, wenn man das hört, von wann das, wann das aufgenommen wurde.

Dominik

Ja, stimmt, Ende Februar 19.

Dominik

Und es ist gerade ganz gutes Wetter und es ist ein Sonntag.

Dominik

Ja.

Dominik

Normalerweise nehmen wir immer abends auf, heute ausnahmsweise mal nach dem Brunchen.

Dominik

War übrigens super lecker.

Dominik

Ja, ich würde sagen, wir steigen fast direkt ins Thema ein und es geht halt so ein bisschen darum, ja, das ist glaube ich nicht das erste Mal, dass wir versuchen, so eine Folge mit Datenbanken zu strukturieren.

Dominik

Das war auch der Grund, warum ihr so ein bisschen länger auf die letzte Folge warten musstet.

Dominik

Hatten wir ja kurz erwähnt.

Dominik

Ja, was ist überhaupt so eine Datenbank Jochen?

Dominik

Und wir versuchen halt immer wieder euch vielleicht kurz zu erklären, was man damit noch mit Python machen kann oder welche Module es dafür gibt, aber das vielleicht nochmal als Warnung.

Dominik

Python kommt in dieser Folge nicht nur vor und nicht ganz so viel, sondern es geht halt tatsächlich darum, wie man das, was man mit Python macht, also die Datenbanknutzung, so ein bisschen euch erklären, näherbringen kann.

Jochen

Ja, wobei, weil ich denke, dass das halt eigentlich für alle, die Python entwickeln wollen, ein interessantes Thema ist, weil da wird man, egal in welchem Bereich man sich da tummelt, nicht drum herumkommen, irgendwann etwas mit Datenbanken zu machen.

Jochen

Und ja, dafür muss man sich halt dann auch nicht nur mit Python auskennen, sondern muss halt auch so ein bisschen verstehen, wie das mit den Datenbanken funktioniert.

Jochen

Und man kann halt nicht viel interessante Dinge machen, wenn man halt von Datenbanken da gar nichts versteht und insofern.

Dominik

Wir werden ein bisschen drauf eingehen, was ist das überhaupt, ne?

Dominik

Datenbank, Unterschiede der einzelnen Datenbanktypen ein bisschen darstellen.

Dominik

Und wir wollen anhand eines kleinen Beispiels euch so ein bisschen so die Problematiken beim Skalieren und bei dem Arbeiten mit der Datenbank erklären.

Jochen

Genau.

Jochen

Und da hatten wir uns gedacht, nehmen wir einfach irgendwie etwas, was man halt kennt.

Jochen

Ich meine, wozu ist das Internet da?

Jochen

Irgendwie Dinge einkaufen, klar, weiß man ja.

Dominik

So ein Buchladen, habe ich gehört, können wir als Beispiel nehmen.

Jochen

Genau, Amazon hat bestimmt jeder schon mal benutzt und weiß halt, wie das funktioniert.

Jochen

Und das ist halt eigentlich, denke ich, ein ganz gutes Beispiel für wofür braucht man eigentlich Datenbanken, weil die haben wahrscheinlich auch für fast alle Datenbanktypen irgendwie eine Anwendung.

Jochen

Und darin kann man das vielleicht ganz gut erklären.

Dominik

Ja, dann vielleicht fangen wir erstmal einfach an.

Dominik

Also mit was würde man einfacherweise anfangen?

Dominik

Wenn man Spicen hat, möchte Daten haben, man könnte ja einfach so ein Dictionary jetzt nehmen oder sich eine Liste erstellen und da irgendwie über Indizes iterieren, dann hätte man ja sowas wie einen kleinen Datensatz schon mal.

Dominik

Ja, wenn man das Ganze jetzt mit etwas komplizierteren Daten braucht.

Dominik

Wir hatten eben, glaube ich, im Vorgespräch ganz kurz über Struktur gesprochen.

Dominik

Da gibt es dann eine Struktur, die man sich ausdenken muss.

Dominik

Das ist gar nicht so trivial, das ist recht wichtig, dass man da so ein bisschen mehr gedanklich dazu macht.

Dominik

Wie sieht denn meine Struktur der Daten überhaupt aus?

Dominik

Und was will ich dir damit machen?

Dominik

Wie würdest du da direkt vorgehen noch?

Jochen

Ja, also das ist halt, das kommt tatsächlich auf den Anwendungsfall an und was sich halt in der Praxis irgendwie in den letzten Jahrzehnten so durchgesetzt hat, sind relationale Datenbanken, aber es gibt halt auch diverse andere Arten von Datenbanken und die haben alle so ihre Berechtigungen.

Dominik

Alle, die das noch nicht drauf haben, ist ja so SQL oder NoSQL.

Ja.

Dominik

Benannt oft, ja.

Jochen

Genau, und ja, es hängt halt davon ab.

Jochen

Also man kann natürlich auch einfach Objekte, Python-Objekte nehmen, die irgendwie serialisieren, nennt man das.

Jochen

Also zum Beispiel gibt es da in der Standardbibliothek das Pickel-Modul für, was halt aus einem Python-Objekt das irgendwie beliebig aussehen kann, macht das halt eine String- oder Byte-Repräsentation.

Dominik

Also eine Serialisierung ist tatsächlich irgendwie die Darstellung als Zeichenkette oder Byte-Strecke, damit man die übertragen kann über einen Kanal oder sowas.

Jochen

Ja, genau, das nennt man Serialisierung, ist auch im Kontext von Datenbanken eine sehr wichtige Geschichte.

Jochen

Und man könnte jetzt zum Beispiel diese Bytefolgen oder Strings nehmen und die halt zeilenweise in einen Pfeil reinschreiben und dann hinterher auch wieder auslesen.

Jochen

Also man nimmt einfach zum Beispiel, wenn man jetzt den State von irgendeinem Programm speichern möchte, nimmt man einfach alle Objekte, die man jetzt so findet oder die man sich irgendwo gemerkt hat, dass man sie hat und serialisiert die halt in Zeilen und schreibt das Ganze in ein Pfeil.

Dominik

Genau so habe ich das auch bei meiner ersten versuchten Datenbankoperation selber gemacht, nämlich einfach so die Daten, die ich hatte, es ging da um so Spielerdaten aus dem Sport, habe ich einfach alle Informationen über einen Spieler in eine Teile gepackt und die teilenweise in eine Datei reingeschrieben.

Jochen

Genau, und dann, wenn man jetzt den Status wiederherstellen will des Programms, wenn man das startet, dann nimmt das einfach die Datei, liest alles wieder ein und dann ist es im gleichen Zustand wie vorher.

Jochen

Und genau, wenn man das mit Python-Objekten macht, dann ist es halt nicht mehr menschenlesbar, aber man kann das halt genauso machen, indem man halt ein CSV schreibt oder sowas halt, dann wäre es halt noch menschenlesbar.

Jochen

Da muss man sich halt überlegen, wie man die CSV-Zeilen in Objekte verwandelt und Objekte wieder in CSV zeigt.

Dominik

Ich habe einfach den Dictionary-Code in eine Teile reingeschrieben, habe das dann ausgelesen und evaluiert.

Dominik

Es war wahrscheinlich nicht die beste Methode, das zu tun, aber funktioniert hat es trotzdem.

Jochen

Genau, und wenn man sowas macht, das wurde am Anfang irgendwie bei Webentwicklung auch häufig gemacht.

Jochen

Das nannte sich dann Flat-Files, Datenbank mit Flat-Files.

Jochen

Man hat nimmt einfach Files und schreibt den State da irgendwie rein.

Jochen

Und natürlich ist auch das Filesystem ja schon irgendwie eine Art Datenbank.

Jochen

Das ist halt eine hierarchische Datenbank, die halt so eine Baumstruktur hat.

Jochen

Und ja, deren Blätter halt Files sind.

Jochen

Wurzel ist halt Root slash bei Unix-Systemen oder weiß nicht, bei Windows ist es irgendwie was komisches mit dem Laufwerksbuchstaben.

Jochen

Und ja, das ist natürlich auch eine Struktur.

Jochen

Man hat halt irgendwie darüber die Verzeichnisse, die es da gibt, auch schon so Metadaten definiert, dass man halt weiß, wo bestimmte Sachen sind halt in einem bestimmten Verzeichnis und so.

Jochen

Und das Ganze gibt es halt auch über Netzwerkgeschichten.

Jochen

Die bekanntest hierarchische Datenbank im Netz ist halt sowas wie LDAP.

Jochen

Windows nennt das irgendwie Active Directory oder ist auch vielleicht noch ein bisschen komplizierter.

Jochen

Und ja, das ist halt auch schon mal eine grundsätzliche Art, wie man Datenbanken betreiben kann.

Jochen

Aber vielleicht, was ich mich ganz gerne auch nochmal ansetzen würde, ist, wie Leute, also wenn man jetzt sich überlegt, wo könnten Leute etwas, das man sonst vielleicht mit Datenbanken tun könnte, irgendwie schon mal gesehen haben oder was machen viele Leute, was halt eigentlich auch gut in den Datenbankkontext passt, dann würde ich vielleicht sogar eher mit sowas wie Excel oder so anfangen.

Jochen

Weil das wird dann oft so scherzhaft auch erwähnt.

Jochen

Wenn man sich überlegt, was ist die meisten verwendete, am meisten ausgerollte Datenbanklösung der Welt, könnte man auch sagen, das ist halt Excel, weil viele Leute halt Excel quasi als Datenbank benutzen.

Dominik

Allen möglichen Quatschen, irgendwelche Spalten und Teilen reinschreiben und ganz, ganz Ganzen.

Jochen

Und das ist genau, das ist halt eigentlich, ach so, und vielleicht sollte man sich erstmal grundsätzlich überlegen, stimmt, wenn man schon so anfängt zu erklären, was Datenbanken sind, was sind eigentlich Daten, was sind eigentlich Informationen, was sind eigentlich Wissen, dafür hat man umgangssprachliche Definitionen, die halt, wo man dann weiß, was das ungefähr sein soll, aber wenn man das jetzt aus dem Datenbankkontext sehr präzisieren möchte, dann geht das eigentlich auch relativ schmerzlos.

Jochen

Also Daten sind halt sowas wie, also ein Datum wäre irgendwas mit minus 3,5, wäre jetzt ein Datum.

Jochen

Einfach nur ein Zahlenwert oder so.

Jochen

Und das sagt einem halt natürlich noch nichts.

Dominik

Weil es halt kein Bezug dafür, minus 3,5, was denn?

Dominik

Grad Fahrenheit.

Jochen

Und ja, wenn man, wenn man jetzt von Informationen spricht, dann spricht man von Daten, die halt schon so ein bisschen Kontext haben.

Jochen

Also sowas wie minus 3,5 Grad, dann eine Temperatur.

Jochen

Das heißt, man weiß halt, das steht jetzt in der Temperaturspalte.

Jochen

Und damit weiß man schon mal so ein bisschen, worum es da überhaupt geht und dann nimmt man das Informationen.

Jochen

Und das, was man aber eigentlich in Datenbanken speichern möchte und dann was machen möchte, das ist irgendwie so Wissen.

Jochen

Begriff dafür ist Wissen und das wäre dann halt, wenn man jetzt eine ganze Reihe von Temperatursensoren hätte, die halt nicht nur die Temperatur über die Zeit irgendwie aufgenommen haben, sondern halt auch noch deren Position hat.

Jochen

Und das halt in einer Struktur, die halt bestimmte Anfragen leichter macht, halt gespeichert hätte, dann kann man damit möglicherweise das Wetter vorhersagen oder sowas.

Jochen

Das heißt, man halt halt Wissen über wie das Wetter ja gerade ist oder wie es war.

Dominik

Oder man weiß zum Beispiel, dass es im Winter kälter wird als im Sommer.

Jochen

Ja, genau.

Jochen

Und dann kann man halt, wenn man Abfragen daran stellt, dann halt Schlussfolgerungen daraus ziehen und dann vielleicht Dinge vorhersagen oder halt auch einfach bestimmte Fragen beantwortet bekommen, die einen interessieren.

Jochen

Also alle Städte, in denen es letztes Jahr kälter war als so und so oder irgendwie sowas.

Jochen

Genau, das ist das, wofür man eigentlich Datenbanken verwenden möchte.

Dominik

Da kann man auch Analysen irgendwann machen.

Dominik

Das ist aber dann, glaube ich, wieder ein neues Thema, wie man Analysen dann mit Daten fährt.

Dominik

Wenn wir heute, glaube ich, nicht machen, aber was wir machen wollen.

Doch, alles heute.

Dominik

Doch, doch, alles.

Dominik

Okay, ihr müsst heute lange, lange Geduld mitbringen.

Dominik

Oder eine große Runde durch den Park oder ihr könnt ganze Wohnung putzen heute.

Jochen

Ja, ich bin gespannt, wie schnell wir da durchkommen.

Jochen

Aber ja, also ich denke, das ist eigentlich vielleicht ganz interessant, mal so einen Rubenüberblick.

Jochen

Also ich versuche dann zu verhindern, zu sehr ins Detail zu gehen, aber wenn man einfach mal so das Gesamtthema Datenbanken mal überblickt hat, dass.

Dominik

Ja, hatte ich so umkehren, davon ab, so ins Detail zu gehen, weil ich finde das unheimlich interessant, was da alles noch so drinter steckt.

Dominik

Ich bin da sehr curious, was man auch alles so findet.

Dominik

Und die Details sind halt auch irgendwie wichtig, ja.

Jochen

Ja, ja, stimmt.

Jochen

Wir schauen einfach mal.

Jochen

Ich hoffe mal, dass es nicht allzu lang wird, aber.

Dominik

Okay, ja, dann.

Dominik

Fangen wir doch direkt mit dem Beispiel an oder wolltest du noch so ein paar grundsätzliche Daten?

Jochen

Einmal grundsätzlich darüber, was gibt es für unterschiedliche Arten von Datenbanken, auch um halt dann um darauf dann wieder Bezug nehmen zu können in dem Beispiel.

Jochen

Und vielleicht auch das, was halt sich jetzt durchgesetzt hat.

Jochen

Jedenfalls, das ist halt eben hierarchische Datenbanken gibt es schon ganz lange und ja, Sachen in Flat Files oder irgendwie strukturierten Dateien hat man auch schon lange.

Jochen

Und dann irgendwann 1971, glaube ich, ist ein Paper rausgekommen von Ted Cott und der hat sich halt Gedanken darüber gemacht, wie man eigentlich dieses Problem, ich möchte wissen, irgendwie speichern und dann irgendwelche Dinge damit später machen, wie man das so grundsätzlich eingehen sollte.

Jochen

Und dessen Idee war halt, also ein Problem, was er gesehen hat mit den bisherigen Ansätzen war, dass viele Leute Zeit damit verbracht haben, die Daten, die sie halt schon auch irgendwie strukturiert, aber halt im eigenen Format in Dateien gespeichert haben, da Algorithmen für zu schreiben, wie die jetzt abzufragen sind.

Jochen

Also wenn man jetzt eben so eine Frage beantwortet haben möchte, wie, keine Ahnung, wie viel, was war denn jetzt die Stadt, in der es letztes Jahr am kaltesten war in Deutschland oder so.

Jochen

Dann fingen Leute an, dann in Algorithmen zu schreiben, die für die Art, wie sie die Daten gespeichert hatten, halt das Problem gelöst haben.

Jochen

Und jeder, der halt die Daten irgendwie anders speichern, muss sich halt einen neuen Algorithmus überlegen, wie er das macht.

Jochen

Und dann war es ja eigentlich ziemlich blöde.

Jochen

Also es wäre irgendwie schlauer, wenn man das standardisieren könnte und also nicht sich überlegt, welchen Algorithmus oder einen Algorithmus zu schreiben, der halt das irgendwie abfragt, sondern zu beschreiben, was man haben möchte und dann irgendeine Art von Datenbank-Managementsystem, das dann halt weiß, wie man irgendwie diverse Arten von Indizes baut oder so, dem dieses formalisierte Anfrage vorzulegen und das Ding sucht sich dann die beste Art, wie man das dann löst, raus und

Jochen

macht das dann vor allem.

Jochen

Und damit das alles gut geht, muss man halt die Daten auch in einem bestimmten Format speichern und man sollte die halt in Form von Relationen speichern.

Jochen

Das heißt im Grunde mehr oder weniger wie in Tabellen.

Jochen

Man kennt das halt aus Excel, wobei viele Excel-Tabellen halt nicht die Anforderungen erfüllen, die man eigentlich sozusagen dann dran stellen würde.

Dominik

Weil in unterschiedlichen Spalten oder Zeilen irgendwie unterschiedliche Dinge drinstehen, die da nicht zu suchen haben oder.

Jochen

Ja, weil sie halt nicht normalisiert sind, weil es nicht so wirkliche

Dominik

Oh, jetzt kommen wir direkt wenig Normalisierungen, ja.

Jochen

Weil es nicht wirkliche Beziehungen zwischen Tabellen gibt und das in Datenbanken gibt es das halt alles schon und da werden dann auch bestimmte Regeln und Constraints irgendwie überprüft und so.

Dominik

Tabellen sie auf Tabellen zeigen oder sowas.

Jochen

Genau, genau.

Jochen

Ja, und das wird in Excel halt alles nicht gemacht und dann ja, das ist halt, das ist in der Praxis ein relativ großes Problem, denke ich.

Jochen

Das halt, ich hab das, auf den kommen wir später noch zurück, vielleicht.

Jochen

Der heißt Simon Willison, der hat für einen Guardian irgendwie vor zehn Jahren ungefähr irgendwie so einen Bereich Datenjournalismus irgendwie da, gab es das schon so, heute ist es ein großes Thema, aber damals hat das irgendwie keinen so richtig interessiert gearbeitet.

Jochen

Und der ist halt eher so, hat was mit Datenbanken da zu tun.

Jochen

Und da gab es schon jemanden, der sich damit beschäftigt hat, also von der Zeitung her, wenn es einen Artikel über irgendein Thema Arbeitslosigkeit oder keine Ahnung, irgendwas wirtschaftliche Themen irgendwie ging, wenn man da Schaubilder und Diagramme reinmachen wollte, wo kommen denn die Daten dafür eigentlich her?

Jochen

Und er kannte irgendwie in allen Institutionen Leute, die ja nach diesen Daten fragen konnte, wusste, wo man die bekommt und so, super.

Jochen

Aber das Problem ist jetzt, also der, also Simon Willison, also der aus der Programmiererecke, wollte halt die Daten auch anders noch zugänglich machen und wollte halt gucken, ob man da nicht übergreifend irgendwelche Anfragen stellen kann und fragte den dann so, wo denn die Daten wären oder wie er die denn speichern würde.

Jochen

Und der sagte so, oh ja, ich habe da hier irgendwie ein paar tausend Excel-Files auf meinem Desktop und da sind die halt drin.

Jochen

Und ich weiß halt, welches in welchen Daten in welchen Fall sind.

Dominik

Da kannst du mal Blätthanken.

Jochen

Und ich glaube, das ist tatsächlich eine Situation, die in vielen Unternehmen so ist oder so.

Jochen

Dass man halt dann Experten hat dafür, für diese Domain.

Dominik

Die Menschen aus dem Archiv.

Jochen

Ja, die aber nicht unbedingt jetzt so Datenbankspezialisten sind und die machen dann halt Excel-Files und tun das irgendwo hin.

Jochen

Aber das funktioniert halt nicht gut, weil man hat halt, man kann darüber jetzt keine übergreifenden Anfragen stellen, dann hat man auch so ein Problem, wenn man mit Leuten zusammenarbeitet.

Jochen

Ja, wie ist das eigentlich, wenn mehrere Leute das jetzt ändern?

Jochen

Dann gibt es auch wieder so komische Strategien wie, naja, man hat das dann irgendwie auf einem Netzwerkshare und dann muss man sich irgendwie Bescheid sagen, wenn man das ändert oder man macht das irgendwie über komisch benannte Dateinamen oder sowas.

Jochen

Das ist natürlich alles total furchtbar.

Jochen

Also man benutzt dann im Grunde zwei Datenbanken, die nicht wirklich dafür geeignet sind, was man da machen möchte, nämlich einmal das Fall-System, um halt so eine Art Versionskontrolle zu machen.

Jochen

Und dann Excel als Datenbank, was halt auch nicht dafür geeignet ist, und dann macht man sich das Leben sehr, sehr schwer.

Jochen

Obwohl es deutlich einfacher sein könnte.

Jochen

Und ja, das sind also aus meiner Perspektive auch so die beiden Dinge, wo man.

Jochen

So leichte Gewinne, die man machen könnte.

Jochen

Also die beiden Themen, die halt vollkommen unterschätzt sind, aus meiner Perspektive sind einmal Versionskontrolle.

Jochen

Also das sehe ich ganz oft, dass halt jetzt, also bei Programmierern, die wissen inzwischen, wie das funktioniert und machen das halt auch.

Jochen

Und bei denen ist halt Verständnis, was jetzt Git ist und wie man das verwendet, irgendwie durchaus angekommen.

Dominik

Einmal bitte den Git Flow, ja.

Jochen

Aber in den meisten anderen Abteilungen, die jetzt nicht, wo es nicht um Programmieren geht, die haben von solchen Dingen noch nie irgendwas gehört.

Dominik

Da nimmt man Tippex und malt halt kurz die Buchstaben, die falsch sind raus und zahlt dann darüber.

Dominik

Wenn man wissen ja, was da vorher stand, dann muss man das Tipac abkropfen.

Jochen

Ja, die wissen halt vielleicht, wie sie ihre Programme bedienen oder so, aber die wissen gar nicht, dass sowas geht und wissen gar nicht, wie das geht und machen dann sehr umständlich das, was ihnen arbeitet, sehr fehleranfällig, die ihnen gibt oder so.

Dominik

Tabelle 1, Tabelle 1 neu, Tabelle 1 neu neu, neu final und ja, jetzt nicht wirklich und allerneueste Version.

Jochen

Also da könnte man mit wenig Aufwand viel erreichen.

Jochen

Und eben auch da, wenn man Daten speichert und halt auch, man hat ja in Excel dann oft nicht nur Daten, sondern man hat dann Daten und Logik, weil man jetzt irgendwelche Reports erzeugt für irgendwie ein Management-Layer oder so.

Jochen

Und dann ist das viel Handarbeit, wo im Grunde man, wenn man jetzt ein bisschen.

Dominik

Habt ihr gerade gehört, das war gerade ein super kurzer kleiner Nebensatz, wenn man kurz irgendwelche Daten erzeugt, so für den Management-Layer sehr schön.

Jochen

Ja, das ist, denke ich, ein Grund, warum viele Leute da so Excel mit irgendwelchen Makros drin oder irgendwelchen Skriptschnipseln drin haben, warum sie das verwenden.

Jochen

Das Problem ist halt, das funktioniert meistens und dann funktioniert es irgendwann nicht mehr oder die Daten ändern sich.

Jochen

Und dann muss man halt irgendwie einen Teil von einem VBA-Skript oder so irgendwie so ein bisschen anpassen.

Jochen

Dann geht was an einer anderen Stelle kaputt.

Jochen

Und dann ist es auch so, dass man oft Sachen von Hand gefixt hat.

Jochen

Also irgendwelche Werte sind halt nicht so, wie sie sein sollen.

Jochen

Und bei Excel klickt man dann da rein und dann ändert man den Wert halt.

Jochen

Und dann weiß man aber nicht, dass man das gemacht hat.

Jochen

Dann kommen jetzt neue Daten rein, die sind wieder falsch und dann muss man es wieder ändern oder es geht halt kaputt oder so.

Jochen

Und das ist einfach so aus einer Programmierersicht nicht so das, was man tun sollte.

Dominik

Okay, man halt damit Stunden um Stunden, um Stunden,

um Stunden.

Jochen

Genau, aus Programmierersicht, das ist so, wenn ich da irgendwie was ändere, dann ist das halt irgendwie Programmlogik und wenn dann neue Daten reinkommen, dann wird die halt genauso angewendet und dann muss ich das halt nur einmal hinschreiben und dann ist es sozusagen für immer irgendwie gelöst.

Jochen

Und ja, es gibt auch ganz in VBA ist natürlich noch so ein extra Problem.

Dominik

Das soll übrigens bald mit Python gehen, habe ich gehört.

Jochen

Ja, ich weiß, dass bei Microsoft gibt es irgendwie so ein, die haben da auch so ein Priorisierungstool sozusagen, ich weiß nicht genau, was das ist.

Jochen

Und ich glaube, das meiste nach Requested Feature ist es, VBA durch Python zu ersetzen.

Jochen

Mit irgendwie tausenden Upvotes.

Jochen

Aber ich glaube definitiv dazu geäußert, ob das irgendwie dann kommt, hat sich da auch noch niemand.

Jochen

Aber das wäre natürlich auch eine interessante Geschichte.

Jochen

Aber man hat auch bei Python dann immer noch das Problem, was ist, was man halt wahrscheinlich nicht machen können wird, ist sowas wie mit Pip irgendwie Dinge nachinstallieren oder so, selbst wenn es wenn Python jetzt die VBA ersetzen würde.

Jochen

Gut, man hätte schon einen Vorteil dadurch, dass die Standardbibliothek von Python sehr viel mächtiger ist, als das, was es VBA kann, aber es ist halt immer noch nicht, also es gibt diverse Probleme, die noch gelöst werden müssten, damit das Ganze nicht smooth ist.

Jochen

Und das Grundproblem ist natürlich, dass Excel das vollkommen ungeeignete Tool ist für vieles, was da in dem Bereich gemacht wird.

Jochen

Ja, aber genau.

Jochen

Also, also genau, also eigentlich wäre das, was viele Leute damit machen, die werden viel besser bedient, wenn sie halt Python nehmen würden und eine relationale Datenbank.

Jochen

Und weil die eben diese ganzen Geschichten auch löst.

Jochen

Da gibt es dann halt, wenn man mehrere Leute drauf zugreifen und Dinge ändern, dann sorgt das auch die Datenbank dafür, oder das Datenbankmanagementsystem, dass da nichts schief geht, dass alle Leute immer die gleichen Daten sehen, jedenfalls innerhalb von einer Transaktion und so.

Jochen

Und da gibt es auch die ganze Zugriffskontrolle und all das ist alles, alles schon fertig implementiert.

Jochen

Und ja, das ist halt so das, was Leute im Grunde verstehen, wenn man von Datenbanken spricht, denke ich.

Jochen

Aber es gibt halt auch noch eine ganze Menge anderer Datenbanken und dass sich relationale Datenbanken so durchgesetzt haben, ist auch aus meiner Perspektive ein Stück weit Glück oder hängt halt an der Geschichte von einzelnen Firmen.

Jochen

Also man hätte sich auch durchaus vorstellen können, dass sie andere Paradigmen durchgesetzt hätten, haben sie aber irgendwie nicht.

Jochen

Und jetzt sind halt so relationale Datenbanken das, was alle irgendwie verwenden.

Jochen

Aber es ist auch gar nicht so ein schlechter Ansatz.

Jochen

Insofern kann man damit eigentlich ganz gut leben.

Jochen

Aber nur mal so um.

Dominik

Der Vollständigkeit halber, ja.

Jochen

Der Vollständigkeit halber, um mal zu sagen, was es sonst noch alles so gibt.

Jochen

Es gibt halt Dokumentendatenbanken, ja, gibt es auch schon ganz lange.

Jochen

Lotus Notes ist ja so ein Beispiel für früher Microsoft auch ganz populär.

Jochen

CouchDB, MongoDB, die fallen auch in diesen Dokumentdatenbankbereich rein, lösen halt so ein bisschen unterschiedliche Probleme.

Jochen

CouchDB löst so ein bisschen das Problem, dass ich nicht unbedingt nicht in einen zentralen Master immer reinschreiben will, weil der halt auch weg sein kann.

Jochen

Wenn ich zum Beispiel offline bin oder so, dann kann ich halt nicht da reinschreiben, sondern muss dann halt eventuell erst lokal schreiben und dann irgendwie die Daten synchronisieren hinterher.

Jochen

Und das macht CouchDB sehr schlau.

Jochen

Verwendet tatsächlich auch einen Algorithmus, der aus dem Lotus-Notes-Dings-Projekt kommt.

Jochen

Es gibt Key-Value-Stores, wo man einfach nur irgendeinen Hash irgendwie, also man kann sich das vorstellen wie ein Python dickt, wo man halt irgendwelche Keys hat und dann hat man irgendwelche Werte, die man dann zurückbekommt, wenn man den Key da hinschickt.

Jochen

Darunter fallen so Sachen wie Redis oder Memcache, die oder so oft zum Cachen verwendet, aber manchmal können sie auch kompliziertere Sachen oder weiter strukturierte Daten.

Jochen

BerkeleyDB war lange ganz groß, wird heute gar nicht mehr so sehr verwendet.

Jochen

Ja, aber auch sowas wie Amazon Dynamo oder so fällt da auch drunter.

Jochen

Und dann gibt es halt noch so Spaltenorientierte Datenbanken, wobei ich auch da sagen würde, es gibt zwei unterschiedliche Arten, aber halt sowas wie Big Table, wo Google einen Index drin speichert oder das entsprechende Hadoop-Äquivalent oder das Äquivalent aus dem Hadoop-Ökosystem Edgebase.

Jochen

Die Dinger sind halt dafür gedacht, gigantische Datenmengen irgendwie zu speichern und das halt machen sie dann irgendwie eher so spaltenbasiert.

Jochen

Cassandra, Apache Cassandra ist auch so ein Projekt, das es genauso macht.

Jochen

Dann ein komplett anderes Paradigma sind Graphendatenbanken, wo man Daten eben nicht in Tabellen speichert, sondern man speichert eher Knoten und Kanten.

Jochen

Und die Relationen zwischen den Daten sind halt nicht dadurch dargestellt, dass man jetzt halt irgendwie Zeilen in einer Tabelle hat, sondern dadurch, dass man halt beliebige Beziehungen im Grunde zwischen Knoten irgendwie hat, ist jetzt ein bisschen abstrakt, weiß ich auch gar nicht genau, wie ich das erklären kann.

Jochen

Vielleicht kann ich das, kann man das nachher nochmal im praktischen Beispiel ein bisschen besser erlauben.

Jochen

Genau, aber das ist halt so eine ganz andere Art von Datenbanken, die aber auch, also da würde ich sagen, das hätte auch sich anstelle von relationalen Datenbanken durchsetzen können.

Jochen

Und genau, auch das, was mit dem Semantic Web, vielleicht haben manche Leute davon schon gehört, so RDF, Tupelstores, das ist auch alles im Grunde Graphendatenbanken.

Dominik

Okay, Semantic Web, ja, machen wir später.

Jochen

Und dann gibt es natürlich noch so wirklich anwendungsspezifische Datenbanken, sowas wie Volltext-Suchmaschinen, also Volltext-Indizes oder für Zeitreihen gibt es auch spezialisierte Geschichten Influx-DB oder Timescale-DB.

Jochen

Oder halt sowieso für, du hast halt ein bestimmtes Problem wie, du möchtest dieses, bei Google sieht man halt, Google Suggest hieß das Feature.

Jochen

Wenn man Google Query eingibt, dann werden einem so Vorschläge gemacht.

Jochen

Dafür braucht man halt eine spezielle Art, das zu inizieren, Suffix-Freeze.

Jochen

Und das kann ja, ja, dafür gibt es dann auch wieder spezielle Server, mit denen man das machen kann und so.

Jochen

Und das wäre jetzt etwas, was man sonst halt nicht so braucht.

Jochen

Es gibt halt für bestimmte Anwendungsfälle gibt es sowas halt, aber ja, ist jetzt manchmal sind solche Funktionen auch in verbreiteren Datenbanken enthalten, aber es gibt halt auch mal spezialisierte Geschichten dafür.

Jochen

Ja.

Dominik

Vielleicht die ganzen Basissachen werden noch komplett nicht kurz erwähnt.

Dominik

Ah, okay.

Dominik

So, keine Ahnung, MySQL oder Postgres.

Jochen

Achso, das sind, ja genau, das sind Beispiele für relationale Datenbanken, ja, MySQL, Postgres, das wären jetzt die Open Source Vertreter, Oracle und MSSQL-Server, Cybase, das werden so die kommerziellen Geschichten, DB2 von IBM, ja.

Jochen

Oder zur Historie, im Grunde die, nachdem dieses Paper irgendwie, das übrigens sollte man die Show Nutzes packen, das ist sehr empfehlenswert, das sich mal zu lesen von Hedcott.

Jochen

Der hat damals bei IBM gearbeitet.

Jochen

Und da ist ein System daraus entstanden, das nennt sich System R.

Jochen

Das haben irgendwie so ein paar Leute bei IBM geschrieben.

Jochen

Und daraus ist halt die W2 auch von IBM entstanden, irgendwann, aber halt Oracle bezieht sich auch darauf, glaube ich.

Jochen

Ich weiß jetzt aber nicht, wie die Verbindung zu Oracle ist.

Jochen

Und dann gab es halt auch Leute in Berkeley, die versucht haben, das zu implementieren, das Paper, und dabei ist was rausgekommen namens Ingress.

Jochen

Michael Stonebreaker war das damals und das war am Anfang noch gar keine Datenbank für beliebige Daten, sondern es war für Bilder irgendwie.

Jochen

Und dann ist das Ganze zu Postgres geworden und wurde dann zu einer normalen, relationalen Datenbank sozusagen sozusagen.

Jochen

Und also das ist auch faszinierend.

Jochen

Also dieses ganze Postgres-Projekt ist der Wahnsinn eigentlich.

Jochen

Das hat halt irgendwie im Mitte der 80er ist das gestartet.

Jochen

Oder halt, wenn man Ingress dazu zählt, noch früher.

Jochen

Und ist jetzt über 30 Jahre wahrscheinlich auch einen Buckel und ist immer noch top.

Jochen

State of the art immer noch dabei.

Jochen

Es kommen immer noch tolle Sachen dazu.

Jochen

Ist wahrscheinlich auch so die, sie nennen sich selber irgendwie die, ich weiß gar nicht, wie ich das übersetzen soll, advanteste, die fortschrittlichste Open Source-Datenbank, ja.

Jochen

Gut, Oracle und so hat wahrscheinlich noch ein bisschen mehr Funktionen, aber ja, tatsächlich wird meistens aber wahrscheinlich aus Kostengründen, tatsächlich jetzt so im Internetumfeld irgendwie dann meistens werden so Open Source-Datenbanken verwendet.

Jochen

Ja, ich habe schon mal gesehen, dass Leute Oracle verwenden, aber das ist eher selten.

Jochen

Jetzt so als Backend für Webseiten verwendet man normales.

Jochen

Nicht Oracle, das ist halt auch einfach viel zu teuer.

Jochen

Oder MSSQL-Server, doch, das gibt es tatsächlich Leute, die das als Backend für Webseiten verwenden.

Jochen

Ein Beispiel einer populären Seite, die halt auf MSSQL-Server läuft, ist Stack Overflow.

Jochen

Das ist auch faszinierend.

Jochen

Ich meine, einer der war, ich weiß nicht, ob es der Gründer selber war, der war auch Produktmanager bei Microsoft, glaube ich, insofern.

Jochen

Also die machen viel auf dem Microsoft Stack und holen da unglaubliche Sachen raus.

Jochen

Also die haben irgendwie ein halbes Rack oder, also ich das letzte Mal, gut, das ist auch schon lange her, dass ich da irgendwie Artikel zu gelesen habe, aber dass ich das letzte Mal das gesehen habe, war Stack Overflow tatsächlich unter den Top Ten der trafficstarksten Webseiten weltweit und die haben dafür Hardware, war irgendwie so ein halbes Rack oder so.

Jochen

Und das ist natürlich schon extrem beeindruckend.

Jochen

Und das ist überhaupt sowas, was halt wahrscheinlich viele Leute nicht wissen, die jetzt nicht so viel Erfahrung haben mit Datenbanken, die können echt wahnsinnig viele Dinge tun gleichzeitig und so.

Jochen

Also man kriegt aus so einer ordentlich konfigurierten und getunten relationalen Datenbank schon so ein paar, mindestens ein paar tausend, vielleicht auch ein paar 10.000 Requests oder Statements pro Sekunde raus, die die halt verarbeiten können.

Jochen

Und dann kann man natürlich eine Menge machen.

Jochen

Also ja, also Vorausgesetzt ist ganz krampfst den Hauptspeicher.

Jochen

Man macht keine Dinge, die das irgendwie langsam machen.

Jochen

Also es ist halt dann auch nicht so einfach, das zu optimieren, aber ja, genau.

Jochen

Und das ist halt auch der, dieser Bereich der relationalen Datenbank ist halt also der größte Datenbankbereich eigentlich.

Jochen

Ja, vielleicht kommen wir dann, wollen wir zu dem praktischen Beispiel.

Dominik

Genau, super, wie macht man das jetzt alles und wie baut man das auf und warum und was kann man damit so Schönes machen und was für Probleme könnten wir darüber stolpern und sowas?

Jochen

Ja, dann spannend sein.

Jochen

Nehmen wir doch mal an, wir wollen jetzt Amazon nachbauen.

Dominik

Wir haben einen kleinen Buchhandel in der Garage.

Jochen

Wir überlegen jetzt uns jetzt so, ah

Dominik

liegen jetzt ganz viele Bücher auf dem Boden und dann will irgendjemand bestellen, dann muss dann irgendjemand in die Gerate laufen, gucken, wie ist denn jetzt der Titel, habe ich den?

Dominik

Dann liegt der ein Buch unterm anderen, das wäre natürlich doof, wenn man erstmal lange suchen muss.

Dominik

Deswegen haben wir jetzt überlegt, ja, pass auf, wir schreiben das Ganze jetzt in eine Datenbank.

Dominik

Wie fangen wir jetzt mal an?

Dominik

Vielleicht reden wir kurz über das Schema, wie man sowas aufbaut, nochmal kurz.

Genau.

Jochen

Also man würde jetzt zum Beispiel eben die Metainformationen über diese Bücher, also sowas wie Titel, ISBN-Preis und so würde man halt in eine Datenbank schreiben.

Dominik

Durchschnittliche Anzahl von Buchstaben pro Seite.

Jochen

Vielleicht, ja, was auch immer man da.

Jochen

Man würde das halt in eine Tabelle schreiben.

Jochen

Aber man würde jetzt möglicherweise schon nicht den Autor, ne?

Jochen

Denn wenn man jetzt den Autor, also den Namen des Autors mit in diese Tabelle reinschreibt, dann hat man unter Umständen ein Problem, nämlich wenn jetzt halt.

Dominik

Der Autor sich umgenennt, weil er heiratet

Jochen

oder so?

Jochen

Ja, genau.

Jochen

Heiratet oder sonst irgendwie seinen Namen ändert, dann müsste man ja, dann kann man natürlich irgendwie alle Zeilen, in denen der Name drinsteht, die ändern.

Jochen

Aber man kann ja auch Pech haben und wenn das jemand von Hand macht, dann ändert er halt das nur, weil er davon gehört hat, dass es jetzt für dieses Buch geändert werden soll, das nur in einer Zeile und lässt die anderen halt weg und dann hat man halt.

Dominik

Wir könnten Suche und Ersätze machen und dann machen wir sowas, da machen wir für jedes Jahr, das wir Bestellung habe oder jeden Monat eine neue Datenbank, eine neue Tabelle.

Dominik

Und dann müssten wir einmal nach drei Jahren oder sowas 36 verschiedene Dateien öffnen, immer Suche und Ersätze ausführen und dann den Namen ändern.

Ja, super, oder nicht?

Jochen

Ich könnte sein, dass das nah dran ist an dem, was viele Leute tatsächlich machen, aber das kann man auch eleganter tun in der Datenbank.

Jochen

Und dann hätte man möglicherweise nur einen sogenannten Fremdschlüssel in der Spalte Autor, in der Büchertabelle.

Jochen

Und dann würde man den Namen des Autors halt von der Autortabelle ändern und dann wäre das automatisch in allen Zeilen, allen Büchern oder allen Zeilen der Büchertabelle, in denen das referenziert wird, würde das automatisch geändert werden.

Dominik

Und dann brauchen wir ja noch eine andere Tabelle, Autorix, wo dann alle Autorinnen drin stehen.

Jochen

Ja, wäre auch eine Möglichkeit, genau.

Jochen

Und ich überlege gerade, das ist jetzt natürlich, also Autoren ein Beispiel, anderes Beispiel wäre User, die jetzt auf der Webseite irgendwas einkaufen wollen oder so.

Jochen

Da gibt es, da würde man in der Bestellung halt auch nicht den User selber irgendwie in jede Bestellung schreiben, sondern halt irgendwie die ID von dem User, der irgendwas eingekauft hat.

Jochen

Und im Grunde, also ja, das heißt Datenbanknormalisierung, wenn man jetzt dafür sorgt, erinnert so ein bisschen an, wenn man Software schreibt, nennt sich das Dry.

Jochen

So Don't repeat yourself.

Jochen

Also wenn man Software schreibt, sollte man auch Funktionalität, die man an mehreren Stellen verwendet, halt nicht an mehreren Stellen implementiert haben, weil wenn man das an einer Stelle ändert und jetzt ist halt an einer anderen, dann hat man halt ja einmal ist es dann inkonsistent, das halt.

Jochen

Und ja, man hat halt auch die Gefahr, dass man Dinge, die man einmal gefixt hat, halt dann nochmal auftauchen.

Dominik

Das ist halt bestimmt schon ein Tumor passiert, oder?

Dominik

Also mir hat es früher ständig passiert und dann ist mir irgendwann aufgefallen, oh, ich mache eine Funktion und dann.

Jochen

Dann macht man die Funktion und dann machen einen Test und dann ist es halt erledigt sozusagen.

Jochen

Also sollte man halt möglichst versuchen, Dinge, die man, also Logik, die irgendwo ist, halt immer nur einmal irgendwo stehen zu haben.

Jochen

Ist natürlich manchmal nicht so ganz einfach.

Jochen

Und das ist bei Datenbanken halt auch nicht, weil das beißt sich so ein bisschen mit einer anderen Anforderungen, die man hat, wenn es halt schnell sein soll, dann ist das manchmal etwas schwierig, weil relationale Datenbanken, dann, wenn man halt viele Tabellen miteinander verknüpft, man dann das halt joinen.

Jochen

Das heißt, man kann halt anhand von diesen Verzweigungs-, also Fremdschlüsseldings, kann man halt Tabellen aneinander ketten.

Jochen

Ja, verketten.

Jochen

Man kann sich das vorstellen, man legt die halt sozusagen nebeneinander.

Jochen

Und sodass halt die Straße auf dem Schlüssel übereinander liegt, ja, sozusagen, wenn man das mit vielen macht, dann werden die Abfragen langsam.

Dominik

So ein bisschen wie an so einem Spielautomaten.

Dominik

Wenn ihr so einen einarmigen Banditen habt, dann zieht ihr einmal dran, da sind ja so drei verschiedene.

Dominik

Und wenn die dann parallel sind und alles zeigt, gewinnen, dann habt ihr den Schlüssel, den braucht.

Jochen

Dann hat man die Zeilart halt von dem Schlüssel irgendwie zusammengeführt, ja, genau.

Jochen

Und ja, also das ist halt auch, wie man ein Schema designt und so, ist halt so ein bisschen eine Kunst und man braucht Erfahrung dafür.

Jochen

Aber man kann halt sagen, ja, man sollte das so ein bisschen normalisieren.

Jochen

Also meistens es gibt dann ganz viele unterschiedliche Normalformen und meistens die Formen, die man dann so hat, ist so irgendwas zwischen dritter und vierter Normalform oder so, so zwischen dritter und Boyscott-Normalform oder sowas.

Jochen

Aber ich möchte gar nicht so sehr on detail drauf eingehen, was jetzt der Unterschied zwischen den Normalformen sind.

Jochen

Irgendwie kann man sich auch durchlesen auf Wikipedia oder so.

Jochen

Braucht man auch im Alltag eigentlich gar nicht zu wissen, sondern da hat man dann halt irgendwann ein Gefühl dafür, wenn ein Datenbankschema okay aussieht.

Jochen

Und dann macht man das halt so.

Dominik

Das heißt, ich gehe jetzt tatsächlich erstmal hin und nehme ein Whiteboard, einen Zettel und schreibe mir auf, wie die Daten aussehen sollen.

Ja, ja, tatsächlich.

Jochen

Also wenn ich irgendwie Datenbank designe für irgendein Projekt, dann nehme ich mir einen Zettel und fange an, Entity Relationship-Diagramme zu malen.

So nennt man die.

Dominik

Was passiert denn später, wenn ich während dem Projekt merke, hey, ich habe aber die und die Daten vergessen?

Dominik

Bastle ich da einfach irgendwo rein?

Dominik

Ergänzt sich dann dieses Schema einfach?

Jochen

Ja, das kommt darauf an, was das dann für eine Änderung ist.

Jochen

Also das ist auch so ein Problem.

Jochen

Man kann man Datenbanken nicht so richtig super ändern.

Jochen

Also relationale Datenbanken, das Schema lässt sich schon ändern, aber das ist halt so ein bisschen knifflig und wenn man das tut, muss man halt irgendwie aufpassen.

Dominik

Dass das alte Datenbanken noch kompatibel sind oder sowas, oder?

Jochen

Ja, dass man das so ändert, dass nicht irgendwelche Inkonsistenzen entstehen und auch das halt.

Jochen

Wie ändert

Dominik

sich das bei unserem Beispielbeispielsweise?

Jochen

Also wenn ich mir jetzt überlege, ich brauche jetzt eine neue Spalte in dieser Büchertabelle, ja, was ich nicht, es gibt jetzt nicht nur die E-Spieler.

Dominik

Jemand oder das Genre oder sowas, jeder sammelt Seefahrerbücher.

Jochen

Eine Kategorie, da würde ich halt tatsächlich, also das, was man sich zuerst überlegen könnte, ist, man macht einfach ein Textfeld oder Charfield, das halt den Kategorienamen enthält.

Jochen

Und dann hat man halt das Problem, okay, dann stellt man fest, oder am besten noch, okay, fangen wir so an.

Jochen

Man schreibt halt, man nimmt Tags statt Kategorie und sagt jetzt, okay, alle Tags, also weiß ich nicht, Belletristik, Komma, Seefahrerroman oder Komma, schreibt man jetzt Komma separiert halt in eine Spalte rein.

Jochen

Dann hat man damit die erste Normalform verletzt und man muss sich dann im nächsten Schritt, wenn man das halt weiter normalisiert, überlegen, okay, nee, das geht nicht, darf ich so nicht machen.

Jochen

Also der eigentliche Grund, worum man das nicht machen sollte, ist halt, dass es diverse Anfragen halt schwierig macht und dass man das auch sehr schlecht ändern kann und dass wenn man was ändern kann man und Sachen kaputt machen, weil Inkonsistenzen entstehen können und so.

Jochen

Dann zieht man erstmal diese Dinge auseinander und sagt halt, okay, nicht in einer Spalte mehrere Tags reinschreiben, sondern dann hätte man sozusagen eine N-2M-Relation, also nicht nur, wo ein Fremdschlüssel in einer Tabelle zu einem Fremdschlüssel in der anderen Tabelle passt, sondern man hat dazwischen eine Link-Tabelle.

Jochen

Man hat jetzt einmal Tags als Relation und einmal halt die Bücher als Relation oder als Tabellen halt.

Jochen

Und dazwischen hat man jetzt noch eine Link-Tabelle zwischen oder eine Link-Relation zwischen Büchern und Tags.

Jochen

Sodass man mehrere, also für jedes Tag hätte man dann sozusagen einen Eintrag in der Link-Tabelle, wo da drin steht, ID von diesem Buch, IDs von diesem Tag.

Jochen

Ja, und das ist dann halt sozusagen die Verbindung zwischen den beiden Tabellen.

Jochen

Also man halt halt eine Tabelle mit allen Tags, das ist möglicherweise gar nicht so lang, es gibt vielleicht nur tausend Tags oder so.

Jochen

Und vielleicht ein paar Millionen Bücher und jetzt hat man halt eine Link-Tabelle, die wahrscheinlich dann irgendwie ein paar zehn Millionen Bücher, ein paar zehn Millionen Zeilen oder so lang ist, wo halt jedem Buch ein paar Texts zugewiesen werden.

Jochen

Und dann ist es alles wieder schön in einer Normalform und das kann man dann auch wieder nett abfragen.

Jochen

Ja.

Jochen

Wenn man dann aber quasi diesen Tags halt, wenn man diese Tags jetzt aber betrachtet als Blätter in einem Kategorienbaum oder so, dann wird es wieder so ein bisschen schwierig, weil dann versucht man etwas in einer relationalen Datenbank abzuspeichern, was gar nicht so gut geht, nämlich irgendwie so Baumstrukturen oder Graphenstrukturen.

Jochen

Das kann man dann auch machen und wenn es nicht viele Tags oder Kategorien sind, dann würde man versuchen, das wahrscheinlich nested Sets nehmen.

Jochen

Das ist, äh, kann man sich mal angucken, wenn das interessiert, wie das, dann kann man dann halt auch per SQL-Abfragen machen, wie, ja, welche Bücher liegen denn jetzt unterhalb von dieser Kategorie?

Jochen

Was man macht, ist, man schreibt an jede, man hat so einen Kategorienbaum und man schreibt dann an jedes Element in dieser hierarchischen Struktur, den traversiert man einmal First Order, ich weiß gar nicht genau.

Jochen

Also beim Durchlaufen nummeriert man jeden Knoten, an dem man vorbeiläuft, durch.

Jochen

Und man hat eine Spalte links und eine Spalte rechts.

Jochen

Und links, wenn man links an den Sachen vorbeiläuft im Baum, schreibt man halt die Nummern links rein und dann rechts, wenn man rechts dran vorbeiläuft und dann kann man so Sachen, Rangeabfragen dazwischen machen und magischerweise führt das dann dazu, dass man so Subbäume rausselecten kann und so.

Jochen

Aber das ist dann halt schon so wirklich für Fortgeschrittene.

Jochen

Und im Endeffekt, wenn man jetzt große Grafenstrukturen hat oder Bäume, dann wäre es wahrscheinlich besser, das gar nicht mehr in einer relationalen Datenbank zu machen, sondern das irgendwie in einen anderen Service zu packen.

Jochen

Ja, und da sind wir schon, boah, das ging aber schnell, da sind wir schon an Grenzen, von denen man so mit den relationalen Datenbanken gut machen kann.

Dominik

Ja, also das Dorsch aus der Garage sind mittlerweile rausgewachsen.

Dominik

Also wir können die ganzen Bücher deine Garage nicht mehr lagern.

Jochen

Nee, nee, nee, Moment, Moment, Moment, also was eigentlich auch, nee, wir sind auch nicht, ähm, wir sind auch mal bei der ganz normalen, einfachen Datenbank, würde ich sagen.

Jochen

Ja, also das, wofür wir die nämlich auch brauchen, die Datenbank, sind halt so Transaktionenprozessen, wenn jemand was kauft zum Beispiel.

Dominik

Oh, jemand hat bei uns eine E-Mail geschickt und hat gesagt, hey, habt ihr das Buch da und wir gucken nach, sagen ja, können wir dir schicken.

Dominik

Dann wird er an die und die Adresse und so, dann machen wir so ein Paket, machen da so ein Stempel drauf und sagen, hey, hier bitte

Jochen

dein Buch.

Jochen

Ja, und dafür, dass das gut funktioniert, dann müssen halt auch einige Sachen für gewährleistet sein.

Jochen

Und das ist halt zum Beispiel so etwas wie, naja, wenn ich halt ein Buch kaufe, dann muss ich irgendwie sicherstellen, dass es im Lager ist.

Jochen

Das heißt, wenn jetzt ich ein Buch verschicke, dann sage ich in meiner Datenbank irgendwie so, okay, jetzt ist davon eins weniger da im Lager.

Jochen

Aber wenn jetzt auf der Webseite jemand sagt, ich würde dieses Buch einkaufen, dann muss halt gewährleistet sein, dass das halt noch da ist.

Jochen

Das heißt, ich brauche halt eine zentrale Stelle, in der die Wahrheit.

Dominik

Hier fällt direkt wieder eins der Probleme ein.

Okay.

Dominik

Ja, zwei Leute wollen das gleiche Buch haben, was auch noch einmal da ist und die wollen dann gleichzeitig eins kaufen.

Jochen

Genau, das ist halt, das ist halt eine problematische Geschichte.

Jochen

Aber wenn man jetzt eine Datenbank hat, die die sozusagen Wahrheit kennt und alle nur auf die zugreifen, dann kann im Grunde nichts passieren.

Jochen

Also da können keine Konflikte auftreten, weil in dem Moment, wo jemand auf kaufen klickt auf der Webseite und es noch ein Buch da war,

Dominik

also die Frage ist halt jetzt, was man macht, wenn viele Kunden sich immer so ein Buch angucken, das in ihren Warenkorb reintun, weil sie es kaufen wollen, aber 90 Prozent dieser Kunden einfach gar nicht am Ende kaufen, sondern irgendwie wieder abspringen, weil die dann sagen, naja, doch nicht.

Dominik

Und dann hätten die es ja alle sich bei sich in den Warenkorb reingelegt und wenn nur noch eins da ist, vielleicht hätte der zweite direkt angezeigt bekommen, gibt gar nichts, der ihn wirklich gekauft hätte.

Jochen

Also was natürlich passieren kann ist, dass dir angezeigt wird, es gibt noch ein Buch, obwohl es keins mehr gibt.

Jochen

Weil du hast halt, du sitzt halt vor der Webseite und machst nichts, halt

Dominik

in den Luft.

Dominik

Oh, leider war jemand schneller und hat vor zwei Sekunden das Gedanken.

Jochen

Sobald du drauf drückst, in dem Moment, wo sozusagen diese Bestelltransaktion gestartet wird und dann in der Datenbank aber die Bedingung, es muss mindestens eins im Lager sein, damit diese Beschaltung ausgeführt werden kann, nicht mehr erfüllt ist und dieser Constraint wird verletzt, dann sagt die Datenbank so, äh, geht nicht.

Jochen

Und dann kann man dem User eine Fehlermeldung anzeigen und sagen so, oh ja, tut uns leid, das hat nicht geklappt.

Jochen

Kein Buch mehr auf Lager.

Jochen

Das ist ja im Grunde okay.

Ja, gerade so.

Jochen

Ja, also was halt, was halt blöd wäre, ist, wenn man dem User sagt, okay, du hast das jetzt bestellt, aber sagt am Schluss, Edgy Badge, du kriegst doch kein Buch, weil war keins mehr da.

Jochen

Das ist halt so ein bisschen blöder.

Jochen

Ist aber eine Situation, die dann später, wenn wir halt nicht mehr auf einer Datenbank bleiben können, weil das einfach nicht mehr, nicht mehr von der Skalierung her nicht mehr klappen kann irgendwann, dann kommen wir in solche Situationen rein und da müssen wir uns dann überlegen, wie wir damit umgehen.

Jochen

Aber solange das alles auf einer Datenbank läuft, ist das, ist da im Grunde kein Problem, kann man das sauber lösen.

Dominik

Ich hatte ja so mal es war, ich hatte das vielleicht schon mal kurz erwähnt, bei einer Bank.

Dominik

Ich habe eine Transaktion gemacht, da hat dann die Bank gesagt, ja, ist wunderbar, deine Überweisung wurde vernünftig ausgeführt.

Dominik

Und dann zwei Wochen später kriegte ich dann so eine Mahnung und dann habe ich nochmal aufs Konto geguckt und die Transaktion war weg.

Dominik

War nicht da.

Dominik

Warum habe ich dann da angerufen und haben gesagt, oh, ja, also in irgendeiner Logfile stand das dann wohl noch drin, dass ich so eine Transaktion eigentlich gemacht hatte, die aber nicht ausgeführt worden war.

Dominik

Das war ein bisschen blöd dann für mich, aber ja, scheint wohl auch mal so größeren Männern.

Jochen

Ja, möglicherweise war das eben eine Bank und das ist tatsächlich bis, ich weiß nicht, vor gar nicht allzu langer Zeit tatsächlich üblich gewesen, wo dann die Transaktionen nicht in einer relationalen Datenbank direkt ausgeführt werden, sondern wo es dann Batch-Prozessing gibt nachts.

Jochen

Also die Sparkassen haben das ihnen lange gemacht.

Dominik

Schmeißt dann manuell die ausgedruckten Briefchen ins Überweisungs.

Jochen

Lochkarten, ja.

Jochen

Fährt jemand mit den Lochkarten dahin und dann kommen die in so einen Laser und dann werden die da durch.

Jochen

Und vielleicht, wenn da eine Lochkarte rausfällt, dann ist halt eine Transaktion weg.

Jochen

Nicht so gut.

Jochen

Ja, aber kann, sowas kann tatsächlich passieren und das ist natürlich etwas, was er gerade bei der Bank eigentlich, wo man sich denkt, na, das sollte eigentlich nicht.

Jochen

Aber ja, aber wenn man ein sauberes, relationales Datenbanksystem verwendet, dann kann das eigentlich nicht, oder sagen wir mal so, das bietet einem Lösungen für dieses Problem.

Jochen

Und im Grunde, wenn das Ding sagt, ja, die Transaktion ist durch, dann hat das auch funktioniert.

Jochen

Man kann sich auch drauf verlassen.

Jochen

Engler und auch davon an, welche Daten man verwendet.

Jochen

Es gibt halt welche, die nicht so richtig alle Features unterstützen, die man dafür braucht.

Jochen

Also zum Beispiel, was man eigentlich dafür braucht, damit das ordentlich funktioniert, ist, man braucht halt Isolation zwischen unterschiedlichen Transaktionen.

Jochen

Also Transaktionen heißt eigentlich nur, dass man mehrere Schritte, die man ausführt, irgendwie zusammenbündelt und dann halt entweder alle funktionieren oder keiner.

Jochen

Ja, und das wäre halt genauso ein Fall wie, ich kaufe ein Buch, ist halt ein Ding in der Datenbank, müssen jetzt mehrere Sachen passieren.

Jochen

Da muss halt irgendwie diese Bestellung erzeugt werden, dann muss irgendwie aus dem Lagerstand irgendwie rausgelöscht werden, muss halt der Lagerbestand um eins reduziert werden und so.

Jochen

Und das sind halt mehrere Statements, die ausgeführt werden.

Jochen

Und jetzt müsste halt, wenn jemand anders in der Zeit das gekauft hat und es keine Bücher mehr, keins dieser Bücher mehr auf Lager gibt, müsste halt dann, nachdem der eine Teil der Transaktion, nämlich das Reduzieren des Lagerbestandes von diesem Buch nicht mehr funktioniert, müsste halt auch das andere, nämlich das Erzeugen der Bestellung auch fehlschlagen und dann halt eine Fehlermeldung zurückkommen.

Jochen

Dann ist es halt sauber.

Jochen

Wenn ich jetzt ein System habe, das das nicht macht und ich erzeuge die Bestellung, habe jetzt in meiner Bestellung-Tabelle das Ding erzeugt, sag jetzt in der Lagerstandstabelle so dieses Buch eins weniger und dann sag das, hier habe ich ein Constraint auf, es darf nicht weniger als null werden, also minus eins Bücher ist schwer, das funktioniert irgendwie nicht so richtig, dann sollte, dann, und es dann knallt, dann kann das natürlich, wenn ich jetzt ein System habe, das ist nicht, das kann eine Transaktion kann, dann hätte ich jetzt die Bestellung zwar immer noch da und aber.

Dominik

Was ist denn jetzt als Beispiel, wenn ich jetzt sowas habe wie minus ein Buch und ich möchte jetzt einfach, dass, wenn minus ein Buch ist, dass das nachbestellt wird von dem Händler um die Ecke.

Dominik

Also der hat noch eine Garage und die Mann ist noch ein Händler, der hat auch so Bücher und vielleicht hat der eins da und dann sage ich einfach, ja, ich muss das irgendwo anders herbekommen.

Dominik

Könnte ich ja auch vorstellen.

Jochen

Kann man auch machen, müsste dann, ja, das hängt dann vom System ab, was die Logik dann macht.

Jochen

Man könnte ja sagen, okay, die Bestellung wird trotzdem ausgeführt, dafür wird dann aber das.

Oder das

Dominik

Buch wird gedruckt oder sowas.

Jochen

Wann das, ja genau, nochmal produziert.

Jochen

Aber dann verändert sich möglicherweise das Ziel dafür, wann das halt ausgeliefert wird.

Jochen

Oder so, ne?

Jochen

Und das halt dann, je nachdem, wie das System funktioniert, kann man das machen.

Dominik

Okay, also

Dominik

ich habe am Anfang mir so ein Schema ausgedacht, wo dann halt drin steht, was ich überhaupt alles machen will, machen kann.

Dominik

Und wenn mir irgendwelche neuen Dinge einfallen oder so, dann muss ich kurz überlegen, was ich an meinem Schema ändere, aber das am besten mache ich das Schema am Anfang schon so fertig, vollständig, dass das unproblematischer geht.

Jochen

Das ist halt, das ist ein bisschen ein Problem.

Jochen

Man sollte ein Schema schon von Anfang an halbweg so designen, dass es halt passt.

Jochen

Es ist später nicht mehr so ganz einfach, das zu ändern.

Jochen

Oder kann das natürlich ändern, aber ist auf jeden Fall.

Nee, aber

Dominik

es hängt auch ein bisschen vom Geschäftsmodell ab, ne?

Dominik

Wenn euch jetzt auf einmal merke ich, so oh, ich verkaufe jetzt vielleicht gar keine Bücher mehr, sondern weiß nicht, komplizitere Produkte oder sowas, die noch einen anderen Aufwand haben, jetzt nicht nur getaggt werden sollen, sondern wo noch mehr Metainformationen drin sind, irgendwelche anderen Snippels, also der Buchtext vielleicht noch oder andere Informationen, die dazugehören oder so.

Ja.

Dominik

Also ich kann ja nicht jedes Mal an einer neue Darkmann anfangen, sondern ich muss ja auch gucken, dass sie irgendwie mitskaliert.

Jochen

Ja, aber das sind wirklich schwierige Probleme.

Jochen

Das ist ein bisschen unintuitiv, dass das so knifflig ist, aber es ist leider so.

Jochen

Ein wirklich lustiges Beispiel aus der Praxis.

Jochen

Das zeigt, dass es halt nicht so einfach ist.

Jochen

Möglicherweise finde ich iTunes oder der App Store.

Jochen

Und der App Store war am Anfang, also man hat den nicht neu entwickelt, sondern das war, man hat den, also über iTunes konnte Apple ja schon immer irgendwie so Musik verkaufen.

Jochen

Das hat auch recht gut funktioniert.

Jochen

Oder halt deutlich früher, als es jetzt das iPhone gab und einen App Store.

Jochen

Und dann sollte es halt dieses App Store-Feature geben.

Jochen

Und dann haben sie halt einfach ihr iTunes-Song-Verkauf-Ding genommen und das halt einfach nur gesagt, okay, das sind jetzt keine Songs, sondern das sind Apps.

Jochen

Was halt dazu führt, dass bis heute, und jetzt sind wir mehr als zehn Jahre später, ähm, bis heute haben halt irgendwie Apps einen Titel und eine Länge, äh, Songlänge oder sowas, ja.

Jochen

Dass halt totaler Quatsch ist.

Jochen

Also es passt ja überhaupt nicht zusammen.

Jochen

Aber es ist halt sehr, sehr schwer, das zu ändern.

Jochen

Weil, ja, das würde so viel Logik irgendwie brechen, dass in anderen Systemen, das ist halt extrem, also du kannst halt, ja, also eine solche Migration durchzuführen, ist halt hinterher sehr, sehr schwer.

Dominik

Wenn du quasi die ganzen Daten einmal anfassen und abgleichen und bereinigen und schrubben und putzen.

Jochen

Die Daten sind gar nicht so sehr das Problem.

Jochen

Das Problem sind die anderen Systeme, die es auch alle drum herum gibt, die sich verlassen, dass die Datenbanken so aussehen, wie sie aussehen.

Jochen

Okay.

Jochen

Also wenn ich jetzt, also die Daten selber zu ändern, ist, glaube ich, wäre nicht so das Problem.

Dominik

Aber ich muss jeden Prozess bei jedem Nutzer dieser Datenbank darüber informieren, dass er sich das Schema irgendwie hat.

Jochen

Und der muss damit klarkommen.

Jochen

Und das ist halt möglicherweise Legacy-Code, wo der Letzte, der sich damit auskennte, vor fünf Jahren gegangen ist.

Jochen

Aber das System macht irgendwas Vitales, was irgendwie total wichtig ist für das Business.

Jochen

Und tja, dann wird es halt richtig schwer.

Jochen

Und wenn du dann nicht nur ein solches System hast, sondern zig, dann kann es sein, dass du halt zehn Jahre lang das nicht mehr ändern kannst.

Jochen

Und dann manchmal sieht man dann so ein bisschen lächerlich aus, aber wie jetzt in dem Apple-Fall.

Dominik

Wenn aber keine Songlänge hat, ja.

Jochen

Ja, aber es ist halt, das zeigt halt so ein bisschen, wie knifflig das dann werden kann, wenn man Pech hat.

Jochen

Ja, und das ist auch so ein Problem bei relationalen Datenbanken insgesamt möglicherweise, würde ich sagen.

Jochen

Also gerade der E-Commerce-Fall oder der Amazon-Fall funktioniert eigentlich ganz gut.

Jochen

Zunächst, also später wird das dann halt auch nochmal ein bisschen problematischer, aber weil physische Dinge halt relativ stabil sind, was irgendwie so ihre Eigenschaften angeht.

Jochen

Also da funktionieren relationale Datenbanken halt besonders gut.

Dominik

Unwahrscheinlich, dass so ein Buch noch ein anderes Cover enthält oder sowas.

Jochen

Also dass ich Bücher jetzt irgendwie, dass die plötzlich ein Attribut bekommen, was es halt vorher nicht gab.

Jochen

Die wachsen Flügel.

Jochen

Die haben halt irgendwie Titel, Seitenanzahlen oder sowas, aber dass sie jetzt plötzlich irgendwie, keine Ahnung, ich weiß nicht, was man sich da vorstellen könnte.

Jochen

Man müsste jetzt irgendwie Bücher.

Dominik

Jedes Buch enthält einen Geist.

Dominik

Bücher haben Flügel.

Jochen

Ja, keine Ahnung.

Dominik

Bücher kann man jetzt essen oder so, haben einen bestimmten Geschmack.

Jochen

Haben einen bestimmten Geschmack, das ist sehr unwahrscheinlich, dass das passiert, weil das würde bedeuten, dass sich die physikalische Realität irgendwie ändert, was sie ja, was sie natürlich auch tut.

Wie du isst kein Buch für ein Frühstück.

Jochen

Aber das tut sie relativ langsam.

Jochen

Und das ist gut, weil das können man jetzt sozusagen diese physischen Dinge in der Datenbank beschrieben hat, die kann sich auch nur langsam ändern.

Jochen

Und das passt dann so ein bisschen zueinander.

Jochen

Also das ist halt, wenn man jetzt die Eigenschaften von einem Buch erstmal erfasst hat, dann ändert sich da wahrscheinlich in den nächsten 20 Jahren nicht mehr so wahnsinnig viel dran.

Jochen

Und dann muss man auch in der Datenbank nicht so wahnsinnig viel ändern.

Jochen

Wenn man jetzt ein anderes Problem hat und man jetzt zum Beispiel in der Datenbank nicht Daten über physikalische Objekte hält, sondern Daten über Daten.

Oh, Metadaten.

Jochen

Metadaten.

Jochen

Die können sich dummerweise unter Umständen, je nachdem, wie.

Dominik

Daten über Daten über Daten.

Jochen

Das kann sich dann, da kann plötzlich die Geschwindigkeit, mit der sich die Strukturen da ändern müssen, deutlich schneller werden.

Jochen

Und dann wird es schwierig.

Jochen

Dann sind relationale Datenbanken auch so, das ist dann ein Problem.

Jochen

Das ist auch möglicherweise einer der Gründe dafür, warum jetzt in letzter Zeit halt immer mehr so NoSQL oder Dokumentdatenbanken oder wie man das, manche nennen das auch Schemaless, warum die halt populärer werden, weil man damit halt möglicherweise auf diese geänderten Anforderungen halt besser reagieren kann, dass man ja möglicherweise ad hoc das Schema irgendwie ändern muss und das halt in der relationalen Datenbank nicht so ganz einfach ist, weil so absolut kann man das auch nicht sagen.

Jochen

Also es gibt da diverse Möglichkeiten, wie man die Geschichten miteinander verbinden kann.

Jochen

Und ja, wenn Schema lässt, ist halt auch nicht schema lässt, sondern das bedeutet halt mehr oder weniger nur, dass die, dass das Schema jetzt implizit in deiner Applikation ist und du halt immer aufpassen musst, wenn du deine Applikation änderst, dass du da das Schema nicht kaputt machst oder änderst oder so und das überlegen sich viele Leute da nicht so richtig und dann ändern sich irgendwas und dann passieren furchtbare Dinge und also dann fällt ihnen auf, dass sie doch ein Schema haben.

Jochen

Und ja, dass sie dieses Problem halt doch nicht losgeworden sind.

Jochen

Also es ist leider alles nicht so einfach und das ist tatsächlich so, dass man bei Datenbanken halt im Design am Anfang ein bisschen mehr Arbeit hat, aber dafür hat man auch dann einen lustigen Vorteil, nämlich es ist immer so schön, irgendwie Daten altern wie Weinen.

Jochen

Also wenn man halt viele gute Daten hat, das ist super.

Jochen

Und wenn das mehr werden, das ist immer schön und das altert auch gut, ja, das wird immer besser mit der Zeit.

Jochen

Man kann immer mehr Wissen daraus generieren, man kann immer mehr Fragen beantworten oder so.

Jochen

Das ist eine sehr schöne Sache.

Jochen

Und Applikationscode, Code, sagt man, Code altert wie Fisch.

Jochen

Ja, also das ist nicht gut.

Jochen

Wenn immer Features drankommen oder Sachen geändert werden, also das wird immer schlimmer mit der Zeit.

Jochen

Das ist eigentlich selten so, dass man irgendwie jetzt mehrere Jahre irgendwie an einem Projekt entwickelt und die Codequalität wird immer besser.

Jochen

Das ist irgendwie nicht so, sondern es wird immer, es wird irgendwie, und daher ist halt.

Dominik

Noch ein Frickel da, noch ein Frickel dort.

Dominik

Kleines Mödülchen an der Seite.

Jochen

Und auch das Problem ist halt, die Anforderungen verschieben sich halt irgendwie.

Jochen

Oder sagen wir so, die Realität ändert sich und dann ist halt der ursprüngliche Plan oder die ursprüngliche Architektur der Applikation ist halt nicht mehr darauf angepasst und so.

Jochen

Und da hat man dann halt genau dieses Problem, dass wenn man jetzt das Schema verlagert in die Applikation und die Applikation aber altet wie Fisch, dann halt auch altern auch die Daten nicht gut.

Jochen

Und deswegen ist es eigentlich schon sinnvoll, da eine Trennlinie zu haben und zu sagen, okay, selbst wenn wir die Applikationen irgendwann wegschmeißen müssen, neu schreiben müssen oder so, dann haben wir immer noch die Daten und die sind halt sauber strukturiert und das sieht alles gut aus.

Jochen

Und das kann eine sehr wertvolle Sache sein, wenn man das richtig macht.

Jochen

Und ja, genau, deswegen ist diese Trennung, wo man halt irgendwie ein striktes Schema hat und dass auch diverse Constraints, die halt irgendwie, also dass man halt solche Sachen drin hat wie, es kann nicht im Lager Sachen geben mit einem Lagerstand von Minus irgendwas.

Das darf halt nicht sein.

Jochen

Da ist ein Fehler passiert und kann die Datenbank schon dafür sorgen, dass das halt nicht da reingeschrieben wird, weil die sagt halt so, nee, so nicht.

Jochen

Man muss halt bloß dieses Constraint definieren und sagen, so auf dieser Spalte, da dürfen keine negativen Werte auftauchen.

Jochen

Oder eben sowas wie ein Gehalt, das darf auch nicht negativ werden.

Jochen

Oder dass halt bestimmte Datumsinformationen halt nicht so und so sein können.

Jochen

Oder dass man halt tatsächlich auch ein, ähm was man mit Postgres machen kann.

Jochen

Postgres ist halt wirklich eine schöne Wahl, für wenn man jetzt mit so einer Geschichte anfängt.

Jochen

Das kann so tolle Sachen wie, wenn du jetzt eine Buchhandelsbeispiel zu bleiben, du hast jetzt eine Büchertabelle, da sind natürlich auch alle alte Bücher drin, weil die werden ja auch möglicherweise referenziert von Bestellungen, die lange zurückliegen oder so.

Jochen

Du möchtest aber, wenn du jetzt eine Suche irgendwie auf der Website hast oder du hast halt irgendwie so eine Faceted Navigation, wo du nach Kategorien einschränken kannst, und da klickt jetzt einen User drauf und sagt, okay, ich hätte jetzt eine Romane oder Seefahrerromane, dann gibt es einen Index, der das halt schnell macht, diese Abfrage, und du willst jetzt aber Sachen von diesem Index ausschließen, zum Beispiel Bücher, die es gar nicht mehr gibt, die nicht mehr produziert werden, die vor Jahren irgendwie nicht mehr, seit Jahren nicht mehr gedruckt werden.

Jochen

Und das kann man mit Postkreis tun.

Jochen

Man kann sagen, also ich brauche diese Einträge in der Buchtabelle noch, um halt, damit die referenzielle Integrität, sondern das halt von alten Bestellungen nicht bricht, die er brechen würde, wenn ich das einfach löschen würde, dann hätte ich halt einen Pointer in der Bestellung-Tabelle, der halt auf etwas zeigt, was es nicht mehr gibt.

Jochen

Das wäre schlecht, weil ich dann gar nicht mehr weiß, was es sein soll und so.

Jochen

Aber trotzdem werden diese Dinger nicht mehr in den Index geschrieben.

Jochen

Also ich kann halt einen Index so definieren, dass er nur Sachen, Bücher mit reinnimmt, die halt doch tatsächlich noch verkauft werden.

Jochen

Und das heißt, es ist nicht so ein.

Jochen

Und an solchen Stellen ist Postgres halt sehr schön, hat sehr viele Features, zum Beispiel jetzt im Unterschied zu MySQL, wo das halt so, solche Sachen gehen da gar nicht.

Jochen

Also das ist halt, und da hast du dann halt ein Problem.

Jochen

Bei Büchern ist es jetzt nicht so schlimm, also so viele Bücher gibt es nicht und so viele, die dann halt nicht mehr verkauft werden, auch nicht.

Jochen

Aber man könnte sich vorstellen, es gibt durchaus Anwendungen, wo man dieses Problem ganz massiv bekommt, dass man halt eine Menge gelöschte Geschichten in der Tabelle hat, die man aber nicht wirklich löschen kann, sondern nur als gelöscht markiert.

Jochen

Und dann der Index aber immer größer wird und langsamer wird, weil man halt nicht so einen partiellen Index über Sachen haben kann.

Jochen

Ja, überhaupt Postgres kann halt auch noch diverse andere Geschichten, damit könnte man halt auch so Sachen lösen, wie welche Pakete kriege ich eigentlich in so einen Lieferwagen rein und so, weil der kann halt, das Ding kann halt nicht nur so B-Trees, die man jetzt für Textabfragen, Indexabfragen benutzt, also dass man sagt, welche Kategorie beginnt jetzt mit folgenden drei Buchstaben oder so.

Jochen

Da nimmt man B-Tree, aber es kann halt auch solche Sachen wie Polygone, Abmessungen, überdeckt das eine das andere.

Jochen

Es kann halt so R-Trees, die man halt für diese ganzen räumlichen Datengeschichten braucht, aber es kann nicht nur das, sondern es kann auch so Sachen wie welche Sachen liegen nah an anderen, so KD-Trees, Wall-Trees.

Jochen

Es kann sogar Suffix-Trees, also Postgres kann da eine ganze Menge unterschiedlicher Abfragen und Indizes, die man also.

Dominik

Aber ich glaube, die lohnen sich jetzt noch nicht bei unserem kleinen Laden.

Wir sind ja, glaube ich, noch herzlich.

Ja, doch, doch.

Jochen

Ja, hier hat man.

Jochen

Ja, ja, wenn wir die Schwert.

Jochen

Wenn du deine Lagerhaltung, das möchtest du halt im gleichen System machen, damit eben du nicht das Problem kriegst, dass du den State zwischen unterschiedlichen Systemen synchronisieren musstützt.

Jochen

Also wenn du jetzt deine Lagerhaltung in einem System machst und machst dann deine Webseite oder die Datenbank, die die Webseite treibt, sozusagen die, über die du Bücher verkaufst, wenn das unterschiedliche Systeme sind, dann musst du den State zwischen diesen Systemen ja irgendwie synchronisieren.

Jochen

Was schlecht ist, würde ich zum Beispiel sagen, das ist halt am Anfang sehr, sehr hilfreich, wenn das alles ein System ist.

Jochen

Weil man dann eben tatsächlich eben die referenzielle Integrität, Constraints, über alle Daten hinweg machen kann und dann von der Datenbank sicherstellen lassen kann schon, dass bestimmte Sachen nicht gehen und dass bestimmte Sachen immer erfüllt sein müssen.

Dominik

Das heißt, unser Schema setzt das dann tatsächlich fest und das gibt da sonst recken Fehler aus der Datenbank, hey, dürfen wir nicht, geht nicht, und wir haben das Schema dabei arbeitet für unseren kleinen Laden und so weiter

Jochen

können wir dann nur.

Jochen

Kann dann eine Applikation oder die Programmierer, die jetzt vielleicht gar nicht, ja, der jetzt, die Leute, die die Webseite bauen, die haben jetzt vielleicht gar nicht so viel Ahnung von Lagerhaltung.

Jochen

Die können aber, egal, was sie auf der Datenbank machen, sie können nichts kaputt machen.

Jochen

Weil wenn sie etwas tun, was eigentlich nicht geht, wie zum Beispiel einen Lagerstand von einem Buch auf minus 1 setzen, dann sagt ihnen die Datenbank, nö, mach ich nicht.

Jochen

Und dann kriegen sie halt einen Fehler.

Jochen

Und das ist halt sauber, weil wenn du jetzt zwei Systeme hättest und musst jetzt da synchronisieren und jetzt ist aber schon irgendwie.

Ja, das blöd ist.

Dominik

Aber eigentlich nicht, dann sagt die eine Datenbank, ja, habe ich aber.

Dominik

Und dann, ja, okay.

Jochen

Da kommst du halt in Teufelsküche.

Jochen

Und man könnte sich vorstellen, dass das eine gute Idee wäre, wenn man das macht, dann wird man halt relativ schnell feststellen, ist keine gute Idee.

Ist doof.

Jochen

Das ist auch vielleicht ein bisschen unintuitiv, aber ja.

Jochen

Und natürlich, nachher muss Sachen funktional rausnehmen und man muss dann das in mehrere Systeme aufgleichen.

Jochen

Man sollte so lange wie möglich versuchen zu verhindern, dass das passiert, weil das macht alles viel, viel schwerer.

Jochen

Ja.

Jochen

Genau, also wo sind wir jetzt eigentlich?

Jochen

Genau, wir sind klein und niedlich, wir haben Postgres, machen alles über Postgres, wir haben ein bisschen JavaScript auf der Client-Seite.

Jochen

Ansonsten nehmen wir, sagen wir mal, Django oder so als Webframework.

Dominik

Aber genau, jetzt kommen wir erstmal zu, wie machen wir das mit Python.

Jochen

Genau, Python, ja.

Jochen

Genau, da brauchen wir halt irgendeine Art, wie wir auf die Datenbank zugreifen.

Jochen

Üblicherweise, wie man Statements oder Abfragen an der Datenbank formuliert, ist halt SQL, heutzutage halt so der Standard für solche Systeme.

Jochen

Aber ja, das ist halt immer ein bisschen Fremdkörper.

Jochen

Wenn man jetzt einen Python-Code schreibt, dann hat man jetzt so ein SQL-Statement, das passt von der Syntax her überhaupt nicht in Python rein.

Dominik

Da muss man einen langen String marrunnen, der irgendwie vernünftig aussieht und da muss dann alles stehen, was mit der Datenbank kriegen kann.

Jochen

Genau, und das ist halt irgendwie nicht so schön.

Jochen

Also das gibt dann unterschiedliche Methoden.

Jochen

Wenn man jetzt tatsächlich mit den rohen Statements arbeitet, es gibt Leute, die packen halt alle Statements in ein Pfeil und packen dann Funktionen drum und dann ruft man halt diese Funktionen auf.

Jochen

Das kann man machen, das hat so Vor- und Nachteile, dann kann man aber auch sagen, okay, das ist aber schlecht, eigentlich möchte ich in dem Moment, wo ich mit den Daten arbeite, das Statement auch sehen und auch ändern können.

Jochen

Dann packt man halt sozusagen die Statements immer an die Stelle, wo man halt tatsächlich mit den Daten arbeitet.

Jochen

Das hat auch wiederum Vor- und Nachteile, das hat den Vorteil, dass man halt Sachen leicht ändern kann, aber es hat halt einen Nachteil, dass man unter Umständen mehrere Statements, die sehr ähnlich oder gleich sind, an unterschiedlichen Stellen hat.

Jochen

Alles nicht so total toll.

Jochen

Es ist auch nicht so ein einfaches Problem.

Jochen

Und eine ganz gute Lösung für dieses Problem sind so objektrelationale Mapper oder ORMs.

Jochen

In Django ist einer eingebaut.

Dominik

Der Django-ORM.

Jochen

Ja, genau.

Jochen

Wo man dann halt gar nicht wirklich mitkriegt, dass das SQL unten drunter ist, sondern man schreibt halt ganz normalen Python-Code.

Jochen

Man definiert die Daten, die man in der Datenbank stehen haben möchte, einfach nur als Klassen.

Jochen

Man schreibt halt irgendwie.

Dominik

Das heißt, das Schema wird nochmal als Klasse eingebaut, oder?

Jochen

Das Schema entsteht dadurch, dass man unterschiedliche Klassen hat, die irgendwie in Beziehung zueinander stehen.

Jochen

Also was aufeinander map, ist halt Klasse und Tabelle.

Jochen

Also ich hätte dann, wenn ich Bücher kaufen möchte, halt eine Klasse Book.

Jochen

Und dann hätte ich halt vielleicht eine Klasse Tag.

Jochen

Und wir hatten das ja eben mit dem Beispiel, ich habe eine N2M-Beziehung zwischen Tags und Büchern und dann würde man entweder in Tags oder in Büchern irgendwo definieren.

Jochen

Also das hier ist dieses Feld Tags ist halt ein, wie heißt das in Django?

Jochen

Weiß ich jetzt irgendwie, ne, irgendwas Foreign Key Field, irgendwas, aber man sagt halt, das ist halt Many-to-Many Relation, irgendwas, weiß ich nicht, muss ich nachgucken.

Jochen

Aber auf jeden Fall definiert man das halt wie eine Spalte in einer Tabelle.

Jochen

Also Attribute der Klasse sind halt Spalten in der Tabelle und sagt dann halt, das hier ist eine Many-to-Many-Beziehungen zu der Relation Tags.

Jochen

Und dann hat man die Link-Tabelle wird automatisch erzeugt, man kriegt das gar nicht mit.

Jochen

Und im Code hat man halt nur Bücher und Tags und halt dann diese Beziehung dazwischen.

Jochen

Und dann ja, wenn man sich das halt so hindefiniert hat und dann halt alle Klassen, die man so braucht, beziehungsweise alle Tabellen, die man halt irgendwie in der Datenbank haben möchte, definiert hat mit den Spalten und den Typen der Spalten und den entsprechenden Constraints und den Indices und den ganzen Kladratarch, den man auch sonst noch so braucht, dann sagt man Migrate und dann werden die ganzen Tabellen in der Datenbank tatsächlich angelegt.

Jochen

Oder make Migrations rufen wir halt zuerst auf und damit werden halt so Migrationskripte in Django angelegt.

Jochen

Das sind auch einfach nur Python-Files, in denen drin steht, was diese Migration tun soll, nämlich zum Beispiel irgendwie Tabellen anlegen, Indizes anlegen oder sonst irgendwas.

Jochen

In die kann man auch beliebige andere Dinge reinschreiben.

Jochen

Also man kann halt auch selber Migrationen einfach so von Hand schreiben.

Jochen

Wenn man zum Beispiel jetzt sowas wie, es gibt so Datenbank-Trigger.

Jochen

Also man kann halt sowas.

Jochen

Ja, man könnte halt, also wenn zum Beispiel

Dominik

Nutzertaggen selber und erfinden eine neue Kategorie.

Jochen

Ja, ich überlege gerade, ob mir fällt ehrlich gesagt jetzt gerade nicht so ein tolles Beispiel ein, aber im Grunde, was das tut, ist, wenn sich halt in einer bestimmten Spalte irgendwas ändert, dass dann automatisch andere Aktionen passieren innerhalb der Datenbank.

Jochen

Und das kann man halt festlegen, haben auch in SQL-Syntax und man schreibt es halt einfach in eine Migration rein.

Jochen

Oder man kann auch sogar Sort Procedures, die halt dann irgendwie eine komplizierte Geschichte, die dann irgendwie ausgeführt wird, wenn ein neuer Autor angelegt wird oder sonst irgendwas.

Jochen

Dann müssen vielleicht noch diverse andere Geschichten gemacht werden.

Jochen

Das kann man ganz normal in diese Django-Migration auch reinschreiben.

Jochen

Man kann eine Big SQL reinschreiben und die werden dann mit ausgeführt und dann werden halt diese Sort Procedures oder Trigger in die Datenbank mit reingeschrieben und sind dann halt da.

Jochen

Und was im Schema passiert oder was da drin ist, das wird halt dann von diesem Django-Migrationssystem verwaltet und alle Migrationen, die ausgeführt worden sind, werden halt auch wieder in derselben Datenbank halt gehalten von Django selbst.

Jochen

Da gibt es dann halt auch Tabellen zu.

Jochen

Und man kann jetzt Sachen auch wieder zurückrollen.

Jochen

Also man kann zum Beispiel sagen, wenn es eine Änderung gemacht hat und feststellt, oh, die war nicht so toll, dann sagt man halt einfach so Migrate und dann gibt man die Nummer der Migration an davor und dann rollt sich die Datenbank in den Zustand davor zurück.

Jochen

Und dann löscht man einfach die Migration und dann war es das.

Jochen

Also das macht es halt sehr angenehm, damit zu arbeiten.

Jochen

Und sowas braucht man auf jeden Fall.

Jochen

Also selbst wenn man jetzt sowas nicht wie Django verwendet, sondern das alles von Hand macht, dann braucht man auch irgendeine Art, wie man damit umgeht.

Jochen

Und das war teilweise früher ziemlich übel, als es keine so gute Unterstützung in den Frameworks für sowas gab, da hat man das halt irgendwie von Hand gemacht, aber da passieren dann immer wieder Unfälle, man hat halt irgendeine Datenbank vergessen oder wenn man jetzt halt mehrere Datenbanken hat oder es geht irgendwie sowas verloren, man weiß nicht genau, in welchem Zustand die Datenbank ist, weil irgendwie man meint, man hätte die ausgeführt, aber dann ist es irgendwie doch nicht passiert oder weil eben nirgendwo drinsteht, in welchem Zustand die Datenbank ist, sondern man nur Leute fra

Jochen

gt, irgendwie so, also hast du die Migration jetzt eigentlich auf der Produktionsdatenbank schon ausgeführt oder nicht?

Jochen

Ja, ja, hab ich gemacht.

Jochen

Dann ändert, das ist vielleicht auch nicht passiert.

Jochen

Also es ist sehr schön, wenn das halt irgendwie selbst auch in der Datenbank festgehalten wird, in welchem Zustand man ist.

Jochen

Ja, und das jetzt so ein Framework wie Django bietet einem dafür halt so wirklich relativ vollständige.

Dominik

Wir merken wieder, du bist ein Django-Fan, ja.

Jochen

Ja, damit umzugehen.

Jochen

Kann man Flask, wenn man jetzt das andere große Web-Framework kann man jetzt nicht da so wirklich zu sagen, aber das andere Paradigma, wie man Web-Anwendungen in Python entwickelt.

Jochen

Wenn man das mit Flask macht, hat man das auch alles.

Jochen

Da gibt es dann SQL Alchemy als ORM und halt, ich weiß jetzt nicht, das hat irgendeinen Namen, die Migrationslösung dafür, an denen ich mich jetzt gerade nicht erinnere.

Jochen

Und da geht das alles auch.

Jochen

SQL Alchemy ist sogar deutlich mächtiger als der Django-ORM, aber ist halt nicht integriert.

Jochen

Und Flask ist auch super.

Jochen

Der Trade-Off ist halt so ein bisschen, was einen Django so abnimmt, ist halt, dass man sich halt um viele Abhängigkeiten nicht kümmern muss, weil man installiert halt Django und dann hat man halt einen Großteil von dem, was man so braucht.

Jochen

Und das wird halt dafür, dass das alles konsistent bleibt und man upraden kann und so, dafür wird gesorgt, da muss man selber an sich nicht drüber kümmern.

Jochen

Wenn man jetzt Flask macht und dann halt ganz viele unterschiedliche Teile hat und die ihre Versionen ändern und so, dann muss man selber am Ball bleiben und auch Konflikte halt selber auflösen.

Jochen

Das heißt, man hat so langfristig mehr zu tun damit.

Jochen

Aber dafür ist man halt auch flexibler und kann halt, wenn einem eine bestimmte Art von ORM besser gefällt, den halt verwenden.

Jochen

Es gibt halt auch zum Beispiel irgendwie neuere, also SQL Alchemy ist sehr alt, Django ORM ist relativ alt, es gibt PWE und Pony ORM oder so, das sind jetzt modernere Geschichten, sieht besser aus.

Jochen

Macht unten drunter irgendwie was sehr ähnliches, aber ja.

Jochen

Genau, also ein Teil davon ist halt immer, wie man die Relationen und Tabellen definieren kann.

Jochen

Das sind meistens Klassen, die man dann halt aufschreibt.

Jochen

Und dann erzeugt man daraus halt die Datenbankstruktur.

Jochen

Und der andere Teil vom ORM ist halt, wie man Abfragen auf die Datenbank halt abfeuert.

Jochen

Und das, was man eigentlich fast bei allen ORMs dann so macht, ist, man macht so Message Chaining.

Jochen

Ich weiß nicht, sagt ihr das was?

Dominik

Bis jetzt nicht.

Jochen

Ja, gibt es auch so auf dem Data Science, also Pandas oder so, da macht man das auch.

Jochen

Also man kann in Python, ja, man kann ja irgendwas sagen, so man hat ein Objekt, Punkt, Methodenaufruf oder Punkt Attribut, Punkt, wie noch was anderes, Punkt, wie noch was anderes.

Jochen

Wenn zum Beispiel eine Methode ja ein Objekt zurückgibt, dann kann man nicht auf diesem Objekt wieder was anderes aufrufen.

Jochen

Wenn ich das alles in eine Zeile schreibe, wird das irgendwann relativ lang.

Jochen

Aber wenn ich jetzt ein Statement modellieren möchte, das halt viele Ware-Bedingungen hat, die Art in Django-ORM das hinzuschreiben, wäre halt zu sagen Filter irgendeine Spalte gleich irgendeinen Wert oder sowas.

Jochen

Aber dann habe ich noch ein zweites, dann sage ich Punkt Filter, nächste Spalte, wieder ein anderer Wert oder so.

Jochen

Und das wird halt relativ länglich, daraus wird dann halt ein Statement generiert, aber was ich halt tun kann, ist zu sagen, Klammer auf und dann halt Query Set Punkt Filter Punkt Annotate und dann Dinge gruppieren oder so oder neue Spalte hinzufügen.

Jochen

Und ich mache hinten noch eine weitere Klammer drumherum, dann kann ich das halt auch einrücken.

Jochen

Und dann rücke ich das so ein, dass alle Punkte untereinander stehen.

Jochen

Und dann habe ich halt so ein mehrzeiliges Dings, was so ein bisschen eine Zwischenform ist zwischen SQL und Python-Code.

Jochen

Ja, aber ich spare mir dadurch, sozusagen das jedes Mal irgendeiner Zwischenvariable zuweisen zu müssen.

Jochen

Ansonsten könnte ich ja natürlich sagen, Queryset gleich, Queryset Punktfilter irgendwas und dann sage ich in der nächsten Zeile QuerySet gleich Queryset.filter noch irgendwie eine andere Spalte.

Jochen

Ich kann das aber auch alles in ein einziges Dings reinschreiben.

Jochen

Man nennt das Method-Chaining, genau.

Jochen

Ja, und das ist halt irgendwie das.

Jochen

Bei Pandas ist es halt genau so, dann hat man Data-Frames, auf denen man dann Sachen macht und dann, die geben dann auch immer wieder in Data-Frames zurück, die viele der Methoden.

Jochen

Und die kann man halt auch so chain.

Jochen

Und dann hat man da oft so mehrzeitige Dinge, wo halt die Punkte untereinander stehen.

Jochen

Also wenn man nicht weiß, was es ist, das ist Method Chaining und das ist halt so eine Methode, um Dinge halt in eine Step zu machen.

Dominik

Irgendwie schon mal so ein bisschen gesehen, aber so wirklich wissen, was das Message Chaining heißt, ist natürlich ja.

Jochen

Ja, genau.

Jochen

Und im Grunde ist es halt dann, wenn man ORMs, wenn man Queries in ORMs so macht, ist es halt so ein bisschen, ist es so ein Zwischending zwischen SQL und Python, aber das funktioniert dann halt so halbwegs gut und das ist dann halt sehr angenehm.

Jochen

Und dann ist es nicht mehr ein Problem, wenn man jetzt sozusagen diese Art von Logik an unterschiedlichen Stellen im Code stehen hat, weil die Statements, die rausfallen, sind halt alle gleich.

Jochen

Und wenn ich jetzt irgendwie, keine Ahnung, mir überlege, dass ich eine bestimmte Art von Optimierungen machen möchte an den Statements, dann wäre die halt ja auch immer gleich.

Jochen

Das heißt, dann habe ich halt dieses Problem, das ich sonst hätte, wenn ich das alles in einen File schreiben würde oder wenn ich das in, wenn ich unterschiedliche, wenn ich fast gleiche Statements in unterschiedliche Files schreiben würde, wenn ich die Statements beim Code haben will, das habe ich damit dann nicht mehr.

Jochen

Und das ist natürlich ein sehr schöner Effekt.

Jochen

Und das ist halt, ja, so einer der Hauptnutzen von ORMC.

Jochen

Also ein anderer schöner Nutzen ist halt, dass man halt diese ganze Migrationsgeschichte, wie ändern sich Sachen, halt auch automatisiert hat, beziehungsweise die ganzen Prozesse drumherum irgendwie zumindest mal abgebildet hat.

Dominik

Ja, also sind wir klein und niedlich und das haben wir jetzt gemacht.

Jochen

Genau, und da würde man so ein Framework verwenden, ein ORM und dann ist man eigentlich, ja, das geht alles ins Git, es gibt Versionskontrolle dafür.

Jochen

Und dann, das ist eigentlich alles schon relativ komfortabel.

Ja.

Dominik

Ja, was passiert jetzt?

Dominik

Also wir sind klein und jetzt haben wir das Schwimm gebaut, aber ja, wann funktioniert das ja nicht mehr so?

Jochen

Äh, ja.

Jochen

Genau.

Jochen

Wir haben als Online-Handel einen Riesenvorteil gegenüber stationären Buchhandel, weil das ist auch eine interessante Statistik.

Jochen

Es kommt, glaube ich, aus diesem Buch Longtail irgendwie von Wired-Redakteuren.

Jochen

Jedenfalls schreibt er da, dass Amazon macht die Hälfte des Umsatzes mit Büchern, die nicht in den Top 300.000 sind.

Jochen

Weil eben Bücher verkaufen, so ein

ganz individuelles Bücher.

Jochen

Da verkauft die Bücher halt so eine Longtail-Verteilung.

Jochen

Also es gibt halt sehr, Leute wollen sehr unterschiedliche Bücher kaufen.

Jochen

Es werden viele Bücher verkauft, aber von denen nur ganz wenige.

Jochen

Und das ist halt blöd für einen Laden, der die Bücher halt physisch vorhalten muss.

Jochen

Weil auch selbst wenn Bücher nicht so groß sind, ich kann halt in so einem Innenstadtbuchladen, kann ich halt irgendwie ein paar tausend Bücher haben.

Jochen

Und dann ist halt irgendwie Schluss.

Jochen

Und damit muss ich mir überlegen, welche das sind.

Jochen

Aber wenn jetzt, also nehmen wir an.

Dominik

Der hat überhaupt ein Zielpublikum, das heißt, ich weiß genau, hey, in mir kommen jetzt nur ganz viele alte, antiquarische, interessierte Menschen rein, dann sollte ich vielleicht dafür sorgen, dass in meinem Laden viele antiquarische Bücher sind.

Dominik

Oder es kommen jetzt noch ganz viele Hippe-Leute rein, die wollen alle was über IT wissen, sollte ich vielleicht einen IT-Buchladen.

Jochen

Ja, ja.

Jochen

Aber selbst wenn du jetzt all diese Zielgruppen zusammensnimmst und da irgendwie den riesigsten, also das ist halt das Problem, wenn die Zielgruppe zu klein ist, dann lohnt sich das nicht.

Jochen

Aber wenn sie, selbst wenn du jetzt einen riesigen Buchladen hast, in dem 300.000 Bücher passen, was ziemlich groß sein müsste, dann machst du immer nur trotzdem noch die Hälfte des Umsatzes von Amazon, weil Amazon macht halt nochmal so viel Umsatz mit dem ganzen Rest.

Jochen

Das heißt, sie haben dann, sie können einfach viel besser skalieren, weil sie einfach viel mehr Bücher verkaufen.

Jochen

Und ja, dagegen, ich wüsste nicht, dass es da irgendein Mittel gegen gibt.

Jochen

Ich fürchte.

Dominik

Was aber auch bedeuten würde, dass Amazon auch diese Minus 1 Bestellung annehmen müsste, weil das müssen sie auch irgendwo in einem riesigen Dager jedes Buch liegen haben.

Jochen

Ja, müssen sie tatsächlich wahrscheinlich.

Jochen

Oder sie müssen es halt on demand irgendwie drucken können oder so.

Jochen

Gut, klar, sie müssen damit irgendwie umgehen.

Jochen

Auch der stationäre Buchhandel geht ja da irgendwie dann damit um, so damit um, dass man dann halt Sachen da bestellt.

Dominik

Zum Beispiel, hey Autor, schreib doch bitte noch meine neue Freunde.

Dominik

Wir haben ja so ein paar Bestellungen, ja.

Jochen

Aber ja, ich meine, du hast halt als stationäre Buchhandlung hast du ja keinen Vorteil mehr, wenn du dann auch wieder bestellst, weil dann machst du halt zwei Sachen und die eine, ja, und dann als Amazon hast du einfach einen strukturellen Vorteil fürchte ich.

Okay, dann kannst du.

Dominik

Es ist cool, weil da können wir einfach mit einer Postgres-Lösung direkt so und dann ORM.

Genau.

Jochen

Die interessante, also mit 300.000, also ein paar Millionen ist das überhaupt kein Problem.

Jochen

Also da könnten wir auch, also ich würde sagen, so einen Markt wie Deutschland kannst du wahrscheinlich tatsächlich mit einer Datenbank und mit allen Büchern, die es überhaupt gibt, locker bedienen.

Jochen

Das ist kein so großes Problem.

Jochen

Wenn es jetzt nur darum geht, die Bücher zu verkaufen.

Jochen

Aber wenn wir jetzt zum Beispiel eben sowas rauskriegen wollen wie, was sind denn eigentlich die Top 300.000 Bücher?

Jochen

Wo kommt denn diese Zahl eigentlich her?

Jochen

Ja, und überhaupt rauszukriegen, okay, wir machen die Hälfte unseres Umsatzes mit den nicht, mit Büchern, die nicht in den Top 300.000 sind, dann müssen wir nicht nur die Bücher speichern, sondern dann müssen wir halt auch speichern, zum Beispiel, welche Bücher gekauft worden sind und so, also eine Historie aller Bestellungen und so.

Jochen

Und das ist dann halt unter Umständen viel, viel mehr.

Jochen

Und dann wird es allmählich problematisch, weil dann haben wir unterschiedliche Use Cases oder unterschiedliche Abfragemuster.

Jochen

Also wir haben zum Beispiel diese Transaktions.

Dominik

Also das Lager, das einfach immer noch weiß, welche Bücher sind da und das schicken wir raus.

Dominik

Oder dann haben wir immer jemanden, der macht Marketing.

Jochen

Das System, das macht halt Bestellungen oder wir haben halt Anfragen, die Bestellungen machen oder solche Sachen wie, zeig mir alle Bücher in Seefacherromane oder so.

Jochen

Aber diese Art von Anfragen wie, sag mir mal, wie viel Umsatz ich mit den nicht in Top 300.000 enthaltenen Büchern im letzten Jahr gemacht habe.

Jochen

Das ist eine ganz andere Art von Anfrage.

Jochen

Ja, während die Anfragen vorher, die machen immer nur auf kleinen Datenmengen in der Datenbank irgendwas, immer zeilenweise meistens.

Jochen

Und oft ändern sie auch irgendwas oder schreiben irgendwas.

Jochen

Gut, ein Großteil, immer noch die große Mehrheit wird Read-Anfragen sein, aber die beziehen sich normalerweise nicht auf wahnsinnig viele Zeilen, sondern immer nur relativ wenige oder wenige tausend Zeilen.

Jochen

Und ja, eben operieren halt eure Zeilenweise während diese andere Anfrage, jetzt dieses wie viel Umsatz.

Jochen

Ja, das ist halt dann nur noch eine Spalte aus den Bestellungen und dann auch geht es wahrscheinlich aber über lange Zeiträume, über ein Jahr, mehrere Jahre und dann halt über alle Bücher.

Jochen

Das ist eine Anfrage, die geht halt über ganz, ganz, ganz, ganz, ganz viele Zeilen.

Jochen

So, und jetzt beißen sich die, diese Abfragemuster beißen sich halt massiv.

Jochen

Also weil das Problem ist, dass die Datenbank irgendwie gewährleisten muss, dass deine Sicht auf die Welt, also auf die Datenbank, konsistent bleibt, während die Anfrage läuft.

Jochen

Die Anfrage läuft jetzt aber wahrscheinlich relativ lang.

Jochen

Sie muss sich irgendwie alle Daten, die in der Datenbank liegen, oder Großteil davon muss sie sich angucken, wenn sie dir hinterher sowas sagen, eine Zahl geben will, wie viel Umsatz war das jetzt nur.

Jochen

Und währenddessen werden aber Bestellungen abgearbeitet oder werden Dinge gemacht, Sachen an der Datenbank geändert, die jetzt aber nicht direkt durchschlagen können auf deine Anfrage, sondern da werden immer nur Kopien gemacht.

Jochen

Und sozusagen, es wird dann halt ein Timestamp mit reingeschrieben, es wird halt, nein, das ist Multiversion Concurrency Control.

Dominik

Multiversen!

Jochen

Ja, Multiversion Control Concurrency Control, VCC.

Jochen

Das heißt, die Datenbank ist halt in einem unterschiedlichen Zustand, je nachdem, wer gerade fragt.

Jochen

Und für die Transaktionen, die eine Bestellung ausführen, ist jetzt in einem anderen Zustand als für dieses langlaufende Query.

Jochen

Das Problem ist halt, je länger diese Query läuft, umso länger muss die Datenbank jetzt mehrere Versionen ihrer selbst aufrechterhalten, was dazu führt, dass du halt auch mehr Speicher brauchst und was halt eine komplizierte Geschichte ist.

Jochen

Und das ist halt, ja, das Problem ist, wahrscheinlich wird man dann halt irgendwann sehen, man wird so mit einfachen Analysegeschichten anfangen und irgendwann wird man halt merken, so morgens um neun, wenn dann halt irgendwie die Business Intelligence-Abteilung irgendwie anfängt, wenn dann die Analysten sitzen und dann irgendwie, ja gut, ich weiß nicht, am Anfang wird man da sowas noch nicht haben, aber irgendwann hat man das vielleicht dann, wenn die halt ihre Analyse-Queries abschießen, dann wird plötzlich die Webseite langsam.

Jochen

Ja, weil halt die Datenbank langsam wird, weil die Queries werden langsam, weil plötzlich muss die Datenbank irgendwie mit mehreren Zuständen irgendwie rumjonglieren.

Jochen

Ja, das ist blöd.

Jochen

Und dann muss man sich halt was überlegen.

Jochen

Und das ist dann halt so der Moment, wo man dann sagen muss, okay, wir können das nicht mehr.

Jochen

Es wäre schön, alles in einer Datenbank zu haben, aber es geht nicht.

Jochen

Diese beiden Use Cases sind so unterschiedlich, dass man das leider nur dadurch ordentlich abgebildet kriegt, dass man das halt in unterschiedliche Systeme packt.

Jochen

Und ja, also das eine nennt man auch irgendwie OHP, Online Transaction Processing.

Jochen

Das ist halt sozusagen der Webseite, also Datenbank ist hinter einer Webseite, die irgendwie Bücher verkauft und prozessiert Transaktionen, Bestellungen.

Jochen

Und der andere Teil nennt sich OLAP, Online Analytical Processing.

Jochen

Und ist halt das so, wenn man das mal gehört hat, wenn Leute über Data Warehousing sprechen oder Data Warehouses oder so, das ist halt das.

Jochen

Und genau, das sind beides meistens relationale Datenbanken, wenn man anfängt, jedenfalls.

Jochen

Aber die sehen unterschiedlich aus.

Jochen

Also die haben unterschiedliche Anfragen gestellt.

Jochen

Analyseanfragen laufen länger, gucken sich viele Zeilen an.

Jochen

Transaktionsanfragen sind oft kurz und ja, gucken sich wenige Zeilen an und da geht es auch darum, dass die Latenz relativ kurz ist.

Jochen

Bei vielen Analyseanfragen ist es gar nicht so wichtig, dass die jetzt, ob sie jetzt eine Minute oder länger oder weniger lang laufen, ist gar nicht so entscheidend.

Jochen

Und auch die Analysedatenbanken sind oft viel, viel größer, weil man halt historische Daten mit drin hat.

Jochen

Was halt für eine Transaktionsdatenbank tödlich wäre, weil die bei der ist möglichst das komplette Working Set der Datenbank im Hauptspeicher, damit das halt alles schnell geht, damit die Latenz niedrig bleibt, damit halt die Webseite schön schön snappy irgendwie anfühlt.

Jochen

Und bei den Analysedatenbanken ist aber unter Umständen wichtig, dass ich halt historische Daten da halt auch mit drin haben kann.

Jochen

Und die werden dann halt vielleicht so groß, dass man das halt nicht mehr im Hauptspeicher halten kann.

Jochen

Ja, aber

Dominik

nichts für die Datenerfahrt.

Jochen

Die Queries werden dann halt langsam, aber das ist halt möglicherweise wichtiger, historische Daten zu haben, als dass Querys halt schnell sind.

Jochen

Und dann, äh, wenn sich eine Quary irgendwie ein paar Millionen oder ein paar zehn Millionen Zeilen anguckt, dann ist es eh nicht mehr schnell, selbst wenn es im Hauptspeicher ist.

Jochen

Und ob es dann jetzt eine Minute oder zwei Minuten dauert, ist halt dann auch irgendwie wurscht.

Jochen

Ja, genau.

Jochen

Und dann hat man eben diese beiden unterschiedlichen Systeme und dann kriegt man halt aber auch genau diese Probleme, die man dann hat.

Jochen

Wenn man mehrere Sichten auf die Welt hat oder den Status irgendwie eines, man hat jetzt keinen gemeinsamen Status mehr, sondern man hat jetzt den Status des Systems in unterschiedlicher Form in unterschiedlichen Datenbanken.

Jochen

Das heißt, man muss jetzt zum Beispiel die Transaktionen, die irgendwie in einem einen System aufgelaufen sind, überführen in das Analysesystem.

Jochen

Das macht man üblicherweise bei einem Prozess, der nennt sich ETL, Extract, Transform, Load.

Jochen

Man halt die Daten, die einen interessieren, halt täglich oder so.

Jochen

Also meistens fängt man sowas an wie, ja, das sind halt dann Jobs, die nachts laufen, wenn halt die Datenbanken sowieso nicht so unter Last sind, weil nicht so viele Leute einkaufen.

Jochen

Liest man halt irgendwie alles, was einen so interessiert, dann aus der Transaktionsdatenbank aus.

Jochen

Dann ist der Transformationsprozess halt sowas wie, ich muss die Daten in ein anderes Schema transformieren.

Jochen

Und das ist halt sowieso Stern-Star-Schema oder Snowflake-Schema, je nachdem.

Jochen

Das ist auch irgendwie gewisserweise normalisiert oder man kann auch sagen, die normalisiert, je nachdem.

Jochen

Aber es ist halt auf jeden Fall anders.

Jochen

Ist halt davon optimiert, dass ich bestimmte Arten von Analysen fahren kann.

Jochen

Und lädt das Ganze halt in die Analyse-Datenbanksystem.

Dominik

Für deine BI.

Jochen

Genau.

Jochen

Ja.

Jochen

Und ja, das ist halt immer so ein bisschen, das ist halt ein bisschen fies alles.

Jochen

Aber ja, bleibt dann halt nichts übrig, muss man irgendwie machen.

Dominik

Wie würden wir das denn jetzt machen?

Dominik

Wenn wir das in Python jetzt haben, jetzt haben wir ja irgendwie so ein neues System und jetzt haben wir eigentlich irgendwie, klasse, unser OLTP-Datenbank-System da aufgebaut mit den Transaktionen für unsere Webseite.

Dominik

Was bauen wir denn da, damit wir jetzt so ein OLAP-Ding dran hängen können, weil wir die Analytics abteilen?

Jochen

Ja, machen wir auch mit Postgres so ein Ding.

Dominik

Also eine zweite Postgres-Datenbank, eben die erste packen.

Jochen

Ja, genau.

Jochen

Die halt ein bisschen anders aussieht, die hat dann vielleicht nicht ganz so viele Hauptspeicher, die hat dann aber dafür halt irgendwie mehr Plattenplatz und auch irgendwie Storage möglicherweise in unterschiedlicher Qualität.

Jochen

Wenn man sagt, okay, vielleicht für die letzte Woche haben wir alle Daten noch im Hauptspeicher, ja, dann aber in den letzten Monaten oder die letzten sechs Monate haben wir die halt auf SSDs oder so, auf dem System, was halt noch schnell, weil der größte Teil der Queries geht natürlich auf Daten, die relativ aktuell sind.

Jochen

Und dann ab einem Jahr oder so liegen die Daten dann vielleicht auf Platten, die halt dann eher langsam sind, aber da nur ein kleiner Teil der Querys halt so lange zurückgeht, ist es halt nicht so schlimm, wenn das ein bisschen langsamer ist.

Jochen

Und diese Art von Queries muss dann halt ein bisschen warten.

Jochen

Ja, und das ist halt ganz anders im Vergleich zu einem OLTP-System, wo man halt sagt, das muss alles mehr oder weniger im Hauptspeicher sein.

Jochen

Und klar ist auch wichtig, dass es, dass Sachen schnell geschrieben werden.

Jochen

Deswegen muss das, wo was hingeschrieben wird, muss halt auch sackschnell sein.

Jochen

Also da würde man auch eher lieber dann schnelle SSTs nehmen, aber es ist halt nicht wichtig, viel mehr Plattenplatz zu haben, als man Hauptspeicher hat, weil das weniger ähnlich.

Jochen

Ja.

Jochen

Und genau, diese LTL-Prozesse sind dann halt irgendwelche Skripte, die dann halt irgendwie über irgendeine Task.

Dominik

Das bedeutet natürlich dann, dass unser Intelligence-System also jetzt nicht sekundengenau funktioniert.

Dominik

In dem Fall, weil wir halt immer wieder diese Jobs machen müssen.

Dominik

Wenn wir das jetzt an was ganz anderes denke, weil ich nicht, Aktienkursanalyse oder so, wenn wir irgendwelche Portfolios, dann ist das natürlich dann doof, weil dann das nicht dem echten Stockmarket entspricht dann, sondern du müsstest halt dann jedes Mal neue Kopie machen, wenn man diese Analytics machen will.

Jochen

Ja, genau.

Jochen

Also natürlich, das ist tatsächlich ein Problem.

Jochen

Und die Lösung dafür ist, dass man dann halt irgendwann nicht mehr so ETL in dem Sinne macht, dass man das halt irgendwie abends Batchprocessing macht, sondern dass man halt irgendwie so Streaming-Geschichten verwendet.

Jochen

Halt, Apache Kafka und so ist halt etwas, was häufig verwendet wird.

Jochen

Aber dann kommen wir später zu, weil das ist auch eine Geschichte, wo man dann, das wird halt eh erst dann relevant, wenn man dann nochmal ein gutes Stück größer geworden ist und man mit diesen traditionellen Data Warehouse-Geschichten auch nicht mehr klarkommt.

Dominik

Unter Welt beherrschen müsst du die Card.

Ja, genau.

Jochen

Dazu muss man dann schon mal noch ein bisschen, oder halt eine andere Art von Daten sammelt.

Jochen

Also ich würde sagen, dieser klassische Bereich, ja, also selbst wenn man halt nur tagesaktuelle Daten hat, ist man damit wahrscheinlich viel besser aufgestellt, als jetzt wahrscheinlich viele stationäre Buchhändler oder so.

Jochen

Selbst das wird einen schon da schon einen deutlichen Vorteil verschaffen.

Jochen

Und ich denke mal, am Anfang ist es halt so, dass das ist halt das, was alle machen, wo man alle irgendwie anfangen, dass sie das halt tagesweise oder so batchmäßig erledigen.

Jochen

Und genau, ja, da ist man halt irgendwie so bei diesem Data Warehousing-Thema.

Jochen

Ich habe damit das mal irgendwann auch in den Shownotes verlinkt, gibt es einen schönen Essay, der heißt Data Warehousing for Caveman.

Jochen

Aber das finde ich nach wie vor gut, ist auch relativ humorvoll.

Jochen

Da geht es darum, der schreibt es aber auch so, ja, vielleicht interessiert es manche Leute irgendwie, wie man 300 Dollar die Stunde verdienen kann, indem man irgendwie die sensibelsten Daten von irgendwelchen Firmen massiert.

Dominik

Muss ich sofort wissen, ja.

Jochen

Genau, beim Freelance, das ist vielleicht gar nicht so interessant.

Jochen

Ja, und also das ist auch ein Feld, das es schon lange gibt.

Jochen

Ich habe das am Anfang aber auch nicht, ich habe zuerst nur diesen OTP-Use-Case gekannt und dann habe ich diesen, bin ich irgendwann auf diesen Essay gestoßen und dachte so, oh, das ist aber interessant.

Jochen

Und daraufhin halt dann auch so angefangen, mich so ein bisschen mit der Tori-Hosyn-Kram zu beschäftigen.

Jochen

Aber es ist auch ein sehr interessantes Thema.

Jochen

Also der entscheidende Punkt ist im Grunde, dass man halt solche Abfragen machen können möchte, wie, also wie unterscheidet sich denn jetzt, keine Ahnung, das Volumen der verkauften Bücher in einer bestimmten Kategorie, nachdem ich irgendeine Werbeaktion gemacht habe, ja.

Jochen

Oder A-B-Tests, ja.

Jochen

Ich habe jetzt irgendwie manchen Usern eine bestimmte, ja, die haben halt ein Design gesehen, das ein bisschen anders aussah oder halt ein bisschen anders.

Dominik

Oder alle Leute, die letzte Woche gekauft haben für ein bestimmtes Produkt, die bekommen jetzt einen besonderen Gutschein, der für drei Tage gültig ist oder sowas.

Jochen

Ja, und genau, ich möchte hinterher gucken, was ist denn dann passiert, war das jetzt erfolgreich oder nicht?

Jochen

Wie erfolgreich war denn das?

Jochen

Und dafür muss ich halt bestimmte Arten von Anfragen, die ansonsten keine Rolle spielen können, gut machen können.

Jochen

Und dafür habe ich halt so eine Struktur, ich habe eine Faktentabelle und dann drumherum Dimensionstabellen, in denen halt solche Sachen drin stehen wie, ja, das war jetzt ein User, für den ich diese Version der Webseite angezeigt habe oder das hier, also man hat zum Beispiel sowas wie, daran kann man es vielleicht ganz gut verstehen, Time ist halt eine Dimension.

Jochen

Und in der Faktentabelle, also Fakten wären sowas wie Bestellungen, ist halt sozusagen Time nicht etwas, jetzt ein Zeitstempel oder so, der da reingeschrieben wird, sondern da ist halt, das ist halt eine ID, ein Fremdschlüssel.

Jochen

Und der zeigt halt in eine Time-Dimension.

Jochen

Da ist halt eine Dimensionstabelle, in der drin steht, was diese Zeit bedeutet.

Jochen

Und dann stehen da eben solche Dinge dran wie, naja, also, auch da wiederum, kann sein, dass da noch, also da steht nicht direkt ein Zeitstempel, sondern da steht dann dran, also das war ein Werktag.

Jochen

Das war ein Feiertag in folgenden Bundesländern.

Jochen

Das war, keine Ahnung, das war Sommer, ja.

Jochen

So dass ich dann halt solche Abfragen machen kann wie, wie ist denn der Verkauf der Bücher in dieser Kategorie im Sommervergleich zu Winter?

Jochen

Und dadurch, da ich diese Information, das ist jetzt Sommer, halt direkt an dem Zeitdings dran habe, kann ich halt Abfragen machen, die sehr effizient alles rausfiltern, was halt irgendwie Sommer ist und so.

Jochen

Aber solche Abfragen machen halt in dem OTP-Teil oder wenn ich jetzt eine Webseite machen überhaupt gar keinen Sinn.

Jochen

Das heißt, ja, die Schemata sehen dann halt ganz anders aus.

Ja.

Jochen

Wenn einen interessiert, wie das wirklich so Orneti funktioniert, finde ich, dieser Data Warehousing for Caveman Essay ist ein schöner Start.

Jochen

Aber da gibt es auch jede Menge, kann man sich durchlesen, wie das so klappt.

Jochen

Ja, genau.

Jochen

Achso, richtig, genau.

Jochen

Da haben wir jetzt schon mal ein bisschen über den Analyseteil gesprochen, aber wir haben natürlich auch ein Problem, wenn jetzt Leute immer mehr Zeugs kaufen, dass irgendwie halt unsere Datenbank halt vielleicht irgendwann ein bisschen langsamer wird, nicht mehr genug Transaktionen prozessen kann.

Jochen

Ja, was macht man da?

Jochen

Muss er halt optimieren, das ist halt auch oft ein wichtiger Teil und es ist auch nicht so einfach.

Jochen

Die einzige Datenbank, für die ich das wirklich mal gemacht habe, so war ich MySQL.

Jochen

Ich verwende heutzutage eher Postgres, aber da habe ich dann auch mal so einen Optimierungs-MiosQL-Porformance-Optimierungskurs besucht.

Jochen

Und das ist ein schönes Zitat, also Chris Künthop hat den damals irgendwo in München durchgeführt, damals hat er bei MySQL gearbeitet.

Jochen

Und ein Satz, der mir auch in Erinnerung geblieben ist, immer so, ja, wenn man Datenbank Performance optimieren will, ja, also OLTP, dann gibt es da eigentlich so im Wesentlichen drei Sachen, die man tun kann, um eine Datenbank schnell zu machen.

Jochen

Das erste, was man eigentlich immer machen kann, das funktioniert auch fast immer, das ist super, man kann einfach mal ein bisschen mehr Hauptspeicher reinstecken in die Datenbank.

Jochen

Das ist schon mal auf jeden Fall schneller, das ist immer gut.

Jochen

Und wenn das irgendwie nicht mehr so richtig reicht, eine zweite Geschichte, die man auch immer tun kann, auch sehr gut hilft, ist, man kann einfach noch ein bisschen mehr Speicher reinstecken in die Datenbank.

Jochen

Selbst wenn man dann an die Grenze gekommen ist, das letzte Mittel, zu dem man greifen kann, wenn das auch nicht hilft, ist halt, man könnte einfach ein bisschen mehr Hauptspeicher in die Datenbank reinsteigen.

Okay, okay.

Dominik

Wie viel Hauptspeicher hat denn dann so eine große Datenbank?

Jochen

Ja, so viel wie halt geht eigentlich.

Jochen

Also es kommt aber darauf an, wie viel du benötigst.

Jochen

Also wenn du jetzt irgendwie ein paar tausend Artikel hast, die du auf einer Webseite verkaufen willst, dann ist egal, ja.

Jochen

Da kommst du halt mit einem, weiß ich nicht, mit der Beliebigkeit, kannst du auf dem Raspberry Pi kannst du das machen.

Jochen

Das ist wurscht.

Jochen

Aber wenn du jetzt, also sagen wir so, wenn ein Working Set der Datenbank, also die Menge der Daten, die halt auf der Platte liegen, wenn die Datenbank runtergefahren ist, wenn das halt 30 Gigabyte hat, dann sollte deine Datenbank mindestens mal 30 Gigabyte haben, ja so 64 vielleicht.

Jochen

Hauptspeicher.

Jochen

Weil es gibt halt auch noch diverse Strukturen, die im Hauptspeicher gehalten werden, die man halt auch braucht.

Ja.

Jochen

Und dann ist halt das Limit eigentlich nur, und also sagen wir so, das ist halt viel, ja.

Jochen

Also wenn man jetzt irgendwie, nehmen wir an, wir haben das, was heute so ein Sweet Spot ist, sind es halt vielleicht 256 Gigabyte oder so.

Jochen

Hauptspeicher, da geht eine ganze Menge rein.

Jochen

Also es ist halt für mich schwer vorstellbar, welche Systeme, die Transaction Processing machen, dann mehr Hauptspeicher benötigen.

Jochen

Oder mehr Daten haben, die sie jetzt unbedingt im Hauptspeicher halten müssen.

Jochen

Das gibt es kaum.

Jochen

Also, ja gut, es gibt schon.

Jochen

Also wenn man jetzt an sowas denkt wie Google, man indiziert das Web und möchte halt so eine Echtzeit Suchabfragen über alle Webseiten machen, das geht nicht mehr, das ist klar.

Jochen

Aber so viele.

Dominik

Also so groß muss man erstmal werden.

So groß müsste man werden.

Jochen

Also Amazon fällt da bestimmt auch nicht rein.

Jochen

Also Amazon hat, also na gut, Amazons Teil, der einen jetzt mit Produkten versorgt, ja, der diese Webseite, das wird nicht so groß sein.

Jochen

Die haben andere Teile, die halt dann unter Beständen sehr groß geworden sind, aber ja, das kriegst du eigentlich alles locker in einer Datenbank unter.

Jochen

Also die haben dann halt ein anderes Problem.

Jochen

Amazon wird das Problem bekommen, dass sie halt mit der Schreiblast nicht mehr klarkommen, aber das könntest du alles irgendwie in den Hauptspeicher von so einer Datenbank packen.

Jochen

Also ich würde sagen, für fast alle Anwendungsfälle heutzutage ist das halt groß genug.

Jochen

Ab 256 Gigabyte wird es ein bisschen schwierig.

Jochen

Also man kann auch einen Terabyte Hauptspeicher irgendwie in Rechner stecken, das kostet irgendwie weniger als 10.000 Euro heutzutage, ja, also das geht auch.

Jochen

Es wird dann halt, wenn man so wirklich so wahnsinnig viel Hauptspeicher drin hat, dann kriegt man halt ein bisschen Probleme mit der Architektur von, das ist ja so ein bisschen PC-basiert und so viel Hauptspeicherbandbreite hat man da ja nicht.

Jochen

Und das wird dann irgendwann, man muss halt die ganzen Prozessoren auch irgendwie mit Daten versorgen, ja, und dann, wenn man jetzt da irgendwie, weiß ich nicht,

Dominik

da fährt dann kein Bus hin.

Jochen

32 Prozessoren oder 64 oder sowas, so irgendwann ist dann halt, also der Sweetspot ist, würde ich sagen, heute eher so bei, weiß ich nicht, irgendwie 64 Prozessoren oder sowas und 256 Gigabyte Hauptspeicher und so.

Jochen

Aber das, also egal, also vielleicht geht auch noch ein Terabyte, ich habe keine Ahnung.

Jochen

Sagen wir mal so, für die meisten, aller, aller, allerdings alle reicht das alles vollkommen aus.

Jochen

Und es ist ein sehr guter Tipp zu sagen, also jetzt, wenn du tatsächlich irgendwie ein Working Set von 30 GB halt hast, jetzt kaufen ich nicht eine Datenbank, die jetzt 8 Gigabyte hat, dann hast du ein Problem.

Jochen

Dann bist du gleich mal irgendwie mehrere Größenordnungen langsamer, als wenn du das in den Hauptspeicher packen würdest, ja, und kriegst halt einen Haufen Probleme, die du sonst einfach nicht hättest.

Jochen

Ja, das war früher alles noch viel schlimmer, als es einen riesigen Unterschied gab zwischen sozusagen permanentem Storage, also rotierendem Rost, ja, so Hardisks und Hauptspeicher, da war der Unterschied so 1 zu 10.000 oder so Geschwindigkeitsunterschied.

Jochen

Das ist jetzt nicht mehr ganz so schlimm, wenn man SSDs hat, aber es ist immer noch ziemlich schlimm.

Jochen

Also es ist immer noch ein Riesenunterschied.

Jochen

Und daher, ja, das will eigentlich, dass die heißen Daten im Hauptspeicher sind.

Jochen

Ja, genau.

Jochen

Das ist halt ein Ansatz, um das zu optimieren.

Jochen

Dann hat man oft das Problem, man hat halt so eine Asymmetrie zwischen Lese- und Schreibqueries.

Jochen

Und selbst wenn man mit so einer Datenbank halt irgendwie ein paar tausend Queries pro Sekunde abfeiern kann, irgendwann gerät man in eine Konkurrenz zwischen Schreibqueries und Lesequeres, wenn man jetzt nur eine Datenbank verwendet und das ist halt irgendwie schlecht, weil man möchte eigentlich immer in der Lage sein, weil man braucht ja eine, man darf eigentlich nur eine Datenbank haben, auf die man schreibt.

Jochen

Also wenn man mehrere Datenbanken hat, von denen man liest, ist nicht so schlimm, das geht.

Jochen

Aber man kann halt nicht so richtig gut mehrere Datenbanken haben, auf die man schreibt, weil man ja diesen zentralen Punkt, an dem der Status gehalten wird, behalten möchte.

Dominik

Also wenn wir scheinbar auf dieselbe Stelle schreiben

Jochen

zum Beispiel.

Jochen

Ja, genau.

Jochen

Also was man jetzt machen könnte, wenn man zu viele Leseanfragen hat, man verteilt die dann halt auf sogenannte Slave-Datenbanken.

Jochen

Das heißt, man hat halt so eine Master-Slave-Architektur, man hat eine Master-Datenbank, von der man lesen und schreiben kann, von der man lesen kann und auf die man schreiben kann.

Jochen

Und es gibt halt eine Reihe von Slave-Datenbanken, von denen man nur lesen kann, auf die man nicht schreiben kann.

Dominik

Wie oft wird denn da geslaved?

Dominik

Also wie oft die da Slave denn aktualisiert auf den Master?

Jochen

Ja, da gibt es dann Mechanismen für.

Jochen

Also der Master schreibt halt irgendwie ein Log, das Log wird irgendwie an die Slaves übertragen und die vollziehen dann sozusagen die Transaktionen, die der Master gemacht hat, halt nach.

Jochen

Das ist meistens wahrscheinlich instantan, mehr oder weniger.

Jochen

Bei viel Last oder wenn er halt eine große geografische Differenz ist, also wenn es halt irgendwie über eine Atlantik oder Pazifik geht oder so, klar, dann hast du halt Zeitunterschiede oder halt auch wenn die Last so groß ist, dass die Slipes nicht mehr gut hinterherkommen, dann hast du natürlich, dann hast du eventuell so ein bisschen Leck von vielleicht ein paar Sekunden oder vielleicht auch mal eine Minute oder sowas.

Jochen

Aber es gibt halt viele Anfragen, für die ist das egal.

Jochen

Also viele Leseanfragen, oft cached man das ja auch dann nochmal irgendwie im Hauptspeicher.

Jochen

Im Redis oder Memcache oder so und sagt halt, ja, also dieses Ding hier kannst du fünf Minuten lang cachen.

Jochen

Da ist es ja dann auch egal.

Jochen

Und bei den Anfragen, die auf Slaves gehen, ist es auch so oft so.

Jochen

Es ist halt wurscht, also so oft ändern sich Dinge halt nicht, wenn irgendein Count nicht so richtig stimmt oder so.

Jochen

Naja, nicht so schlimm.

Jochen

Es gibt Dinge, bei denen das schlimm ist, aber kommen wir gleich noch zu.

Jochen

Da muss man das halt anders machen.

Jochen

Aber bei vielen Sachen ist es halt nicht so wirklich schlimm und daher kann man das gut aufteilen.

Jochen

Man kann halt dann die Leselast auf die Slaves sozusagen transferieren.

Jochen

Und dann gibt es halt bestimmte Abfragen, also gerade wenn man jetzt kurz davor ist, eine Bestellung zu machen oder so, wo man dann schon im Code weiß, so, okay, jetzt gibt es hier gleich eine Transaktion oder so.

Jochen

Und dann macht man auch die Leseanfragen auf den Master, damit man da halt eben nicht das Problem hat, dass man eventuell Daten sieht, die eine Minute alt sind.

Jochen

Aber da das die allermeisten Anfragen ja gar nicht sind, sondern die meisten Navigationsanfragen, wenn ich jetzt in Kategorien rumklicke oder irgendwelche Filter auswähle oder nach irgendwas suche oder so, diese ganzen Anfragen beziehen sich auf Daten, die sich jetzt gar nicht so häufig ändern.

Jochen

Das kann alles auch eine Minute alt sein, das ist wurscht.

Jochen

Und erst wenn ich halt eine Bestellung mache, dann muss ich halt zusehen, dass ich aktuelle Daten sehe, wie zum Beispiel ist das Buch noch auf Lager oder so.

Jochen

Und diese wenigen Anfragen, die halt dann aktuell sein sollten, die gehen dann direkt an den Master.

Jochen

Und das kann man halt im Code sagen.

Jochen

Man kann halt sagen, okay, an dieser Stelle bitte eine Verbindung auf den Master und nicht auf den Slave.

Jochen

Und die Schreibanfragen müssen dann halt auf den Master gehen.

Jochen

Weil man ja nur an einer Stelle schreiben will.

Jochen

Und mit dieser Architektur kommt man relativ weit.

Jochen

Also das ist eine Geschichte, das ist auch so ein klassischer Lamp-Stack-Architektur, Wikipedia-Seite so aufgebaut.

Dominik

Du hast jetzt gerade noch zwei Sachen gesagt, die vielleicht nochmal kurz vor anders.

Dominik

Einmal so von Redis einmal eben gesprochen.

Dominik

Und gerade vom Lamp-Stack.

Dominik

Also einmal vielleicht kurz erklären, was das drin ist.

Jochen

Ja, Redis ist auch so eine In-Memory-Datenbank, eher so ein Key-Value-Store, hat noch ein paar Zusatzfunktionen, es ist eine Message-Queue drin, es kann teilweise sortierte Listen und sowas auch halten, aber es ist ein bisschen, kann ein bisschen mehr als Memcache D.

Jochen

Und Memcache D ist rein so, du hast ein Key und kriegst halt dann irgendwie Value zurück und wird im Hauptspeicher gehalten, deswegen ist es schön schnell.

Jochen

Wurde popularisiert auch Memcache D, vor allen Dingen durch den Lamb-Stack.

Jochen

Lamb ist einfach Linux-Apache, MySQL PHP.

Jochen

Und einige der großen Webseiten, die das halt benutzt haben oder weiß nicht, ob sie das noch benutzen, keine Ahnung, ist halt Wikipedia.

Jochen

Wir haben auch immer schöne Artikel darüber gehabt, wie sie ihre Systeme aufbauen.

Jochen

Also es ist ja auch Wikipedia-Claubt, die sind auch mit Sicherheit immer noch in den Top 10 der weltweit trafficstärksten Seiten.

Jochen

Und haben halt auch viel dazu veröffentlicht, wie ihre Architektur aussieht.

Jochen

Und die haben ja halt auch genau das, die meisten Sachen sind Leseanfragen, aber manchmal wird halt auch was geändert oder geschrieben.

Jochen

Und die machen das halt mit MySQL und vielen Slaves und ja, extensiver Verwendung von Memcache zum Cachen von irgendwelchen gerenderten Fragmenten und Daten, für die man jetzt nicht nochmal eine Query machen möchte.

Dominik

Was wäre denn jetzt der neueste Stack, würdest du sagen, den man jetzt verwenden sollte, um das Anfänger?

Jochen

Ja, das kommt halt darauf an, wenn man eben PHP mag.

Jochen

Ja, kann man das auch immer noch machen, wobei ich jetzt nicht genau weiß, ob das alles immer noch so populär ist.

Jochen

Memcash die, glaube ich, ist so ein bisschen auf dem Weg nach draußen.

Jochen

Wahrscheinlich würde auch in dem Umfeld eher heutzutage Redis verwendet.

Jochen

Aber jetzt im Python-Umfeld würde ich sagen, ja, da ist halt, hat man so grob die Wahl zwischen, also es gibt natürlich noch viel mehr und es gibt natürlich auch gute Gründe, andere Sachen zu verwenden, aber so die populärsten Geschichten sind halt Django und Flask.

Jochen

Und eben als In-Memory-Cache ist bei beiden eigentlich Rede sozusagen das, was verwendet wird.

Jochen

Datenbank, eigentlich würde ich auch sagen, Postgres wird bei beiden verwendet.

Jochen

Man kann auch was anderes nehmen natürlich.

Jochen

Es gibt auch Leute, die Django mit MongoDB verwenden.

Jochen

Das geht.

Jochen

Es gibt auch sogar valide Use Cases dafür.

Jochen

Es gibt auch Leute, die Flask irgendwie mit, weiß ich nicht, CouchDB mit allen möglichen Dingen verheiraten.

Jochen

Aber so als womit ich anfangen würde, ist auf jeden Fall Postgres und dann halt eben SQL Alchemy bzw.

Jochen

Django ORM.

Jochen

Und Rede ist genau als im Memory Cache und ja, wahrscheinlich braucht man auch noch ein Message Que-System.

Jochen

Ist aber dann auch schon, also dann gibt es noch so ein paar Sachen, die man braucht.

Dominik

Was ist denn die Message Queue, vielleicht erstmal?

Jochen

Ja, also man hat oft so Dinge, wo man dem User möglicherweise etwas direkt, einen direkte Antwort geben will.

Jochen

Aber es ist halt ein Job, der dann irgendwie länger dauert, wie

unser Buchstore wäre das.

Jochen

Ein Buchstore, sowas wie, jemand fliegt ein neues Buch ein oder so.

Jochen

Na gut, warte mal, lass mal überlegen, das ist kein gutes Beispiel.

Jochen

End-User, was könnte der denn tun?

Jochen

Ja, zum Beispiel du verfasst einen Kommentar jetzt oder eine Bewertung für irgendeinen Artikel.

Jochen

Und du möchtest, wenn der jetzt auf Abschicken drückt, der User, dass er sofort seinen Kommentar unter dem Artikel sieht.

Jochen

Aber in Wirklichkeit willst du den ja vielleicht noch prüfen, also wenn das jetzt irgendwas Populäres ist.

Jochen

Wir wollen da sowas in der Weißbaut-Taste oder so.

Jochen

Das könnte jetzt hässlich geworden sein.

Jochen

Oh, das tut mir leid, muss ich mich entschuldigen.

Jochen

Ein bisschen erkältet.

Jochen

Ja, wenn, also eigentlich möchte man halt, wenn jetzt zum Beispiel ein Artikel ist, der häufig verkauft wird, ja, und wenn jemand schreibt, irgendwie, dieser Artikel ist voll scheiße, keine Ahnung.

Jochen

Das hat ja dann unter Umständen direkt Konsequenzen.

Jochen

Oder es macht am besten noch irgendwie einen Mitbewerber, macht irgendwas Fieses, ja, dann will man das möglicherweise nicht, dass das sofort allen sichtbar wird, sondern muss halt irgendwie erst irgendwie ja irgendeine Redaktion drauf gucken oder so.

Jochen

Aber das ist halt nicht etwas, was man dem User anzeigen möchte.

Jochen

Also man hat dann halt sozusagen etwas, so zwei Prozesse, die voneinander so ein bisschen entkoppelt sind.

Jochen

Der User drückt auf Speichern, sieht seinen Kommentar oder seine Bewertung und im Hintergrund gehen aber dann auch so Tasks los wie, oh, das ist hier an der Stelle, wo jemand mal drauf gucken sollte.

Jochen

Aber das geht halt dann auch nicht in Echtzeit, sondern das wird dann halt in irgendwie so eine Que, in eine Warteschlange eingereiht.

Jochen

Dann gibt es eine Redaktion, die hat dann halt diese Jobs, muss sich halt irgendwelche Kommentare an sensitiven Stellen oder so angucken und die dann abarbeiten.

Jochen

Aber das ist halt sozusagen der, dass diesen Job in die Warteschlange tun und dieser menschliche Prozess mit menschlicher Interaktion, das ist jetzt nicht mehr Teil von dem Web-Request.

Jochen

Das heißt, der Teil muss irgendwie entkoppelt sein.

Jochen

Das heißt, der Web-Request ist ja irgendwie vorbei.

Jochen

Aber dieser Web-Request löst dann halt irgendwie, schreibt dann halt irgendwie diesen Job in die Que.

Jochen

Solche Sachen hat man oft.

Jochen

Auch wenn sich, auch genau, ha, das ist ein gutes Beispiel, das ist mir jetzt eingefallen.

Jochen

Vielleicht möchtest du, dass, wenn du jetzt in der Suche nach irgendwas suchst, haben Produkte halt auch vielleicht Bewertungen finden, in denen jemand über das Produkt gesprochen hat oder so.

Jochen

Das heißt, der Text deiner Bewertung muss indiziert werden von der Suchmaschine.

Jochen

Aber das geht halt auch nicht in Echtzeit, sondern das macht die halt vielleicht nur alle tausend Bewertungen oder so wird neu indiziert oder so, weil ja.

Jochen

Und dann wird halt auch so ein Task erzeugt, für so, das hier muss ja noch mit initiiert werden, aber es wird nicht sofort indiziert, weil das ist halt etwas, was lange, eine Operation, die lange dauern kann.

Jochen

Und man möchte ja nicht, dass der Web-Request dann so lange dauert, wie die Operation dauert, sondern man sagt, okay, man gibt dem Web-Rest, so ist es okay, dein Kommentar wurde gespeichert und hat dann aber noch diesen zusätzlichen Task erzeugt, der dann irgendwann später ausgeführt werden muss.

Jochen

Und dafür braucht man diese Task-Ques, die halt, wenn man ein komplexeres Web-System hat, dann braucht man sowas halt, weil solche Fälle halt immer wieder auftreten.

Jochen

Ja, kann man aber Redis auch für verwenden.

Jochen

Also was für Django ist halt, was häufig verwendet ist.

Jochen

Salary kann ich nicht unbedingt empfehlen, ist irgendwie eher schmerzhaft.

Jochen

Ja, die darunter liegenden Geschichten sind oft sowas wie RabbitMQ oder so ein allgemeines Protokoll wie AMQ, irgendwas, weiß ich nicht genau.

Jochen

Ja, aber das ist nochmal ein ganz eigenes Feld mit diesen ganzen Message-Ques.

Jochen

Ja, genau.

Jochen

Master Slaves-Architektur hatten wir jetzt.

Jochen

Irgendwann kann natürlich auch sein, dass das nicht mehr reicht.

Jochen

Und dann müssen wir halt irgendwie die Datenbank auftrennen.

Also wenn zum Beispiel gerade die Schreibblast groß genug geworden ist, dann geht das halt alles nicht mehr.

Jochen

Und dann kann man halt die Datenbank muss man dann auftrennen, das ist furchtbar, weil dann verliert man eine ganze Menge der Vorteile, die man halt hat, wenn man eine Datenbank hat, eben referenzielle Integrität, irgendwie, dass Transaktionen isoliert sind.

Jochen

Diese ganzen Geschichten, das geht alles nicht mehr so wirklich und das muss man dann alles in der Applikation machen, in der Applikationslogik.

Jochen

Und das macht alle Dinge unfassbar viel komplizierter.

Jochen

Deswegen sollte man das möglichst nicht tun.

Jochen

Also wenn einem mal verkauft, irgendwie.

Nicht so groß werden.

Jochen

Unser System ist super, weil das schadet automatisch oder sowas.

Jochen

Also das ist nicht etwas, was man haben will.

Jochen

Also wenn man klein genug ist, dass man das nicht braucht, sollte man das nicht machen, weil das bedeutet halt, dass man diesen ganzen Dinge, die einem sonst die Datenbank quasi schenkt, selber machen muss in Applikationscode.

Jochen

Und das ist halt sehr, sehr schwierig.

Jochen

Aber manchmal geht es halt leider nicht anders, dann gibt es halt zwei Möglichkeiten.

Jochen

Man schadet irgendwie horizontal.

Jochen

Also man sollte solange, man nennt es Upscaling, solange wie möglich die Maschine größer machen und mehr Hauptspeicher reinstecken.

Jochen

Wenn das halt dann irgendwann tatsächlich nicht mehr geht, dann muss man halt entweder horizontal oder vertikal schaden und das ist halt aufteilen.

Jochen

Das heißt horizontal

Dominik

mehrere Maschinen, die die gleiche Datenbank benutzen?

Jochen

Nee, die gleiche Datenbank würde dir einem ja nicht helfen, wenn es zu viel muss die Datenbank halt irgendwo trennen.

Jochen

Und die Frage ist, wo trennt man jetzt auf?

Jochen

Man kann halt entweder innerhalb von Tabellen die Zeilen auseinandertrennen.

Jochen

Das wäre eben horizontal skalieren, dass man sagt, okay, alle Bücher, die mit Buchstaben A anfangen, kommen jetzt auf die Datenbank.

Jochen

Alle Bücher mit Buchstaben B bis F kommen auf die Datenbank.

Dominik

Oder so regional Queries trennen, von wo kommt die denn jetzt oder sowas?

Jochen

Ja, regional kann man natürlich auch trennen.

Jochen

Das ist dann nochmal eine andere, wäre nochmal eine andere Geschichte, könnte man auch machen.

Jochen

Das heißt aber, das wäre quasi horizontales Schaden auf den Usern.

Jochen

Nach Regionen eben.

Jochen

Das wird also, dass man, also meistens würde man auf Usern schaden irgendwie tatsächlich, ja.

Jochen

Wenn man sagt, was ist das von User?

Jochen

Und dann entweder regional oder halt irgendwie sonst irgendein Hash-Wert oder so.

Jochen

Und vertikal wäre halt, man trennt nach Tabellen auf.

Jochen

Das heißt, man sagt, okay, wir haben ja ein System, das kümmert sich um die Bücher, wir haben ja ein System, das kümmert sich um die User, wir haben ein System, das kümmert sich um Lagerhaltung.

Jochen

Das wäre halt, man teilt dann nicht quasi in den Zeilen, sondern man teilt halt an den Tabellengrenzen.

Dominik

Ja, man macht natürlich so vollständig Abfragen dann ein bisschen langsamer, oder so?

Jochen

Ja, das Problem ist dann halt, dass man mehrere Systeme fragen muss, wenn man jetzt irgendwie was machen möchte.

Jochen

Also wenn man jetzt die Amazon-Seite anzeigen möchte, dann muss man halt unter Umständen viele Systeme fragen.

Jochen

Tatsächlich ist es etwas, was Amazon wirklich passiert ist.

Jochen

Irgendwie, ich glaube 2008, 2009 gab es dann auch irgendwie, haben sie Artikel drüber geschrieben.

Jochen

Damals nannte sich das nicht, also heute läuft das Ganze unter dem Stichwort irgendwie Microservices oder so, so nennt man das dann, dass man halt Teile eines Systems in kleinere Services auslagert.

Jochen

Damals nannte sich das anders, war aber quasi eine gleiche Idee, nannte sich Service-Oriented Architecture.

Jochen

Und Amazon hatte das Problem, dass sie auf der Hauptseite, also wenn du einfach nur Amazon.com eingegeben hast, dann wurde dir halt das Ding aus, die Seite ausgeliefert.

Jochen

Aber damals war es halt schon so, dass da so viele Zeugs drin waren.

Jochen

Also dann werden dir irgendwelche Empfehlungen angezeigt, da wird dir irgendwas angezeigt, wie viele Zeugs in deinem Warenkorb ist.

Jochen

Und das ist einem zwar nicht so bewusst, aber das ist wirklich viel Zeug bei Amazon.

Jochen

Und sie hatten das Problem, sie machen ungefähr 300 SQL-Statements, wenn du die Seite anguckst.

Jochen

Oder ein paar hundert, ja.

Jochen

Da das irgendwie, da die irgendwie nur sequentiell ausgeführt wurden, macht das halt die Latenz hoch, weil synchron sequentiell, das heißt, die ganzen Latenzen addieren sich auf.

Jochen

Das heißt, allein bis die ganzen SQL-High-SQL-Statements abgearbeitet sind, vergehen ein paar hundert Millisekunden und die du einfach warten musst.

Jochen

Und das ist halt scheiße.

Jochen

Man weiß ungefähr so, weiß ich, pro 100 Millisekunden droppt deine Conversion 10% oder so, ich weiß nicht.

Jochen

Nee, wahrscheinlich weniger, aber.

Jochen

Also auf jeden Fall ist halt nicht so gut.

Jochen

Das heißt, du kannst ja ausrechnen, wie viel mehr Umsatz du machen würdest, wenn du das irgendwie schneller ausliefern könntest.

Jochen

Ja, und dann haben sie sich halt gesagt, okay, das müssen wir irgendwie anders machen.

Jochen

Dann haben sie das halt in Services aufgeteilt und haben sie gesagt, okay, wir haben ja den Recommendation-Service, wo dann die, wo sich die Webseite per JavaScript irgendwie macht irgendwie einen XHTP-Request oder so und holt sich dann die Recommendations von diesem Service.

Jochen

Und dann haben wir den irgendwie, keine Ahnung, Basket-Service für deine Einkaufskorb oder so.

Jochen

Und da ist halt das Ding, holt sich halt, was für Dinge liegen da momentan gerade drin und ja.

Jochen

Genau, und das, das haben die damals so gemacht.

Jochen

Ja, und dann, das geht dann natürlich alles irgendwie mehr oder weniger, auch nicht so total parallel, aber mehr paralleler als vorher.

Jochen

Und dann kann die Webseite insgesamt deutlich schneller sein.

Jochen

Ja, genau.

Jochen

Heute würde man sagen, Microservices, du hast halt ein Microservice pro irgendwie Ding, was du irgendwie da machst auf der Webseite.

Jochen

Und die komplette Seite aggregiert nur noch irgendwie die Daten aus all diesen Services.

Jochen

Ja, damit kriegt man das tatsächlich in den Griff, wenn man so ein riesiges Ding hat und viele unterschiedliche Sachen und das nicht mehr in einer Datenbank passt, dann kann man das so machen.

Jochen

Es ist aber nicht so, dass man das machen sollte.

Jochen

Also solange man das anders machen kann, solange man das mit einer Datenbank hinkriegt, sollte man das mit einer Datenbank machen, weil das ist viel, viel angenehmer.

Jochen

Also Microservices sind halt dann, man schiebt dann halt einen Haufen der Komplexität in eine andere Richtung.

Jochen

Man hat dann plötzlich Architekturkomplexität, man hat plötzlich im Ops-Teil von DevOps wird es plötzlich viel schwieriger, man muss halt das alles irgendwie maintain.

Jochen

Man muss halt plötzlich, wenn man jetzt sagt, okay, ich update jetzt diesen Service, also dann hängen da halt andere Dinge von ab unter Umständen.

Jochen

Dann habe ich halt, ich kann, ja, sag mal so, wenn man das halt irgendwie so schön hat, Master Slave-Architektur, Load Balancer davor, vor den Datenbanken, ein paar Frontends, dann, selbst da ist es schon kompliziert, wenn ich jetzt irgendwie zum Beispiel ein Schema ändern möchte oder so, was ich im Produktivbetrieb dann vielleicht nicht mehr tun kann, weil die Datenbank viel zu langsam liefe, weil wenn ich das Schema ändere, muss ich bei den Tabellen, die ich ändere, halt unter Umständen eine Kopie der Tabellen mehr oder weniger mache.

Jochen

Das heißt, ich muss halt möglicherweise doppelt so viel Daten im Hauptspeicher halten, was halt vielleicht nicht geht.

Jochen

Das heißt, ich muss vielleicht sowas machen wie, ich tausche die Datenbank aus.

Jochen

Ich mache eine Kopie der Datenbank und die Datenbank mit dem neuen Schema, stelle ich einen ins neuen Master rein und so.

Jochen

So oft hat man dann so Sachen wie, oder wenn man die Software updatet, man nimmt halt Sachen Rechner aus der Verteilung, einem Load Balancer, updatet den oder die Hälfte davon und die andere Hälfte läuft noch auf der alten Software und dann schaltet man halt um oder so.

Jochen

Solche Sachen kann man machen.

Jochen

Und das ist, das geht noch, das ist auch dann schon kompliziert, weil man muss sich dann halt Gedanken machen, wie man das tut.

Jochen

Und man muss halt irgendein System haben, das das unterstützt, dass man das automatisch machen kann, sodass man halt nicht jedes Mal, wenn man irgendwie sowas wie eine Schemaänderung macht oder wenn man halt irgendwie eine komplexere Änderung im Applikationscode in den Frontends hat, dass man da halt dann irgendwie jemand setzen muss und das dann von Hand macht, das sollte nicht so sein, sondern man sollte halt auf den Knopf drücken und sagen, okay, jetzt rollen wir das mal aus und dann passieren diese Prozesse, die dafür nötig sind, automatisch.

Jochen

Wenn man Microservices hat, wird das Ganze viel schlimmer.

Jochen

Das ist halt da nicht so, dann hat man viel komplexere Abhängigkeiten zwischen den Geschichten und dann wird dieses ganze Obst-Thema halt richtig ätzend.

Jochen

Auch Skalierung wird richtig ätzend, weil dann willst du halt, wenn du halt, ja, in so einer klassischen Architektur hast du nur wenige unterschiedliche Arten von Maschinen, die halt irgendwas machen.

Jochen

Du hast halt Datenbanken, du hast halt irgendwie Redis oder sowas, du hast halt Frontends, vielleicht doch vorne irgendwie Webserver, die SSL-Terminierung machen oder so, aber das war's im Grunde.

Jochen

Also du hast nicht so wahnsinnig viele unterschiedliche Dinge.

Jochen

Beim Microservice hast du halt vielleicht hundert unterschiedliche Arten von Microservices, die du unterschiedlich skalieren musst, wo du aufbauen die Sachen aufpassen musst, das ist alles furchtbar.

Jochen

Also geht.

Jochen

Also man kriegt damit da halt Sachen in den Griff, die dann halt, wenn man mit diesem Muster eine Datenbank, in der die Wahrheit drin steht, nicht mehr, wenn das nicht mehr ausreicht, kann man das dann halt so in den Griff kriegen, aber es ist halt dann schon schlimm.

Ja.

Jochen

Genau.

Dominik

Okay, jetzt sind wir schon ganz schön groß.

Dominik

Das heißt, wir müssen noch ziemlich viel beachtet haben.

Jochen

Okay.

Jochen

Genau.

Oh, das habe ich.

Jochen

Ja, was haben wir denn?

Jochen

Ja.

Dominik

Also ich auch schon guck gerade in die Liste, was wir alles haben und was noch nicht.

Jochen

Genau.

Dominik

Das ist nämlich tatsächlich relativ viel.

Ja, ja, ja, ja.

Jochen

Oh mein Gott, ich weiß nicht, wie lange, wie lange sind wir denn schon dran?

Dominik

Ich glaube, wir sind über zwei Stunden schon, oder?

Dominik

Oder ganz?

Dominik

Nein, noch nicht ganz.

Dominik

Na gut,

Jochen

dann ist harmlos.

Jochen

Naja.

Jochen

Achso, genau.

Jochen

Was ich hier noch ein Punkt war, es können aus dem Analysesystem auch Sachen wieder zurücklaufen.

Jochen

Zum Beispiel gibt es halt diverse Sachen, die gelockt werden, die dann aber trotzdem für die Transaktionen wieder eine Rolle spielen.

Wieso etwas?

Jochen

Das hatten wir noch gar nicht.

Jochen

Jetzt auch die Suche, ja, am Anfang, man braucht ja auf jeden Fall, wenn man irgendwie so eine E-Commerce-Seite hatte, irgendwie eine Suchmaschine, wo man irgendwie nach Büchern suchen kann oder so.

Jochen

Das geht auch tatsächlich mit Postgres direkt.

Jochen

Voll gut.

Jochen

Hat einen integrierten Volltexindex im man möchte halt auch so eine Facette in Navigation nennt man das haben, wo man, wenn man jetzt nach irgendwas gesucht hat, hat halt eine Ergebnisliste, dann möchte man einschränken nach Kategorien oder nach, weiß ich jetzt, wenn es nicht um Bücher geht, sondern um Elektronik oder so, kann man vielleicht noch Hauptspeicher oder Videorekorder VHS oder Betamax, ja, so möchte man vielleicht auswählen können.

Jochen

Und genau, das geht mit Postgres alles sehr schön.

Jochen

Auch da kann man irgendwie die Counts für die Facetten ganz gut rauskriegen.

Jochen

Ansonsten, wenn man das halt über eine eigene Spezialdatenbank, sowas wie Elasticsearch macht oder Lucine, äh, also beides Lucine-basiert oder Solar oder so macht, dann hat man das Problem, da hat man auch wieder dieses wie bei ETL, das Synchronisationsproblem.

Jochen

Du hast halt, wenn sich an der Datenbank was ändert, müssen die Änderungen in den Index rein.

Jochen

Da hast du eine Latenz dazwischen.

Jochen

Wenn du Sachen aus dem Index rausholst, ja, du hast jetzt eine Volltext-Suchanfrage, dann kriegst du jetzt IDs aus der Suchmaschine, dann möchtest du aber vielleicht noch was filtern, was nur in der Datenbank drin steht.

Jochen

Dann musst du nochmal auf die Datenbank, da alle Daten rausziehen und dann nochmal Counts anders ausrechnen.

Jochen

Ja, vielleicht ein paar der Facettencounts kommen aus der Suchmaschine, ein paar kommen aber aus der Datenbank.

Jochen

Das heißt, du hast nicht nur einen Roundtrip über die Suchmaschine, du hast auch noch einen Roundtrip über die Datenbank, wo du halt irgendwie Select irgendwie diverse Sachen vom Datenbankware und dann kommt halt ID in und dann kommen tausend IDs und so.

Jochen

Das ist alles kompliziert.

Jochen

Wenn das halt ein Statement ist, was du halt abfeuerst oder halt vielleicht eins für die Daten selber und eins für die Counts oder so, dann ist das halt deutlich, ist alles irgendwie viel einfacher.

Jochen

Und mit Postgres kriegt man auch das am Anfang alles hin.

Jochen

Und ja, das ist eigentlich sehr nett.

Jochen

Irgendwann geht das aber wahrscheinlich dann halt eben auch nicht mehr.

Jochen

Da muss man halt nach und nach Funktionen in Spezialservices halt auslagern.

Jochen

Einer der ersten, den man wahrscheinlich auslagern wird, ist halt Volltext suchen.

Jochen

Möglicherweise, das macht dann halt irgendwann Elasticsearch oder Solar oder so.

Jochen

Aber halt auch eben sowas wie, wenn man jetzt anfängt, eine Query zu schreiben, kennt man eben Google Surges, hatte ich eben schon erwähnt, kriegt man halt so Vorschläge.

Jochen

Das ist im Grunde, man macht dann halt, man sucht auf den Queries von anderen Leuten.

Jochen

Aber dann hat man halt genau das Problem, dass halt sozusagen die History der Querys muss halt irgendwie aus dem Analyse-Ding wieder zurück ins OTP-System oder in irgendeinen anderen Service, auf den man dann per Suffix-Tree irgendwie nach Queries, die möglichst ähnlich sind, zu den drei Buchstaben, die man jetzt schon eingegeben hat oder so raussuchen.

Dominik

Natürlich schnell mal tippen kann, drei, vier, fünf, ja.

Jochen

Ja, ja.

Jochen

Und also man kann das am Anfang auch alles über Postgres machen, wenn es dann halt komplizierter wird, muss man das als in eigenen Services auslagern und so weiter und so.

Jochen

Und dann wird es halt alles, dann wird das System größer und schwieriger.

Jochen

Ja, genau.

Jochen

Und ja, und immer die Datenbanken, die man nimmt, werden halt immer spezialisiert.

Also das würde ich auch empfehlen.

Jochen

Also man fängt halt mit Postgres an, macht mit Postgres einfach alles.

Jochen

Und wenn man dann halt irgendwann an Grenzen stößt, dann muss man halt Wodo oder Übel dann Sachen in halt Spezialdatenbanken auslagern.

Jochen

Und ja, bezahlt dann halt mit Komplexität.

Jochen

Genau.

Dominik

Ja, wir müssen ja nochmal gucken, wie wir das weitermachen.

Jochen

Genau.

Jochen

Wir nehmen Redis zum Cachen einfach von langlaufenden Queries und von irgendwie gerenderten Fragmenten, die halt aufwendig zu rendern sind, also irgendwelche Listen von Dingen oder so, die sich aber jetzt nicht dauernd ändern.

Jochen

Und genau.

Dominik

Es werden so Daten immer größer.

Jochen

Ja, die Daten werden noch immer größer und das Problem ist auch, wir sind mittlerweile weltweit unterwegs.

Jochen

Wir verkaufen nicht nur Bücher, wir kaufen alles von A bis Z.

Jochen

Amazon.

Jochen

Ich weiß nicht, ob ihr das schon gesehen habt, es gibt diesen Pfeil von A bis zum Z oder Amazon.

Jochen

Ja, dann stellt sich ja die Frage, wenn wir das global machen, wo stellen wir dann den Master eigentlich hin?

Jochen

Das ist halt auch schwierig.

Ja.

Dominik

Wo wird denn stehen?

Dominik

Also in einem sicheren Land?

Jochen

Ja.

Dominik

Oder klauen wir mit denen.

Jochen

Wir müssen an alle Stellen irgendwie so einen kleinen Master stellen, wo halt viel Traffic ist.

Dominik

Kann man den Master mirroren, dass man dann tatsächlich sagt, dass überall derselbe irgendwie.

Jochen

Ja, also es gibt natürlich auch irgendwie für diese Geschichten so Lösungen, dass man halt, dass die Master sich miteinander synchronisieren, das gibt es für Postgres auch, aber das ist alles irgendwie, ich weiß nicht so genau.

Jochen

Richtig.

Jochen

Alles nicht so richtig, das funktioniert alles nicht so richtig.

Jochen

Und ja, da gibt es, es gibt auf jeden Fall keine nette Es ist halt auch ein mehr oder weniger unlösbares Problem.

Jochen

Also das ist auch theoretisch quasi nicht wirklich in den Griff zu kriegen.

Jochen

Man kann aber Dinge tun, indem man halt auf andere Architekturen umstellt.

Jochen

Man kann halt, ja, also ich habe jetzt mal hier als Beispiel genommen, diese, du willst halt, dass manche Sachen immer funktionieren.

Dominik

Ja, eigentlich sollte immer alle möglichen Sachen funktionieren, ja, ja.

Jochen

Und manchmal ist die dann halt irgendwie Konsistenz und so egal.

Jochen

Also zum Beispiel für Amazon super wichtig, ist halt der Einkaufswagen.

Jochen

Du musst halt immer weiter, das Spice muss fließen, jetzt wird es immer weiter einkaufen können.

Jochen

Auch wenn jetzt, daher haben sie das halt, ich glaube, das war auch, also das Amazon Dynamo basiert auf einem System, das sie für sich selbst gebaut haben, eben für genau diesen Shopping-Basket, und der halt genau darauf ausgelegt ist, dass dieses Ding halt einfach immer funktioniert.

Jochen

Und das ist mehr oder weniger einfach nur so ein total simpler Key-Value-Store.

Jochen

Und du lebst halt dann damit, dass das nicht konsistent ist.

Jochen

Oder dass halt, wenn du was kaufst, das halt vielleicht nicht mehr im Lager ist.

Das kann dann durchaus passieren, weil dieses Ding ist halt ein eigener Service, das hat keine Verbindung zu einer zentralen, das hat schon keine Verbindung außen, aber man kann halt nicht den echten Status abfragen, weil wo ist der?

Jochen

Das ist halt schwer zu sagen.

Jochen

Und das, was Amazon dann macht, tatsächlich, habe ich auch gehört, dass solche Sachen können dann ja auftreten.

Jochen

Du kaufst ein Buch, das ist nicht mehr lieferbar.

Jochen

Ja, und jetzt?

Jochen

Also das heißt, es fällt erst so fünf Minuten später, fällt bei Amazon auf, geht nicht.

Jochen

Wir haben jetzt zwar hat jemand was bestellt, wir haben die Entscheidung zugesagt, du hast da eine Bestätigungsmail bekommen irgendwie und jetzt fällt aber auf so, ah fuck, im Lager ist das nicht mehr drin.

Jochen

Wir können es dir nicht schicken.

Jochen

Was macht Amazon dann?

Dominik

Ja, also höchstens entweder nachordern von irgendeinem Service, wie wir eben das Problem hatten, oder die sagen dann irgendwann so, wir schicken dir einen Gutschein raus, irgendwas gibt es nicht, aber.

Jochen

Genau, es kommt eine Entschuldigungsmail und sie geben dir einen Gutschein.

Jochen

Was da das nicht so super häufig passiert, ist das halt nicht schlimm.

Jochen

Das ist halt viel einfacher, das über Gutschein zu lösen, als über ein Datenbanksystem, was das irgendwie handeln kann, weil das gibt es eben einfach nicht.

Jochen

Und ja.

Dominik

Wenn man kurz den 3D-Drucker anschmeißen, wird schnell nachproduziert, ja.

Jochen

Ja, genau.

Jochen

Das ist halt das auch, was dann halt gebrochen wird, in relationalen Daten, man nehmen wir das oft Asset.

Jochen

Also Atomicity, Consistency, Isolation und Durability.

Jochen

Atomicity ist eigentlich quasi das, was Transaktionen betrifft, dass halt entweder alles gut geht oder alles fehlschlägt, aber nicht irgendwie Teile einer Transaktion oder Teile von einer Menge von Dingen, die man tun will, halt gehen und dann mancher Sachen nicht gehen, das sollte halt nicht passieren.

Jochen

Consistency heißt halt, dass die ganzen Foreign Key, dass es halt die referenzielle Integrität halt gewahrt bleibt, dass da Sachen nicht zerbrechen, was halt dann auch nicht mehr geht, wenn du Sachen über mehrere Datenbanken verteilst, weil dann hast du halt teilweise eben keine direkten Verbindungen, sondern du hast halt bloß wie A-Pies dazwischen.

Jochen

Isolation ist halt die Geschichte, dass du nicht Sachen, die andere Transaktionen machen, in deinen Daten siehst.

Jochen

Also das halt, man nennt das Dirty Read, wenn du halt in deiner Transaktion Dinge aus anderen Transaktionen siehst, die noch nicht abgeschlossen sind.

Jochen

So dass du halt, dass du immer, dass deine Sicht auf die Datenbank komplett isoliert ist von den anderen.

Jochen

Es gibt unterschiedliche Isolationslevel.

Jochen

Postgres hat per Default den höchsten, glaube ich, Serializable, ist der höchste.

Jochen

Dann gibt es noch Repeatable Read.

Jochen

Repeatable Read war lang, glaube ich, lange.

Jochen

Aber mittlerweile ist es serializable.

Jochen

Kann man auch nachgucken, was das bedeutet.

Jochen

Es gibt da feine Unterschiede.

Jochen

Und genau, Isolation und Durability ist halt einfach nur das, wenn eine Transaktion gesagt hat, okay, ich bin durchgeführt, dass dann halt auch nichts mehr schief gehen kann.

Jochen

Was extrem schwierig ist zu implementieren.

Jochen

Und ja.

Stromaus.

Jochen

Genau, Strom aus muss trotzdem, wenn die Datenbank wieder hochkommt, alles im richtigen Zustand sein.

Jochen

Aber das kann man ja oft dann nicht so wirklich gewährleisten.

Jochen

Also man kann ja nicht, das ist halt.

Dominik

Der Hauptspeicher, dann ist ja flüchtig und nicht.

Jochen

Der Hauptspeicher ist flüchtig, das heißt, man darf es nicht in den Hauptspeicher einfach nur schreiben, sondern die Transaktion darf erst als dann durchgegangen, wert zurückgeben, wenn das im Write-Ahead-Lock gelandet ist und das mit F-Sync irgendwie auf die Platte geschrieben ist.

Jochen

Ja, und F-Sync ist halt teurer, teurer Syscall, das macht das sehr langsam.

Jochen

Auch diese Isolation macht es halt langsam, aber das sind auch alle Sachen, die man halt weiter runterfahren kann.

Jochen

Du kannst halt zum Beispiel auch, das machen Leute halt auch für Postgres zum Beispiel.

Jochen

Du kannst unterschiedlichen Usern unterschiedliche Isolationslevel geben.

Jochen

Und dann kannst du sagen, wenn jemand Analyse-Queries macht, dann oder bestimmte Arten von Queries, bei denen es völlig egal ist, ob die super isoliert sind oder nicht, dann kannst du sagen, wenn dieser User, also dieser User hat halt ein viel niedrigeres Isolationslevel, der macht dann halt Dirt-Reads, aber das ist halt egal für dessen Anwendungsfall.

Jochen

So kann man Sachen deutlich beschleunigen.

Jochen

Dann, was man auch machen kann, das sollte man halt jetzt nicht tun, wenn man Bestellungen, äh, Bestellungstransaktionen prozessiert, aber zum Beispiel, wenn man testet, oft hat man ja viele Tests für eine Applikation und es dauert lange, bis sie durchlaufen, wenn es irgendeine Änderung macht und man führt die Tests aus und das dauert ein paar Minuten, das ist halt schlecht, weil es halt diesen, man ändert was, führt die Tests aus und hat dann sofort Feedback-Cycle irgendwie kaputt macht, wenn man dann h

Jochen

alt irgendwie Kaffee trinken gehen muss.

Jochen

Und es macht auch so irgendwie ein bisschen die Konzentration kaputt.

Jochen

Daher wäre es schön, wenn die Tests irgendwie schnell laufen würden.

Jochen

Und da man aber auch für die Tests, jetzt wenn man jetzt ein Django-Projekt hat, auch die echte Daten, auch ein Postgres verwenden will, was viele Leute früher gemacht haben, ist dann halt ein SQLite zu verwenden, das nur in Memory ist.

Jochen

Das geht dann viel schneller, aber das Problem ist halt, dass SQLite sich anders verhält als Postgres und dann laufen die Tests durch und man denkt, das ist alles gut und dann geht es auf die Datenbank und dann geht's schief.

Jochen

Nicht so gut.

Jochen

Aber was man tatsächlich machen kann, ist, Postgres zu sagen, ja, irgendwie nicht F-sinken, mach mal nicht.

Jochen

Und man kann auch die Postgres dann auf eine In-Memory-Partition legen quasi.

Jochen

Das geht auch.

Jochen

Kann man auch irgendwie per Docker-Argumenten kann man das irgendwie sagen und dann sind die Tests halt viel, viel schneller.

Jochen

Weil für Tests ist es mir egal, ob das jetzt, wenn der Strom ausgeht, dann ist es mir wurscht.

Jochen

Die Testdatenbank schmeißt sich sowieso nach jedem Testlauf wieder weg quasi.

Jochen

Also ja, aber für die echte Produktionsdatenbank, die muss halt bei Transaktionen tatsächlich dafür sorgen, dass das nicht mehr verschwinden kann.

Jochen

Und das heißt, sie muss Apps aufrufen und dann ist das halt einfach langsam.

Jochen

Da kann man auch nichts machen.

Dominik

Okay, einmal ein bisschen Asset, ne?

Jochen

Ja, genau, haben wir Asset.

Jochen

Und dann, ja, also was wir, was wir dann heutzutage oft haben, sehen bei Datenbanken, die das halt, also Dokumentdatenbanken, genau, ist halt ein anderes Paradigmat, das nennt sie Base, also Basic Availability, Soft State, Eventual Consistency, also wo man halt versucht, die Sachen so aufzulockern, um halt es möglich zu machen, dass man zum Beispiel mehrere mehrere Datenbanken schreiben kann.

Ja.

Ja.

Dominik

Sind jetzt schon ziemlich groß geworden, oder?

Jochen

Ja, genau, wir sind jetzt ziemlich groß und was wir jetzt haben, wenn wir auf mehrere Sachen schreiben wollen, ist halt, genau, das Asset ist halt weg.

Jochen

Pech gehabt.

Jochen

Wir haben ja noch ein anderes Ding, das dann noch, das Cap-Theorem, Consistency, Availability und Partition Tolerance.

Jochen

Das ist halt auch diese, wenn man immer, wenn man so Sachen, pick two out of three Sachen sieht, also das Cup-Theorem ist halt so das ursprüngliche Ding dafür.

Jochen

Du kannst halt zwei davon hinkriegen, aber drei nicht.

Jochen

Und Partition Tolerance ist leider nicht optional.

Jochen

Das musst du halt haben.

Weil anders.

Jochen

Partition Tolerance, also was ist, wenn Netzwerkverbindungen zwischen zwei deiner Datenbank-Dinger irgendwie wegfällt oder so.

Jochen

Das muss halt leider, das ist halt mandatory sozusagen.

Jochen

Das heißt, du kannst nur noch zwischen Consistency und Availability halt irgendwie wählen.

Jochen

Und du hast halt, ja, dann gibt es halt Datenbanken, die dann halt unterschiedliche Trade-offs realisieren.

Jochen

Ja, äh, genau.

Jochen

Das ist zum Beispiel ein interessanter Fall ist halt sowas wie CouchDB.

Jochen

Die halt, äh, wo du sogar, wenn du halt offline bist, immer noch immer noch eine Datenbankverbindung hast oder immer noch deine Applikation benutzen kannst und die schreibt dann halt das in eine lokale CouchDB-Instanz, auch interessant, weil es ist halt so ein JavaScript-Ding, das ist dann natürlich.

Jochen

Aber früher hatte man so jQuery als Abstraktionslevel für alles, was irgendwie auf diesem DOM-Modell im Browser irgendwie Dinge tut.

Jochen

Man möchte es ja vereinheitlichen, alle Browser haben das unterschiedliche, haben da unterschiedlichen Funktionen gehabt.

Jochen

Also hatte man jQuery und wenn man jQuery konnte, dann war es einem halt quasi egal, welcher Browser da drunter lag.

Jochen

Und bei CouchDB ist es so, das abstrahiert so ein bisschen diese Storage-APIs, die Browser haben.

Jochen

Also es ist halt quasi dafür gedacht, wenn du jetzt eine lokale, wenn du eine Webseite auf einer Smartphone hast oder so, und du hast halt nicht immer Verbindungen, du möchtest aber trotzdem, dass sich deine Webseite so anfühlt, als hättest du irgendwie eine Verbindung.

Jochen

So man ist so Offline First oder so, jetzt mit einem Shopping-Kontext ist das halt nicht so richtig gut vorstellbar, warum das irgendwie sinnvoll ist.

Jochen

Aber nehmen wir an, du hast jetzt irgendwie sowas wie Trello, also irgendwie so Tasks oder so, wo du Sachen machen kannst.

Jochen

Dann möchtest du nicht, dass wenn jetzt du durch den Tunnel fährst, dann nichts mehr geht, sondern das geht halt mit CouchDB, das ist halt sozusagen wie JackQuery ein Layer über dem Storage-API von deinem Browser, weil die können das ja auch alle mittlerweile, die haben meistens SQL Lite oder sonst irgendwas drunter und dann halt APIs, mit denen du da irgendwie Dinge drauf tun kannst.

Jochen

Und was CouchDB jetzt letztendlich macht, ist da nochmal ein Layer drüber zu legen und so ein Replikationsfeature zu haben in alle möglichen Richtungen.

Jochen

Also es sind halt Master, Master oder Datenbank zu Datenbank in alle Richtungen.

Jochen

Es ist halt nur so, dass ab und zu können halt Konflikte auftreten und die müssen dann vom User gelöst werden.

Jochen

Das heißt, du bist halt manchmal gefragt, ist das oder das richtig.

Jochen

Aber das passiert jetzt auch nicht so super häufig und das ist halt schon sehr, sehr nett.

Jochen

Also das ist halt, also du kannst halt, auch wenn du offline bist, halt deine Web-Anwendungen weiter so benutzen, als wärst du online und das synchronisiert sich halt in dem Moment, wo du halt wieder Verbindung hast.

Jochen

Und ja, das ist halt dann sehr auf der Availability-Seite und halt dann auf der Konsistenzseite halt nicht.

Jochen

Und deswegen musst du halt dann Sachen auch Konflikte manuell unter Umständen lösen.

Jochen

Genau.

Ja.

Jochen

So, jetzt haben wir, okay.

Jochen

Jetzt sind wir, glaube ich, im Grunde mit dem ganzen traditionellen Kram mehr oder weniger durch.

Jochen

Ja, wahrscheinlich nicht so wirklich.

Wahrscheinlich haben wir so ein bisschen.

Dominik

Ja, hat es schon ganz so lange geschafft, den sie bis hierhin geschafft hat, aber.

Jochen

Aber und jetzt kommt eigentlich nur noch ein Teil und das ist halt irgendwie so Big Data oder Urlaub-Geschichten für wirklich große Dinge.

Really, really, really big things.

Jochen

Ja.

Jochen

Also ich meine, Big Data ist ja so ein bisschen, ich weiß nicht, was sagt, was würdest du sagen, ist Big Data oder warum wollen Leute das haben?

Dominik

Ja, also erstmal hört sich cool an und also jede Exit-Tabelle mit mehr als tausend Teilen kann man schon quick machen oder sowas.

Dominik

Also es kommt halt, glaube ich, ein bisschen auf den Anwendungsverfall an und jeder hat natürlich gerne Big Data, weil es natürlich super ist, man ganz viel machen kann, man kann Analysen mitfahren und sowas.

Dominik

Alles, was halt irgendwie anfällt an Dingen, die man durch die ganzen modernen Daten irgendwie so jederzeit bekommt, ist dann irgendwann sehr big.

Dominik

Fühlt sich einfach groß an, wenn man ganz viele Sensordaten von verschiedenen Punkten bekommt, was soll man damit machen?

Dominik

Man schreibt hier irgendwelche Excel-Tabellen rein.

Dominik

Also Firma, die liegen dann halt auf irgendwelchen Servern oder halt auch einfach nur Rechnern rum und dann hat halt ganz viele große Informationen, oh dass man damit was anfangen kann bisher.

Dominik

Das ist vielleicht schon Big Data, ich weiß nicht.

Dominik

Also ich glaube, dass überall Daten vorhanden sind, ist vielleicht das eigentliche Big Data.

Dominik

Aber ob jetzt so im Einzelfall das wirklich big ist, was

Jochen

hast du?

Jochen

Ja, also genau, ich habe auch, es gibt dann sehr unterschiedliche Auffassungen davon.

Jochen

Es gibt halt Leute, die sagen so, ja, was nicht mehr in der Excel-Tabelle passt, das ist schon so.

Jochen

Also ich würde sagen, vielleicht etwas halbwegs vernünftigere ist halt, was nicht mehr auf einen Computer passt.

Jochen

Aber auch das greift eigentlich zu kurz.

Ich habe dann letztens nochmal irgendwie Spielesammlung.

Jochen

Ja, das war irgendein Talk von Michael Stonebreaker, das ist auch ein, das sind immer die gleichen Namen, auf die man irgendwie in dieser Datenbankwelt stößt.

Jochen

Das sind halt so Michael Stonebreaker, Jim Gray, Takott, weiß ich nicht, Duck Hutting, das ist auch, ähm, der, der hat auch zum Postgres mitbegründet oder Ingress vorher und dann Postgres.

Jochen

Und auch viele der noch moderner, der heute jetzt ganz modernen Geschichten wie Column Stores, also C-Store, Paper ist von ihm, Woltybi für so In-Memory-Datenbanken, Geschichten.

Jochen

Ja, der, der definiert das so, der sagt halt so, naja, es gibt eigentlich drei Arten, wie Data Big sein kann, nämlich irgendwie, ja, es ist einfach zu viel.

Jochen

Und der sagt halt nicht irgendwas Konkretes, sondern sagt halt, du hast halt Probleme mit der Datenmenge.

Jochen

Also es ist halt, wenn du wirklich Schwierigkeiten damit hast und damit nicht fertig wirst, dann hast du halt ein Problem mit der Datenmenge und dann hast du halt Big Data, weil es halt für dich schwierig ist, mit dieser Menge klarzukommen.

Jochen

Aber was halt auch sein kann, ist, und dann hast du halt auch ein Big Data-Problem, auch wenn es jetzt nicht unbedingt eins ist, das mit der Datenmenge zu tun hat, wenn die Daten zu schnell kommen.

Jochen

Also du könntest mit der Datenmenge vielleicht klarkommen, aber sie kommen so schnell, dass du irgendwie nicht fertig wirst.

Dominik

Du hast so ein RESPI oder sowas und der ist ja immer begrenzt und dann.

Jochen

Ja, dann hast du auch ein Big Data-Problem, aber halt eine andere Art von Big Data-Problemen.

Jochen

Und es gibt dann noch eins, das ist halt, wenn Daten aus ganz vielen sehr unterschiedlichen Quellen und sehr unterschiedlicher Art kommen, sind es vielleicht gar nicht so viele und sie kommen auch nicht so schnell, aber du kriegst sie nicht schnell genug integriert oder kriegst du halt nicht in den Griff.

Jochen

Dann hast du auch wie ein Big Data-Problem, was auch wieder leicht anders ist.

Jochen

Und diese drei Dinger sind halt eigentlich alle irgendwie so ein bisschen unterschiedlich.

Jochen

Und ja, oft wird es nicht so richtig klar.

Jochen

Und oft ist es, also ich würde sagen, so ein Big Data ist so ein gehyptes Ding.

Jochen

Und ja, irgendwie werden ganz viele Hadoop-Cluster verkauft.

Dominik

Was ist ein Hadoop-Cluster?

Jochen

Ja, es ist Hadoop ist irgendwie so ein Apache-Projekt, das irgendwie mal gestartet ist als so Implementierung eines Konzepts, nennt sich MapReduce.

Jochen

Das hat so ein Paper, das hat Google mal veröffentlicht, oder irgendwie Jeff Dean und noch ein paar andere haben das veröffentlicht, 2004 glaube ich.

Jochen

Und das ist halt eine Art, mit großen Datenmengen umzugehen und die halt so horizontals irgendwie auf ganz viele Maschinen zu skalieren.

Jochen

Das funktioniert im Grunde so, dass es halt auch genau dafür gedacht ist, wenn man jetzt einen großen Suchendex, wie man bei Google zum Beispiel hat, wie bauen möchte über das gesamte Web, dann kann man das halt eben nicht auf einer Maschine tun.

Jochen

Das ist halt völlig ausgeschlossen.

Jochen

Und man möchte das halt irgendwie auf möglichst viele Maschinen, so eine halbe Million, eine Million oder so, skalieren.

Jochen

Wie macht man das?

Jochen

Und das Konzept, das sich dafür überlegt haben, nennt sich halt MapReduce und ist auch eigentlich nicht wirklich was Neues.

Jochen

Früher hieß es gab es auch schon ähnliche Konzepte, die nennt sich Scatter Gather oder sowas.

Jochen

Und im Distributed Computing Teil gibt es auch diverse Geschichten, die so ähnlich sind.

Jochen

Aber so auf der Skala und so und die Art, wie sie das konkret machen, ist halt schon irgendwie was Neues und auch ein sehr, sehr, sehr cooler Ansatz.

Jochen

Und zwar machen sie das halt so, dass, also im Grunde kann man sich so vorstellen, jetzt wenn man eine Webseite hat, man hält viele Rechner, die halt Webseiten crawlen, dann nimmt man den Text, zerlegt den halt in Worte und man spuckt jetzt sozusagen für jedes Wort einmal das Wort oder für die Webseite, die Worte aus, aus denen die Webseite besteht, plus die Anzahl, wie oft es vorkommt.

Jochen

Das ist halt sozusagen die Map-Phase.

Jochen

Und das machst du jetzt auf allen Maschinen.

Jochen

Und dann führst du das halt irgendwann wieder zusammen in einem Reducer.

Jochen

Und also was du bauen möchtest, ist sozusagen so ein etwas, also ein Index, das ist halt wie ein Index in einem Buch, wo halt steht, welches Wort kommt auf welcher Seite vor.

Jochen

Und du musst du musst halt für so eine Webseiteinterseite musst halt sagen, welches Wort kommt auf welcher Webseite vor.

Jochen

Das ist halt das, was du hinterher haben willst.

Dominik

Und die sortiert man dann nach der Reihenfolge, wie oft das immer vorkommt oder so ungefähr.

Jochen

Genau, aber man muss halt auch wissen, wie oft es vorkommt, weil man halt bestimmte Geschichten, also man nennt, ja.

Dominik

Wir stehen am Anfang von der Liste, wie oft das vorkommt.

Jochen

Ja, man rechnen so TF, EDF-Scores aus und dafür braucht man halt die Term-Frequenzen.

Dominik

Das ist so bitte was, ein TF, IT, SPD.

Jochen

Ja, Term-Frequence mal Inverse Document Frequency ist halt sozusagen ein wichtiger Wert dafür, wie wichtig jetzt ein Wort ist in einer Webseite oder in einem Dokument.

Jochen

Und dafür muss man halt zählen, wie oft ein Wort vorkommt.

Jochen

Ja, aber man muss halt auch zählen, wie oft das Wort überhaupt vorkommt.

Dominik

Und dann generell das noch mit dem Kontext und der Wichtigkeit und so im Zusammenhang setzen.

Jochen

Naja, also in dieser Mapphase imitiert man im Grunde nur, welche Webseite war das, wie oft ist das Wort da vorgekommen und dann werden diese Ströme dann zusammen reduced und dann sozusagen hat man halt irgendwie dann diesen Index, wo dann zu jedem Wort steht, auf welchen Webseiten es vorkam und ja, wie oft und wie oft es insgesamt vorkam und so.

Jochen

Und dann kann man irgendwie so Abfragen machen.

Jochen

Und das kann man halt komplett voneinander trennen, da halt bestimmte, da man, da sich diese Sachen komplett voneinander, du kannst halt nach Worten auftrennen.

Jochen

Also du musst halt nur dafür sorgen, dass das gleiche Wort immer auf, dass alle Sachen, die zum gleichen Wort gehören, zusammengeführt werden.

Jochen

Aber du kannst halt ja für unterschiedliche Worte unterschiedliche Maschinen benutzen.

Jochen

Das ist halt gar kein Problem.

Jochen

Und damit kannst du es quasi beliebig horizontal skalieren.

Jochen

Auch da wiederum ist es schwer zu erklären, dann kann sich das einfach mal angucken, aber es gibt auch noch.

Dominik

Dann bietet sich einfach so ein Rechenzentrum, das schaltet einfach noch eine Maschine ein, wenn du welche brauchst oder so.

Jochen

Genau, du kannst dann halt einfach immer mehr Maschinen dazustellen.

Jochen

Und ja, viele Leute haben sich gedacht, oh, das ist mal eine coole, coole Idee.

Jochen

Und dann, ja, derjenige, einer von denen, der Name man immer hört, irgendwie Doug Hutting, der hat damals schon bei Excite irgendwie die Suchmaschine gebaut, hat dann später eine sehr populäre, oder immer noch die populärste Volltext-Suchmaschine, die es so gibt, Lucinen oder The Engine darunter jedenfalls geschrieben, auch ein Buch darüber, das ja und irgendwann hat er sich halt diesen, ist er eher so in diesen Big Data Hadoop Bereich gegangen und der hat halt ursprünglich auch irgendwie dieses Hadoop-Projekt dann

Jochen

losgetreten und dabei ging es halt darum, ein System wie das, was Google halt zum Bauen der NDCs verwendet hat, in Open Source nachzubauen.

Jochen

Unter diesem Apache-Projektschirm.

Jochen

Und ja, das hat auch gut funktioniert alles.

Jochen

Es ist ein Riesenprojekt geworden.

Jochen

Es ist auch für manche Sachen halt total super.

Jochen

Ich würde jetzt nur sagen, also es wird heute viele Dinge verwendet, für die es vielleicht nicht so gut geeignet ist eigentlich.

Zum Beispiel.

Jochen

Ja, also es ist, glaube ich, für viele Firmen heute so die generische Data-Warehouse-Lösung geworden.

Jochen

Obwohl es dafür weiß ich nicht.

Jochen

Also ich würde ja sagen zum Beispiel, viele Firmen haben eben keinen Big Data.

Jochen

Die haben nicht das, die haben keines dieser drei Big Data-Probleme, sondern

Dominik

wissen eigentlich noch nicht, wie die es machen sollen.

Jochen

Ja, die haben einfach nur Daten und eigentlich passt das an den Hauptspeicher und die brauchen nichts davon.

Jochen

Das ist, die können einfach die

Dominik

mit einem Postgres-Server.

Jochen

Ja, oder nicht mal das, äh.

Dominik

SQLite Memory.

Ja, ja.

Jochen

Also ein Freund von mir sagte immer so, oder nee, wer hat das?

Jochen

Ach, ich habe das, und ich glaube, ich habe es auf Twitter gelesen, Unsinn.

Jochen

Man sollte irgendwie, ich weiß aber nicht mehr, wer es war, ich sollte eigentlich mal einen Consulting-Service gründen, der irgendwie den man engagieren kann, wenn man vor der Frage steht, ob man sich jetzt ein Hadoop-Cluster irgendwie kaufen möchte oder nicht.

Dominik

Die Antwort ist immer nein.

Jochen

Gehe ich da hin und sage, lass mich überlegen.

Nein.

Jochen

Deine Daten fit in RAM, ja, ich würde ja fit in RAM, no.

Jochen

Und da einfach jedes Mal 10.000 Dollar für verlangen.

Jochen

Ja, das würde, hätte ich hätte ich irgendwie ein nettes Einkommen durch und würde den Unternehmen ein Vielfaches davon sparen, von dem, was sie dann ausgeben, wenn sie das nicht haben.

Dominik

Das hatten ja das Frühante.

Jochen

Und da ist leider viel Wahres dran.

Jochen

Also es gibt wenige, die das wirklich brauchen.

Jochen

Viele schaffen es sich trotzdem an und haben dann ein kompliziertes, eine komplizierte Lösung für ein Problem, das sie nicht haben.

Dominik

Die Rattenfanzter, ich meine das natürlich für die Leute, die dann Geld verdienen.

Jochen

Genau, für das Problem, was sie haben, ist das einfach total kompliziert zu benutzen.

Jochen

Also Dinge wären viel einfacher, wenn sie das nicht machen würden, aber naja, so ist es halt nun mal.

Jochen

Und von diesem Map-Reduce-Ding ist auch diese ganze Hadoop-Welt auch schon so ein bisschen wieder weg.

Jochen

Auch Google macht nicht mehr wirklich Map-Reduce, also manche Sachen machen sie möglicherweise noch Map-Reduce, aber es sind ja auch andere Systeme gegangen, Pregels und Graph-Processing-Ding, was sie da machen, was halt relativ viel tut von dem, was früher Map-Reduce gemacht hat.

Jochen

Und auch bei Hadoop ist es halt so, dass das, was geblieben ist, ist irgendwie so ein verteilter Dateisystem-Layer, so auch ein Management von diesen Nodes irgendwie in diesem Cluster.

Jochen

Aber die Engines, die jetzt irgendwie Querys darauf prozessen, dafür gibt es halt, das nennt sich Hive, irgendwie da schreibt man Quarys in so einem SQL-ähnlichen, oder das ist schon SQL, man schreibt halt das so SQL und das wird dann halt in MapReduce-Jobs verwandelt und wird dann halt auf den, ja, also im Grunde die Idee bei der ganzen Geschichte ist, dass man halt nicht mehr die Daten zu einer Stelle bringt, wo sie dann prozessed werden, sondern man bringt den Algorithmus zu den Daten.

Jochen

Die liegen halt, man kann die Daten nicht mehr an einer Stelle zusammenführen, weil es sind einfach zu viele.

Jochen

Die liegen halt auf den lokalen Nodes und man trägt jetzt den Algorithmus zu diesen Daten und der läuft dann halt lokal auf den Cluster-Nodes darüber und dann am Schluss wird das alles wieder zusammengeführt, äh, zusammenreduced und dann kriegt man halt das Ergebnis.

Jochen

Und für einen selber sieht das so aus, man schreibt halt ein SQL-Statement und kriegt halt ein Ergebnis.

Jochen

Und in Wirklichkeit hat man dann halt irgendwie einen Job gebaut, der dann halt 100 Mapper, 100 Reducer angestoßen hat und das lief halt über 200 Maschinen.

Dominik

Oh, that's big.

Ja, ja, ja.

Dominik

Vielleicht das Problem nur Big Data dann.

Dominik

Also Big.

Jochen

Aber es wäre halt irgendwie, und das hat dann vielleicht eine halbe Stunde gedauert, aber es ist halt auch möglich, dass wenn man das halt anders gemacht hätte, hätte diese ganze Geschichte auch in der Minute durchlaufen können.

Jochen

Ja, es gibt dann auch andere Geschichten, die jetzt auf solchen Clustern laufen, zum Beispiel rein in Memory-Geschichten, sowas wie Impala.

Jochen

Einer von den PhD-Studenten von Michael Stonebreaker, die damals Postkreis mitgeschrieben haben, ist da irgendwie CTO von der Firma, die da.

Jochen

Ich habe jetzt aber auch wieder vergessen, welche das ist.

Jochen

Das macht das halt in Memory, das sind C geschrieben, das ist alles schneller, das ist viel angenehmer, wenn man damit arbeitet, aber es ist auch so ein bisschen komisch und es ist halt auch nicht so richtig, es ist halt nur ein bisschen instabil.

Jochen

Es gibt diverse andere Geschichten, jetzt gut zu.

Jochen

Ach, das war auch noch ein eigenes Thema eigentlich, Spark, Spy Spark.

Jochen

Was ganz interessant ist, ist, was man vielleicht, lass mich überlegen.

Jochen

Also was sehr interessant ist, ist, dass wir heute etwas sehen, was wir früher eigentlich auch schon gedacht hätten, dass wir das im relationalen Bereich bekommen, nämlich, oder MySQL hat er mit mal angefangen.

Jochen

Die hatten irgendwie, also eines der coolen Features bei MySQL am Anfang war, dass die Storage Engines pluggable waren.

Jochen

Das heißt, du konntest deine eigene Storage Engine da reinbauen.

Jochen

Hat er auch kaum im Endeffemacht.

Jochen

Es gab eigentlich nur zwei relevante.

Jochen

Wie die Daten tatsächlich auf der Platte liegen.

Ah, okay.

Letztlich.

Jochen

Und das ist halt, es gab MyESAM, es gab auch eine CSV-Engine für MySQL, da hast du einfach CSV ausgenommen.

Jochen

Aber MyESam war so populär.

Jochen

MyESOM hat er aber Probleme, hat er das Problem, dass du, wenn du geschrieben hast, da wurde mir die komplette Table gelockt.

Jochen

Das heißt, also da lieber nur lesen, nichts reinschreiben.

Jochen

So reinschreiben, eher doof.

Jochen

Hat trotzdem irgendwie haben das viele lange verwendet.

Jochen

Transaktionen so, das geht alles nicht.

Jochen

Asset war nicht so richtig bei MySQL am Anfang.

Jochen

Und dann hatten sie eine Storage Engine, die das dann aber schon konnte, die auch so wirklich Multiversion Concurrency Control halt richtig konnte.

Jochen

Und das war InnoDB.

Jochen

Und ja, aber eigentlich, so nachdem InnoDB sich durchgesetzt hatte oder irgendwie gut genug war, dann hat sich dieser Pluggable Storage Engine Geschichte von MySQL hat sich dann auch wieder erledigt.

Jochen

Aber Postgres bekommt jetzt, glaube ich, mit der Version 12, also ist es noch nicht sicher, aber es sieht ein bisschen danach aus, als ob sie Pluggable Storage Engines wieder zurückbekommen.

Jochen

Was interessant ist, da es dann zum ersten Mal, aber das Konzept nochmal irgendwie doch nochmal angefasst wird.

Jochen

Und interessant ist auch in diesem ganzen Analytics, Big Data Bereich, dass wir da auch sowas sehen.

Jochen

Wir sehen halt, es gibt nicht mehr so ein Datenbanksystem, wo halt die Represent, also wie die Daten gespeichert werden, tatsächlich an die anderen Teile, also im Grunde besteht ja so ein Datenbanksystem aus vielen unterschiedlichen Geschichten.

Jochen

Es besteht halt aus so einem System, das irgendwie einfach nur die Daten managt irgendwie und Zugriffsrechte verwaltet und irgendwie, und dann gibt es halt so Dinge, wie speichert man das auf der Platte, es gibt Indizes, es gibt so viele unterschiedliche Teile.

Jochen

Und ja, wir sehen jetzt so ein bisschen, dass das halt auch alles wieder so ein bisschen pluggable wird, gerade auch in diesem Big Data-Bereich.

Jochen

Also, auch wichtig, wenn man diese Analysegeschichten macht, hat man im Grunde ist die Art, wie Daten in relationalen Datenbanken speichert werden, ist zeilenweise, ja.

Jochen

Weil man oft, weil die Art von Queries, die man da macht, oft nur wenige Zeilen betreffen.

Jochen

Ein paar tausend oder so, was sind immer noch sehr wenige.

Jochen

Daher macht es Sinn, irgendwie zeilenweise zu arbeiten, sozusagen.

Jochen

Aber für diese Analysegeschichten, dieses ganze Data-Warehousing-Zeugs, ist das überhaupt nicht sinnvoll.

Jochen

Dieses Muster, dass man halt eher Millionen von Zeilen anguckt, aber nur wenige Spalten, weil man sich nur für einen bestimmten Aspekt interessiert.

Jochen

Man interessiert sich oft eben nur für Umsatz oder Preis oder sowas, aber man interessiert sich gar nicht für den Namen des Autors oder so.

Jochen

Daher möchte man eigentlich nicht irgendwie alle die Zeilen immer komplett angucken, weil dann guckt man sich ganz viel Zeug an.

Jochen

Also der Flaschenhals ist oft wie oft die Bandbreite zwischen Platte und Hauptspeicher.

Jochen

Man muss das halt dann irgendwie durch den Prozessor ziehen.

Jochen

Und je weniger Daten man da durchziehen muss, umso besser.

Jochen

Und bei einem zeilenorientierten Format muss ich, wenn ich die Datei lese und die Datensätze halt zeilenweise drinstehen, muss ich halt da sequentiell durch die Zeilen durchgehen.

Jochen

Da hilft es, geht nicht anders.

Jochen

Und das ist halt total ineffizient, weil ich, wenn ich halt nur einen kleinen Teil von diesen Zeilen, nämlich nur eine Spalte, irgendwie überhaupt lesen möchte.

Jochen

Das heißt, wenn ich so Analysequeries auf Datenbanken mache, die zeilenbasiert ihre Daten speichern, dann ist das super ineffizient.

Jochen

Und ich habe halt so einen Verlust von circa, man sagt so immer, ein Faktor 50 ungefähr, sind die halt einfach aufgrund dieser Architekturgeschichte langsamer und zwar unoptimierbar langsamer als sogenannte Column Stores, die halt Daten spaltenweise speichern.

Jochen

Und die ersten Dateisystemformate oder Formate, in denen die Daten zum Beispiel in Hadoop gespeichert wurden, Avo ist, glaube ich, so das erste, ich weiß nicht genau, sind auch alle zeilenbasiert, weil das war halt so.

Jochen

Man hat halt irgendwie zeilenbasiert Sachen gespeichert.

Jochen

Aber das ist halt eben total ineffizient, wenn man halt nur bestimmte Spalten von Datensätzen haben möchte.

Jochen

Und dann gibt es halt neuere Fallformate, wie zum Beispiel oder Serialisierungsformate, Parquet-Dateien zum Beispiel, das ist halt das, was heute eigentlich immer so verwendet wird.

Jochen

Das ist halt dann spaltenbasiert.

Jochen

Und dann liest man eben nur die Dateien oder die Spalten.

Jochen

Es ist halt in einer Datei nur eine Spalte sozusagen.

Jochen

Man liest halt nur die Dateien, die man halt braucht.

Jochen

Und das ist komprimierbar, es ist chunkbar, sodass ich es auf mehrere Rechner verteilen kann und so und hat halt all diese hübschen Eigenschaften.

Jochen

Und ich habe jetzt diese Paket-Files, aber das Format der Daten auf der Platte, das Serialisierungsformat, ist nicht mehr gebunden an die Datenbank, sondern als Layer darüber, mit dem ich jetzt Abfragen mache, habe ich jetzt sowas wie Hive, das macht er MapReduce-Drops draus irgendwie.

Jochen

Ich habe aber auch sowas wie Fala, ich habe vielleicht andere Geschichten, ich habe Spark.

Dominik

Spark hast du eben noch vergessen, übrigens.

Jochen

Ja, Spark, genau, gut, Spark hat auch irgendwie mit was anderem gestartet, diesen DD, hat auch ein eigenes Dataframe-Format, was jetzt nicht Parket war.

Jochen

Aber also worauf es hinausläuft, ist im Grunde, dass ich jetzt so ein Format habe wie Parquet, in dem die Daten auf der Platte liegen.

Jochen

Und jetzt habe ich halt unterschiedliche Engines, die jetzt irgendwie, mit denen ich jetzt Queries verarbeite drauf.

Jochen

Ja, also quasi eine Trennung zwischen dem System, das jetzt meine Quaries irgendwie beantwortet und dem Speicherformat.

Jochen

Also quasi sowas ähnliches wie eine Pluggable Storage Engine.

Jochen

So nur das halt das Storage Format ist halt für alle unterschiedlichen Engines irgendwie gleich, nämlich Paket.

Jochen

Aber das, was halt die Dinge darauf machen, ist halt unterschiedlich.

Jochen

Und das ist eine ganz interessante Entwicklung, finde ich.

Jochen

Also, das ist halt, das ist schon faszinierend.

Jochen

Und ja, die Column Stores sind halt sozusagen das, sind für so Data Warehousing eigentlich das Coole.

Jochen

Es gibt halt so im C-Store Paper, ist halt auch eine Firma, entstanden, Vertica, glaube ich.

Jochen

Die machen halt, wenn man, wenn man irgendwie ein großes Data Warehouse haben möchte, dann ist es wahrscheinlich irgendwie so das Beste, wenn man irgendwie zu einer Firma geht und das macht.

Keine Ahnung.

Jochen

Oder gibt es auch wahrscheinlich auch noch andere, die sowas ähnliches machen, aber was halt nicht gut wäre, ist halt, wenn man, wenn man mit so einem Problem zu Oracle geht, weil Oracle ist halt nicht column-orientiert, sondern die sind halt zeilenbasiert, egal was sie dazu sagen.

Jochen

Sie versuchen das mit ihrem Marketing immer zu verschleiern, aber es ist halt, ja, genau wie MSSQL-Server und die ganzen klassischen relationalen Datenbanken, die sind alle zeilenbasiert und da gibt es auch nichts, was man tun könnte.

Jochen

Ja, es sei denn, man tauscht die Storage-Engine aus.

Jochen

Das ist halt, bei Postgres wird das nochmal interessant.

Jochen

Also Postgres, da hat man das Problem halt, wenn man Data Warehouse auf Postgres aufbaut, dann ist man immer dann an die zeilenweise Verarbeitung gebunden, kann halt auch nichts machen.

Dominik

Wenn man das demnächst dann halt mit Packet machen könnte, dann.

Jochen

Ja, wenn man irgendwie Packet und Postgres irgendwie verheiten könnte, das wäre natürlich schon ziemlich cool dann irgendwie.

Jochen

Ja, genau.

Jochen

Und das sind halt so die, ja, das sind halt so diese Geschichten beim Data Warehousing.

Jochen

Genau, so Hadoop, man nennt das auch so nicht Data Warehouse, sondern weil man auch alles mögliche andere drin speichern kann, Data Lake, weiß ich gar nicht, ob man da so ins Detail gehen muss, weil man auch noch Bilder und sonst wie andere Unterschied.

Jochen

Man kann halt alle möglichen Arten von unterschiedlichen Daten.

Jochen

Man kann auch so ein bisschen umkippen, wenn man das dann Data Swamp.

Jochen

Ja, und ja, also ich bin ehrlich gesagt nicht so ein Riesenfan von YouTube, muss ich sagen.

Jochen

So, aber auch, ich habe da auch schon ein bisschen so schmerzhafte Erfahrungen mit gemacht.

Jochen

Weil so Daten rein und rauskriegen, ist irgendwann so ein bisschen hässlich.

Jochen

Und das ist auch noch alles nicht so weit.

Jochen

Also bei so klassischen Datenbanken ist halt, da merkt man, also beim Postgres-Grad verwendet zum Beispiel, merkt man halt so, da ist halt schon Jahrzehnte Erfahrungen drin und viele der Use Cases, die man so hat, also wenn man da auf blöde Probleme stößt, dann ist man wahrscheinlich selber schuld.

Jochen

Also das ist halt sehr selten, würde ich jetzt mal so.

Jochen

Dass man auf etwas stößt und man hat wirklich ein Problem mit der Datenbank, sondern man hat ein Problem mit, man hat die Dokumentation nicht genau genug gelesen oder man weiß, man hat irgendwie ein Verständnisproblem oder so.

Jochen

Und das sind ja alles Sachen, die sich gleich fixen lassen.

Jochen

Also es wäre halt schlecht.

Dominik

Man sollte nichts damit auskennen.

Jochen

Ja, wenn man tatsächlich ein Problem mit der Datenbank hat, ist natürlich schlecht, weil da kann man nichts machen.

Jochen

Außer Datenbank wechseln oder irgendwie selber neu schreiben oder sowas nicht gut wäre.

Jochen

Und bei Hadoop habe ich so das Gefühl, da kann natürlich auch was sein, dass ich einfach zu blöd war, es zu bedienen, aber ich habe so das Gefühl, viele Dinge, die man da macht, sind nicht dadurch begrenzt, dass man irgendwie nicht genug weiß oder nicht genug, die es nicht richtig verwendet, oder es falsch rumhält irgendwie, sondern bestimmte Sachen gehen einfach noch nicht oder gehen nicht richtig.

Jochen

Oder man hat Use Cases und dann stellt man so fest, so ja, hat niemand drüber nachgedacht, ist nicht so richtig abgebildet, hm, blöd.

Jochen

Und das wird wahrscheinlich alles irgendwie viel besser, aber momentan ist es noch nicht so, es ist noch ein bisschen scharf, fühlt sich alles ein wenig scharfkantig an.

Dominik

Kann sich überall schneiden und wir tun, ist auer.

Jochen

Ja, und außerdem, dass es halt alles auf dieser Java-Geschichte aufsetzt, ist auch sowas, muss ich auch sagen.

Dominik

Sind wir wieder bei dem Ding, was wir eigentlich als Running Gag nehmen wollten, haben wir es doch dazu.

Jochen

Ja, Java verlassen, aber wieder.

Das ist.

Dominik

Ja, also ungefähr nach zweieinhalb Stunden sind wir doch viel drauf gekommen, ja.

Jochen

Aber da ist halt möglicherweise der Ausweg, irgendwie sowas wie Pi Spark zu verwenden.

Jochen

Spark auch nochmal, eigentlich müssen wir dann mal ein eigenes Thema zu machen.

Jochen

Aber sehr schön, das Ding ist so, dass man halt quasi Sachen automatisch verteilen kann.

Jochen

Man hat sie lokal, man kann damit anfangen, dass man es auf einer Maschine hat und dann führt man Sachen auf dem Cluster aus und das ist wirklich mehr oder weniger seamless.

Jochen

Das Einzige, man hat sogar einen vollständigen Python-Interpreter, das ist irgendwie nicht so eine verkrüppelte Version.

Jochen

Man kann halt tatsächlich irgendwie Seitensachen damit machen.

Jochen

Das heißt, man kriegt Sachen auch wirklich, wirklich schnell.

Jochen

Ja, im Gegensatz zu Java.

Jochen

Java geht vielleicht auch, ich weiß es nicht genau, aber ich glaube, es ist ziemlich schwer, Sachen wirklich optimiert hinzukriegen.

Jochen

Während in Python ist es halt relativ leicht, irgendwie mit Seiten halt ein Dialekt von Python zu schreiben, wo man dann einen Typ Annotationen dazu schreibt.

Jochen

Wo die dann halt zu C kompiliert werden, dann wird das als C-Modul und dann wird es wieder reimportiert und das kann man halt auch auf den Cluster irgendwie ausrollen, irgendwie über PySpark.

Jochen

Und dass man jetzt irgendwie C-Code irgendwie in Java reinbastelt und das dann halt über Hadoop, über die MapReduce-Service verteilt, weiß ich nicht.

Jochen

Kann auch sein, dass das geht, keine Ahnung, aber das klingt irgendwie nicht so leicht.

Jochen

Ja, wie auch immer.

Jochen

Also Spark ist auf jeden Fall auch noch eine super interessante Geschichte, vor allen Dingen, wenn es jetzt darum geht, wenn man jetzt sowas hat wie so ein Data Lake und so, und wie kommen denn Informationen rein?

Jochen

Man möchte eigentlich nicht da so ITL-Jobs machen, das funktioniert alles nicht mehr, möchte auch Echtzeit, Dashboards haben irgendwie.

Jochen

Und dann muss man halt auf so eine, oder sollte man, dann wechselt man halt irgendwann auf so eine Streaming-Architektur, wo halt Dinge auf der Webseite, also auch gerade wenn man jetzt sowas hat wie, also auch Amazon wird, selbst wenn man die Bestellungen nimmt oder so, das ist alles noch nicht Big Data, aber wenn jetzt zum Beispiel Amazon, und das tun sie bestimmt, irgendwie jeden Klick, den User macht auf der Webseite, auch irgendwo irgendwo eine Faktentabelle, ihr Data Warehouse, Data Lake, Ding reinspeichern möchte.

Dominik

Data Swamp.

Jochen

Ja, dann wird das Big.

Jochen

Weil das ist halt schon viel.

Jochen

Dann ist so ein Verhältnis von Bestellungen zu, Leute machen irgendwie Web-Requests oder klicken auf der Seite rum, ist halt wahrscheinlich nochmal so irgendwie Faktor 100 oder mehr.

Jochen

Und ja, dann wird es tatsächlich sehr, sehr groß und man möchte das aber trotzdem alles in Echtzeit haben.

Jochen

Das heißt, man macht es nicht so, dass man diese Geschichten wieder in die Prozessdaten, in diese OTP-Datenbank reinschreibt und dann halt hinter extrahiert und batchmäßig jeden Tag irgendwie ein Analysesystem schreibt, sondern dann generiert man halt so Events, die dann halt über irgendein Streaming-Zeugs halt Service laufen, der das dann halt an unterschiedliche Consumer irgendwie ausliefert.

Jochen

Und das ist meistens Kafka.

Jochen

AWS hat noch eine eigene Lösung, normalerweise auch wieder den Namen vergessen.

Dominik

Meinst du aber nicht die Lambda-Service, ist das was anderes?

Jochen

Nee, nee, das ist was anderes.

Jochen

Nächstes eine eigene, ja, aber sagen wir mal, Kafka als Beispiel, ist auch ein Apache-Projekt, das das halt sehr schön macht.

Jochen

Und dann serialisiert man halt irgendwie die Daten, die man im Event hat, als irgendwie als Protokollbuffers oder sowas.

Jochen

Und dann gehen die Dinger halt auch da wiederum Serialisierungsformate sehr, also es gibt halt sehr unterschiedliche Protokollbuffers, sind super, wenn man Daten übertragen möchte oder auch diese Schrift von Facebook.

Jochen

Super scheiße, wenn man das halt auf die Platte schreibt.

Jochen

Also es wäre halt dann auch wieder Zeilenbasiert, kann man hinterher nicht mehr gut analysieren.

Jochen

Also man kann halt nicht einfach irgendwie die Events, die man generiert, als Protokollbuffers irgendwie in Kafka kippen und dann das irgendwo auf eine Platte schreiben lassen.

Jochen

Das reicht halt nicht, sondern man muss es halt dann doch auch irgendwie wieder, irgendwie so Zwischendinge kippen.

Jochen

Aber man kann halt auch, man kann halt etwas haben, was halt teilweise aus diesen Paket-Files liest und dann halt die aktuellsten Daten liest es halt aus einem Log der Protokollbuffer-Events.

Jochen

Weil das muss ja dann vielleicht nur für die letzte halbe Stunde sein oder so, ne?

Jochen

Kommt halt mal drauf an.

Jochen

Ja, und dann kann man halt tatsächlich Echtzeitdaten sehen.

Jochen

Kann man halt ein Dashboard machen, wo man halt eine Echtzeit sieht, wie sich die Zukunftsmuster ändern, wenn man jetzt zum Beispiel für einen bestimmten Teil der User irgendwie die Webseite ändert oder so.

Jochen

Und das ist natürlich schon sehr nett.

Jochen

Und wenn man halt irgendwie Preise erhöht, dann sieht man halt irgendeine Echtzeit, wie die Conversion runtergeht.

Ah, der Preis war gut.

Jochen

Und dann kann man halt so als Manager vor diesem Dashboard sitzen und in den Knöpfen drehen und dann vor die Wand farmen.

Jochen

Nein, ähm, und dann irgendwie Profit maximieren.

Jochen

Ja, das ist schon sehr nett.

Jochen

Ist aber auch halt sehr aufwendig.

Jochen

Also dann, das macht alles nochmal viel komplizierter.

Jochen

Ja, und diese Serialisierungsformatgeschichte ist halt sehr wichtig.

Jochen

Etwas, was mir bei den Hadoop-Erfahrungen dann geholfen hat, war ein Projekt namens Apache Arrow, wo es darum geht, das ist von dem ursprünglichen Autor von Pandas, also dieser Data Frame Library für Python, der das gestartet, weil der da halt einen, der, das, und das ist auch tatsächlich, also ich, während ich mich halt mit Hadoop beschä

Jochen

ftigt, mich hat es an den gleichen Stellen gejuckt, sozusagen, also ich, äh, das, was er zuerst gemacht hat, also ihn hat das wohl auch irgendwie genervt.

Jochen

Er hat bei Claudera gearbeitet, irgendwie, das ist halt auch so eine von diesen Firmen, die halt so in diesem Big Data-Hadoo-Bereich viel unterwegs sind.

Jochen

Auch da irgendwie, glaube ich, einer von den Chefs oder Gründern ist halt einer von den, auch ein PhD-Student von Michael Stonebrecker.

Jochen

Das sind also irgendwie immer die gleichen Leute.

Jochen

Und der genau, da geht es darum, ging es darum, sozusagen ein Interface zu haben, das genauso ist wie Pandas, also Data Frame-API quasi zu haben, sodass man halt Dinge, man hat so das Gefühl, man hat ein Data Frame-Objekt, macht da irgendwelche Sachen drauf, so als wäre es ein Pandas-Data Frame, aber in Wirklichkeit passieren im Hintergrund Sachen auf deinem Cluster.

Jochen

Das war eine Bibliothek, nannte sich Ives.

Jochen

Und das ist halt genauso auch mein Problem damit, dass halt, ich mache ja eigentlich eher so Machine Learning-Dinge und benutze Pandas eigentlich so zum Daten aufräumen, Daten transformieren, bevor ich das dann halt in irgendwie Machine Learning-Algorithmen und so und Modelle reinfüttere, die dann aber, die dann selber wieder nur Arrays, NumPy-Arrays normalerweise nehmen und keine Data Frames.

Jochen

Aber Data Frames ist halt so ein Zwischenschritt und man kann halt sehr leicht aus dem Data Frame irgendwie ein Array machen, indem man einfach sagt, Dataframe.values, dann hat man das Array.

Jochen

Und ich hatte halt immer das Problem, wenn ich jetzt da mit so System wie Hive oder Impala draufgegangen bin, dann kriege ich halt irgendwie so eher so ein CSV oder so ein Result-Set.

Jochen

Und dann kriege ich das nicht schnell da raus.

Jochen

Das ist halt alles ultra langsam.

Jochen

Und ich brauche aber für meine Modelle doch durchaus große Daten oft.

Jochen

Und das geht alles nicht.

Jochen

Und dann wäre es natürlich viel besser gewesen, wenn ich einfach nur, wenn jetzt, also das, was diese Systeme machen, ist, man schreibt SQL-Statements und die machen dann halt irgendwie automatisch, machen die halt irgendwelche Aktionen auf dem Cluster.

Jochen

Wenn es jetzt so gewesen wäre, dass ich das einfach nur in Data Frame-Syntax, was ich mit den Daten machen wollte, hätte hinschreiben können, dann wäre mir ja schon viel geholfen gewesen.

Jochen

Und genau das hat halt Ibis, diese Bibliothek, die dann West McKenny bei Claudera gebaut hat, gemacht.

Jochen

Man hatte ein Ding, das war wie ein Pandas-Data Frame, wenn man da halt irgendwie Group by gesagt hat und dann hat das halt nicht das im Hauptspeicher gemacht wie Pandas, sondern das hat dann halt SQL-Statements erzeugt, automatisch, die man auch nicht gesehen hat, und die dann auf den Cluster irgendwie losgelassen und dann magisch irgendwelche mit den Ergebnissen irgendwas gemacht.

Jochen

Ja, aber das hat er auch nicht gerade, weil auch da wieder das Problem war, wie kriegt man die Daten wieder raus.

Jochen

Wenn man jetzt, man kann eben sowas nicht sagen, wie wenn man es jetzt richtig transformiert hat, also da war das schon eine Hilfe, aber jetzt hätte man gern die Werte, um sie tatsächlich in den Machine Learning Algorithmus reinzupumpen, damit er irgendwann möchte, irgendwelche Modell drauf trainieren.

Jochen

Man kann eben jetzt bei diesem Data Frame eben nicht sagen, df.values.

Jochen

Das geht halt nicht, weil die Daten sind halt im Cluster.

Jochen

Und sie da irgendwie rauskriegen und man kriegt sie nicht raus.

Jochen

Es geht nicht.

Jochen

Also der Weg von ja.

Jochen

Ja, und das war halt dann auch irgendwie ein Problem, wo dann das IBIS-Projekt so ein bisschen dann vorbei war.

Jochen

Und Wesman Kinney hat dann noch von Claudera irgendwie weg und hat dann Apache Arrow gestartet.

Jochen

Und Apache Arrow macht halt genau da weiter.

Jochen

Und das hat mir dann auch wieder weitergeholfen.

Jochen

Weil ich sagte, okay, das geht nicht anders, man muss tatsächlich auf die rohen Paket-Files im Cluster irgendwie zugreifen.

Jochen

Und wenn man jetzt irgendwie da drauf was machen möchte, man braucht irgendwie ein Array-mäßiges Interface auf diese Files.

Jochen

Wenn man das hat, dann ist man eigentlich im Grunde, dann funktioniert alles.

Jochen

Und das macht Arrow.

Jochen

Arrow ist halt sozusagen eine In-Memory-Datenstruktur, Array-Datenstruktur, die halt von unterschiedlichen, das ist auch das Ziel dabei, ist auch eine Kollaboration mit irgendwie einem der wichtigeren Leute, die hinter R oder R Studio zusammen, die haben das beide zusammen gemacht, diese Projekt.

Jochen

Und genau, die Idee ist sozusagen, du hast halt eine Abstraktionsschicht, die halt irgendwie so einen Array-Store im Hauptspeicher hält.

Jochen

Das macht Apache Arrow.

Jochen

Das Ding ist in C<unk> geschrieben, aber du kannst halt von Python aus zugreifen, von R Drop zugreifen, von Java aus.

Jochen

Und du musst es halt nur einmal im Hauptspeicher halten und du hast es dann halt in dem Format, in dem du es brauchst, um es halt in Machine Learning-Modelle reinzupumpen.

Jochen

Ja, was du halt, diese ganze Loop-Welt, oder du kannst, weil ein Machine Learning-Algorithmus ja nicht als Map-Reduce, das geht halt nicht schreiben, weil wenn du ein neuronales Netz hast, das hat Verbindungen überall hin.

Jochen

Da kannst du es halt nicht klar auf horizontal auftreiben in Mapper und Reducer, das funktioniert einfach nicht, das ist halt Quatsch.

Jochen

Viele oder auch, also viele Machine Learning-Algorithmen lassen sich nicht einfach so verteilen.

Jochen

Oder ja, sie brauchen halt irgendwie ihre Daten in einem bestimmten Format und das ist halt so ein Array-Format, weil das ist alles lineare Algebra.

Jochen

Und linearer Algebra funktioniert mit Vektoren, Matrizen oder halt, man nennt die Dinger allgemein, Arrays halt.

Jochen

Also beliebig dimensionale Arrays.

Jochen

Ja, und das geht halt so einfach eigentlich irgendwie nicht.

Jochen

Und ja, mit Apache Arrow halt schon.

Jochen

Und außerdem macht Apache Arrow dann halt so ein paar Sachen wieder, zieht es wieder gerade, die halt bei NumPy so ein bisschen kaputt sind.

Jochen

Unter anderem, was halt total blöd ist, ist halt, aber das habe ich auch schon mal erwähnt, dass es halt kein Kanal für Integer gibt und so, also mit Missing Values ist halt schwer bei NumPy-Arrays.

Jochen

Und ja, es gibt dann auch diverse andere Probleme.

Jochen

Und ja, das klingt eigentlich super interessant und ich glaube, das ist halt auch so ein bisschen der Weg in die Zukunft, weil dieser ganze Business Intelligence Bereich, also ich habe oft irgendwie mit so Business Intelligence-Abteilungen auch zu tun gehabt, in denen dann so, an die wurde dann halt immer so Data Sites und Machine Learning irgendwie so angedockt.

Jochen

Also das ist halt bei Business Intelligence ist etwas, was halt große Firmen halt schon lange haben.

Jochen

Aber die machen halt sowas wie, ja, also einmal die Leute, die dann Dinge da machen, sind es halt so Analysten, oft super schlaue Leute.

Jochen

Aber ich überlege gerade, wie man kann.

Jochen

Sagen wir so, was die halt tun können.

Jochen

Also nehmen wir an, du bist Walmart und du interessierst dich jetzt dafür, keine Ahnung, weißt du jetzt, es kommt eine Flut, die irgendwie deine Stadt überschwemmen wird, und dann was werden die Leute dann kaufen oder so.

Okay.

Jochen

Für was musst du irgendwie vorsorgen?

Jochen

Und bei einem klassischen BI, klassischen BI-Ansatz wäre halt, du guckst dir halt die Icons an, wo Städte überflutet worden sind, da gibt es nicht so viele.

Jochen

Substrahierst du halt irgendwie so, guckst dir das halt eine Woche vorher später an und so und überlegst dir dann halt irgendwas und das machst du dann.

Jochen

Und dann machst du irgendwie gewisse Voraussagen und sagst so, es könnte ungefähr so und so aussehen.

Jochen

Das ist halt das, was passiert.

Jochen

Und das ist halt auch das, was heute noch in BI-Abteilungen hauptsächlich passiert ist, dass die Leute halt irgendwie so historische Daten angucken und dann so überlegen so, und ich denke, das wird alles so in Zukunft eher Richtung Data Science laufen.

Jochen

Damit meine ich, dass solche Antworten kommen halt dann eher von Systemen, die Vorhersagen machen.

Jochen

Und die werden das deutlich besser können.

Jochen

Und die werden das halt auch, also einen Großteil dieser Analysegeschichten wird man halt automatisieren können.

Jochen

Und das Problem momentan ist halt so ein bisschen, dass die Tools, die man hat, nicht zueinander passen.

Jochen

Also zu dem Hadoop-Welt passt eigentlich eher so zu diesem klassischen BI-Ansatz.

Jochen

Und auch, was auch bei diesem BI-Ansatz ein Problem ist, ist halt, dass man das nicht wirklich wieder zurück in Produkte übersetzen kann.

Jochen

Also das sind auch oft Leute, nicht unbedingt Leute, die halt dann Produkte bauen können, die halt entwickeln können oder in Services bauen können.

Jochen

Auch mit diesem ganzen, wie baut man Dinge, wie macht man Produktentwicklung?

Jochen

Ja, nicht so, das ist nicht sowas, was natürlich für die ist, sondern das ist halt eher so etwas, was sie dann halt auch machen müssen vielleicht, aber wo sie sich halt auch nicht so gut beifühlen.

Jochen

Das aber halt absolut erforderlich ist, weil viele von den Sachen sollen ja dann automatisch auch Dinge tatsächlich tun.

Jochen

So viele Ergebnisse, die dann halt automatisch generiert werden, sollen halt nicht dazu führen, dass es halt irgendwie eine nette Präsentation irgendwie an einem Management-Layer gibt oder so.

Jochen

Sondern du willst halt, dass dann da tatsächlich Entscheidungen auch rausfallen, die irgendwas auf deiner Webseite verändern oder die irgendwelche Dinge tun.

Jochen

Und dann musst du halt Software entwickeln eigentlich.

Jochen

Dann bist du halt so Teil der Produktentwicklung.

Jochen

Und ja, das geht halt auch nicht so richtig gut.

Jochen

Und was da ein bisschen fehlt, ist halt so ein, was halt Daten in Array-Form im Hauptspeicher hält.

Jochen

Und das macht Apache Arrow und deswegen finde ich das Projekt so super interessant.

Jochen

Es gibt da noch PsyDB oder sowas, glaube ich, die auch so was ähnliches machen, aber da geht es irgendwie hin.

Jochen

Und ja, es geht Richtung Streaming.

Jochen

Spark macht da auch ganz viel mit Streaming.

Jochen

Wobei mich natürlich besonders interessiert, PySpark, weil Python und so.

Jochen

Ja.

Jochen

Haben wir da noch irgendwas.

Ich wollte gerade sagen, wir haben jetzt

Dominik

ganz, ganz lange schon, also fast drei Stunden schon über die ganzen Datenbank.

Dominik

Wir merkt ja Jochen ist ja sehr tief drin.

Dominik

Und das ist auch ein super breites Thema.

Dominik

Haben wir tatsächlich die meisten Sachen schon jetzt durch oder hast du noch was, was du unbedingt da zu dem Thema

beim Historikst?

Jochen

Genau, genau, genau.

Jochen

Ja, achso, ah, und genau.

Jochen

Wenn wir jetzt nochmal zurückkommen zu dem E-Commerce-Ding, das war jetzt so ein Exkurs Richtung Big Data Weber.

Dominik

Also wenn wir ganz groß sind, dass man das nicht mehr so gut ist.

Immer so ein Maß oder so.

Jochen

Ja, also das hatten wir auch vorher schon mal kurz angeklagt, also relationale Datenbanken oder so diese Art, um Daten umzugehen, ist halt besonders gut dann, wenn es Daten über Sachen sind, die nicht Daten sind, also physikalische Sachen, die sich nicht so schnell ändern, bei denen man, bei denen es Sinn macht, ein festes Schema zu definieren, das dann halt auch über längere Zeit mehr oder weniger gleich zu bleiben kann.

Jochen

Man kann natürlich Sachen ändern, aber Dinge grundsätzlich ändern, ist dann ist dann schwierig.

Jochen

Und aber das ist jetzt tatsächlich die Zukunft.

Jochen

Es ist auch nicht so richtig sinnvoll, diese Amazon-Geschichte.

Jochen

Also heute Amazon zu bauen, ist viel, viel einfacher natürlich.

Jochen

Also ich meine, das ist jetzt hört sich so an, als wäre es total einfach, Amazon zu werden.

Jochen

Das ist es nicht.

Jochen

Es war auch zu der Zeit, als Amazon Amazon geworden ist, war es viel schwieriger, weil da gab es halt keine Tools.

Sowas wie Postgres Postgres gab es, aber es war nicht in dem Zustand wie heute, wäre nicht nutzbar gewesen.

Jochen

Also es gab, also damals, als, ich weiß nicht, wann die angefangen haben, Anfang der 90er oder also Amazon hat sehr, sehr früh angefangen, Mitte der 90er, ich weiß nicht genau.

Jochen

Da gab es halt nichts.

Jochen

Die mussten alle selber bauen.

Jochen

Das war natürlich nochmal ein ganz anderes Problem.

Jochen

Während heute man wahrscheinlich mit Postgres, Django, Redis irgendwie und ein paar Rechnern wahrscheinlich einen Markt wie Deutschland mit so etwas ähnlich, mit so ähnlichen Seite wie Amazon versorgen könnte.

Jochen

Das ging halt damals nicht.

Jochen

Und das macht es heute einem natürlich vielleicht, aber heute ist halt das Problem, es gibt Amazon schon und man muss mit Amazon konkurrieren und ja, leider hat man da keine Chance.

Jochen

Deswegen funktioniert das auch nicht.

Jochen

Aber was natürlich interessant möglicherweise ist, ist sich zu überlegen, okay, was kann Amazon denn mit dem, was sie tun, nicht machen und wo entwickelt sich das halt in Zukunft hin?

Jochen

Ich habe das auch schon wieder zehn Jahre her, unglaublich, oder noch mehr als zehn Jahre sogar, mal einen Vortrag gehört von David Weinberger, der ist ein Philosoph, war sich überhaupt mit Internetgeschichten beschäftigt in Harvard.

Jochen

Kann man mal gucken, ich packe ja auch noch in die Shownotes.

Jochen

Der Vortrag heißt Everything's Miscellaneous.

Jochen

Da gibt es auch ein Buch zu.

Jochen

Oder der Talk bei Google ist halt eine Vorstellung von dem Buchinhalt, mehr oder weniger, wo er darüber spricht, dass wir ja jetzt so im Zeit von Internet und irgendwie Computern sich ja Dinge komplett verschieben im Grunde.

Jochen

Und wir da was aber noch gar nicht so richtig antizipiert haben.

Jochen

Also sein Beispiel ist halt auch E-Commerce und halt auch so Facette Navigation.

Jochen

Und er sagt halt, naja, also in so einem klassischen Laden, wenn du da reingehst, müssen sich halt, muss man sich überlegen, wo man welche Dinge hinpackt.

Jochen

Also da physikalische Objekte nur an einem Ort gleichzeitig sein können oder überhaupt irgendwo sein müssen, muss man halt irgendwie das so strukturieren, dass das der Fall ist.

Jochen

Und dann muss man sich überlegen, okay, wie macht das für die meisten Leute Sinn, wenn sie reinkommen?

Jochen

Ist immer der Salat irgendwie vorne rechts oder keine Ahnung.

Jochen

Und das muss man eigentlich, wenn man jetzt Daten über Daten hat, gar nicht mehr so machen.

Jochen

Man könnte das irgendwie so slicen und dicen, wie man wollte.

Jochen

Also man könnte halt sagen, okay, ich bin jemand, der nur schwarze T-Shirts anzieht, also alles andere interessiert mich nicht.

Jochen

Ich brauche jetzt eine Navigation innerhalb dieser schwarzen T-Shirts, aber alle anderen Sachen kann ich schon mal so irgendwie wegschneiden.

Jochen

Das würde für alle anderen vielleicht keinen Sinn machen oder für andere Leute, jeder hat vielleicht andere Arten, was er aber ich kann jetzt eine Seite bauen, die auf die Bedürfnisse von jedem im Grunde zugeschnitten ist oder sich leicht.

Dominik

Und die lassen die eigene Filterbubble immer erzeugt für den jeweiligen.

Jochen

Genau.

Jochen

Weil elektronisch habe ich das Problem nicht, oder ich kann für jeden eine eigene Art von Laden erzeugen.

Jochen

Oder eine eigene Art von Navigation bauen.

Dominik

Nur wenn ich denjenigen kenne, natürlich.

Jochen

Natürlich.

Jochen

Oder wenn er es mir halt irgendwie sagt, indem ich ein Interface habe, wo man das halt irgendwie einstellen könnte.

Jochen

Aber das wird kaum gemacht.

Jochen

Es gibt halt meistens doch wieder einen Kategorienbaum, der halt irgendwie, und Kategorienbaum auf einer Seite ist ja im Grunde irgendwie sowas wie ein Weg durch den Laden, der halt vorgegeben ist.

Jochen

Warum muss das denn so sein?

Jochen

Das muss ja eigentlich, also wir adaptieren da eine Sichtweise aus der physischen Welt, die vielleicht insofern hilfreich ist, weil die Leute kennen das.

Dominik

Ja, genau, die kennen das so, ja.

Jochen

Insofern macht das auch durchaus Sinn, das so zu tun, aber es müsste eigentlich nicht so sein.

Jochen

Und vielleicht wäre es, wenn man das anders machen würde, halt viel effizienter und genau.

Dominik

Das ist der Raum für ein Startup da übrigens

Jochen

gerade, ja.

Jochen

Ja, das Problem ist halt nur, also ich fand das ja schon vor über zehn Jahren interessant, aber in der Richtung hat sich noch nicht so wirklich wahnsinnig viel getan.

Jochen

Insofern bin ich mir nicht sicher, ob das eine gute Idee ist damals war es auch, wenn wir so Rückwinken kann man jetzt sagen, damals ein Startup in die Richtung zu starten, wäre keine gute Idee gewesen.

Jochen

Also vielleicht wäre es jetzt eine gute Idee.

Jochen

Vielleicht ist es aber auch erst in fünf Jahren eine gute Idee.

Jochen

Keine Ahnung.

Dominik

Man macht ein Gespür für und wenn man das Gespür hat und dann an der richtigen Stelle ist, dann ja.

Braucht nur noch ein bisschen Geld und Geduld und

Jochen

genau der Punkt, auf den ich eigentlich hinausfälle, ist, was ist eigentlich Amazon hat das gleiche Interface für alle Arten von Dingen, die sie verkaufen.

Jochen

Sie haben am Anfang mit Büchern angefangen, weil bei Büchern das Problem, weil sie da einen ganz klaren Vorteil gegenüber den anderen bauen.

Dominik

Du musst ein Framing bauen für den jeweiligen Kunden.

Jochen

Ich möchte halt zum Beispiel einfach nur so in die Richtung gehen, warum muss die Navigation immer gleich aussehen?

Dominik

Das eigene Holodeck.

Dominik

Also manchmal geht man im Mittelalterland einkaufen mal im Cyberstore.

Jochen

Genau, je nachdem, was man verkaufen möchte.

Jochen

Amazon macht jetzt nicht nur Bücher, sondern mittlerweile machen sie Bücher ist jetzt wahrscheinlich gar kein großer Anteil mehr an ihrem Geschäft.

Jochen

Sie verkaufen viel Elektronik und das sieht man der Seite halt auch an.

Jochen

Also vieles von der Navigation ist darauf optimiert, dass ich halt irgendwie so elektronik weiße Ware irgendwie kaufe.

Dominik

So ein bisschen wie Ambileit beim Fernseher.

Jochen

Ja, aber halt inhaltlich.

Jochen

Und das liegt halt vor allen Dingen, dass die Navigation so aussieht, wie sie aussieht, liegt halt an Datenbankschema.

Jochen

Weil das lässt halt gar nicht zu, dass ich irgendwie was großartig anderes baue, weil das ist halt mehr oder weniger fix.

Jochen

Jetzt ist es natürlich schon so, dass unterschiedliche Dinge, also Fahrräder haben halt bestimmter, das kann ich schon irgendwie, da kann ich ein Schema bauen, das ist irgendwie modelliert, oder Bücher oder Waschmaschinen.

Jochen

Aber die Daten über die Daten, die kann ich natürlich irgendwie beliebig modellieren.

Jochen

Da könnte ich auch beliebige Navigationen drauf bauen.

Jochen

Und ich könnte auch, also wenn ich jetzt, also der Witz ist, was ich eigentlich eventuell gerne hätte, dass jetzt, wenn jetzt ein Produktmanager, der für die Kategorie Fahrräder oder sowas zuständig ist, auf eine irgendwie super Idee kommt, wie man das Navigieren macht und die Leute sozusagen zufriedener zu ihren zu den Fahrrädern, die sie haben wollen, führen kann, dann müsste er ja die Navigation umstellen können, dafür müsste er das Schema ändern können.

Jochen

Das heißt, er müsste das Schema live irgendwie ändern können.

Jochen

Was in relationalen Daten, das kannst du vergessen.

Jochen

Also du kannst, ich meine, du musst eine Migration machen, du musst halt irgendwie das kannst du alles, das kannst du komplett, also sagen wir so, es geht technisch, aber das ist auf jeden Fall Entwicklerarbeit.

Jochen

Das ist halt nicht etwas, was irgendjemand, der auf einer Webseite irgendwas einstellt, irgendwie.

Drag and Drop.

Jochen

Das geht halt eher nicht.

Jochen

Aber wenn man jetzt von diesem, sich von diesem relationalen Paradigma so ein bisschen löst und sagt, okay, ja, dann ginge das eventuell schon.

Jochen

Also im Grunde, wenn man jetzt nicht Daten über physikalische Objekte hat, sondern Daten über Daten und eine Datenbank, die halt nicht mehr so fixe Schema, nicht so ein fixes Schema hat, dann könnte man eventuell so machen, dass man die Seite live so ändert, wie sie halt eventuell mehr Sinn macht.

Jochen

Und vielleicht könnten das auch die User tun, keine Ahnung.

Jochen

Es ist halt nur so, es ist halt so eine Idee.

Jochen

Es ist halt einfach so eine Idee, wie geht es jetzt eigentlich weiter.

Jochen

Ich meine, Amazon ist im Grunde mehr oder weniger fertig.

Jochen

Wir haben Amazon nachgebaut und wir hätten auch das Problem, dass unsere Navigation, egal ob das jetzt Fahrräder, Waschmaschinen oder sonst irgendwas ist, würde halt genau gleich aussehen.

Jochen

Oder Mode.

Jochen

Und da könnten wir im Grunde nichts machen.

Jochen

Weil das Schema halt für Angebote halt immer gleich sein muss, weil die sind ja alle in einem Datenbankenschema.

Jochen

So, genau.

Jochen

Aber das könnte halt irgendwie etwas anders aussehen.

Jochen

Und was halt auch da sehr interessant sein könnte, sind halt Graphendatenbanken zum Beispiel.

Jochen

Wo man halt eben nicht, also ich hatte das ja auch am Anfang schon mal erwähnt, es hätten sich auch Graphendatenbanken durchsetzen können.

Jochen

Das ist überhaupt nicht so klar, warum das Relational geworden sind.

Jochen

Gut, die Graphendatenbanken waren ein bisschen später dran, aber ja, und da gibt es zum Beispiel auch ein super interessantes Projekt, nennt sich D-Graph.

Jochen

D-Graph, ja.

Jochen

Das ist ein Ex-Mitarbeiter von Google.

Jochen

Und der hat sich irgendwie mit Drafmann mit Google beschäftigt und dann halt auch überlegt, was sind denn jetzt die Sachen, die man heutzutage die Probleme, die man hat.

Jochen

Also es muss halt irgendwie so, es muss halt, äh, Rides müssen halt auch, man darf nicht nur einen Master haben, es muss halt irgendwie skalierbar sein, es muss halt irgendwie schnell sein.

Jochen

Und der hat, das hat das letzte Mal als wir über Skalierbarkeit und so, ich glaube, das war in der ersten Folge oder so geredet haben, habe ich auch gesagt, also Go wäre eventuell ein guter Kandidat, um da drin eine Datenbank zu schreiben.

Jochen

Also Python halt nicht so.

Jochen

Es ist halt eines der wenigen Anwendungsfälle, wo ich sagen würde, gut, dafür ist Python nicht so gut geeignet, weil, also Python ist gut geeignet, wenn man I.O.

Jochen

multiplexen muss, also man macht einfach nur viel Netzwerk in allen möglichen Richtungen.

Jochen

Das geht, da braucht man gar nicht unter Umständen viel CPU für, also solange man nicht viel CPU dafür braucht.

Jochen

Oder es ist gut dafür geeignet, wenn man viel CPU braucht, aber nicht so viel Concurrency hat.

Jochen

Wenn man beides hat, man hat viel Concurrency und viel CPU, die das braucht, dann ist halt eher scheiße, weil dann erwischt einen halt dieser Global Interpreter Log und dann da stößt man an so prinzipielle Grenzen, was Skalierbarkeit angeht bei Python.

Jochen

Aber ich würde sagen, naja, nicht so schlimm, schreit auf nicht so, nicht so ist eigentlich ganz gut, weil diesen Anwendungsfall haben die wenigsten Programmierer und ein Beispiel war halt, ja, Datenbanken sind halt eventuell so etwas, was halt genau diese Anforderung hat und was man dann in Python vielleicht dann doch nicht so gut schreiben könnte.

Jochen

Und ja, tatsächlich D-Graph ist in Go geschrieben.

Jochen

Und ja, mit Graphen-Datenbanken könnte man das halt tun.

Jochen

Da kann man halt das Schema ändern, live, ohne dass man irgendwie da so, weil man kann halt beliebige Beziehungen ziehen, beliebige Kanten.

Jochen

Man muss nicht unbedingt sozusagen alles in dieser Tabellen, man hat halt nicht mehr unbedingt diese Tabellenstruktur.

Jochen

Und ja, das ist halt schon ziemlich interessant, auch wenn man also es gibt dann nochmal bei den grafischen Datenbanken sowieso Unterschiede.

Jochen

Es gibt auch diese ganzen RDF-Geschichten, da ist es aber so, dass die das nicht so optimiert irgendwie auf der Platte speichern.

Jochen

Also das ist halt eher so ein Textformat.

Jochen

Es gibt ja auch Mikroformate auf Webseiten, wo man das benutzen kann, wo man irgendwelche Metadaten über die Seite irgendwie hinterlegen kann.

Jochen

Das ist auch eine vielleicht nicht so doofe Geschichte, gerade was Google angeht, Mikroformate.

Jochen

Dann kann halt Google automatisch eine ganze Menge Informationen aus der Seite ziehen, ohne dass man das halt, oh dass sie das halt irgendwie raten müssen.

Jochen

Das geht ja auch schon alles so ein bisschen in Richtung Semantic Web.

Jochen

Aber das Problem dabei ist, es ist halt nicht optimiert und für Grafenabfragen auch nicht optimiert, daher wird es halt alles immer ziemlich langsam sein.

Jochen

Und es gibt halt Graphen-Datenbanken, die das halt so optimiert speichern.

Jochen

Dazu gehört D-Graph auf jeden Fall, die älteste und weitest verwaltete Datenbank Neo4J macht das auch so.

Jochen

Aber Neo4J ist halt auch, das ist halt Java.

Jochen

Kann ja schon mal nicht gut sein.

Jochen

Und es ist halt auch viel langsamer, muss man sagen, als D-Graph.

Jochen

Und es ist halt auch, es hat eine komische Abfragesprache, Cypher heißt die irgendwie.

Jochen

Ja, und naja, und ob das alles so, also ist auch Asset und so, das ist alles nicht so, also es geht in die Richtung, aber es ist nicht so toll irgendwie.

Jochen

Und bei D-Graph sieht das alles viel besser aus.

Jochen

Und was auch super cool ist bei D-Graph, ist die Abfragesprache, die nehmen einfach GraphQL oder Dialekt davon.

Jochen

Und das ist natürlich auch nochmal sehr interessant, weil GraphQL ist natürlich auch momentan ein sehr heißes Thema.

Jochen

Ja, und möglicherweise, wenn man jetzt ein neues Amazon bauen würde,

Dominik

würde man damit anfangen.

Jochen

Würde man jetzt das vielleicht nicht auf einer relationalen Datenbank aufsetzen, sondern auf sowas wie D-Grave.

Jochen

Und dann könnte man das so bauen, dass sich die Navigation, je nachdem, was man da einkauft, halt ändern lässt.

Jochen

Auch live.

Jochen

Und ist ja trotzdem schnell.

Jochen

Und ja, ähm, und das wäre so ein bisschen, dahin könnte die Reise irgendwie gehen.

Jochen

Ich habe keine Ahnung, ob das passieren wird, aber.

Ja, let's go.

Jochen

Ja, genau.

Jochen

Und dann auch, was auch interessant ist, ist halt noch, dass man irgendwie durchaus so hybride Formen haben kann zwischen Dokumentbasiert und Schemaless und nur SQL eine NoSQL, das halt entweder steht für Not only SQL oder eben kein SQL.

Jochen

Naja, in Postgres hat man zum Beispiel die Möglichkeit, das ein bisschen zu kombinieren.

Jochen

Da gibt es halt ein sehr schönes Spaltentyp, nennt sich Binary JSON.

Jochen

Also muss aufpassen.

Jochen

JSON gibt es auch, ist aber nur so aus Legacy-Gründen noch dabei.

Jochen

Den nicht name, der ist alt und nicht so gut.

Jochen

Aber Binary JSON ist super, weil da kann man auch Indizes auf Felder innerhalb von dem JSON machen.

Jochen

Das heißt, man kann halt die Teile, bei denen man sich nicht sicher ist, wie das Schema dafür eigentlich aussehen wird, oder die man, wo man sozusagen die Definition des Schemas in die Applikation verlagern möchte, also wo dann einen Applikationsentwickler sagen kann, okay, an der Stelle speichere ich die Daten jetzt so und so.

Jochen

Ja, ich möchte aber gar nicht die Datenbank verändern, dann kann er das, wenn er das in eine Spalte schreibt, die halt Binary JSON ist, einfach so reinschreiben.

Jochen

Er kann sogar Sachen darin indizieren und so.

Jochen

Und das ist halt sackschnell, das ist ähnlich schnell wie MongoDB.

Jochen

MongoDB macht ja, MongoDB ist mehr oder weniger nur diese BJSON-Spalte aus Postgres.

Jochen

Und das ist halt mehr oder weniger das gleiche.

Jochen

Das heißt, wenn ich jetzt, ich kann das, was ich mit MongoDB mache, auch in einer solchen Spalte in Postgres machen.

Jochen

Ja, gut, MongoDB ist vielleicht noch ein bisschen schneller, hat noch ein paar andere Funktionen, aber ja, das gibt nicht, dass viele Leute tatsächlich was anderes brauchen würden.

Jochen

Ich kann aber auf der anderen Seite bei den Sachen, bei denen ich weiß, also es gibt ja so etablierte Geschichten, da ist schon klar, wie das funktioniert.

Jochen

Userverwaltungen, wenn ich eine Webseite habe, so wenn sich User anmelden, das ist alles relational, das ist auch etabliert, da wird sich jetzt auch nicht so viel dran ändern.

Jochen

Und dann für die Teile der Applikation, wo ich mir halt nicht sicher bin, wo ich nicht weiß, in welche Richtung das geht, mache ich dann halt, schreibe ich das halt als JSON, irgendwelche Spalten da.

Jochen

Und wenn das dann halt klar geworden ist, wie das Schema da aussieht, dann ziehe ich das dann auch Stück für Stück in ein relationales Schema.

Jochen

So dass ich halt dann Vorteile aus beiden Welten habe.

Jochen

Und ich würde sagen, das ist halt momentan auch so ein relativ unschlagbares Feature irgendwie von Postgres gegenüber den meisten anderen Datenbanken, dass man das halt so flexibel miteinander kombinieren kann, weil wenn ich Monodbi habe, habe ich halt das Problem, okay, also relational und konsistent und sicher und so, das geht halt alles nicht so richtig gut.

Jochen

Ich habe halt nur dieses Ding, wo ich halt meine.

Jochen

Ich kann zwar auch ein Schema definieren oder so, aber ja, das ist alles nicht so weit wie bei Postgres.

Jochen

Ja.

Jochen

Ja, also genau, das wollte ich auch noch erwähnt haben, dass das halt eine schöne Geschichte ist an Postgres.

Ja, ich glaube, und so langsam sind wir dann eigentlich im Grunde.

Dominik

Ihr habt ja wirklich viele Leuten durchgehalten heute, also über drei Stunden, das ist doch schon die Mammutfolge hier jetzt.

Jochen

Okay, ja, aber ich bin mal auch gespannt, wie das so ankommt, weil das ist halt so ein bisschen, ist ja jetzt nicht so viel Einsteiger oder so.

Jochen

Das ist einfach mal so komplett durch.

Jochen

Ich habe möglicherweise auch eine Menge Unsinn erzählt, das kann leider auch sein, weil das ist halt auch so.

Dominik

Du kannst dich irgendwann mal die Folge nochmal anhören, wenn man so ein bisschen weiter ist in dem Thema und dann soll man vielleicht merken, hey, wow, ja, da sind ja einige interessante Gedanken drin, wie sich das so verändert im Laufe der Zeit.

Ja.

Jochen

Achso, Picks, genau.

Jochen

Hast du, du machst was, was machst du mit Datenbanken oder welche Sachen?

Dominik

Ach, ich bin ja noch ganz am Anfang, ich bin erstmal ein bisschen SQLite oder sowas.

Dominik

Das ist ganz super, das ist ja direkt dabei und da kann man direkt loslegen und seine ersten Datenbank ein bisschen füttern.

Dominik

Wird vielleicht eigentlich auch gar nicht so schlecht.

Dominik

Dann kann man erstmal ein paar SQL Skatements sehen und vielleicht mit SQL ICM das machen und dann.

Das ist auch interessant.

Jochen

Ich glaube, SQL Lite ist eine der Softwaren, die mit am weitesten, die weiteste Deploy-Basis hat, irgendwie so.

Jochen

Ich glaube, das konkurriert noch mit Curl oder so.

Jochen

Das wird auch fast über alles Curl mit drin.

Jochen

Aber ich glaube, SQL Lite hat auch ein Kandidat für, das ist fast überall drin.

Jochen

Das ist auch Core Data, der Datenabstraktionslayer von iOS ist auch, da ist auch SQLite drunter, das ist in fast allen Browsern drin.

Jochen

Das heißt, irgendwie, wenn man einen Browser hat, hat man SQLite, wenn man irgendwie, das ist auf einer Apple Watch, ist eine SQLite-Datenbank und zahlt die Schritte.

Jochen

Das ist echt total krass.

Jochen

Also von, es skaliert von irgendwie einer kleinen Uhr zu, ich glaube momentan das theoretische Limit für SQLite sind irgendwie 144 Terabyte oder sowas.

Dominik

Kriegt man das schwerfolge.

Jochen

Ja, und es gibt, glaube ich, große SQLite-Datenbanken tatsächlich da draußen.

Jochen

Also das ist ein super interessantes Projekt und ja, auch ich glaube, es wurde mal vorgeschlagen, für Langzeitarchivierung das SQLite-Format zu nehmen, weil es halt so von irgendeiner Bibliothek, ach, weil es halt auch sich seit Jahren nicht mehr geändert hat, ist relativ schnell und ja, SQLite, super cooles Projekt.

Jochen

Und ach, da im Zusammenhang habe ich, wer ist auch einer von meinen Picks, was man sich vielleicht mal angucken kann, ist ein Projekt namens Data Sette.

Dominik

Data Sette.

Dominik

Die Kassette, also zum Aufrollen noch.

Jochen

So wie, genau.

Jochen

Und zwar geht es darum, dass es halt für so Datenjournalismus, es geht darum, dass man Datensätze, die irgendwo veröffentlicht wurden, wie man die jetzt navigierbar macht für Leute, die jetzt nicht das in eine Datenbank importieren wollen und dann selber Statements schreiben.

Jochen

Und das macht das halt.

Jochen

Und man kann halt CSVs nehmen, die da reinwerfen und dann kriegt man halt so ein Interface mit Faceted Navigation, mit Volltext-Suche, weil er halt auch SQL Lite kann halt Volltext suchen kann.

Jochen

Und man kann sogar SQL-Statements reinschreiben, man kann aber auch das irgendwie über eine Webseite navigieren, das ist ziemlich cool.

Jochen

Und ja, das wollte ich auf jeden Fall mal erwähnt haben.

Jochen

Das kann man sich mal sich mal anschauen.

Jochen

Es gibt dann da so Teile von, wo man auch CSVs automatisch in SQLite-Datenbanken umwandeln kann.

Jochen

Auch interessant, dass man da so frei SQL-Statements irgendwie eingeben kann.

Das geht ja auch kaum.

Jochen

Das geht halt deswegen, weil man bei SQLite auch sagen kann, oh, das ist jetzt ein Read-Oni-Datenbank.

Jochen

Und dann kann man halt mit Statements nichts mehr kaputt machen.

Jochen

Ja, das ist halt ein sehr schönes Projekt.

Jochen

Dann, genau, auch wie man auf Datenbank von Python aus zugreift.

Jochen

Es gibt so Async PG als asynchrone Datenbank-Client für Python.

Jochen

Das wird noch sehr interessant, also es ist momentan noch ein Problem.

Jochen

Also Psycho PG ist halt so der Standard Postgres-Datenbank-Client für Python und der kann aber nur Textprotokoll und nicht Binary, ist halt schon relativ schnell, aber es geht halt mit dem Binärprotokoll halt noch schneller und er ist halt nicht asynchron.

Jochen

Also was halt ein Problem ist, ist halt, wenn man jetzt zum Beispiel bei Postgres macht man jetzt Volltextsuche und Navigation auf einer Webseite, dann hat man, wenn man das mit Django macht, Django ist auch synchron und dann macht man halt einmal und hat jetzt Facette und Navigation, das braucht.

Jochen

Das heißt, man muss halt an den Facetten, das heißt Tags oder Kategorien oder irgendwelchen anderen Monaten oder was auch immer man halt navigierbar halten will, schreibt man halt noch so Counts dann oder man muss halt überhaupt wissen, was hat ein Count von größer Null, damit man diese Facette anzeigt oder nicht anzeigt.

Jochen

Das sind halt zwei unterschiedliche Statements.

Jochen

Man kriegt einmal die Suchergebnisse und dann macht man nochmal ein Statement, um die Counts zu holen.

Jochen

Und meistens hat man aber nicht nur diese zwei, sondern noch ein paar mehr.

Jochen

Und das ist halt jedes Mal ein Datenbank-Roundtrip.

Jochen

Das ist jedes Mal, dauert das irgendwie ein paar Millisekunden.

Jochen

Also bei den Suchanfragen, bei den Counts dauert es sogar so irgendwie 30, 40 Millisekunden, sodass man halt bei so einer normalen Navigation auf einer Seite wahrscheinlich schon so 150 Millisekunden nur SQL-Anfragen hat.

Jochen

Und dann ist man schon bei, wenn das Template gerendert wird, ist man leicht bei 400, 500 Millisekunden.

Jochen

Und das ist halt dann schon relativ lang.

Jochen

Das ist schon viel für eine Webseite.

Jochen

Eigentlich ein bisschen zu viel.

Jochen

Und man könnte es leicht deutlich drücken, wenn jetzt diese Statements, die ja nicht voneinander abhängen, sondern die man auch parallel abfeiern könnte, tatsächlich parallel an die Datenbank gestellt würden.

Jochen

Und dann hat man nur noch, ist die Latenz oder die Zeit, die man braucht, um SQL-Abfragen zu machen in dem Webfrontend, ist halt dauert nur noch so lange wie das längste Statement.

Jochen

Und alle anderen Sachen sind halt vorher da.

Jochen

Und das würde halt wahrscheinlich bedeuten, dass dann runter auf 50 Millisekunden oder so.

Jochen

100 Millisekunden gespart.

Jochen

Das wäre ziemlich cool.

Jochen

Aber dafür müsste halt Django-Asynchron sein, dafür müsste man halt irgendwie Async-PG verwenden, statt Psycho-PG.

Jochen

Und das wird alles noch ein bisschen dauern.

Jochen

Wahrscheinlich Jahre, fürchte ich.

Jochen

Ist auch so, dass der Autor von Django Channels, das ist diese Geschichte mit den WebSockets, dass man halt bidirektionale Kommunikation zwischen Client und Server hat bei Web-Anwendungen.

Jochen

Der hat jetzt dieses Projekt so ein bisschen aufgegeben, oder die Main ist nicht mehr Maintainer davon.

Jochen

Und das, was man macht, ist jetzt der Versuch, Django-Async fertig zu machen.

Jochen

Bin mal gespannt, wie das wird.

Jochen

Das war ja auch in der Django-Folge hatten wir das ja irgendwie kurz, ob das vielleicht eventuell eine Richtung wäre, in die sich Django entwickeln könnte.

Jochen

Und ja, sieht danach aus, so ein bisschen als ob das kommen würde.

Jochen

Und ja, und damit sind wir im Grunde.

Dominik

Sind wir durch mit einer Armutfolge?

Dominik

Wenn ihr es bis hierhin geschafft habt, also gut ab.

Dominik

Wir sind jetzt einiges mehr über Datenbanken und dass man damit alles so anstrengen kann.

Dominik

Ja.

Dominik

Schöne Sache.

Dominik

Super, dass ihr dabei wart.

Dominik

Genau.

Dominik

Und ja, wo ihr seid, schönen Tag und so weiter, wenn ihr Fragen habt, hallo at pythonpodcast.de.

Dominik

Ja, und

Jochen

ja, dann bis zur nächsten Folge.

Bis dann hoppet sein.

Tschüss.

Ciao.