Transcript: PP05 - Datenbanken

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast in der mittlerweile fünften Episode.

Dominik

Heute geht es ein bisschen um Datenmanken.

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. Genau, Datenmanken, ja, voll gut.

Jochen

Da freue ich mich schon drauf. Das ist irgendwie ein Thema, mit dem ich schon viel zu tun hatte.

Jochen

Wird wahrscheinlich eine ein bisschen längere Episode.

Dominik

Wir versuchen wieder ein bisschen Struktur reinzubekommen.

Dominik

Wir wissen noch nicht ganz, ob das gelingt.

Dominik

Wir werden wieder hemmungslos abschweifen.

Dominik

Wenn ihr Fragen, Anmerkungen dazu habt,

Dominik

Kommentare, Lob, alles, was ihr uns mitteilen wollt,

Dominik

schickt eine E-Mail an hallo at python-podcast.de

Dominik

und wie immer

Dominik

findet ihr die Links und zusätzliche Infos der Sendung

Dominik

in den Shownotes.

Dominik

Wollen wir das eigentlich noch erwähnen,

Jochen

welches Datum wir haben? Heute ist der

Jochen

24.02.2019.

Jochen

Oh, wir machen jetzt mit Daten. Ja, finde ich gut.

Jochen

Genau, wir haben das glaube ich schon mal gemacht.

Jochen

Ja, haben wir das schon mal gemacht?

Jochen

Dann haben wir es irgendwie nicht mehr gemacht, aber ich glaube,

Jochen

es ist wahrscheinlich eigentlich ganz interessant,

Jochen

wenn man das hört, von wann das

Jochen

aufgenommen wurde. Ja, stimmt. Ende Februar

Dominik

19. Und es ist gerade

Dominik

ganz gutes Wetter und es ist ein Sonntag.

Dominik

Normalerweise nehmen wir immer abends auf.

Dominik

Heute ausnahmsweise mal nach dem

Dominik

Brunchen. War irgendwie super lecker.

Dominik

Ja, ich würde sagen, wir steigen fast direkt

Dominik

ins Thema ein und es geht halt so

Dominik

ein bisschen darum, ja, das ist glaube ich nicht

Dominik

das erste Mal, dass wir versuchen, so eine Folge mit Datenbanken

Dominik

zu strukturieren. Das war auch der Grund, warum

Dominik

wir so ein bisschen länger auf die letzte Folge warten

Dominik

mussten. Hatten wir ja kurz erwähnt.

Dominik

Ja, was ist

Dominik

überhaupt so eine Datenbank jochen und

Dominik

wir versuchen halt immer wieder euch vielleicht kurz

Dominik

zu erklären, was man damit noch mit Python machen kann

Dominik

oder welche Modules es dafür gibt, aber

Dominik

das vielleicht mal als Warnung. Python kommt in dieser

Dominik

Folge nicht nur vor und nicht ganz so viel, sondern

Dominik

es geht halt tatsächlich darum, wie man das, was man mit Python

Dominik

macht, also die Datenbanknutzung

Dominik

so ein bisschen euch erklären, näher bringen kann.

Dominik

Ja, wobei ich denke, dass das halt

Jochen

eigentlich für alle, die Python

Jochen

entwickeln wollen, ein interessantes Thema ist,

Jochen

weil da wird man, egal in welchem Bereich man sich

Jochen

da tummelt, nicht drum herum

Jochen

kommen, irgendwann etwas mit Datenbanken zu machen.

Jochen

und

Jochen

ja, dafür muss man sich halt dann auch

Jochen

nicht nur mit Python auskennen, sondern man muss halt auch so ein bisschen verstehen,

Jochen

wie das mit den Datenbanken funktioniert

Jochen

und man kann halt nicht viel interessante Dinge machen, wenn man

Jochen

halt von Datenbanken da gar nichts versteht

Jochen

und insofern, ja.

Dominik

Wir werden noch ein bisschen darauf eingehen, was ist das überhaupt,

Dominik

eine Datenbank, unterschiedete einzelne Datenbanktypen

Dominik

ein bisschen darstellen und wir wollen

Dominik

anhand eines kleinen Beispiels euch so ein bisschen so

Dominik

die Problematiken beim Skalieren und bei dem

Dominik

Arbeiten mit der Datenbank erklären.

Dominik

Genau.

Jochen

Da hat man uns gedacht, nehmen wir einfach etwas, was man halt kennt. Ich meine, wozu ist das Internet da? Irgendwie Dinge einkaufen, klar, weiß man ja.

Dominik

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

Jochen

Und genau, Amazon hat bestimmt jeder schon mal benutzt und weiß halt, wie das funktioniert 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 und darin kann man das vielleicht ganz gut erklären.

Dominik

Ja, dann fangen wir erstmal einfach an. Also mit was würde man einfacherweise anfangen? Wenn man jetzt Python 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. Wir hatten eben, glaube ich, im Vorgespräch ganz kurz über Struktur gesprochen. Da gibt es eine Struktur, die man sich ausdenken muss. Das ist gar nicht so trivial. Das ist recht wichtig, dass man da so ein bisschen mehr gedanklich dazu macht. Wie sieht denn meine Struktur der Daten überhaupt aus? Was will ich denn damit machen? Wie würdest du da direkt vorgehen?

Jochen

Ja, also das kommt tatsächlich auf den Anwendungsfall an und was sich halt in der Praxis 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

Für alle, die das noch nicht drauf haben, ist es so SQL oder NoSQL, genannt oft.

Jochen

Ja, es hängt halt davon ab. Also man kann natürlich auch einfach Python-Objekte nehmen, die irgendwie serialisieren, nennt man das. Also zum Beispiel gibt es in der Standardbibliothek das Pickle-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 Datenmarken eine sehr wichtige Geschichte. Und man könnte jetzt zum Beispiel diese Byte-Folgen oder Strings nehmen und die halt teilenweise 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, schreibt das Ganze in ein File.

Dominik

Genau so habe ich das auch bei meiner ersten versuchten Datenbank-Operation selber gemacht, nämlich einfach so die Daten, die ich hatte, es ging da um so Spieler-Daten 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 das 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 CSV schreibt oder sowas halt. Dann wäre es halt noch menschenlesbar. Da muss man sich halt überlegen, wie man die CSV-Zeilen in Objekte verwandelt oder Objekte wieder in CSV-Zeilen.

Dominik

Ich habe einfach den Dictionary-Code in eine Teile reingeschrieben, habe das dann ausgelesen und evaluiert. Ist 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, das nannte sich dann Flat Files, Datenbank mit Flat Files, man nimmt einfach Files und schreibt den State da irgendwie rein und natürlich ist auch das Filesystem ja schon irgendwie eine Art Datenbank, das ist halt eine hierarchische Datenbank, die halt so eine Baumstruktur hat und deren Blätter halt Files sind, Wurzel ist halt Root, Slash bei Unix-Systemen oder was weiß ich, bei Windows ist es irgendwie was komisches mit dem Laufwerksbuchstaben.

Jochen

Und ja, das ist natürlich auch

Jochen

eine Struktur. Man hat halt irgendwie darüber

Jochen

die Verzeichnisse, die es da gibt, auch schon

Jochen

so Metadaten definiert, dass man halt weiß,

Jochen

so bestimmte Sachen sind halt in einem bestimmten Verzeichnis und so.

Jochen

Und

Jochen

das Ganze gibt es halt auch über

Jochen

Netzwerkgeschichten.

Jochen

Die bekannteste hierarchische Datenbank

Jochen

im Netz ist halt sowas wie LDAP.

Jochen

Windows nennt

Jochen

das irgendwie Active Directory oder ist auch vielleicht noch

Jochen

ein bisschen komplizierter.

Jochen

Und ja, das ist halt schon mal eine

Jochen

grundsätzliche Art, wie man Datenbanken

Jochen

betreiben kann.

Jochen

Aber vielleicht, was ich

Jochen

ganz gerne auch nochmal

Jochen

ansetzen würde, ist,

Jochen

wie Leute, also wenn man jetzt sich

Jochen

überlegt, wo könnten Leute

Jochen

etwas, das man

Jochen

sonst vielleicht mit Datenbanken tun

Jochen

könnte, irgendwie schon mal gesehen haben? Oder was

Jochen

machen viele Leute, was halt eigentlich auch

Jochen

gut in den Datenbank-Kontext passt?

Jochen

Dann würde ich vielleicht sogar eher mit sowas wie

Jochen

Excel oder so anfangen, weil

Jochen

das wird dann

Jochen

oft so scherzhaft auch erwähnt,

Jochen

Wenn man sich überlegt, was ist die

Jochen

meisten verwendete, meisten ausgerollte

Jochen

Datenbanklösung

Jochen

der Welt,

Jochen

könnte man auch sagen, das ist halt Excel, weil

Jochen

viele Leute halt Excel quasi als

Jochen

Datenbank benutzen. Allen möglichen

Dominik

Quatschen, irgendwelche Spalten und Teilen reinschreiben und

Dominik

ganz, ganz, ganz, ja.

Dominik

Und

Jochen

das ist, genau, das ist halt

Jochen

eigentlich, ach so, und vielleicht sollte man sich

Jochen

erstmal grundsätzlich überlegen,

Jochen

wenn man schon so anfängt zu erklären, was Datenbanken

Jochen

sind, was ist denn eigentlich Daten,

Jochen

was sind eigentlich Informationen, was sind eigentlich Wissen.

Jochen

Dafür hat man umgangssprachliche

Jochen

Definitionen,

Jochen

wo man dann weiß, was das ungefähr

Jochen

sein soll, aber

Jochen

wenn man das jetzt aus dem Datenbank-Kontext her

Jochen

präzisieren möchte, dann geht das eigentlich

Jochen

auch relativ schmerzlos. Also Daten sind

Jochen

halt sowas wie, also ein Datum wäre

Jochen

irgendwas mit minus 3,5

Jochen

wäre jetzt ein

Jochen

Datum.

Jochen

Einfach nur ein Zahlenwert oder so.

Jochen

Und das sagt einem halt

Jochen

natürlich noch nichts.

Dominik

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

Dominik

Ja, genau, richtig.

Dominik

Grad Fahrenheit.

Jochen

Und wenn man jetzt von Informationen spricht,

Jochen

dann spricht man von Daten, die halt schon so ein bisschen Kontext haben.

Jochen

Also sowas wie minus 3,5 Grad 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.

Jochen

Und dann nimmt man das Informationen.

Jochen

Und das, was man aber eigentlich in Datenmarken speichern möchte,

Jochen

Und dann was machen möchte, das ist irgendwie so Wissen, 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 Positionen 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 hat halt Wissen über, wie das Wetter 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. Und dann kann man halt, wenn man Abfragen daran stellt,

Jochen

dann halt Schlussfolgerungen daraus ziehen und dann vielleicht Dinge vorhersagen

Jochen

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.

Jochen

Da kann man auch Analysen irgendwann machen.

Jochen

Das ist aber dann, glaube ich, wieder ein neues Thema,

Jochen

wie man Analysen dann mit Daten fährt.

Jochen

Das werden wir heute, glaube ich, nicht machen.

Jochen

Doch, doch, doch.

Dominik

Ja, doch, doch, doch, alles.

Dominik

Ihr müsst heute lange, lange Geduld mitbringen

Dominik

oder eine große Runde durch den Park

Dominik

oder könnt gerne zur Wohnung putzen heute.

Jochen

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

Jochen

Aber ja, ich denke, das ist eigentlich vielleicht ganz interessant,

Jochen

mal so einen groben Überblick.

Jochen

Also ich versuche dann zu verhindern, zu sehr ins Detail zu gehen.

Jochen

Aber wenn man einfach mal so das Gesamtthema Datenbanken

Jochen

mal überblickt hat. Ja, ich hätte

Dominik

so ungern davon ab, so ins Detail zu gehen, weil ich finde das

Dominik

unheimlich interessant, was da alles noch so drinter steckt.

Dominik

Ich bin da sehr curious, was man noch alles

Dominik

so findet und die Details sind halt auch irgendwie

Dominik

wichtig, ja. Ja, stimmt.

Dominik

Wir schauen einfach mal. Ich hoffe mal,

Dominik

dass es nicht allzu lang wird, aber. Okay, ja, dann

Dominik

fangen wir doch direkt mit dem Beispiel an oder wolltest du noch so ein paar

Dominik

grundsätzliche Dinge über Daten? Genau, ich würde einmal

Jochen

grundsätzlich darüber, was gibt es für unterschiedliche Arten von Datenbanken,

Jochen

auch um halt dann,

Jochen

ja, um

Jochen

darauf dann wieder Bezug nehmen zu können in dem Beispiel

Jochen

und vielleicht auch das, was halt

Jochen

jetzt durchgesetzt hat, jedenfalls

Jochen

das ist halt, eben

Jochen

hierarchische Datenbanken gibt es schon

Jochen

ganz lange und

Jochen

Sachen in Flatfiles oder irgendwie strukturierten Dateien

Jochen

hat man auch schon lange

Jochen

und dann irgendwann 1971, glaube ich, ist ein Paper rausgekommen

Jochen

von Ted Kott

Jochen

und

Jochen

der hat sich halt

Jochen

Gedanken darüber gemacht, wie man

Jochen

eigentlich dieses Problem, ich möchte wissen, irgendwie

Jochen

speichern und dann irgendwelche Dinge damit später

Jochen

machen, wie man das so grundsätzlich

Jochen

eingehen sollte und dessen

Jochen

Idee war halt, also

Jochen

ein Problem, was er gesehen hat, mit den bisherigen

Jochen

Ansätzen war,

Jochen

dass viele Leute

Jochen

Zeit damit verbracht haben,

Jochen

die Daten, die sie

Jochen

halt schon auch irgendwie strukturiert, aber halt in

Jochen

eigenem Format in Dateien gespeichert haben,

Jochen

da

Jochen

Algorithmen für zu schreiben, wie die jetzt

Jochen

abzufragen sind. Also, wenn man jetzt

Jochen

eben so eine Frage beantwortet haben möchte, wie

Jochen

keine Ahnung,

Jochen

wie viel, was war denn jetzt die Stadt,

Jochen

in der es letztes Jahr am kältesten war

Jochen

in Deutschland oder so, dann

Jochen

fingen Leute an, dann Algorithmen zu schreiben,

Jochen

die für die Art, wie sie die Daten

Jochen

gespeichert hatten, halt

Jochen

ja, das Problem gelöst

Jochen

haben, genau.

Jochen

Und jeder, der halt die Daten

Jochen

irgendwie anders speichert, muss sich halt einen neuen Algorithmus

Jochen

überlegen, wie er das macht. Und

Jochen

das ist ja eigentlich ziemlich blöde, also das wäre

Jochen

irgendwie schlauer, wenn man

Jochen

das standardisieren könnte.

Jochen

Das standardisieren könnte und also nicht

Jochen

sich überlegt, welchen Algorithmus

Jochen

oder einen Algorithmus zu schreiben, der halt das irgendwie

Jochen

abfragt, sondern zu beschreiben,

Jochen

was man haben möchte und dann irgendeine

Jochen

Art von Datenbank

Jochen

Management System, das dann

Jochen

halt weiß, wie man irgendwie diverse Arten von

Jochen

Indizes baut oder so, dem diese

Jochen

formalisierte

Jochen

Anfrage

Jochen

vorzulegen und das Ding sucht sich dann die beste

Jochen

Art, wie man das dann löst, raus und macht das

Jochen

dann für einen.

Jochen

Und damit das alles gut geht, muss man halt

Jochen

die Daten auch in einem bestimmten Format speichern

Jochen

und man sollte die halt in Form von Relationen

Jochen

speichern.

Jochen

Das heißt im Grunde mehr oder weniger wie in Tabellen, 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 Zahlen irgendwie unterschiedliche Dinge drinstehen, die dann nichts zu suchen haben, oder?

Jochen

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

Dominik

Oh, jetzt kommen wir direkt mit den Normalisierungen.

Jochen

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

Dominik

Tabellen, die auf Tabellen zeigen oder sowas.

Jochen

Genau, genau. Ja, und das wird in Excel halt alles nicht gemacht und ja, das ist halt, das ist in der Praxis ein relativ, relativ großes Problem, denke ich, dass halt, ich habe das, auf den kommen wir später noch zurück vielleicht, der heißt Simon Willison, der hat für den Guardian irgendwie vor zehn Jahren ungefähr irgendwie so einen Bereich Datenjournalismus irgendwie, da gab es das schon, heute ist das ein großes Thema, aber damals hat das irgendwie keinen so richtig interessiert gearbeitet.

Jochen

Und der hat was mit Datenbanken da zu tun.

Jochen

Und da gab es schon jemanden, der sich damit beschäftigt hat,

Jochen

also von der Zeitung her,

Jochen

wenn es ein Artikel über irgendein Thema Arbeitslosigkeit

Jochen

oder keine Ahnung, irgendwas wirtschaftliche Themen irgendwie ging,

Jochen

wenn man da Schaubilder und Diagramme reinmachen wollte,

Jochen

wo kommen denn die Daten dafür eigentlich her?

Jochen

Und der kannte irgendwie in allen Institutionen Leute,

Jochen

die er nach diesen Daten fragen konnte,

Jochen

wusste, wo man die bekommt und so, super.

Jochen

Aber das Problem ist jetzt, also der 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. Und ich weiß halt, in welchen Daten, in welchen Files.

Dominik

da so ein Ordner im Schrank, da kann ich mal blättern.

Dominik

Und ich glaube, das ist

Jochen

tatsächlich eine Situation, die

Jochen

in vielen Unternehmen so ist oder so.

Jochen

Dass man halt dann Experten hat

Jochen

dafür, für diese

Jochen

Domain, aber... Die Menschen aus dem Archiv.

Jochen

Ja, die aber dann

Jochen

nicht unbedingt jetzt so Datenmarktspezialisten sind

Jochen

und die machen dann halt Excel-Files und tun das irgendwo hin.

Jochen

Aber das

Jochen

funktioniert halt nicht gut, weil

Jochen

man hat halt,

Jochen

man kann darüber jetzt keine übergreifenden

Jochen

Anfragen stellen, dann hat man auch so ein Problem, wenn man

Jochen

mit Leuten zusammenarbeitet.

Jochen

Ja, wie

Jochen

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

Jochen

Dann gibt es auch wieder so komische Strategien,

Jochen

wie, naja, man hat das dann irgendwie auf einem Netzwerk

Jochen

share und dann muss man sich irgendwie Bescheid sagen,

Jochen

wenn man das ändert oder man macht das irgendwie

Jochen

über komisch benannte Dateinamen oder

Jochen

sowas. Und das

Jochen

ist natürlich alles total furchtbar. Also man

Jochen

benutzt dann im Grunde zwei

Jochen

Datenbanken, die nicht wirklich dafür geeignet

Jochen

sind, was man da machen möchte, nämlich einmal das Filesystem,

Jochen

um halt so eine Art Versionskontrolle zu machen

Jochen

und dann Excel als Datenbank, was halt

Jochen

auch nicht dafür geeignet ist und dann

Jochen

macht man sich das Leben

Jochen

sehr, sehr schwer,

Jochen

obwohl es deutlich einfacher sein könnte.

Jochen

Und ja,

Jochen

das sind also aus meiner

Jochen

Perspektive auch so die beiden

Jochen

Dinge, wo man...

Jochen

Wenn man in Firmen

Jochen

so leichte Gewinne,

Jochen

die man machen könnte, also die

Jochen

beiden Themen, die halt vollkommen

Jochen

unterschätzt

Jochen

sind, aus meiner Perspektive,

Jochen

sind einmal Versionskontrolle.

Jochen

Also das sehe ich ganz oft,

Jochen

dass halt jetzt, also bei Programmierern,

Jochen

die wissen inzwischen, wie das

Jochen

funktioniert und machen das halt auch.

Jochen

Bei denen ist halt Verständnis, was jetzt

Jochen

Git ist und wie man das verwendet, irgendwie

Jochen

durchaus angekommen.

Jochen

Mal bitte den Git-Flow.

Jochen

Aber

Jochen

in den meisten anderen Abteilungen,

Jochen

wo es nicht um Programmieren geht,

Jochen

die haben von solchen Dingen noch nie

Dominik

irgendwas gehört. Dann nimmt man Tippex und

Dominik

malt da kurz die Buchstaben, die falsch sind, raus

Dominik

und fahrt dann da drüber. Und wenn man

Dominik

wissen will, was da vorher stand, dann muss man das Tipp-Eck abkratzen.

Dominik

Ja, die wissen halt vielleicht,

Dominik

wie sie ihre Programme bedienen oder so, aber die

Jochen

wissen gar nicht, dass sowas geht und wissen

Jochen

gar nicht, wie das geht und machen dann

Jochen

sehr umständlich das, was

Jochen

ihnen arbeitet, sehr

Jochen

fehleranfällig, die ihnen geht.

Dominik

Tabelle 1, Tabelle 1 neu, Tabelle 1

Dominik

neu, neu, neu, final und

Dominik

ja, jetzt erst wirklich und

Dominik

allerneueste Version. Also da

Jochen

könnte man mit wenig Aufwand viel erreichen

Jochen

und eben auch da

Jochen

irgendwie, wenn man Daten speichert

Jochen

und halt auch, man hat ja in

Jochen

Excel dann oft nicht nur

Jochen

Daten, sondern man hat dann Daten und

Jochen

Logik, weil man jetzt irgendwelche Reports erzeugt

Jochen

für irgendwie ein Management-Layer oder

Jochen

so und dann

Jochen

ist das viel Handarbeit, wo

Jochen

im Grunde man, wenn man jetzt ein bisschen

Dominik

Habt ihr jetzt gerade gehört, das war gerade ein super

Dominik

kurzer kleiner Nebensatz, wenn man kurz

Dominik

irgendwelche Daten erzeugt, so für den Management-Layer

Dominik

Ja, das

Jochen

ist denke ich in Grundform, viele Leute da so

Jochen

Excel mit irgendwelchen Makros drin oder

Jochen

irgendwelche Skript-Schnipseln drin haben,

Jochen

warum die das verwenden.

Jochen

Das Problem ist halt, das funktioniert

Jochen

meistens und dann funktioniert es irgendwann nicht mehr oder

Jochen

die Daten ändern sich und dann muss man halt irgendwie

Jochen

einen Teil von einem VBA-Skript

Jochen

oder so irgendwie so ein bisschen anpassen und dann geht

Jochen

was an der anderen Stelle kaputt

Jochen

und dann ist es auch so, dass man oft

Jochen

Sachen von Hand gefixt hat, also irgendwelche

Jochen

Werte sind halt nicht so, wie sie sein sollen und bei Excel klickt man

Jochen

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

Jochen

wieder falsch und dann muss man es wieder ändern oder

Jochen

es geht halt kaputt oder so und

Jochen

das ist einfach so aus einer Programmierer-Sicht

Jochen

nicht so das, was man tun sollte.

Dominik

Man kann damit Stunden um Stunden um Stunden um Stunden

Jochen

Genau, aus Programmierer-Sicht ist es so, wenn ich da

Jochen

irgendwie was ändere, dann ist das halt

Jochen

irgendwie Programmlogik und wenn

Jochen

dann neue Daten reinkommen, dann wird die halt genauso

Jochen

angewendet und dann muss ich das halt nur einmal hinschreiben

Jochen

und dann ist es sozusagen für immer irgendwie gelöst

Jochen

und

Jochen

ja

Jochen

es gibt auch ganz

Jochen

in VBAs natürlich noch so ein

Jochen

extra Problem. Das soll übrigens bald mit Python

Jochen

gehen, habe ich gehört. Ja, ich weiß, dass

Jochen

bei Microsoft gibt es irgendwie so ein,

Jochen

die haben da auch so ein Priorisierungstool

Jochen

sozusagen, ich weiß nicht genau, was das ist

Jochen

und ich glaube, das meiste nach

Jochen

Requested Feature ist es, VBA durch Python

Jochen

zu ersetzen, irgendwie mit irgendwie

Jochen

tausenden Upvotes,

Jochen

aber ich glaube, definitiv dazu geäußert,

Jochen

ob das irgendwie dann kommt, hat sich da auch noch

Jochen

niemand, aber das wäre

Jochen

natürlich auch eine interessante Geschichte, aber man hat

Jochen

auch bei Python dann immer noch das Problem,

Jochen

was man halt wahrscheinlich

Jochen

nicht machen können wird, ist sowas wie mit PIP

Jochen

irgendwie Dinge nachinstallieren oder so, selbst wenn es

Jochen

mit Python jetzt die VBA

Jochen

ersetzen würde. Gut, man hätte schon

Jochen

einen Vorteil dadurch, dass die Standard-Bibliothek von Python

Jochen

sehr viel mächtiger ist als das, was

Jochen

VBA kann,

Jochen

aber es ist halt immer noch nicht,

Jochen

also es gibt diverse Probleme, die noch gelöst werden

Jochen

müssten, damit das alles so richtig

Jochen

smooth ist und das Grundproblem

Jochen

ist natürlich, dass Excel das vollkommen ungeeignete Tool

Jochen

ist für vieles, was da in dem Bereich gemacht wird.

Jochen

Ja, aber

Jochen

genau, also

Jochen

genau, also eigentlich wäre das, was

Jochen

viele Leute damit machen, die werden

Jochen

viel besser bedient, wenn sie halt Python

Jochen

nehmen würden und eine relationale Datenbank

Jochen

und

Jochen

weil die eben diese ganzen

Jochen

Geschichten auch löst. Da gibt es dann halt, wenn

Jochen

mehrere Leute drauf zugreifen und Dinge ändern,

Jochen

dann sorgt die Datenbank dafür,

Jochen

oder das Datenbankmanagementsystem,

Jochen

dass da nichts schief geht,

Jochen

dass alle Leute immer die gleichen

Jochen

Daten sehen, jedenfalls innerhalb von einer Transaktion

Jochen

und so und

Jochen

da gibt es

Jochen

auch die ganze Zugriffskontrolle und all das

Jochen

ist alles schon fertig implementiert

Jochen

und

Jochen

ja, das ist halt so das, was Leute

Jochen

im Grunde verstehen, wenn sie

Jochen

wenn man von Datenbanken spricht

Jochen

denke ich

Jochen

aber es gibt halt auch noch eine ganze Menge

Jochen

anderer Datenbanken und dass sich

Jochen

relationale Datenbanken so durchgesetzt haben, ist auch

Jochen

aus meiner Perspektive ein Stück weit

Jochen

Glück oder hängt halt an der

Jochen

Geschichte von einzelnen Firmen, also man

Jochen

hätte sich auch durchaus vorstellen können, dass sie andere Paradigmen

Jochen

durchgesetzt hätten, haben sie

Jochen

aber irgendwie nicht.

Jochen

Und jetzt sind halt so

Jochen

relationelle Datenbanken das, was alle irgendwie

Jochen

verwenden. Aber es ist auch

Jochen

gar nicht so ein schlechter Ansatz. Insofern

Jochen

kann man damit eigentlich ganz gut leben.

Jochen

Aber nur mal so um

Jochen

der Vollständigkeit halber,

Jochen

um mal zu sagen, was es sonst noch alles gibt.

Jochen

Es gibt halt

Jochen

Dokumentendatenbanken, ja, gibt es auch schon

Jochen

ganz lange. Lotus Notes

Jochen

ist ja so ein Beispiel für

Jochen

ist ja früher Microsoft

Jochen

auch ganz populär.

Jochen

CouchDB,

Jochen

MongoDB, die

Jochen

fallen auch in diesen

Jochen

Dokument-Datenbank-Bereich rein,

Jochen

lösen halt so ein bisschen unterschiedliche Probleme.

Jochen

CouchDB löst so ein bisschen

Jochen

das Problem, dass ich

Jochen

nicht unbedingt

Jochen

in einen zentralen Master

Jochen

immer reinschreiben will,

Jochen

weil der halt auch weg sein kann, wenn ich zum Beispiel

Jochen

offline bin oder so, dann kann ich halt nicht

Jochen

da reinschreiben.

Jochen

sondern muss dann halt eventuell erst lokal schreiben

Jochen

und dann irgendwie die

Jochen

Daten synchronisieren hinterher

Jochen

und das macht CouchDB sehr schlau.

Jochen

Verwendet tatsächlich auch einen Algorithmus, der aus dem

Jochen

Lotus Notes-Dings-Projekt kommt.

Jochen

Es gibt Key-Value-Stores,

Jochen

wo man einfach nur

Jochen

irgendeinen Hash irgendwie, also man kann

Jochen

sich das vorstellen wie ein Python-Dict,

Jochen

wo man halt irgendwelche Keys hat

Jochen

und dann hat man irgendwelche Werte, die man dann zurückbekommt,

Jochen

wenn man den Key dahin schickt.

Jochen

Darunter fallen so Sachen wie Redis

Jochen

oder Memcached oder so

Jochen

oft zum Cachen verwendet, aber manchmal können sie auch

Jochen

kompliziertere Sachen oder weiter

Jochen

strukturierte Daten. BerkeleyDB war

Jochen

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

Jochen

Ja, aber auch sowas

Jochen

wie Amazon Dynamo

Jochen

oder so fällt da auch drunter.

Jochen

Und dann gibt es halt noch so spaltenorientierte

Jochen

Datenbanken, wobei ich auch da sagen würde, es gibt

Jochen

zwei unterschiedliche Arten, aber

Jochen

halt sowas wie Bigtable, wo Google

Jochen

einen Index drin speichert oder das

Jochen

entsprechende Hadoop-Äquivalent

Jochen

oder das Äquivalent aus dem Hadoop-Ökosystem,

Jochen

HBase.

Jochen

Die Dinger sind halt dafür gedacht,

Jochen

gigantische Datenmengen irgendwie

Jochen

zu speichern und

Jochen

das halt machen sie

Jochen

dann irgendwie eher so spaltbasiert.

Jochen

Cassandra, Apache Cassandra ist auch so ein Projekt, das das

Jochen

genauso macht. Dann ein komplett

Jochen

anderes Paradigma sind Grafendatenbanken,

Jochen

wo man

Jochen

Daten eben nicht in Tabellen speichert,

Jochen

sondern man speichert eher

Jochen

Knoten und Kanten und

Jochen

die Relationen zwischen den

Jochen

Daten sind halt nicht dadurch dargestellt, dass man

Jochen

jetzt halt irgendwie Zeilen in einer

Jochen

Tabelle hat, sondern

Jochen

dadurch, dass man halt beliebige

Jochen

Beziehungen im Grunde zwischen

Jochen

Knoten irgendwie hat, das ist jetzt ein bisschen

Jochen

abstrakt, weiß ich auch gar nicht genau, wie ich das erklären,

Jochen

vielleicht kann man das nachher nochmal

Jochen

im praktischen Beispiel ein bisschen besser erläutern.

Jochen

Ja, genau, aber das ist halt

Jochen

so eine ganz andere Art von

Jochen

Datenbanken, die aber auch, also da würde

Jochen

ich sagen, das hätte auch sich anstelle von relationalen

Jochen

Datenbanken durchsetzen können.

Jochen

Genau, auch das, was mit dem Semantik-Web, vielleicht haben manche Leute davon schon gehört, so RDF, Tuppel-Stores, das ist auch alles im Grunde ein Grafendaten-Button.

Dominik

Okay, Semantik-Web, ja, machen wir später.

Jochen

Genau. 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-DV oder.

Jochen

TimescaleDB

Jochen

oder halt sowieso

Jochen

für, du hast halt ein bestimmtes Problem

Jochen

wie, du möchtest dieses

Jochen

bei Google sieht man, Google Suggest hieß das

Jochen

Feature, wenn man Google Query

Jochen

eingibt, dann werden einem so Vorschläge gemacht.

Jochen

Dafür braucht man halt

Jochen

spezielle Art

Jochen

das zu indizieren, das ist Suffix Trees

Jochen

und

Jochen

das kann ja, ja

Jochen

dafür gibt es dann auch wieder spezielle Server

Jochen

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

Jochen

gibt es sowas halt, aber

Jochen

ja, ist jetzt, und manchmal

Jochen

sind solche Funktionen auch in

Jochen

so verbreiterten

Jochen

Datenbanken enthalten, aber es gibt halt

Jochen

auch mal spezialisierte Geschichten dafür.

Jochen

Ja.

Dominik

Vielleicht die ganzen Basissachen werden noch komplett

Dominik

nicht kurz erwähnt.

Dominik

Keine Ahnung, MySQL

Dominik

oder Postgres. Achso, das sind, ja genau,

Jochen

das sind Beispiele für relationale Datenbanken.

Jochen

Ja, MySQL,

Jochen

Postgres, das wären jetzt die Open-Source-Vertreter.

Jochen

Oracle und

Jochen

MSSQL-Server,

Jochen

Sybase, das wären so die kommerziellen

Jochen

Geschichten.

Jochen

DB2 von IBM.

Jochen

Oder zur Historie,

Jochen

im Grunde die,

Jochen

nachdem dieses Paper

Jochen

irgendwie, das sollte man

Jochen

in die Schonungs packen, das ist sehr empfehlenswert, das nicht mal

Jochen

zu lesen von Headquart. Der hat damals bei

Jochen

IBM gearbeitet

Jochen

und da ist

Jochen

ein System daraus entstanden, das nennt sich System R.

Jochen

Das haben irgendwie so ein paar Leute bei IBM geschrieben und daraus ist halt die B2 auch von IBM entstanden irgendwann, aber halt Oracle bezieht sich auch da drauf, glaube ich.

Jochen

Ich weiß jetzt aber nicht, wie die Verbindung zu Oracle ist. Und dann gab es halt auch Leute in Berkeley, die versucht haben, das zu implementieren, das Paper.

Jochen

Und dabei ist was rausgekommen namens Ingress.

Jochen

Michael Stonebreaker war das damals.

Jochen

Und das war am Anfang noch gar keine Datenbank für beliebige Daten,

Jochen

sondern das war für Bilder irgendwie.

Jochen

Und dann ist das Ganze zu Postgres geworden

Jochen

und wurde dann zu einer normalen, relationalen Datenbank sozusagen.

Jochen

Und das ist auch faszinierend.

Jochen

Also dieses ganze Postgres-Projekt ist der Wahnsinn eigentlich.

Jochen

hat halt irgendwie Mitte der 80er

Jochen

ist das gestartet oder

Jochen

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

Jochen

und

Jochen

ist jetzt über 30 Jahre wahrscheinlich

Jochen

hat das auch einen Buckel

Jochen

und ist immer noch

Jochen

top und set of the art

Jochen

immer noch dabei, es kommen immer noch tolle Sachen dazu.

Jochen

Ist

Jochen

wahrscheinlich auch so die,

Jochen

sie nennen sich selber irgendwie die

Jochen

ich weiß gar nicht,

Jochen

wie ich das übersetzen soll, Advanteste,

Jochen

Die fortschrittlichste Open-Source-Datenbank,

Jochen

ja. Gut, Oracle und so

Jochen

hat wahrscheinlich noch ein bisschen mehr Funktionen, aber

Jochen

ja,

Jochen

tatsächlich wird meistens

Jochen

aber, wahrscheinlich aus Kostengründen,

Jochen

tatsächlich jetzt so

Jochen

im Internetumfeld irgendwie dann meistens werden so

Jochen

Open-Source-Datenbanken verwendet.

Jochen

Ja,

Jochen

ich habe schon mal gesehen, dass Leute Oracle verwenden,

Jochen

aber das ist eher selten.

Jochen

Jetzt so als

Jochen

Backend für Webseiten

Jochen

verwendet man normalerweise nicht. Oracle ist halt auch

Jochen

viel zu teuer. Oder

Jochen

MSSQL-Server, doch, das gibt es tatsächlich

Jochen

Leute, die das als Backend für

Jochen

Webseiten verwenden.

Jochen

Ein Beispiel

Jochen

einer populären Seite, die halt auf

Jochen

MSSQL-Server läuft, ist

Jochen

Stack Overflow. Das ist auch

Jochen

faszinierend.

Jochen

Ich meine, einer der

Jochen

ich weiß nicht, ob es

Jochen

der Gründer selber war, der war auch

Jochen

Produktmanager bei Microsoft, glaube ich, insofern

Jochen

die machen viel auf dem Microsoft-Stack

Jochen

und holen da unglaubliche Sachen raus.

Jochen

Also die haben irgendwie ein halbes Rack oder

Jochen

das ist jetzt auch schon lange her, dass ich

Jochen

da irgendwie Artikel zu gelesen habe, aber

Jochen

das letzte Mal, dass ich das gesehen habe, war

Jochen

Stack Overflow tatsächlich unter den Top Ten

Jochen

der trafficstärksten Webseiten

Jochen

weltweit und die haben

Jochen

dafür, Hardware war irgendwie so ein halbes Rack

Jochen

oder so. Und das ist natürlich schon

Jochen

extrem beeindruckend. Und das ist überhaupt so was,

Jochen

was halt wahrscheinlich viele Leute nicht wissen,

Jochen

die jetzt nicht so viel Erfahrung haben mit Datenbanken,

Jochen

die können echt wahnsinnig

Jochen

viel

Jochen

Dinge tun

Jochen

gleichzeitig und so. Also man kriegt aus so einer

Jochen

ordentlich konfigurierten und getunten

Jochen

relationalen Datenbank

Jochen

schon so mindestens ein paar tausend,

Jochen

vielleicht auch ein paar zehntausend Requests

Jochen

oder Statements pro Sekunde raus, die die halt verarbeiten

Jochen

können. Und dann kann man natürlich eine Menge

Jochen

machen.

Jochen

Also vorausgesetzt der ganze Kram passt in den Hauptsprecher.

Jochen

Aber man macht keine Dinge, die

Jochen

das irgendwie langsam machen. Also es ist halt auch nicht so einfach,

Jochen

das zu optimieren, aber

Jochen

ja, genau. Und das ist halt

Jochen

auch dieser Bereich der relationalen Datenbank, ist halt

Jochen

der größte Datenbankbereich eigentlich.

Jochen

Ja, vielleicht

Jochen

können wir dann, wollen wir zu dem praktischen

Dominik

Beispiel. Ja, super. Wie macht man das jetzt alles

Dominik

und wie baut man das auf und warum und

Dominik

was kann man damit so schönes machen und

Dominik

was für Probleme könnten wir darüber stolpern und sowas.

Dominik

Ja, dann

Jochen

nehmen wir doch mal an, wir wollen jetzt

Jochen

Amazon nachbauen. Wir haben einen

Jochen

kleinen Buchhandel in der Garage.

Dominik

Ja, und wir überlegen jetzt uns jetzt so, ah, da liegen jetzt ganz viele Bücher auf dem Boden und dann will irgendjemand bestellen, dann muss dann irgendjemand in die Garate laufen, gucken, wie ist denn jetzt der Titel, habe ich den, dann liegt ein Buch unter dem anderen, das wäre natürlich doof, wenn man erstmal lange suchen muss, deswegen haben wir jetzt überlegt, ja, pass auf, wir schreiben das Ganze jetzt in eine Datenbank.

Dominik

Wie fangen wir jetzt mal an, vielleicht reden wir kurz über das Schema, wie man sowas aufbaut nochmal kurz.

Jochen

Genau, also man würde jetzt zum Beispiel eben die Mitteilinformationen ü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, man würde das halt in eine Tabelle schreiben, aber man würde jetzt möglicherweise schon nicht den Autor, wenn man jetzt den Autor, 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 umbenimmt, weil er heiratet oder so?

Jochen

Ja, genau. 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. 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.

Dominik

Wir könnten Suche und Ersetze machen und dann machen wir sowas, dann machen wir für jedes Jahr, das wir Bestellung haben oder jeden Monat eine neue Datenbank, eine neue Tabelle und dann müssten wir einmal nach drei Jahren oder sowas 36 verschiedene Dateien öffnen, immer Suche und Ersetze ausführen und dann den Namen ändern. Ist das super oder nicht?

Jochen

Ich könnte sagen, dass das nah dran ist an dem, was viele Leute tatsächlich machen, aber das kann man auch eleganter tun in der Datenbank und dann hätte man möglicherweise nur einen sogenannten Fremdschlüssel in der Spalte Autor in der Büchertabelle und dann würde man den Namen des Autors halt von der Autotabelle ändern und dann wäre das automatisch in 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,

Dominik

wo dann alle Autorinnen drinstehen.

Dominik

Ja,

Jochen

wäre auch eine Möglichkeit, genau.

Jochen

Und

Jochen

ich

Jochen

überlege gerade,

Jochen

das ist jetzt natürlich, also

Jochen

Autoren, ein Beispiel, anderes Beispiel wäre User,

Jochen

die jetzt auf der Webseite irgendwas einkaufen wollen oder so.

Jochen

Da würde man in der Bestellung halt

Jochen

auch nicht den User selber irgendwie

Jochen

in jede Bestellung schreiben, sondern halt

Jochen

irgendwie die ID von dem User, der

Jochen

irgendwas eingekauft hat und

Jochen

im Grunde, also ja, das heißt

Jochen

Datenbank-Normalisierung, wenn man jetzt

Jochen

dafür sorgt, es erinnert so ein bisschen

Jochen

an, wenn man Software schreibt, nennt sich das

Jochen

DRY, so Don't Repeat Yourself,

Jochen

also wenn man Software schreibt, sollte man auch

Jochen

Funktionalität, die man an mehreren Stellen verwendet, halt

Jochen

nicht an mehreren Stellen implementiert haben, weil

Jochen

wenn man das an einer Stelle ändert und

Jochen

vergisst es halt an der anderen, dann hat man halt

Jochen

ja, einmal ist es

Jochen

dann inkonsistent, das Verhalten,

Jochen

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

Jochen

Das ist doch bestimmt schon einmal passiert, oder?

Dominik

Also mir hat das früher ständig passiert und dann ist mir irgendwann aufgefallen,

Dominik

oh, ich mache eine Funktion und dann mache ich die Funktion auch.

Jochen

Dann macht man eine Funktion und dann macht man einen Test und dann ist es halt erledigt, sozusagen.

Jochen

Also sollte man halt möglichst versuchen, Dinge, die man, so Logik, die irgendwo ist,

Jochen

halt immer nur einmal irgendwo stehen zu haben.

Jochen

Ist natürlich manchmal nicht so ganz einfach und ist bei Datenbanken halt auch nicht,

Jochen

weil das beißt sich so ein bisschen mit anderen Anforderungen, die man hat.

Jochen

Wenn es halt schnell sein soll, dann ist das manchmal etwas schwierig, weil relativ nahe Datenbanken, dann wenn man halt viele Tabellen miteinander verknüpft, man nennt das halt Join, das heißt man kann halt anhand von diesen Verzweigungs-, also Fremdschlüssel-Dingsies kann man halt Tabellen aneinander verketten.

Jochen

Man kann sich das vorstellen, man legt die halt sozusagen nebeneinander, sodass halt die Spalte mit dem Schlüssel übereinander liegt und wenn man das mit vielen macht, dann werden die Abfragen langsam.

Jochen

So ein bisschen wie an so einem Spielautomaten.

Dominik

Wenn ihr so einen einarmigen Banditen habt,

Dominik

dann zieht ihr einmal dran, da sind ja so drei verschiedene

Dominik

und wenn ihr dann parallel sind und alles zeigt, gewinnen,

Dominik

dann habt ihr den Schlüssel, den ihr braucht.

Jochen

Dann hat man die Zeile

Jochen

von dem Schlüssel irgendwie zusammengeführt.

Jochen

Ja, genau.

Jochen

Ja.

Jochen

Also

Jochen

das ist halt auch, wie man ein Schema

Jochen

designt und so, das ist halt so ein bisschen

Jochen

Kunst und man braucht Erfahrung dafür.

Jochen

Aber

Jochen

man kann halt sagen, ja,

Jochen

man sollte das so ein bisschen normalisieren. Also meistens

Jochen

gibt es dann ganz viele unterschiedliche Normalformen

Jochen

und meistens die Formen,

Jochen

die man dann so hat, ist so irgendwas zwischen dritter

Jochen

und vierter Normalform oder so,

Jochen

zwischen dritter und Boy-Scout-Normalform oder sowas. Aber ich möchte

Jochen

gar nicht so sehr im Detail darauf eingehen, was

Jochen

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

Jochen

wissen, sondern da hat man dann halt irgendwann

Jochen

ein Gefühl dafür, wenn

Jochen

ein Datenbankschema okay aussieht.

Jochen

Und dann macht man das halt so.

Jochen

Das heißt, ich gehe jetzt tatsächlich erstmal hin

Dominik

und nimm ein Whiteboard, einen Zettel

Dominik

und schreib mir auf, wie die Daten aussehen

Jochen

sollen. Ja, ja, tatsächlich. Also wenn ich

Jochen

irgendwie eine Datenbank

Jochen

designe für irgendein Projekt, dann

Jochen

nehme ich mir einen Zettel und fange an

Jochen

Entity Relationship

Jochen

Diagramme zu malen. So nennt man die.

Dominik

Was passiert denn später, wenn ich während dem Projekt

Dominik

merke, hey, ich habe aber die und die Daten

Dominik

vergessen? Bastel ich da einfach

Dominik

irgendwo rein? Ergänze ich dann dieses Schema einfach?

Dominik

Ja,

Jochen

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

Jochen

Das ist auch so ein Problem.

Jochen

Man kann Datenbanken nicht so richtig super ändern.

Jochen

Also relationelle Datenbanken.

Jochen

Das Schema lässt sich schon ändern,

Jochen

aber das ist halt so ein bisschen knifflig.

Jochen

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,

Jochen

dass nicht irgendwelche Inkonsistenzen entstehen.

Jochen

Und auch, dass halt...

Jochen

Wie wäre das jetzt bei unserem Beispielbeispiel?

Jochen

Also wenn ich mir jetzt überlege,

Jochen

ich brauche jetzt eine neue Spalte in dieser

Jochen

Büchertabelle, ja, weiß ich nicht,

Jochen

es gibt jetzt nicht nur die ESPN.

Dominik

Aber vom Cover, jemand, oder das

Dominik

Genre oder sowas, jemand sammelt Seefahrerbücher.

Dominik

Ja, eine Kategorie, da würde ich halt

Jochen

tatsächlich, also das, was man sich zuerst überlegen könnte,

Jochen

ist, man macht einfach

Jochen

ein Textfeld oder

Jochen

Charfield, das halt

Jochen

den Kategorienamen enthält

Jochen

und dann hat man halt

Jochen

das Problem, okay, dann stellt man fest,

Jochen

oder am besten noch,

Jochen

okay, fangen wir so an,

Jochen

man schreibt halt, man nimmt Text

Jochen

statt Kategorie

Jochen

und sagt jetzt,

Jochen

okay, alle Texts, also weiß ich nicht,

Jochen

Militristik,

Jochen

Komba, Seefahrer Roman oder

Jochen

Komba, schreibt man jetzt Komba separiert

Jochen

halt in eine Spalte rein,

Jochen

dann hat man damit die erste Normalform verletzt

Jochen

und man muss sich dann im nächsten

Jochen

Schritt, wenn man das halt weiter normalisiert, überlegen,

Jochen

okay, nee, das geht nicht, darf ich so nicht machen?

Jochen

Also der eigentliche Grund,

Jochen

warum man das nicht machen sollte, ist halt, dass es

Jochen

diverse Anfragen halt schwierig macht

Jochen

und dass man es auch sehr schlecht ändern kann

Jochen

und dass wenn man was ändern kann, man Sachen kaputt machen,

Jochen

weil

Jochen

Inkonsistenzen entstehen können und so.

Jochen

Dann zieht man erst mal

Jochen

diese Dinger auseinander und sagt halt,

Jochen

okay, nicht in einer Spalte

Jochen

mehrere Tags reinschreiben,

Jochen

sondern dann hätte man sozusagen

Jochen

eine End-to-End-Relation, also nicht nur,

Jochen

wo ein Fremdschlüssel in der einen Tabelle zu einem Fremdschlüssel

Jochen

in eine andere Tabelle passt, sondern man hat

Jochen

dazwischen eine Link-Tabelle. Man hat jetzt einmal Tags

Jochen

als Relation und einmal halt die Bücher

Jochen

als Relation oder als Tabellen halt

Jochen

und dazwischen hat man jetzt noch eine Link-Tabelle

Jochen

zwischen oder Link-Relation zwischen

Jochen

Büchern und Tags, sodass

Jochen

man mehrere, also für jedes Tag hätte man

Jochen

dann sozusagen einen Eintrag in der Link-Tabelle,

Jochen

wo dann drin steht

Jochen

ID von diesem Buch,

Jochen

ID von diesem Tag. Ja, und das ist dann halt

Jochen

sozusagen der, die

Jochen

Verbindung zwischen den beiden Tabellen,

Jochen

sondern halt eine Tabelle mit allen Texten.

Jochen

Die ist möglicherweise gar nicht so lang.

Jochen

Es gibt vielleicht nur 1.000 Texte oder so.

Jochen

Und vielleicht ein paar Millionen Bücher.

Jochen

Und jetzt hat man halt eine Link-Tabelle,

Jochen

die wahrscheinlich dann irgendwie ein paar 10 Millionen Bücher,

Jochen

ein paar 10 Millionen Zeilen oder so lang ist,

Jochen

wo halt jedem Buch ein paar Texte zugewiesen werden.

Jochen

Und dann ist alles wieder schön in der Normalform.

Jochen

Und das kann man dann auch wieder nett abfragen.

Jochen

Ja, wenn man dann aber quasi diesen Text halt,

Jochen

wenn man diese Texte jetzt aber betrachtet

Jochen

als Blätter in einem Kategorienbaum oder so,

Jochen

dann wird es wieder so ein bisschen schwierig,

Jochen

weil dann versucht man etwas

Jochen

in einer relationalen Datenbank abzuspeichern,

Jochen

was gar nicht so gut geht,

Jochen

nämlich irgendwie so Baumstrukturen

Jochen

oder Grafenstrukturen.

Jochen

Das kann man dann auch machen

Jochen

und wenn es nicht viele Texts oder Kategorien sind,

Jochen

dann würde man versuchen,

Jochen

wahrscheinlich Nested Sets nehmen.

Jochen

Das ist, kann man sich mal angucken,

Jochen

das interessiert, wie das, dann kann man dann halt auch

Jochen

per SQL Abfragen machen, wie

Jochen

ja, welche Bücher liegen denn jetzt

Jochen

unterhalb von dieser Kategorie.

Jochen

Was man macht ist, man schreibt an jede,

Jochen

man hat so eine Kategorie einen Baum und man schreibt dann an

Jochen

jedes Element

Jochen

in dieser hierarchischen Struktur,

Jochen

den traversiert man einmal

Jochen

First Order, ich weiß gar nicht genau.

Jochen

Und

Jochen

also beim Durchlaufen

Jochen

nummeriert man jeden Knoten, an dem man

Jochen

vorbeiläuft, durch und

Jochen

man hat eine Spalte links und eine Spalte

Jochen

rechts und links, wenn man

Jochen

links an den Sachen vorbeiläuft in den Baum,

Jochen

schreibt man halt die Nummern links

Jochen

rein und dann rechts, wenn man rechts dran

Jochen

vorbeiläuft und dann kann man so Sachen

Jochen

Range-Abfragen dazwischen machen und

Jochen

magischerweise führt das dann dazu, dass man so Subbäume

Jochen

rausselecten kann und so. Aber das ist dann

Jochen

halt schon so wirklich für Fortgeschrittene.

Jochen

Und im Endeffekt,

Jochen

wenn man jetzt große

Jochen

Grafenstrukturen hat oder Bäume,

Jochen

dann wäre es wahrscheinlich besser, das gar nicht mehr in einer relationalen Datenbank

Jochen

zu machen, sondern das irgendwie in einen anderen Service

Jochen

zu packen.

Jochen

Ja, und da sind wir schon,

Jochen

boah, das ging aber schnell, da sind wir schon an Grenzen,

Jochen

wenn man so eine Relation an Datenbanken machen kann.

Dominik

Ja, also das Dorsch nach der Garage ist mittlerweile rausgewachsen,

Dominik

also können die ganzen Bücher dann in der Garage

Dominik

nicht mehr lagern.

Dominik

Nee, nee, nee, Moment, Moment, wir sind noch nicht,

Jochen

also was eigentlich auch, nee, wir sind noch nicht,

Jochen

wir sind noch nicht so weit, wir sind noch immer bei der ganz normalen,

Jochen

einfachen Datenbank, würde ich sagen.

Jochen

Ja, also das,

Jochen

wofür wir die nämlich auch brauchen, die Datenbanken,

Jochen

sind halt so Transaktionen-Prozessen,

Jochen

So wenn jemand was kauft zum Beispiel.

Dominik

Oh, jemand hat bei uns eine E-Mail geschickt, hat gesagt, hey, habt ihr das Buch da?

Dominik

Und wir gucken nach, sagen ja, können wir dir schicken.

Dominik

Dann ja, bitte an die und die Adresse und so.

Dominik

Dann machen wir so ein Paket, machen da so einen Stempel drauf und sagen, hey, hier bitte 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 das im Lager ist.

Jochen

Das heißt, wenn jetzt ich ein Buch verschicke,

Jochen

dann sage ich meiner Datenbank irgendwie so,

Jochen

okay, jetzt ist davon eins weniger da im Lager.

Jochen

Aber wenn jetzt auf der Webseite jemand sagt,

Jochen

ich würde dieses Buch einkaufen,

Jochen

dann muss halt gewährleistet sein, dass das halt noch da ist.

Jochen

Das heißt, ich brauche halt eine zentrale Stelle,

Jochen

in der die Wahrheit...

Dominik

Mir fällt direkt wieder eines der Probleme ein.

Dominik

Okay.

Dominik

Ja, zwei Leute wollen das gleiche Buch haben,

Dominik

was nur noch einmal da ist,

Dominik

und die wollen gleichzeitig eins kaufen.

Dominik

Genau.

Jochen

Das ist halt eine problematische Geschichte.

Jochen

Aber wenn man jetzt eine Datenbank hat,

Jochen

die die Wahrheit kennt und alle nur auf die zugreifen,

Jochen

dann kann im Grunde nichts passieren.

Jochen

Also da können keine Konflikte auftreten,

Jochen

weil in dem Moment, wo jemand auf Kaufen klickt auf der Webseite

Jochen

und es noch ein Buch da war ...

Dominik

Die Frage ist halt jetzt, was man macht,

Dominik

wenn viele Kunden sich immer so ein Buch angucken,

Dominik

das in ihren Warenkorb reintun, weil sie es kaufen wollen,

Dominik

aber 90 Prozent dieser Kunden einfach gar nicht am Ende kaufen,

Dominik

sondern irgendwie wieder abspringen, weil die dann sagen,

Dominik

na ja, doch nicht oder so.

Dominik

Und dann hätten jetzt ja alle sich bei sich einen Warenkorb reingedickt

Dominik

und wenn nur noch eins da ist,

Dominik

vielleicht hätte der zweite direkt angezeigt bekommen,

Dominik

geht gar nichts, der ihn wirklich gekauft hätte.

Jochen

Also was natürlich passieren kann, ist, dass dir angezeigt wird,

Jochen

es gibt noch ein Buch, obwohl es keins mehr gibt.

Jochen

Weil du sitzt halt vor der Webseite und machst nichts.

Jochen

Du kopfst in die Luft.

Dominik

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

Jochen

Genau, du kannst, sobald du draufdrückst,

Jochen

in dem Moment, wo sozusagen diese Bestelltransaktion gestartet wird

Jochen

und dann in der Datenbank aber

Jochen

die Bedingung, es muss mindestens eins im Lager

Jochen

sein, damit die Bestellung ausgeführt werden kann, nicht mehr erfüllt

Jochen

ist und diese Constraint

Jochen

wird verletzt, dann sagt die Datenbank so,

Jochen

geht nicht. Und dann

Jochen

kann man dem User eine Fehlermeldung anzeigen und sagen so,

Jochen

oh ja, tut uns leid, das hat nicht geklappt.

Jochen

Kein Buch mehr auf Lager.

Jochen

Das ist ja im Grunde okay.

Jochen

Ja, gerade so.

Jochen

Ja, also was halt

Jochen

blöd wäre, ist, wenn man dem User sagt,

Jochen

okay, du hast das jetzt bestellt.

Jochen

Und dann sagt er am Schluss, ätsch, ätsch, du kriegst doch kein Buch, weil war keins mehr da. Das ist halt so ein bisschen blöder. Ist aber eine Situation, die dann später, wenn wir halt nicht mehr auf einer Datenbank bleiben können, weil das einfach nicht mehr, also 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. Aber solange das alles auf einer Datenbank läuft, ist da im Grunde kein Problem, kann man das sauber lösen.

Dominik

Ich hatte ja so etwas, ich hatte das vielleicht schon mal kurz erwähnt, bei einer Bank. Ich habe eine Transaktion gemacht, da hat dann die Bank gesagt, ja, ist wunderbar, deine Überweisung wurde vernünftig ausgeführt. 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. War nicht da.

Dominik

Was habe ich dann da angerufen? Da haben die 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. Das war ein bisschen blöd dann für mich, aber ja, scheint wohl auch mal so größeren Menschen.

Jochen

Ja, also 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-Processing gibt, nachts. Also die Sparkassen haben das lange gemacht.

Dominik

Man schmeißt dann manuell die ausgedruckten Briefchen ins Überweisungs...

Dominik

Lochkarten.

Jochen

Fällt jemand mit den Lochkarten dahin und dann kommen die in so einen Laser und dann werden die da durch und vielleicht, wenn dann eine Lochkarte rausfällt, 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 ja gerade bei der Bank eigentlich, wo man sich denkt, na, 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 und im Grunde, wenn das Ding sagt, ja, die Transaktion ist durch, dann hat das auch funktioniert.

Jochen

Man kann sich auch darauf verlassen. Es gibt halt welche, die nicht so richtig alle Features unterstützen, die man dafür braucht. Also zum Beispiel, was man eigentlich dafür braucht, damit das ordentlich funktioniert, ist, man braucht halt Isolation zwischen unterschiedlichen Transaktionen.

Jochen

Also Transaktion 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 genau so ein Fall wie, ich kaufe ein Buch, ist halt ein Ding, in der Daten müssen jetzt mehrere Sachen passieren.

Jochen

Da muss halt irgendwie, diese Bestellung muss erzeugt werden, dann muss irgendwie aus dem Lagerstand irgendwie rausgelöscht, muss halt der Lagerbestand um eins reduziert werden und so 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 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

Und dann ist es halt sauber. Wenn ich ein System habe, das das nicht macht und ich erzeuge die Bestellung, habe jetzt in meiner Bestellungstabelle das Ding erzeugt, sage jetzt in der Lagerstandstabelle dieses Buch 1 weniger und dann sagt das, hier habe ich ein Constraint auf, es darf nicht weniger als 0 werden, also minus 1 Bücher ist schwer, das funktioniert irgendwie nicht so richtig und es dann knallt, dann kann das natürlich, wenn ich jetzt ein System habe, das keine Transaktion kann,

Jochen

dann hätte ich jetzt die Bestellung zwar immer noch da,

Jochen

aber... Was ist denn jetzt als Beispiel,

Dominik

wenn ich jetzt sowas habe wie minus ein Buch

Dominik

und ich möchte jetzt einfach, dass wenn

Dominik

minus ein Buch ist, dass das nachbestellt wird

Dominik

von dem Händler um die Ecke.

Dominik

Also der hat noch eine Garage und die Mann ist noch ein Händler,

Dominik

der hat auch so Bücher und vielleicht hat der

Dominik

eins da und dann sage ich einfach, ja, ich muss das irgendwo anders herbekommen.

Dominik

Könnte ich ja auch wollen.

Dominik

Kann man auch machen.

Jochen

Müsste dann, ja, das hängt dann vom System

Jochen

ab, was die Logik dann macht. Man könnte dann sagen,

Jochen

okay, die Bestellung wird trotzdem ausgeführt, dafür wird dann

Jochen

aber das... Oder das Buch wird gedruckt oder sowas.

Jochen

Ja genau, einfach normal produziert. Aber dann verändert sich möglicherweise das Ziel dafür, wann es halt ausgeliefert wird oder so. Und das ist halt dann, je nachdem wie das System funktioniert, kann man das machen.

Dominik

Okay, also ich habe am Anfang mir so ein Schema ausgedacht, wo dann halt drin steht, was ich überhaupt alles machen will, machen kann. Und wenn mir irgendwelche neuen Dinge einfallen oder so, dann muss ich kurz überlegen, was, nicht an meinem Schemaende, aber am besten mache ich das Schema am Anfang schon so fertig, vollständig, dass das unproblematischer geht.

Jochen

Das ist ein bisschen ein Problem. Man sollte ein Schema schon von Anfang an halbwegs so designen, dass es halt passt. Es ist später nicht mehr so ganz einfach, das zu ändern. Man kann das natürlich ändern, aber es ist auf jeden Fall…

Dominik

Aber das fängt ja ein bisschen vom Geschäftsmodell ab. Wenn ich jetzt auf einmal merke, oh, ich verkaufe jetzt vielleicht gar keine Bücher mehr, sondern, weiß nicht, kompliziertere Produkte oder sowas, die noch einen anderen Aufwand haben, die jetzt nicht nur getaggt werden sollen, sondern wo noch mehr Metainformationen drin sind, irgendwelche anderen Snippets, also der Buchtext vielleicht noch oder andere Informationen, die dazugehören oder so, dann wird das ja notwendig. Also ich kann ja nicht jedes Mal eine neue Darkman anfangen, sondern ich muss ja auch gucken, dass sie irgendwie mit skaliert.

Jochen

Ja, aber das sind wirklich schwierige

Jochen

Probleme. Das ist ein bisschen

Jochen

unintuitiv, dass das

Jochen

so knifflig ist, aber es ist leider so.

Jochen

Ein wirklich lustiges Beispiel aus der Praxis.

Jochen

Das zeigt,

Jochen

dass das halt nicht so einfach ist.

Jochen

Möglicherweise finde ich es immer iTunes

Jochen

oder der App Store.

Jochen

Und der App Store war am Anfang,

Jochen

man hat den nicht neu entwickelt, sondern das war,

Jochen

man hat den, also über iTunes

Jochen

konnte Apple ja schon immer irgendwie so Musik verkaufen.

Jochen

Das hat auch recht gut funktioniert.

Jochen

Oder halt

Jochen

deutlich früher, als es jetzt das iPhone

Jochen

gab und App Store. Und dann

Jochen

sollte es halt dieses App Store Feature

Jochen

geben. Und dann haben sie halt einfach

Jochen

ihr iTunes Song Verkauf Ding

Jochen

genommen. Und das halt

Jochen

einfach nur gesagt, okay, das sind jetzt keine Songs, sondern das sind Apps.

Jochen

Was halt dazu

Jochen

führt, dass bis heute, und jetzt sind wir mehr als

Jochen

zehn Jahre später,

Jochen

bis heute haben

Jochen

halt irgendwie Apps einen Titel und eine Länge,

Jochen

Songlänge oder sowas, ja, was halt

Jochen

totaler Quatsch ist, das passt ja überhaupt nicht zusammen,

Jochen

aber es ist halt sehr, sehr schwer, das zu ändern,

Jochen

weil, ja,

Jochen

das würde so viel Logik irgendwie

Jochen

brechen,

Jochen

dass in anderen Systemen, das ist halt

Jochen

extrem, also du kannst halt, ja,

Jochen

also eine solche Migration

Jochen

durchzuführen, ist halt hinterher sehr, sehr schwer

Jochen

und also quasi die ganzen

Dominik

Daten einmal anfassen und abgleichen und bereinigen

Dominik

und schrubben und putzen.

Jochen

Die Daten sind gar nicht so sehr das Problem. Das Problem sind

Jochen

die anderen Systeme, die es auch

Jochen

alle drumherum gibt, die sich verlassen, dass die Datenbanken so

Jochen

aussehen, wie sie aussehen. Okay. Also wenn ich jetzt

Jochen

also die Daten selber zu ändern, ist glaube ich

Jochen

nicht so das Problem. Aber ich muss jeden

Dominik

Prozess bei jedem Nutzer dieser Datenbank darüber informieren,

Dominik

dass er sich das Schema... Und der muss damit klarkommen.

Dominik

Und das ist halt möglicherweise

Jochen

Legacy-Code, der wo

Jochen

der Letzte, der sich damit auskannte, vor fünf Jahren gegangen

Jochen

ist, aber das System

Jochen

macht irgendwas Vitales, was irgendwie total wichtig ist

Jochen

für das Business

Jochen

und tja, dann wird's halt

Jochen

richtig schwer. Und wenn du dann nicht nur ein solches System

Jochen

hast, sondern zig, dann kann es sein,

Jochen

dass du halt zehn Jahre lang das nicht mehr ändern kannst.

Jochen

Manchmal sieht man

Jochen

dann so ein bisschen lächerlich aus, aber wie jetzt

Jochen

in dem Apple-Fall.

Jochen

Wenn deine App eine Songlänge

Jochen

hat, ja.

Jochen

Ja, aber es ist halt, das zeigt halt

Jochen

so ein bisschen, wie knifflig das dann

Jochen

werden kann, wenn man

Jochen

Pech hat.

Jochen

Ja, und das ist auch so

Jochen

ein Problem bei relationalen Datenbanken

Jochen

insgesamt möglicherweise, würde ich

Jochen

sagen. Also gerade der E-Commerce-Fall

Jochen

oder der Amazon-Fall funktioniert

Jochen

eigentlich ganz gut. Zunächst, also

Jochen

später wird das dann auch nochmal ein bisschen problematischer, aber

Jochen

weil

Jochen

physische Dinge halt

Jochen

relativ stabil sind, was irgendwie so

Jochen

ihre Eigenschaften angeht. Also da funktionieren

Jochen

relationale Datenbanken halt besonders gut.

Jochen

Unwahrscheinlich, dass so ein Buch noch

Dominik

ein anderes Cover enthält oder sowas.

Jochen

Also, dass sich Bücher jetzt irgendwie,

Jochen

dass die plötzlich ein Attribut bekommen,

Jochen

was es halt vorher nicht gab. Die wachsen Flügel.

Jochen

Die haben halt irgendwie Titel, Seitenanzahlen oder sowas,

Jochen

aber dass jetzt plötzlich irgendwie, keine Ahnung,

Jochen

ich weiß nicht, was man sich

Jochen

da vorstellen könnte. Man müsste jetzt irgendwie

Jochen

Bücher...

Dominik

Jedes Buch enthält einen Geist.

Dominik

Bücher haben Flügel.

Dominik

Ja, keine Ahnung.

Dominik

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

Jochen

Das ist sehr unwahrscheinlich, dass das passiert.

Jochen

Weil das würde bedeuten, dass sich die physikalische

Jochen

Realität irgendwie ändert, was sie ja

Jochen

natürlich auch tut.

Jochen

Aber das tut sie relativ langsam.

Jochen

Und das ist

Jochen

gut, weil

Jochen

man jetzt sozusagen

Jochen

diese physischen Dinge in der Datenbank beschrieben hat,

Jochen

die kann sich auch nur langsam ändern. Und das passt dann so ein bisschen

Jochen

zueinander. Also das ist halt,

Jochen

wenn man jetzt die Eigenschaften von einem Buch erstmal erfasst hat,

Jochen

dann ändert sich da wahrscheinlich in den nächsten 20 Jahren nicht mehr so wahnsinnig

Jochen

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

Jochen

viel ändern.

Jochen

Wenn man jetzt ein anderes Problem hat und

Jochen

man jetzt zum Beispiel in der Datenbank

Jochen

nicht Daten über physikalische Objekte

Jochen

hält, sondern Daten über

Jochen

Daten.

Jochen

Oh, Metadaten.

Jochen

Die können sich

Jochen

dummerweise unter Umständen, je nachdem

Jochen

wie... Daten über Daten

Jochen

über Daten. Ja, das kann sich dann,

Jochen

da kann plötzlich die Geschwindigkeit, mit der sich die

Jochen

Strukturen da ändern müssen,

Jochen

deutlich schneller werden. Und dann wird es schwierig.

Jochen

Dann sind relationale Datenbanken auch so, das ist dann

Jochen

ein Problem. Das ist auch möglicherweise

Jochen

einer der Gründe dafür, warum jetzt in letzter Zeit halt

Jochen

immer mehr so NoSQL

Jochen

oder Dokumentdatenbanken

Jochen

oder

Jochen

wenn man das, manche nennen

Jochen

das auch Schema-less, warum die

Jochen

halt populärer werden, weil

Jochen

man damit halt möglicherweise auf diese geänderten

Jochen

Anforderungen halt besser reagieren kann,

Jochen

dass man ja möglicherweise

Jochen

ad hoc das Schema irgendwie ändern

Jochen

muss und das halt in der relationalen Datenbank nicht so ganz

Jochen

einfach ist, weil so absolut kann man das auch nicht

Jochen

sagen, also es gibt da diverse Möglichkeiten,

Jochen

wie man die Geschichten miteinander verbinden

Jochen

kann und

Jochen

ja, wenn

Jochen

Schema lässt, ist halt auch nicht Schema lässt, sondern

Jochen

das bedeutet halt mehr oder weniger nur, dass

Jochen

das Schema jetzt implizit in deiner Applikation

Jochen

ist und du halt immer aufpassen musst, wenn

Jochen

du deine Applikation änderst, dass du da das Schema nicht

Jochen

kaputt machst oder änderst oder so und das

Jochen

überlegen sich viele Leute dann nicht so richtig und

Jochen

dann ändern sie irgendwas und dann passieren furchtbare Dinge

Jochen

und also dann fällt ihnen auf,

Jochen

dass sie doch ein Schema haben.

Jochen

Und ja,

Jochen

dass sie dieses Problem halt doch nicht losgeworden sind.

Jochen

Also es ist

Jochen

leider alles nicht so einfach und

Jochen

das ist tatsächlich

Jochen

so, dass man bei Datenbanken

Jochen

halt im Design am Anfang ein bisschen

Jochen

mehr Arbeit hat, aber dafür hat man auch dann

Jochen

einen lustigen Vorteil, nämlich

Jochen

es ist immer so schön, irgendwie

Jochen

Daten altern wie Wein,

Jochen

also wenn man halt viele gute Daten

Jochen

hat, das ist super und wenn das mehr werden, das ist immer

Jochen

schön und das altert auch gut, das wird immer

Jochen

besser mit der Zeit, man kann immer mehr

Jochen

Wissen daraus generieren, man kann immer mehr

Jochen

Fragen beantworten oder so, das ist eine sehr schöne

Jochen

Sachen und

Jochen

Applikationscode erörtert

Jochen

wie Fisch.

Jochen

Das ist nicht gut,

Jochen

wenn immer Features drankommen oder Sachen

Jochen

geändert werden, also das wird immer schlimmer mit der Zeit.

Jochen

Das ist eigentlich selten so, dass man

Jochen

irgendwie jetzt mehrere Jahre irgendwie ein Projekt

Jochen

entwickelt und die Codequalität wird immer besser.

Jochen

Das ist irgendwie nicht so, sondern es wird

Jochen

immer, es wird irgendwie

Jochen

und daher ist halt... Noch ein Frickel da, noch

Dominik

ein Frickel dort, kleines Modülchen

Dominik

an der Seite. Und auch

Jochen

das Problem ist halt, die Anforderungen verschieben sich halt

Jochen

irgendwie oder

Jochen

die Realität ändert sich und

Jochen

dann ist halt der ursprüngliche

Jochen

Plan oder die ursprüngliche Architektur

Jochen

der Applikation ist halt nicht mehr darauf angepasst

Jochen

und so und

Jochen

da hat man dann halt

Jochen

ja, genau dieses

Jochen

Problem, dass wenn man

Jochen

jetzt das Schema verlagert in die Applikation

Jochen

und die Applikation aber altert wie Fisch, dann

Jochen

altern auch die Daten

Jochen

nicht gut und deswegen ist es eigentlich schon sinnvoll

Jochen

eine Trennlinie zu haben und zu sagen,

Jochen

okay, selbst wenn wir die Applikation

Jochen

irgendwann wegschmeißen müssen, neu schreiben müssen oder so,

Jochen

dann haben wir immer noch die Daten und die

Jochen

sind halt sauber strukturiert und

Jochen

das sieht alles gut aus.

Jochen

Und das kann eine sehr wertvolle Sache sein,

Jochen

wenn man das richtig macht.

Jochen

Und ja,

Jochen

genau, deswegen ist

Jochen

diese Trennung, wo man halt

Jochen

irgendwie ein striktes Schema

Jochen

hat und das auch

Jochen

diverse Constraints, die halt irgendwie,

Jochen

also dass man halt solche Sachen drin hat, wie es kann nicht

Jochen

im Lagersachen geben

Jochen

mit einem Lagerstand von

Jochen

Minus irgendwas. Das darf halt nicht sein.

Jochen

Da ist ein Fehler passiert, dann kann die Datenbank schon

Jochen

dafür sorgen, dass das halt

Jochen

nicht da reingeschrieben wird, weil die sagt halt so,

Jochen

nee, so nicht. Man muss halt bloß dieses Constraint definieren

Jochen

und sagen, so auf dieser Spalte, da dürfen keine

Jochen

negativen Werte auftauchen. Oder eben so was

Jochen

wie ein Gehalt, das darf auch nicht negativ werden.

Jochen

Oder dass halt

Jochen

bestimmte Datumsinformationen

Jochen

halt nicht so und so sein können.

Jochen

Ja.

Jochen

Oder dass man halt tatsächlich auch was mit Postgres machen kann. Postgres ist halt wirklich eine schöne Wahl, wenn man jetzt mit so einer Geschichte anfängt. Das kann so tolle Sachen wie, um in diesem Buchhandelsbeispiel zu bleiben, du hast jetzt eine Büchertabelle, da sind natürlich auch 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 Webseite hast oder du hast halt irgendwie so eine Facette Navigation, wo du nach Kategorien einschränken kannst und da klickt jetzt ein User drauf und sagt, okay, ich hätte jetzt da gerne also Romane oder Seefahrer-Romane, 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 Postgres tun, man kann

Jochen

sagen so, also

Jochen

ich brauche diese Einträge

Jochen

in der Buchtabelle noch, um halt

Jochen

damit die referenzielle Integrität, so nennt man das

Jochen

halt, von alten Bestellungen nicht bricht,

Jochen

die ja brechen würde, wenn ich

Jochen

das einfach löschen würde, dann hätte ich halt

Jochen

einen Pointer in der Bestellungstabelle, der

Jochen

halt auf etwas zeigt, was es nicht mehr gibt, das wäre

Jochen

schlecht, weil ich dann gar nicht mehr weiß,

Jochen

was es sein soll und so.

Jochen

Aber trotzdem werden diese Dinger nicht

Jochen

mehr in den Index geschrieben, also ich kann

Jochen

halt einen Index so definieren, dass er nur

Jochen

Sachen, Bücher

Jochen

mit reinnimmt, die halt

Jochen

auch tatsächlich noch verkauft werden.

Jochen

Und das heißt, es ist nicht so,

Jochen

an solchen Stellen ist Postgres halt sehr schön, hat

Jochen

sehr viele Features, zum Beispiel

Jochen

jetzt im Unterschied zu MySQL, wo das halt,

Jochen

wo solche Sachen gehen da gar nicht.

Jochen

Also das halt, und da hast du dann halt

Jochen

ein Problem, wenn du ganz, bei Büchern ist es jetzt nicht

Jochen

so schlimm, so viele Bücher gibt es nicht und

Jochen

so viele, die dann halt

Jochen

nicht mehr verkauft werden, auch nicht, aber

Jochen

man könnte sich vorstellen, es gibt durchaus Anwendungen,

Jochen

wo man dieses Problem ganz massiv bekommt,

Jochen

dass man halt eine Menge gelöschte Geschichten in der Tabelle

Jochen

hat, die man aber nicht wirklich löschen kann, sondern nur als gelöscht

Jochen

markiert. Und dann der Index

Jochen

aber immer größer wird und langsamer wird, weil

Jochen

ja, man halt nicht so einen

Jochen

partiellen Index über Sachen haben kann.

Jochen

Ja, überhaupt Postgres

Jochen

kann halt auch noch diverse andere Geschichten, damit könnte man halt

Jochen

auch so Sachen lösen, wie welche Pakete

Jochen

kriege ich eigentlich in so einen Lieferwagen rein und so,

Jochen

weil der kann halt, das Ding kann halt nicht nur

Jochen

so B-Trees,

Jochen

die man jetzt für

Jochen

Textabfragen,

Jochen

Indexabfragen benutzt, also

Jochen

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 A-Trees, die man halt für diese ganzen räumlichen Datengeschichten braucht.

Jochen

Aber es kann nicht nur das, sondern es kann auch so Sachen wie, welche Sachen liegen nah an anderen, so KD-Trees, Ball-Trees.

Jochen

Es kann sogar Suffix-Trees, also Postgres

Jochen

kann da eine ganze Menge unterschiedlicher Abfragen

Jochen

und Indizes,

Jochen

die man, also

Dominik

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

Dominik

Wir sind ja, glaube ich, noch jetzt. Ja, doch, doch.

Dominik

Ja, jetzt dann. Ja, ja.

Dominik

Wie viele Bücher passen in der Garage? Wenn du deine Lagerhaltung,

Jochen

und das möchtest du halt im gleichen System machen, damit

Jochen

eben du nicht das Problem kriegst, dass

Jochen

du den Start-Estate zwischen unterschiedlichen

Jochen

Systemen synchronisieren musst, also wenn du jetzt

Jochen

deine Lagerhaltung in einem System machst und machst

Jochen

dann deine Webseite

Jochen

oder die Datenbank, die die Webseite

Jochen

über die du Bücher verkaufst,

Jochen

wenn das unterschiedliche Systeme sind,

Jochen

dann musst du den State-Zwischendienstensystem

Jochen

ja irgendwie synchronisieren.

Jochen

Was schlecht ist, würde ich zum Beispiel sagen,

Jochen

das ist halt am Anfang sehr, sehr hilfreich,

Jochen

wenn das alles ein System ist.

Jochen

Weil man dann eben tatsächlich

Jochen

die referenzielle Integrität, Constraints,

Jochen

über alle Daten hinweg machen kann

Jochen

und dann von der Datenbank sicherstellen lassen kann schon,

Jochen

dass bestimmte Sachen nicht gehen

Jochen

und dass bestimmte Sachen immer erfüllt sein müssen.

Dominik

Das heißt, unser Schema setzt das dann tatsächlich fest

Dominik

und das gibt dann sonst direkt einen Fehler aus der Datenbank.

Dominik

Hey, nur dürfen wir nicht, geht nicht.

Dominik

Und wir haben das Schema dabei erarbeitet für unseren kleinen Laden

Dominik

und so sollten wir dann los.

Jochen

Und dann kann deine Applikation oder die Programmierer,

Jochen

die jetzt vielleicht gar nicht,

Jochen

die Leute, die die Webseite bauen,

Jochen

die haben jetzt vielleicht gar nicht so viel Ahnung von Lagerhaltung.

Jochen

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

Jochen

sie können nichts kaputt machen.

Jochen

Weil wenn sie etwas tun, was eigentlich nicht geht,

Jochen

wie zum Beispiel einen Lagerstand von hoch auf minus eins setzen,

Jochen

dann sagt ihnen die Datenbank, nur mache ich nicht.

Jochen

Und dann kriegen sie halt einen Fehler.

Jochen

Und das ist halt sauber, weil

Jochen

wenn du jetzt zwei Systeme hättest und

Jochen

musst jetzt da synchronisieren und jetzt ist aber schon

Jochen

irgendwie was Blödes passiert.

Jochen

Du hast minus zwei Bücher und dann

Dominik

sagt die eine Datenbank, du darfst aber eigentlich nicht.

Dominik

Dann sagt die eine Datenbank, ja, hab ich aber.

Dominik

Da kommst du halt in Teufels Küche.

Jochen

Man könnte sich vorstellen, dass das eine gute Idee wäre.

Jochen

Wenn man das macht, dann wird man halt relativ schnell feststellen,

Jochen

das ist keine gute Idee. Das ist doof.

Jochen

Das ist auch vielleicht ein bisschen unintuitiv.

Jochen

Und natürlich,

Jochen

nachher muss man Sachen funktionierender

Jochen

rausnehmen und man muss dann das

Jochen

in mehrere Systeme aufkleiden. Man sollte so lange wie möglich

Jochen

versuchen zu verhindern, dass das passiert, weil

Jochen

das macht alles viel, viel schwerer.

Jochen

Ja.

Jochen

Genau.

Jochen

Also wo sind wir jetzt eigentlich genau?

Jochen

Wir sind klein und niedlich. Wir haben

Jochen

Postgres, machen alles

Jochen

über Postgres. Wir haben ein bisschen JavaScript

Jochen

auf der Client-Seite. Ansonsten

Jochen

nehmen wir, sagen wir mal, Django oder so

Jochen

als Web-Framework.

Jochen

Also genau, jetzt kommen wir

Jochen

erstmal zu, wie machen wir das?

Jochen

Genau, da brauchen wir halt irgendeine Art,

Jochen

wie wir auf die Datenbank zugreifen.

Jochen

Üblicherweise, wie man Statements oder Abfragen an eine Datenbank formuliert,

Jochen

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,

Jochen

dann hat man jetzt so ein SQL-Statement.

Jochen

Das passt von der Syntaxe ja überhaupt nicht in Python rein.

Dominik

Da muss man einen langen String machen, der irgendwie vernünftig aussieht.

Dominik

Und da muss dann alles stehen, was man mit der Datenbank reden kann.

Jochen

Genau, das ist halt irgendwie nicht so schön, also das gibt dann unterschiedliche Methoden, wenn man jetzt tatsächlich mit den rohen Statements arbeitet, es gibt Leute, die packen halt alle Statements in ein File 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

Jochen

immer an die Stelle, wo man halt

Jochen

tatsächlich mit den Daten arbeitet. Das hat

Jochen

auch wiederum einen Vor- und Nachteil. Das hat den Vorteil, dass man halt

Jochen

Sachen leicht ändern kann, aber es hat den Nachteil,

Jochen

dass man unter Umständen mehrere Statements,

Jochen

die sehr ähnlich oder gleich sind,

Jochen

an unterschiedlichen Stellen hat.

Jochen

Alles nicht so total toll.

Jochen

Auch nicht so ein einfaches Problem.

Jochen

Und eine

Jochen

ganz gute Lösung für dieses Problem

Jochen

sind so objektrelationale

Jochen

Mapper oder ORMs.

Jochen

In Django ist einer eingebaut, 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.

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 mappt, ist halt

Jochen

Klasse und Tabelle. Also ich hätte dann,

Jochen

wenn ich Bücher kaufen möchte, halt eine Klasse Book

Jochen

und

Jochen

dann hätte ich halt vielleicht eine Klasse Tag

Jochen

und wir hatten das ja eben

Jochen

mit dem Beispiel, ich habe eine N zu M

Jochen

Beziehung zwischen Tags und Büchern

Jochen

und dann würde man entweder

Jochen

in Tags oder in Büchern irgendwo

Jochen

definieren, also das hier ist

Jochen

dieses Feld

Jochen

Tags ist halt

Jochen

ein

Jochen

wie heißt das

Jochen

in Django, weiß jetzt

Jochen

irgendwie, nee, irgendwas

Jochen

foreign-key-field irgendwas, aber man sagt halt,

Jochen

das ist halt many-to-many-relation

Jochen

irgendwas, weiß nicht, muss ich nachgucken.

Jochen

Aber auf jeden Fall definiert man das halt wie

Jochen

eine Spalte in der Tabelle.

Jochen

Also Attribute der Klasse sind halt

Jochen

Spalten in der Tabelle. Und sagt dann halt, das hier ist

Jochen

ein many-to-many-Beziehung zu

Jochen

der Relation Tags.

Jochen

Und dann hat man, die Link-Tabelle

Jochen

wird automatisch erzeugt, man kriegt das gar nicht mit.

Jochen

Und im Code hat man halt

Jochen

nur Bücher und Tags und halt dann diese

Jochen

Beziehungen dazwischen und dann

Jochen

ja,

Jochen

wenn man sich das halt so

Jochen

hindefiniert hat und dann halt

Jochen

alle Klassen, die man so braucht, beziehungsweise alle Tabellen, die man

Jochen

halt irgendwie in der Datenbank haben möchte,

Jochen

definiert hat mit den Spalten

Jochen

und den Typen der Spalten und den entsprechenden Constraints

Jochen

und den Inzides und den ganzen Kladderadatschen,

Jochen

die man auch sonst noch so braucht, dann

Jochen

sagt man

Jochen

Migrate und dann

Jochen

werden die ganzen

Jochen

Tabellen in der Datenbank tatsächlich angelegt

Jochen

oder

Jochen

Make Migrations

Jochen

ruft man halt zuerst auf und damit

Jochen

werden halt so Migrationsskripte in Django

Jochen

angelegt. Das sind auch einfach

Jochen

nur Python-Files, in denen drinsteht, was

Jochen

diese Migrationen tun sollen, nämlich zum Beispiel irgendwie

Jochen

Tabellen anlegen,

Jochen

Indizes anlegen oder sonst irgendwas.

Jochen

In die kann man auch beliebige andere Dinge

Jochen

reinschreiben. Also man kann halt auch selber Migrationen

Jochen

einfach so von Hand schreiben, wenn man zum Beispiel

Jochen

jetzt sowas wie, es gibt so Datenbank-Trigger,

Jochen

Also man kann halt sowas ...

Jochen

Was ist das?

Jochen

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

Dominik

Nutzer taggen selber und erfinden eine neue Kategorie.

Dominik

Ja, ich überlege gerade,

Jochen

mir fällt ehrlich gesagt jetzt gerade nicht so ein tolles Beispiel ein,

Jochen

aber im Grunde, was das tut, ist,

Jochen

wenn sich halt in einer bestimmten Spalte irgendwas ändert,

Jochen

dass dann automatisch andere Aktionen passieren

Jochen

innerhalb der Datenbank.

Jochen

Und das kann man halt festlegen,

Jochen

haben auch einen SQL-Syntax und man schreibt

Jochen

das halt einfach in eine Migration rein.

Jochen

Oder man kann auch sogar Sort Procedures, die halt dann

Jochen

irgendwie eine komplizierte Geschichte, die dann irgendwie ausgeführt

Jochen

wird, wenn ein neuer Autor angelegt

Jochen

wird oder sonst irgendwas. Dann müssen

Jochen

vielleicht noch diverse andere Geschichten gemacht werden.

Jochen

Das kann man

Jochen

ganz normal in diese Django-Migration

Jochen

auch reinschreiben. Man kann da die SQL reinschreiben

Jochen

und die werden dann mit

Jochen

ausgeführt und dann werden halt diese Sort Procedures

Jochen

oder Trigger in die Datenbank mit reingeschrieben

Jochen

und sind dann halt da.

Jochen

Und

Jochen

was im Schema

Jochen

passiert oder was da drin ist, das wird halt dann von

Jochen

diesem Django-Migrationssystem verwaltet

Jochen

und alle Migrationen, die ausgeführt

Jochen

worden sind, werden halt auch wieder

Jochen

in derselben Datenbank halt

Jochen

gehalten von Django selbst, 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 man jetzt eine Änderung gemacht hat

Jochen

und feststellt, oh, die war nicht so toll,

Jochen

dann sagt man halt einfach so migrate und dann

Jochen

gibt man die Nummer der Migration

Jochen

an davor und dann rollt sich die Datenbank

Jochen

in den Zustand davor zurück.

Jochen

und dann löscht man einfach die Migration

Jochen

und dann war's das. Also das macht es halt

Jochen

sehr angenehm, damit zu arbeiten und sowas braucht man

Jochen

auf jeden Fall. Also selbst wenn man jetzt sowas nicht wie Django

Jochen

verwendet, sondern das alles von Hand macht,

Jochen

braucht man auch irgendeine Art, wie man damit umgeht

Jochen

und das war teilweise früher ziemlich übel,

Jochen

als es keine so gute Unterstützung

Jochen

in den Frameworks für sowas gab, hat man das halt

Jochen

irgendwie von Hand gemacht und da passieren

Jochen

dann immer wieder Unfälle,

Jochen

man hat halt irgendeine Datenbank vergessen oder

Jochen

wenn man jetzt halt mehrere Datenbanken

Jochen

hat oder

Jochen

es geht irgendwie sowas verloren, man weiß

Jochen

nicht genau, in welchem Zustand die Datenbank ist, weil

Jochen

irgendwie man meint, man hätte die ausgeführt,

Jochen

aber dann ist es irgendwie doch nicht

Jochen

passiert oder, ja, weil

Jochen

eben nirgendwo drinsteht, in welchem Zustand

Jochen

die Datenbank ist, sondern man nur Leute

Jochen

fragt irgendwie so, also hast du die Migration

Jochen

jetzt eigentlich auf der Produktionsdatenbank schon ausgeführt oder nicht?

Jochen

Ja, ja, hab ich gemacht.

Jochen

Das ist vielleicht noch nicht passiert.

Jochen

Also es ist sehr schön, wenn das halt irgendwie

Jochen

selbst auch in der Datenbank

Jochen

festgehalten wird, in welchem Zustand man ist.

Jochen

Ja, und das, jetzt so ein Framework

Jochen

wie Django bietet einem dafür halt

Jochen

kommen so wirklich relativ vollständige

Dominik

Wir merken wieder, du bist ein Django-Fan.

Dominik

Ja, ja, Art damit umzugehen.

Jochen

Ja, kann man Flask, wenn man jetzt das andere

Jochen

große Web

Jochen

ja, Framework kann man jetzt nicht

Jochen

da so wirklich zu sagen, aber das andere Paradigma,

Jochen

wie man Web-Anwendungen

Jochen

in Python entwickelt,

Jochen

wenn man das mit Flask macht, hat man das

Jochen

auch alles, ja, da gibt es dann SQL-Alchemy

Jochen

als ORM

Jochen

und halt, ich weiß jetzt nicht, das hat

Jochen

irgendeinen Namen, die Migrationslösung

Jochen

dafür, an den ich mich jetzt

Jochen

gerade nicht erinnere. Und da geht

Jochen

das alles auch. SQL Alchemy ist sogar deutlich

Jochen

mächtiger als der Django OAM,

Jochen

aber ist halt nicht integriert.

Jochen

Und, ja, also

Jochen

Flask ist auch super.

Jochen

Der Trade-Off ist halt so ein bisschen,

Jochen

was einen Django so

Jochen

abnimmt, ist halt, dass man

Jochen

sich halt um viele Abhängigkeiten nicht kümmern muss,

Jochen

weil man installiert halt Django und dann hat man halt einen Großteil

Jochen

von dem, was man so braucht.

Jochen

Und das wird halt dafür

Jochen

dass das alles konsistent bleibt und man

Jochen

upgraden kann und so, dafür wird gesorgt, da muss man selber

Jochen

sich nicht drum kümmern, wenn man jetzt Flask macht

Jochen

und dann halt ganz viele unterschiedliche

Jochen

Teile hat

Jochen

und die ihre Versionen ändern und so, dann muss man selber

Jochen

am Ball bleiben und auch Konflikte halt selber

Jochen

auflösen und das heißt, man hat so langfristig

Jochen

mehr zu tun damit

Jochen

aber dafür ist man halt auch flexibler und kann halt

Jochen

wenn einem eine bestimmte Art von ORM besser

Jochen

gefällt, den halt verwenden, es gibt halt auch

Jochen

zum Beispiel irgendwie neuere, also SQL Alchemy

Jochen

ist sehr alt, Django ORM ist relativ alt

Jochen

es gibt PV

Jochen

und PonyORM oder so, das sind jetzt

Jochen

modernere Geschichten, sieht besser aus

Jochen

macht unten drunter irgendwie was

Jochen

sehr ähnliches, aber ja

Jochen

genau, also

Jochen

ein Teil davon ist halt immer, wie man die Relationen

Jochen

und Tabellen definieren kann, das sind meistens

Jochen

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

Jochen

Abfragen auf die Datenbank halt abfeuert

Jochen

und

Jochen

das, was man eigentlich fast bei

Jochen

allen ORMs dann so macht, ist

Jochen

man

Jochen

macht so Method Chaining.

Jochen

Ich weiß nicht, sagt dir das was?

Jochen

Bis jetzt nicht.

Jochen

Ja, gibt's auch so oft in Data Science

Jochen

Pandas oder so, da macht man das auch.

Jochen

Also man

Jochen

kann in Python, ja man

Jochen

kann ja irgendwas sagen, so man hat ein Objekt, Punkt

Jochen

Methodenaufruf oder

Jochen

Punkt Attribut, Punkt

Jochen

wieder noch was anderes, Punkt wieder noch was anderes.

Jochen

Wenn zum Beispiel eine Methode

Jochen

ein Objekt zurückgibt, dann kann man auf diesem Objekt

Jochen

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

Jochen

möchte, das halt viele Where-Bedingungen hat,

Jochen

die Art, in Django-Organs

Jochen

das hinzuschreiben, wäre halt zu sagen, Filter

Jochen

irgendeine Spalte

Jochen

gleich

Jochen

irgendeinen Wert oder sowas.

Jochen

Aber dann habe ich noch ein zweites, dann sage ich Punkt, Filter, nächste Spalte

Jochen

wieder irgendeinen anderen Wert oder so.

Jochen

Und das wird halt

Jochen

relativ länglich. Daraus wird dann halt ein Statement

Jochen

generiert, aber was ich halt tun

Jochen

kann, ist zu sagen, Klammer auf

Jochen

und dann halt QuerySet.Filter

Jochen

Punkt

Jochen

Annotate

Jochen

und dann Dinge gruppieren

Jochen

oder so oder neue Spalte hinzufügen

Jochen

und ich mache

Jochen

noch eine weitere Klammer drumrum, dann kann ich das halt auch

Jochen

einrücken und dann rücke ich das so ein, dass

Jochen

alle Punkte untereinander stehen und dann habe ich halt so

Jochen

ein mehrzeiliges Dings,

Jochen

was so ein bisschen eine Zwischenform ist

Jochen

zwischen SQL und Python-Code.

Jochen

Ja.

Jochen

Aber ich spare

Jochen

mir dadurch sozusagen, dass jedes Mal

Jochen

irgendeine Zwischenvariable zuweisen zu müssen.

Jochen

Ansonsten könnte ich ja natürlich sagen

Jochen

QuerySet gleich QuerySet.Filter irgendwas

Jochen

und dann sage ich in der nächsten Zeile QuerySet gleich

Jochen

QuerySet.Filter

Jochen

noch irgendwie eine andere Spalte.

Jochen

Where irgendwas.

Jochen

Ich kann das aber auch alles in ein

Jochen

einziges Ding reinschreiben.

Jochen

Man nennt das Method Chaining.

Jochen

Ja, und das ist halt irgendwie das

Jochen

bei Pandas ist es halt

Jochen

genauso. Dann hat man Data Frames, auf denen man dann Sachen macht und

Jochen

die geben dann auch immer wieder ein Data Frame

Jochen

zurück, die viele der Methoden. Und die kann man

Jochen

halt auch so chainen. Und dann hat man da oft so mehrzahlige

Jochen

Dinge, wo halt die Punkte untereinander stehen. Also wenn man

Jochen

nicht weiß, was es ist, ist es Message Chaining. Und das ist halt

Jochen

so eine Methode, um

Jochen

Dinge halt in eine...

Dominik

Irgendwie schon mal so ein bisschen gesehen, aber so wirklich wissen, was das

Dominik

Message Chaining heißt, ist natürlich...

Jochen

Genau. Und im Grunde

Jochen

ist es halt dann, wenn man

Jochen

Queries in ORMs so macht,

Jochen

ist es halt so ein bisschen ein Zwischending zwischen

Jochen

SQL und Python, aber das funktioniert

Jochen

dann halt so halbwegs gut und das

Jochen

ist dann halt sehr angenehm.

Jochen

Und dann ist es nicht mehr ein Problem, wenn man jetzt

Jochen

sozusagen diese Art von Logik an unterschiedlichen Stellen

Jochen

im Code stehen hat, weil

Jochen

die Statements, die rausfallen, sind halt alle gleich.

Jochen

Und wenn ich jetzt irgendwie, keine Ahnung,

Jochen

mir überlege, dass

Jochen

ich eine bestimmte Art von Optimierung

Jochen

machen möchte an den Statements,

Jochen

dann wäre die halt

Jochen

auch immer gleich.

Jochen

Das heißt, dann habe ich halt dieses Problem,

Jochen

das ich sonst hätte, wenn ich das alles in einen File schreiben würde

Jochen

oder wenn ich fast gleiche Statements

Jochen

in unterschiedliche Files schreiben würde,

Jochen

wenn ich die Statements beim Code haben will,

Jochen

das habe ich damit dann nicht mehr.

Jochen

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

Jochen

Das ist halt einer der Hauptnutzen von OEMs.

Jochen

Also ein anderer schöner Nutzen ist halt,

Jochen

dass man halt diese ganze Migrationsgeschichte,

Jochen

wie ändern sich Sachen, halt auch automatisiert hat

Jochen

beziehungsweise die ganzen Prozesse drumherum

Jochen

irgendwie zumindest mal abgebildet hat.

Jochen

Ja, die sind wieder klein und niedlich

Jochen

und das haben wir jetzt gemacht.

Jochen

Genau, und da würde so ein Framework werden in OEM

Jochen

Und dann ist man eigentlich, das geht alles ins Git, es gibt Versionskontrolle dafür und das ist eigentlich alles schon relativ komfortabel.

Dominik

Ja, was passiert jetzt? Also wir sind klein und jetzt haben wir das schon gebaut, aber wann funktioniert das denn nicht mehr so?

Jochen

Ja, genau. Wir haben als Online-Handel einen riesen Vorteil gegenüber stationärem Buchhandel, weil, das ist auch eine interessante Statistik, es kommt glaube ich aus diesem Buch Longtail von Wired-Redakteuren, weiß ich jetzt den Namen vergessen.

Jochen

schreibt er da, dass Amazon

Jochen

macht die Hälfte des Umsatzes

Jochen

mit Büchern, die nicht in den Top 300.000

Jochen

sind.

Jochen

Weil

Jochen

eben Bücher verkaufen

Jochen

so ein

Jochen

oder verkaufen die Bücher halt so

Jochen

eine Longtail-Verteilung. Also es gibt

Jochen

halt sehr, Leute

Jochen

wollen sehr unterschiedliche Bücher kaufen.

Jochen

Es werden viele Bücher verkauft, aber von

Jochen

denen nur ganz wenige.

Jochen

Und das ist halt blöd für einen

Jochen

Laden, der die Bücher halt physisch

Jochen

vorhalten muss, weil auch selbst wenn Bücher nicht so groß

Jochen

sind, ich kann halt in so einem

Jochen

Innenstadtbuchladen

Jochen

kann ich halt irgendwie ein paar tausend Bücher haben

Jochen

und dann ist halt irgendwie Schluss

Jochen

und ich muss mir überlegen, welche das sind, aber wenn

Jochen

jetzt, also nehmen wir an

Dominik

Das hat aber auch ein Zielpublikum, das heißt ich weiß genau, hey

Dominik

in mir kommen jetzt nur ganz viele alte

Dominik

antiquarische interessierte Menschen

Dominik

rein, dann sollte ich vielleicht dafür sorgen,

Dominik

dass in meinem Laden viele antiquarische Bücher

Dominik

sind oder es kommen jetzt noch ganz viele hippe Leute

Dominik

rein, die wollen alle was über IT wissen, sollte ich vielleicht ein IT-Buch laden.

Dominik

Ja, aber selbst

Jochen

wenn du jetzt all diese Zielgruppen

Jochen

zusammennimmst und dann irgendwie den riesigsten

Jochen

also das ist halt das Problem,

Jochen

wenn die Zielgruppe zu klein ist, dann lohnt

Jochen

sich das nicht, aber wenn sie

Jochen

selbst, wenn du jetzt einen riesigen Buchladen hast, in den

Jochen

300.000 Bücher passen, was ziemlich groß sein

Jochen

müsste, dann

Jochen

machst du immer nur trotzdem noch

Jochen

die Hälfte des Umsatzes von Amazon, weil

Jochen

Amazon macht halt nochmal so viel

Jochen

Umsatz mit dem ganzen Rest. Das heißt, sie haben dann

Jochen

sie können einfach viel besser skalieren

Jochen

weil sie einfach viel mehr Bücher verkaufen

Jochen

und ja, ich wüsste

Jochen

nicht, dass es da irgendein Mittel gegeben gibt

Dominik

ich fürchte, was aber auch bedeuten würde, dass Amazon

Dominik

auch diese Minus 1 Bestellung annehmen müsste, weil das müssen

Dominik

sie auch irgendwo in einem riesigen Lager jedes Buch liegen

Jochen

haben, ja, müssen sie tatsächlich wahrscheinlich

Jochen

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

Jochen

oder so, gut klar, sie müssen

Jochen

damit irgendwie umgehen, auch der

Jochen

stationäre Buchhandel geht ja irgendwie dann damit um

Jochen

so damit um, dass man dann halt Sachen da bestellt

Dominik

zum Beispiel, hey Autor, schreib doch bitte

Dominik

nochmal eine neue Folge, wir haben ja so ein paar

Dominik

Bestellung, ja.

Dominik

Aber, ja,

Jochen

ich meine, du hast halt als

Jochen

stationärer Buchhandlung

Jochen

hast du ja keinen Vorteil mehr, wenn du dann auch wieder

Jochen

bestellst, weil dann machst du halt zwei Sachen

Jochen

und die eine, ja, und dann

Jochen

als Amazon hast du einfach

Jochen

einen strukturellen Vorteil, fürchte ich.

Jochen

Okay, und dann kannst du...

Dominik

Es ist cool, weil dann können wir einfach mit unserer Postgres-Lösung direkt so

Dominik

unter dem ORM... Genau.

Jochen

Die interessante... Also mit 3.000

Jochen

Millionen ist das überhaupt kein Problem. Also da

Jochen

könnten wir auch, also ich würde sagen, so ein Markt wie

Jochen

Deutschland kannst du wahrscheinlich tatsächlich mit einer Datenbank

Jochen

und mit allen Büchern, die es überhaupt gibt,

Jochen

locker bedienen. Das ist kein so

Jochen

großes Problem.

Jochen

Wenn es jetzt nur darum geht,

Jochen

die Bücher zu verkaufen. Aber

Jochen

wenn wir jetzt

Jochen

zum Beispiel eben sowas rauskriegen wollen,

Jochen

wie, was sind eigentlich

Jochen

die Top 300.000 Bücher?

Jochen

Wo kommt denn diese Zahl eigentlich her?

Jochen

Ja, und

Jochen

überhaupt rauszukriegen, okay, wir machen die Hälfte unseres Umsatzes

Jochen

mit Büchern, die nicht in den Top 300.000

Jochen

ziehen, dann müssen

Jochen

wir nicht nur die Bücher

Jochen

speichern, sondern dann müssen wir halt auch

Jochen

speichern zum Beispiel, welche

Jochen

Bücher gekauft worden sind und so, also

Jochen

die Historie aller Bestellungen und so.

Jochen

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

Jochen

mehr.

Jochen

Und dann wird es allmählich

Jochen

problematisch, weil dann haben wir

Jochen

unterschiedliche Use Cases

Jochen

oder unterschiedliche Abfragemuster.

Jochen

Also wir haben zum Beispiel diese

Jochen

Transaktions...

Dominik

Also das Lager, das einfach immer noch weiß, welche Bücher

Dominik

Wir sind da und das finden wir raus.

Jochen

Das System, das macht halt Bestellungen

Jochen

oder wir haben halt Anfragen, die Bestellungen machen

Jochen

oder solche Sachen wie, zeig mir alle Bücher

Jochen

in Seefacher Romane oder so.

Jochen

Aber

Jochen

diese Art von Anfragen,

Jochen

wie, sag mir mal, wie viel Umsatz ich mit

Jochen

den

Jochen

nicht in Top 300.000 enthaltenen

Jochen

Bücher im letzten Jahr gemacht habe.

Jochen

Das ist eine ganz andere Art von Anfrage.

Jochen

Die Anfragen vorher, die machen immer nur

Jochen

auf kleinen Datenmengen in der Datenbank irgendwas.

Jochen

immer zeilenweise meistens.

Jochen

Und oft ändern sie auch irgendwas oder schreiben irgendwas.

Jochen

Aber gut, die große Mehrheit wird Read-Anfragen sein.

Jochen

Aber die beziehen sich normalerweise nicht auf wahnsinnig viele Zeilen,

Jochen

sondern immer nur relativ wenige oder wenige tausend Zeilen.

Jochen

Und eben operieren halt auch ja zeilenweise.

Jochen

Während diese andere Anfrage jetzt dieses, wie viel Umsatz,

Jochen

ja, das ist halt dann nur noch eine Spalte aus den Bestellungen.

Jochen

Und dann auch, geht es wahrscheinlich

Jochen

aber über lange Zeiträume,

Jochen

über ein Jahr, mehrere Jahre

Jochen

und dann halt über alle Bücher.

Jochen

Das ist eine Anfrage,

Jochen

die geht halt über ganz, ganz, ganz, ganz,

Jochen

ganz viele Zeilen.

Jochen

So, und jetzt beißen sich die, diese

Jochen

Abfrage-Muster beißen sich halt massiv.

Jochen

Also, weil

Jochen

das Problem ist, dass die Datenbank

Jochen

irgendwie gewährleisten muss, dass deine Sicht

Jochen

auf die Welt, also auf die Datenbank,

Jochen

konsistent bleibt, während die Anfrage läuft.

Jochen

Die Anfrage läuft jetzt aber wahrscheinlich relativ lang.

Jochen

muss ich irgendwie alle Daten, die in der Datenbank liegen

Jochen

oder einen Großteil davon muss sie sich angucken,

Jochen

wenn sie dir hinterher so was sagen,

Jochen

eine Zahl geben will, wie viel Umsatz waren das jetzt so.

Jochen

Und währenddessen werden aber Bestellungen

Jochen

abgearbeitet oder werden Dinge gemacht, Sachen an der

Jochen

Datenbank geändert,

Jochen

die jetzt aber nicht direkt

Jochen

durchschlagen können auf deine Anfrage, sondern da werden

Jochen

immer nur Kopien gemacht.

Jochen

Und es wird dann halt ein Timestamp

Jochen

reingeschrieben, es wird halt das Multiversion

Jochen

Concurrency Control.

Jochen

Multiversen!

Jochen

Das heißt, die Datenbank

Jochen

ist halt in einem unterschiedlichen Zustand,

Jochen

je nachdem, wer gerade fragt.

Jochen

Und für die Transaktionen, die eine Bestellung ausführen, ist sie jetzt

Jochen

in einem anderen Zustand als für dieses langlaufende

Jochen

Query. Und das Problem ist halt, je länger

Jochen

diese Query läuft, umso länger muss die Datenbank

Jochen

jetzt mehrere Versionen ihrer selbst aufrechterhalten.

Jochen

Was dazu führt, dass du halt auch

Jochen

mehr Speicher brauchst und was halt eine komplizierte

Jochen

Geschichte ist. Und das ist halt, ja,

Jochen

wenn das Problem ist, wahrscheinlich wird man dann halt

Jochen

irgendwann sehen, man wird so mit einfachen Analysegeschichten

Jochen

anfragen und irgendwann wird man halt merken, so morgens

Jochen

um neun, wenn dann halt irgendwie die

Jochen

Business Intelligence

Jochen

Abteilung irgendwie anfängt,

Jochen

wenn da die Analysten sitzen und dann irgendwie, ja gut,

Jochen

ich weiß nicht, am Anfang wird man sowas noch nicht haben, aber

Jochen

irgendwann hat man das vielleicht dann, wenn die halt ihre

Jochen

Analyse-Querys abschießen,

Jochen

dann wird plötzlich die Webseite langsam.

Jochen

Ja, weil halt die Datenbank langsam

Jochen

wird, weil die Queries werden langsam, weil plötzlich

Jochen

muss die Datenbank

Jochen

irgendwie mit mehreren

Jochen

Zuständen irgendwie

Jochen

rumjonglieren.

Jochen

Ja, das ist blöd. Und dann muss man sich halt

Jochen

was überlegen. Und

Jochen

das ist dann halt so der Moment,

Jochen

wo man dann sagen muss, okay,

Jochen

wir können das nicht mehr. Es wäre schön, alles in einer Datenbank

Jochen

zu haben, aber das geht nicht. Diese beiden Use Cases

Jochen

sind so unterschiedlich, dass man das leider

Jochen

nur dadurch ordentlich abgebildet kriegt,

Jochen

dass man das halt in unterschiedliche Systeme packt.

Jochen

Und

Jochen

ja, also das eine nennt man

Jochen

auch irgendwie OLP,

Jochen

Online Transaction Processing,

Jochen

Das ist halt sozusagen der

Jochen

Webseite, also Datenbank ist hinter einer Webseite,

Jochen

die irgendwie Bücher verkauft und prozessiert

Jochen

Transaktionen, Bestellungen. Und der andere

Jochen

Teil nennt sich OLAP,

Jochen

Online Analytical

Jochen

Processing. Und

Jochen

ist halt das so, wenn man das mal

Jochen

gehört hat, wenn Leute über Data Warehousing

Jochen

sprechen oder Data Warehouses oder so, das ist halt das.

Jochen

Und

Jochen

genau, das sind beides

Jochen

meistens relationale Datenbanken, wenn man

Jochen

anfängt jedenfalls.

Jochen

Aber die sehen unterschiedlich aus.

Jochen

Also die haben unterschiedliche Anfragen werden gestellt.

Jochen

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

Jochen

Transaktionsanfragen sind oft kurz und gucken sich wenige Zeilen an.

Jochen

Und da geht es auch darum, dass die Latenz relativ kurz ist.

Jochen

Bei vielen Analyseanfragen ist es gar nicht so wichtig,

Jochen

dass sie jetzt eine Minute länger oder weniger lang laufen.

Jochen

Das ist gar nicht so entscheidend.

Jochen

Und auch die Analyse-Datenbanken sind oft viel, viel größer,

Jochen

weil man halt historische Daten mit drin hat,

Jochen

was halt für eine Transaktionsdatenbank

Jochen

tödlich wäre, weil bei der ist

Jochen

möglichst das komplette

Jochen

Working Set der Datenbank

Jochen

im Hauptspeicher, damit das halt alles schnell geht,

Jochen

damit die Latenz

Jochen

niedrig bleibt, damit halt die Webseite

Jochen

sich schön snappy

Jochen

irgendwie anfühlt.

Jochen

Und bei

Jochen

den Analyse-Datenbanken ist aber

Jochen

unter Umständen wichtig, dass ich halt historische Daten

Jochen

da halt auch mit drin haben kann. Und die

Jochen

werden dann halt vielleicht so groß, dass man das halt nicht mehr im Hauptspeicher

Jochen

halten kann.

Jochen

Ja, aber...

Jochen

Die Queries werden dann halt langsam, aber das

Jochen

ist halt möglicherweise wichtiger, historische Daten

Jochen

zu haben, als dass Queries halt schnell sind.

Jochen

Und dann, wenn

Jochen

sich eine Query irgendwie ein paar Millionen

Jochen

oder paar Zehn Millionen Zeilen anguckt, dann ist es eh nicht mehr schnell,

Jochen

selbst wenn es ein Hauptspeicher ist. Und ob es dann jetzt eine Minute

Jochen

oder zwei Minuten dauert, das hat dann auch irgendwie wurscht.

Jochen

Ja, genau.

Jochen

Und dann hat man eben diese beiden

Jochen

unterschiedlichen Systeme und dann kriegt man halt aber auch

Jochen

genau diese Probleme, die man dann hat,

Jochen

Wenn man mehrere Sichten auf die Welt hat oder einen Status, 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 dem 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

Und man halt die Daten, die einen interessieren, halt täglich oder so, also meistens fängt man sowas an wie, ja, das sind halt dann Jobs, die nachts laufen, wenn halt die Datenbanken sowieso nicht so unterlasst sind, weil nicht so viele Leute einkaufen, liest man halt irgendwie alles, was einen so interessiert, dann aus der Transaktionsdatenbank aus.

Jochen

dann ist der Transformationsprozess halt sowas wie,

Jochen

ich muss die Daten in ein anderes Schema transformieren.

Jochen

Und das ist halt so wie so Stern-Star-Schema

Jochen

oder Snowflake-Schema, je nachdem.

Jochen

Das ist auch irgendwie gewisserweise normalisiert

Jochen

oder man kann auch sagen, denormalisiert, je nachdem.

Jochen

Aber es ist halt auf jeden Fall anders.

Jochen

Es ist halt davon optimiert,

Jochen

dass ich bestimmte Arten von Analysen fahren kann

Jochen

und lädt das Ganze halt in die Analyse,

Jochen

Datenbanksystem. Für deine BI.

Jochen

Genau.

Jochen

Ja.

Jochen

Und ja,

Jochen

das ist halt

Jochen

immer so ein bisschen fies

Jochen

alles. Aber ja, bleibt einem halt nichts übrig,

Jochen

muss man irgendwie machen. Wie würden wir das denn jetzt machen?

Dominik

Wenn wir Python jetzt haben, jetzt haben wir ja irgendwie so ein neues System

Dominik

und jetzt haben wir eigentlich irgendwie, das ist unser

Dominik

OLTP-Datenbanksystem,

Dominik

das haben wir aufgebaut mit den Transaktionen für unsere Webseite.

Dominik

Was bauen wir denn da, damit wir jetzt so ein

Dominik

OLAP-Ding dranhängen können, weil wir die

Dominik

Analytics-Abteilung einstellen. Ja, machen wir auch mit

Jochen

Postgres so ein Ding.

Dominik

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

Jochen

Ja, genau. Die halt ein bisschen anders aussieht.

Jochen

Die hat dann vielleicht nicht ganz so viele Hauptspeicher,

Jochen

aber dafür halt irgendwie mehr Plattenplatz

Jochen

und auch irgendwie Storage

Jochen

möglicherweise in unterschiedlicher Qualität.

Jochen

Wenn man sagt, okay, vielleicht

Jochen

für die letzte Woche haben wir alle Daten

Jochen

noch im Hauptspeicher, ja, dann aber für den letzten

Jochen

Monat oder für die letzten sechs Monate haben wir

Jochen

die halt auf SSDs oder so, auf ein System,

Jochen

was halt noch schnell, weil

Jochen

der größte Teil der Queries geht

Jochen

natürlich auf Daten, die relativ aktuell sind.

Jochen

Und dann ab einem Jahr oder so, so liegen die Daten dann vielleicht auf Platten, die halt dann eher langsam sind, aber da nur ein kleiner Teil der Queries 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 zum OLTP-System, wo man halt sagt, das muss alles mehr oder weniger im Hauptspeicher sein.

Jochen

Und klar ist auch wichtig, dass Sachen schnell geschrieben werden, deswegen muss das, wo was hingeschrieben wird, muss halt auch sackschnell sein.

Jochen

Also da würde man auch eher lieber dann

Jochen

schnelle SSDs nehmen, aber

Jochen

es ist halt nicht wichtig, viel mehr

Jochen

Plattenplatz zu haben, als man Hauptspeicher hat, weil

Jochen

das will man ja eh nicht.

Jochen

Ja.

Jochen

Und

Jochen

genau, diese LTE-Prozesse

Jochen

sind dann halt irgendwelche Skripte, die dann halt

Jochen

irgendwie über irgendeine Task

Jochen

ja

Dominik

Das bedeutet natürlich dann, dass unser

Dominik

Intelligent System also jetzt nicht sekundengenau

Dominik

funktioniert, in dem Fall.

Dominik

Weil wir halt immer wieder diese Jobs machen müssen.

Dominik

wenn ich jetzt an was ganz anderes denke,

Dominik

weiß ich nicht, Aktienkursanalyse oder sowas,

Dominik

wir haben irgendwelche Portfolios,

Dominik

dann ist das natürlich dann doof,

Dominik

weil dann das nicht dem echten Stockmarket entspricht,

Dominik

sondern man müsste es halt dann jedes Mal

Dominik

eine neue Kopie machen,

Dominik

wenn man diese Analytics fahren will.

Dominik

Ja, genau.

Jochen

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

Jochen

Und die Lösung dafür ist,

Jochen

dass man dann halt irgendwann nicht mehr so ETL

Jochen

in dem Sinne macht,

Jochen

dass man das halt irgendwie abends Batch-Processing macht,

Jochen

sondern dass man halt irgendwie so Streaming

Jochen

Geschichten verwendet, halt

Jochen

Apache Kafka und so ist halt etwas, was häufig

Jochen

verwendet wird. Aber da kommen wir später zu, weil

Jochen

das ist auch eine Geschichte, wo man

Jochen

dann, das wird halt eh

Jochen

erst dann relevant,

Jochen

wenn man dann nochmal ein gutes Stück größer

Jochen

geworden ist und man mit diesen traditionellen

Jochen

Data-Warehouse-Geschichten auch nicht mehr klarkommt.

Dominik

Und der Weltbeherrschung ist unikat.

Jochen

Ja, genau. Dazu muss man dann schon mal

Jochen

noch ein bisschen, oder halt eine andere Art von Daten sammelt.

Jochen

Also ich würde sagen,

Jochen

dieser klassische Bereich,

Jochen

Ja, 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 einem da schon einen deutlichen Vorteil verschaffen.

Jochen

Und ich denke mal, am Anfang ist es halt so, das ist halt das, was alle machen und mit allen 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 das mal irgendwann

Jochen

das ist auch in den Shownotes verlinkt,

Jochen

gibt es einen schönen Essay,

Jochen

der heißt

Jochen

Data Warehousing for Cavemen.

Jochen

Das ist von 1997 oder so.

Jochen

Aber

Jochen

das finde ich nach wie vor gut, ist auch relativ

Jochen

humorvoll. Da geht es darum,

Jochen

der schreibt

Jochen

auch so, vielleicht interessiert es manche Leute irgendwie, wie man

Jochen

300 Dollar die Stunde verdienen kann,

Jochen

indem man die sensibelsten Daten von irgendwelchen

Jochen

Firmen massiert. Muss ich sofort wissen, ja.

Jochen

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

Jochen

Ja, und

Jochen

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

Jochen

Ich habe das am Anfang aber auch nicht,

Jochen

ich habe zuerst nur diesen OTP-Use-Case

Jochen

gekannt und dann bin ich irgendwann

Jochen

auf diesen Essay gestoßen und dachte so, oh, das ist aber interessant.

Jochen

Und daraufhin halt dann auch

Jochen

so angefangen, mich so ein bisschen mit der Terrarism-Kram zu beschäftigen.

Jochen

Aber es ist auch ein sehr interessantes Thema.

Jochen

Der entscheidende Punkt ist im Grunde,

Jochen

dass man halt solche Abfragen machen

Jochen

können möchte, wie

Jochen

also wie unterscheidet sich denn

Jochen

jetzt, keine Ahnung, das

Jochen

Volumen der verkauften Bücher in einer bestimmten Kategorie,

Jochen

nachdem ich irgendeine Werbeaktion gemacht habe.

Jochen

Oder A-B-Tests.

Jochen

Ich habe jetzt irgendwie manchen Usern

Jochen

eine bestimmte...

Jochen

Die haben halt ein Design gesehen, das ein bisschen anders

Jochen

aussah oder halt ein bisschen

Dominik

anders... Oder alle Leute, die letzte Woche gekauft haben

Dominik

für ein bestimmtes Produkt, die bekommen jetzt

Dominik

einen besonderen Gutschein, der für

Dominik

drei Tage gültig ist oder sowas.

Dominik

Ja, und genau, ich möchte hinterher gucken,

Jochen

was ist denn dann passiert? War das jetzt erfolgreich oder nicht?

Jochen

Oder wie erfolgreich war denn das?

Jochen

Und dafür

Jochen

muss ich halt

Jochen

bestimmte Arten von Anfragen,

Jochen

die ansonsten keine Rolle

Jochen

spielen können, gut machen können. Und dafür habe ich halt

Jochen

so eine Struktur. Ich habe eine Faktentabelle

Jochen

und dann drumherum Dimensionstabellen, in denen halt

Jochen

solche Sachen drinstehen, wie

Jochen

das war jetzt ein User, für den ich

Jochen

diese Version der Webseite angezeigt

Jochen

habe. Oder das hier,

Jochen

also man hat zum Beispiel sowas wie,

Jochen

daran kann man es vielleicht ganz gut

Jochen

verstehen, Time ist halt eine Dimension.

Jochen

Und in der Faktentabelle, also Fakten

Jochen

wären sowas wie Bestellungen.

Jochen

Ist halt

Jochen

sozusagen Time nicht etwas

Jochen

jetzt ein Zeitstempel oder so, der da reingeschrieben

Jochen

wird, sondern das ist halt eine ID,

Jochen

ein Fremdschlüssel und der zeigt

Jochen

halt in eine Timedimension

Jochen

und das ist halt eine

Jochen

Dimensionstabelle, in der drinsteht, was diese

Jochen

Zeit bedeutet und dann stehen da eben

Jochen

solche Dinge dran wie,

Jochen

naja, also, auch da wiederum, kann sein,

Jochen

also, da steht nicht direkt ein

Jochen

Zeitstempel, sondern da steht dann dran, also, das war ein Werktag.

Jochen

Das war ein Feiertag

Jochen

in folgenden Bundesländern.

Jochen

Das war, keine Ahnung,

Jochen

das war Sommer.

Jochen

Sodass ich dann halt solche Abfragen machen kann wie,

Jochen

wie ist denn der Verkauf der Bücher in dieser Kategorie

Jochen

im Sommervergleich zum Winter?

Jochen

Und dadurch, da ich diese Informationen,

Jochen

das ist jetzt Sommer, halt direkt an dem

Jochen

Zeitdings dran habe, kann ich halt Abfragen machen,

Jochen

die sehr effizient alles rausfiltern, was halt

Jochen

irgendwie Sommer ist und so.

Jochen

Aber solche Abfragen

Jochen

machen halt in dem OTP-Teil

Jochen

oder wenn ich jetzt eine Webseite, machen überhaupt keinen Sinn.

Jochen

Das heißt, ja, die Schemata

Jochen

sehen dann halt ganz anders aus.

Jochen

Ja, genau.

Jochen

Wenn einen interessiert, wie das wirklich so

Jochen

funktioniert, finde ich, dieser Data Warehousing

Jochen

for Caveman-Essay ist ein schöner Start.

Jochen

Aber da gibt es auch jede Menge.

Jochen

Da kann man sich durchlesen, wie das so klappt.

Jochen

Ja,

Jochen

genau.

Jochen

Ach so.

Jochen

Richtig, genau. Da haben wir jetzt

Jochen

schon mal ein bisschen über den Analyse-Teil gesprochen, aber

Jochen

wir haben natürlich auch ein Problem, wenn jetzt Leute

Jochen

immer mehr Zeugs kaufen,

Jochen

dass irgendwie halt unsere Datenbank

Jochen

halt vielleicht irgendwann ein bisschen langsamer wird,

Jochen

nicht mehr genug Transaktionen prozessen kann.

Jochen

Ja, was macht man da?

Jochen

Man muss halt optimieren.

Jochen

Das ist auch oft ein wichtiger Teil

Jochen

und es ist auch nicht so einfach.

Jochen

Die einzige Datenbank,

Jochen

für die ich das wirklich mal gemacht habe,

Jochen

ist eigentlich MySQL.

Jochen

Ich verwende heutzutage eher Postgres,

Jochen

aber da habe ich dann auch mal

Jochen

so einen MySQL-Performance-Optimierungskurs besucht.

Jochen

und das

Jochen

schöne Zitat, also Chris Künthopp hat

Jochen

den damals irgendwo in München

Jochen

durchgeführt,

Jochen

damals hat er bei MySQL gearbeitet

Jochen

und

Jochen

ein Satz,

Jochen

der mir in Erinnerung geblieben ist, der meinte so, ja,

Jochen

wenn man Datenbank-Performance

Jochen

optimieren will, ja, so OLTP,

Jochen

dann gibt es da eigentlich

Jochen

so im Wesentlichen drei Sachen, die man tun

Jochen

kann, um eine Datenbank schnell zu machen.

Jochen

Das Erste, was man eigentlich immer machen kann,

Jochen

das funktioniert auch fast immer,

Jochen

das ist super, man kann einfach mal ein bisschen

Jochen

mehr Hauptspeicher reinstecken in die Datenbank.

Jochen

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

Jochen

gut.

Jochen

Wenn das irgendwie nicht mehr so richtig reicht,

Jochen

eine zweite Geschichte, die man auch immer tun kann, auch

Jochen

sehr gut hilft, ist, man kann einfach

Jochen

noch ein bisschen mehr Speicher reinstecken in die Datenbank.

Jochen

Und das hilft eigentlich fast auch

Jochen

mit der dritten Geschichte,

Jochen

selbst wenn man an eine Grenze gekommen ist,

Jochen

die dann auch eher so

Jochen

das letzte Mittel, zu dem man greifen kann,

Jochen

wenn das auch nicht hilft, ist halt, man könnte einfach

Jochen

ein bisschen mehr Hauptspeicher in die Datenbank reinsteigen.

Jochen

Okay, okay.

Dominik

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

Dominik

Ja, so viel, wie halt geht

Jochen

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

Jochen

Also wenn du jetzt irgendwie

Jochen

ein paar tausend Artikel hast,

Jochen

die du auf einer Webseite verkaufen willst,

Jochen

dann ist es egal.

Jochen

Da kommst du halt mit einem,

Jochen

weiß ich nicht,

Jochen

mit einer beliebigen,

Jochen

mit einem Raspberry Pi kannst du das machen, das ist wurscht.

Jochen

Aber wenn du

Jochen

jetzt, also sagen wir mal so,

Jochen

wenn ein Working Set der Datenbank,

Jochen

also die Menge der Daten, die halt auf der

Jochen

Platte liegen, wenn die Datenbank runtergefahren ist,

Jochen

wenn das halt 30 Gigabyte

Jochen

hat, dann sollte deine Datenbank

Jochen

mindestens mal 30 Gigabyte haben, eher so

Jochen

64 vielleicht. Hauptspeicher.

Jochen

Weil es gibt halt auch noch diverse

Jochen

Strukturen, die im Hauptspeicher gehalten werden,

Jochen

die man halt auch braucht.

Jochen

Ja.

Jochen

Und dann ist halt das Limit eigentlich nur

Jochen

und sagen wir mal so, das ist halt viel.

Jochen

Also wenn man jetzt irgendwie, nehmen wir an,

Jochen

Wir haben das, was heute so ein Sweet-Spot ist,

Jochen

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,

Jochen

welche Systeme, die Transaction-Processing machen,

Jochen

denn mehr Hauptspeicher benötigen.

Jochen

Oder mehr Daten haben,

Jochen

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,

Jochen

man indiziert das Web und möchte halt

Jochen

so eine Echtzeit Suchabfragen über alle Webseiten

Jochen

machen, das geht nicht mehr, das ist klar.

Jochen

Aber

Jochen

so viele...

Jochen

Also so groß muss man erstmal werden.

Jochen

Also Amazon fällt da bestimmt auch nicht rein.

Jochen

Also Amazon hat

Jochen

also, na gut,

Jochen

Amazons Teil, der

Jochen

einen jetzt mit Produkten versorgt,

Jochen

diese Webseite, das

Jochen

wird nicht so groß sein.

Jochen

Die haben andere Teile, die halt dann unter Umständen

Jochen

sehr groß geworden sind, aber

Jochen

ja, das kriegst du eigentlich alles locker

Jochen

in einer Datenbank unter. Also die haben dann halt

Jochen

ein anderes Problem. Amazon wird das Problem bekommen, dass sie halt mit der

Jochen

Schreiblast nicht mehr klarkommen, aber

Jochen

also das könntest du alles

Jochen

irgendwie in den Hauptspeicher

Jochen

von so einer Datenbank packen.

Jochen

Also ich würde sagen, für die, für fast alle

Jochen

Anwendungsfälle heutzutage ist das halt groß genug.

Jochen

Ja, ab 256

Jochen

Gigabyte wird es ein bisschen schwierig.

Jochen

Also man kann auch

Jochen

einen Terabyte Hauptspeicher irgendwie

Jochen

in den Rechner stecken. Das kostet

Jochen

irgendwie weniger als 10.000 Euro heutzutage.

Jochen

Also das geht auch. Es wird dann halt,

Jochen

wenn man so wirklich so wahnsinnig viel Hauptspeicher drin hat,

Jochen

dann kriegt man halt ein bisschen Probleme mit der Architektur.

Jochen

Das ist ja so ein bisschen

Jochen

PC-basiert und

Jochen

so viel Hauptspeicherbandbreite hat man da ja nicht

Jochen

und das wird dann irgendwann,

Jochen

man muss ja die ganzen Prozessoren auch irgendwie mit

Jochen

Daten versorgen und wenn man jetzt da

Jochen

irgendwie, weiß ich nicht.

Jochen

Da fährt dann kein Bus hin.

Jochen

32 Prozessoren oder 64 oder sowas.

Jochen

So irgendwann ist dann halt, also der

Jochen

Sweetspot ist, würde ich sagen, heute eher so

Jochen

bei, weiß ich nicht, irgendwie 64 Prozessoren oder so

Jochen

und 256 GB Hauptspeicher und so.

Jochen

Aber das, also egal, also vielleicht

Jochen

geht auch noch ein Terabyte, ich hab keine Ahnung.

Jochen

Für die meisten, aller, aller, aller

Jochen

meisten Anfälle reicht das alles vollkommen aus.

Jochen

Und es ist ein sehr guter

Jochen

Tipp zu sagen, also jetzt,

Jochen

wenn du tatsächlich irgendwie ein Working Set von 30 GB

Jochen

hattest, nimm nicht eine Datenbank,

Jochen

die jetzt 8 GB hat, dann hast du ein Problem.

Jochen

Dann bist du gleich mal irgendwie

Jochen

mehrere Größenordnungen langsamer, als wenn du das

Jochen

in den Hauptspeicher packen würdest und kriegst halt einen Haufen Probleme,

Jochen

die du sonst einfach nicht hättest.

Jochen

Ja, das war früher alles noch viel schlimmer,

Jochen

als es einen riesigen Unterschied gab zwischen

Jochen

sozusagen permanentem Storage,

Jochen

also

Jochen

rotierendem Rost,

Jochen

ja, so Harddisks

Jochen

und Hauptsprecher, da war der

Jochen

Unterschied

Jochen

so

Jochen

1 zu 10.000 oder so

Jochen

Geschwindigkeitsunterschied.

Jochen

Das ist jetzt nicht mehr ganz so schlimm,

Jochen

wenn man SSDs hat,

Jochen

aber es ist immer noch ziemlich schlimm.

Jochen

Also es ist immer noch ein Riesenunterschied.

Jochen

Und daher, ja,

Jochen

das will eigentlich, dass die heißen Daten

Jochen

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

Jochen

zwischen Lese- und Schreibquerys.

Jochen

Und selbst wenn man mit so einer Datenbank halt

Jochen

irgendwie ein paar tausend Querys pro Sekunde

Jochen

abfeiern kann,

Jochen

irgendwann gerät man

Jochen

in eine Konkurrenz zwischen Schreibquerys und Lesequerys.

Jochen

wenn man jetzt nur eine Datenbank verwendet und

Jochen

das ist halt irgendwie schlecht, weil man möchte eigentlich

Jochen

immer in der Lage sein, weil man braucht ja eine,

Jochen

man darf eigentlich nur eine Datenbank haben, auf die man

Jochen

schreibt. Also wenn man mehrere Datenbanken

Jochen

hat, von denen man liest, ist nicht so schlimm, das geht.

Jochen

Aber man kann halt nicht so richtig gut

Jochen

mehrere Datenbanken haben, auf die man schreibt,

Jochen

weil man ja diesen zentralen

Jochen

Punkt, an dem der Status

Jochen

gehalten wird, behalten möchte.

Dominik

Wenn wir zweimal auf dieselbe Stelle schreiben zum Beispiel.

Jochen

Ja, genau. Also was

Jochen

man jetzt machen könnte, wenn man zu viele Leseanfragen

Jochen

hat, man verteilt die dann halt auf

Jochen

sogenannte Slave-Datenbanken. Das heißt, man hat halt

Jochen

eine Master-Slave-Architektur und

Jochen

eine Master-Datenbank,

Jochen

von der man lesen und schreiben kann.

Jochen

Von der man lesen kann und auf die man schreiben kann.

Jochen

Und

Jochen

es gibt

Jochen

gibt halt eine Reihe von

Jochen

Slave-Datenbanken, von denen man nur lesen kann, auf die man nicht

Dominik

schreiben kann. Wie oft wird denn da geslaved? Also wie oft

Dominik

wird der Slave denn aktualisiert auf den Master?

Jochen

Ja, da gibt es dann Mechanismen für, dass

Jochen

der Master schreibt halt irgendwie einen Log, das Log

Jochen

wird irgendwie an die Slaves übertragen und die

Jochen

vollziehen dann sozusagen die Transaktionen, die der Master

Jochen

gemacht hat, halt nach.

Jochen

Das ist meistens

Jochen

wahrscheinlich instantan, mehr oder weniger.

Jochen

Bei viel Last oder wenn

Jochen

halt eine große geografische

Jochen

Differenz ist, also wenn es halt irgendwie über den Atlantik oder

Jochen

der Pazifik geht oder so, klar, dann hast du halt Zeitunterschiede

Jochen

oder halt auch wenn die Last so groß ist,

Jochen

dass die Slaves nicht mehr gut

Jochen

hinterherkommen, dann

Jochen

hast du natürlich, dann hast du

Jochen

eventuell so ein bisschen Lag von vielleicht ein paar Sekunden

Jochen

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 ist auch

Jochen

oft casht man das ja auch dann nochmal

Jochen

irgendwie im Hauptspeicher

Jochen

in Redis oder Memcache

Jochen

oder so und sagt halt ja, also dieses

Jochen

Ding hier kannst du fünf Minuten lang

Jochen

cachen.

Jochen

Das ist ja dann auch egal und

Jochen

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

Jochen

so, es ist halt wurscht, also so oft

Jochen

ändern sich Dinge halt nicht, wenn irgendwo ein Count nicht so richtig stimmt

Jochen

oder so. Naja, nicht so schlimm.

Jochen

Es gibt Dinge, bei denen das schlimm ist,

Jochen

aber kommen gleich noch zu, da muss man das halt anders

Jochen

machen, aber bei vielen Sachen

Jochen

ist es halt nicht so wirklich schlimm

Jochen

und daher kann man das gut aufteilen.

Jochen

Man kann halt dann die Leselast auf die

Jochen

Slaves sozusagen transferieren

Jochen

und dann gibt es halt bestimmte Abfragen, also

Jochen

gerade, wenn man jetzt kurz davor ist, eine Bestellung

Jochen

zu machen oder so, wo man dann schon

Jochen

im Code weiß, okay, jetzt gibt es hier gleich

Jochen

eine Transaktion oder so und dann macht man

Jochen

auch die Leseanfragen auf den Master, damit man

Jochen

eben nicht das Problem hat, dass man eventuell

Jochen

Daten sieht, die eine Minute alt sind.

Jochen

Aber da das die allermeisten Anfragen

Jochen

ja gar nicht sind, sondern die

Jochen

meisten Navigationsanfragen, wenn ich jetzt in Kategorien

Jochen

rumklicke oder irgendwelche Filter

Jochen

auswähle oder nach irgendwas suche oder so,

Jochen

diese ganzen Anfragen beziehen sich auf Daten,

Jochen

die sich jetzt gar nicht so häufig ändern. Das kann

Jochen

alles auch eine Minute alt sein, das ist wurscht.

Jochen

Und erst wenn ich halt

Jochen

eine Bestellung mache, dann

Jochen

muss ich halt zusehen, dass ich

Jochen

aktuelle Daten sehe, wie zum Beispiel

Jochen

ist das Buch noch auf Lager oder so.

Jochen

Und diese wenigen

Jochen

Anfragen, die halt dann

Jochen

aktuell sein sollten,

Jochen

die gehen dann direkt an den Master. Und das kann man halt im Code

Jochen

sagen. Man kann halt sagen, okay, an dieser

Jochen

Stelle bitte eine Verbindung auf den Master und nicht

Jochen

auf den Slave.

Jochen

Und die Schreibanfragen müssen dann halt

Jochen

auf den Master gehen, weil man ja nur

Jochen

an einer Stelle schreiben will.

Jochen

Und mit dieser Architektur kommt man relativ

Jochen

weit. Also das ist

Jochen

eine Geschichte, das ist auch so

Jochen

klassischer Lampstack-Architektur, Wikipedia-Seite

Jochen

so aufgebaut.

Jochen

Du hast jetzt gerade noch zwei Sachen gesagt, die vielleicht noch mal kurz

Dominik

von Redis einmal eben gesprochen und

Dominik

gerade von Lampstack, also einmal vielleicht kurz erklären, was das

Jochen

drin ist. Ja, Redis ist auch so eine

Jochen

In-Memory-Datenbank,

Jochen

eher so ein Key-Value-Store, hat noch ein paar

Jochen

Zusatzfunktionen, ist eine Message-Queue drin,

Jochen

kann teilweise sortierte

Jochen

Listen und sowas auch halten, aber

Jochen

es ist ein bisschen, kann ein bisschen mehr

Jochen

als Memcached, Memcached

Jochen

ist rein so, du hast ein Key und kriegst

Jochen

halt dann irgendwie Value zurück und wird im Hauptspeicher

Jochen

gehalten, deswegen ist es schön schnell.

Jochen

Wurde popularisiert

Jochen

auch Memcached, vor allen Dingen durch den

Jochen

LAMP-Stack, LAMP ist einfach Linux, Apache,

Jochen

MySQL, PHP

Jochen

und einige

Jochen

der größten Webseiten, die das halt

Jochen

benutzt haben

Jochen

oder weiß nicht, ob sie das noch benutzen, keine Ahnung,

Jochen

ist halt Wikipedia.

Jochen

Wir haben auch immer schöne Artikel darüber gehabt,

Jochen

wie sie ihre Systeme aufbauen.

Jochen

Also ist ja auch Wikipedia eine der,

Jochen

ich glaube, die sind auch mit Sicherheit immer noch

Jochen

in den Top 10 der weltweit trafficstärksten Seiten

Jochen

und haben halt auch viel dazu veröffentlicht,

Jochen

wie ihre Architektur aussieht.

Jochen

Und die haben halt auch genau das,

Jochen

die meisten Sachen sind Leseanfragen,

Jochen

aber manchmal wird halt auch was geändert oder geschrieben

Jochen

und die machen das halt mit MySQL und vielen Slaves

Jochen

und extensiver Verwendung von Memcached,

Jochen

zum Cachen von irgendwelchen geretteten Fragmenten

Jochen

und Daten,

Jochen

für die man jetzt nicht nochmal eine Query machen möchte.

Dominik

Was wäre denn jetzt der neueste Stack, würdest du

Dominik

sagen, den man jetzt verwenden sollte?

Jochen

Ja, das kommt halt drauf an, wenn man

Jochen

eben PHP mag.

Jochen

Kann man das auch

Jochen

immer noch machen, wobei ich jetzt nicht genau weiß, ob das

Jochen

alles immer noch so populär ist. Wemcached.de, glaube ich, ist

Jochen

so ein bisschen auf dem Weg nach draußen.

Jochen

Wahrscheinlich würde auch in dem Umfeld eher

Jochen

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 jedes sozusagen das, was verwendet wird. Datenbank, eigentlich würde ich auch sagen Postgres wird bei beiden verwendet. Man kann auch was anderes nehmen natürlich. Es gibt auch Leute, die Django mit MongoDB verwenden. Das geht. Es gibt auch sogar valide Use Cases dafür. Es gibt auch Leute, die Flask irgendwie mit, weiß ich nicht, CouchDB, mit allen möglichen Dingen verheiraten.

Jochen

Aber so als

Jochen

womit ich anfangen würde, ist auf jeden Fall Postgres

Jochen

und dann halt eben SQL Alchemy

Jochen

beziehungsweise Django OAM.

Jochen

Und Redis, genau,

Jochen

als Memory Cache und

Jochen

ja, wahrscheinlich braucht man auch noch ein

Jochen

Message-Queue-System.

Jochen

Ist aber dann auch schon, also dann gibt's noch

Jochen

so ein paar Sachen, die man braucht.

Jochen

Was ist denn die Message-Queue vielleicht?

Jochen

Also man hat oft so Dinge, wo man dem User

Jochen

möglicherweise etwas direkt

Jochen

direkt eine Antwort geben will,

Jochen

aber es ist halt ein Job, der dann irgendwie

Jochen

länger dauert.

Jochen

In unserem Buchstore wäre das was?

Jochen

Ein Buchstore, sowas wie

Jochen

jemand fliegt ein neues Buch ein oder so.

Jochen

Na gut, warte mal, lass mal überlegen.

Jochen

Das ist kein so gutes Beispiel.

Jochen

Was könnte der denn tun?

Jochen

Ja, zum Beispiel

Jochen

du verfasst einen Kommentar jetzt

Jochen

oder eine Bewertung für irgendeinen Artikel

Jochen

und du möchtest,

Jochen

wenn der jetzt auf Abschicken drückt,

Jochen

der User, dass er sofort seinen Kommentar

Jochen

unter dem Artikel sieht.

Jochen

Aber

Jochen

in Wirklichkeit

Jochen

willst du den ja vielleicht noch prüfen.

Jochen

Also wenn das jetzt irgendwas Populäres ist.

Jochen

Sag mal so, du...

Jochen

Oh, danke.

Jochen

Wahrscheinlich bräuchte ich

Jochen

bevor oder sowas eine Räuspertaste, oder?

Jochen

Das könnte jetzt hässlich geworden sein.

Jochen

Das tut mir leid, da muss ich mich entschuldigen.

Jochen

ein bisschen erkältet.

Jochen

Ja,

Jochen

wenn,

Jochen

also eigentlich möchte man halt, wenn jetzt zum Beispiel ein Artikel

Jochen

ist, der häufig verkauft wird, ja, und dann jemand

Jochen

schreibt irgendwie, dieser Artikel ist voll scheiße

Jochen

und keine Ahnung,

Jochen

das hat ja dann unter Umständen direkt

Jochen

Konsequenzen, oder es

Jochen

macht dann am besten noch irgendwie ein Mitbewerber,

Jochen

macht irgendwas Fieses, irgendwie,

Jochen

ja, dann will man das möglicherweise nicht,

Jochen

dass das sofort allen sichtbar wird, sondern man muss

Jochen

irgendwie erst

Jochen

eine Redaktion draufgucken oder so,

Jochen

aber das ist halt nicht

Jochen

etwas, was man dem User anzeigen möchte.

Jochen

Man hat dann halt sozusagen etwas,

Jochen

zwei Prozesse, die voneinander so ein bisschen entkoppelt

Jochen

sind. Der User drückt auf Speichern, sieht

Jochen

seinen Kommentar oder seine Bewertung und

Jochen

im Hintergrund gehen aber dann noch

Jochen

so Tasks los wie, oh, das ist hier

Jochen

an der Stelle, wo jemand mal draufgucken sollte,

Jochen

aber das geht dann auch nicht in Echtzeit,

Jochen

sondern das wird dann halt irgendwie in so eine

Jochen

Queue, in eine Warteschlange eingereiht.

Jochen

dann gibt es eine Redaktion, die hat dann halt diese Jobs,

Jochen

muss sich halt irgendwelche Kommentare an sensitiven Stellen

Jochen

oder so angucken und die dann abarbeiten.

Jochen

Aber das ist

Jochen

halt sozusagen der, dass

Jochen

diesen Job in die Warteschlange

Jochen

tun und dieser

Jochen

Prozess mit menschlicher Interaktion,

Jochen

das ist jetzt nicht mehr Teil von dem Web-Request.

Jochen

Das heißt, der

Jochen

Teil muss irgendwie entkoppelt sein.

Jochen

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

Jochen

Aber dieser Web-Request

Jochen

löst dann halt irgendwie,

Jochen

schreibt dann halt irgendwie diesen Job

Jochen

in die Queue, genau. Solche Sachen hat man

Jochen

oft, auch wenn sich auch

Jochen

genau, das ist ein gutes Beispiel,

Jochen

das ist mir jetzt eingefallen.

Jochen

Vielleicht möchtest du, dass

Jochen

wenn du jetzt in der Suche nach

Jochen

irgendwas suchst, dann Produkte

Jochen

halt auch vielleicht Bewertungen finden, in denen

Jochen

jemand über das Produkt gesprochen hat oder so.

Jochen

Das heißt, der Text deiner

Jochen

Bewertung muss indiziert werden von der Suchmaschine.

Jochen

Aber das geht halt auch nicht

Jochen

in Echtzeit, sondern das macht die halt vielleicht nur alle

Jochen

tausend Bewertungen oder so, wird neu indiziert oder so,

Jochen

weil, ja.

Jochen

Und dann wird halt auch so ein Task erzeugt für,

Jochen

das hier muss ja noch mitindiziert werden,

Jochen

aber es wird nicht sofort indiziert,

Jochen

weil das ist halt etwas, was eine Operation lange dauern kann

Jochen

und man möchte ja nicht, dass der Web-Request dann so lange dauert,

Jochen

wie die Operation dauert, sondern man sagt,

Jochen

okay, man gibt dem Web-Request, es ist okay,

Jochen

dein Kommentar wurde gespeichert und hat dann aber noch diesen zusätzlichen Task erzeugt,

Jochen

der dann irgendwann später ausgeführt werden muss.

Jochen

Und dafür braucht man diese Task-Queues,

Jochen

die halt ein komplexeres Web-System hat,

Jochen

dann braucht man sowas halt, weil solche Fälle

Jochen

halt immer wieder auftreten.

Jochen

Ja, kann man aber Redis auch

Jochen

für verwenden, also was für

Jochen

Django ist halt, was häufig verwendet ist, Celery

Jochen

kann ich nicht unbedingt empfehlen, ist irgendwie

Jochen

eher schmerzhaft.

Jochen

Ja, die

Jochen

drunter liegenden Geschichten sind oft sowas wie

Jochen

RabbitMQ oder so, im Allgemeinen

Jochen

ist das Protokoll wie AMQ

Jochen

irgendwas, weiß nicht genau.

Jochen

Ja, aber das ist nochmal ein ganz eigenes

Jochen

Feld mit diesen ganzen Message-Queues.

Jochen

Ja, genau. Master-Slaves-Architektur hatten wir jetzt. Irgendwann kann natürlich auch sein, dass das nicht mehr reicht und dann müssen wir halt irgendwie die Datenbank auftrennen.

Jochen

Also wenn zum Beispiel gerade die Schreiblast groß genug geworden ist, dann geht das halt alles nicht mehr 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, diese ganzen Geschichten, das geht alles nicht mehr so wirklich und das muss man dann alles in der Applikation machen, in der Applikationslogik und das macht alles Dinge unfassbar viel komplizierter, deswegen sollte man das möglichst nicht tun.

Jochen

Also wenn man ihn mal verkauft, irgendwie.

Jochen

Er wird nicht so groß werden.

Jochen

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

Jochen

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,

Jochen

weil das bedeutet halt, dass man diese ganzen Dinge, die einem sonst die Datenbank quasi schenkt,

Jochen

selber machen muss in den Applikationscode.

Jochen

Und das ist halt sehr, sehr schwierig.

Jochen

Aber manchmal geht es halt leider nicht anders.

Jochen

Dann gibt es halt zwei Möglichkeiten.

Jochen

Man schadet irgendwie horizontal.

Jochen

Also man sollte so lange, man nennt es Upscaling.

Jochen

solange wie möglich die Maschine größer

Jochen

machen und mehr Hauptspeicher reinstecken.

Jochen

Wenn das halt dann irgendwann tatsächlich nicht mehr geht,

Jochen

dann muss man halt entweder

Jochen

horizontal oder vertikal

Jochen

schaden und das halt

Jochen

aufteilen. Das heißt, horizontal

Jochen

Mehrere Maschinen,

Jochen

die die gleiche Datenbank benutzen?

Jochen

Nee, die gleiche

Jochen

Datenbank würde einem ja nicht helfen, wenn es zu viel

Jochen

da muss die

Jochen

Datenbank halt irgendwo trennen.

Jochen

Und die Frage ist, wo trennt man jetzt auf?

Jochen

Man kann halt entweder innerhalb von

Jochen

Tabellen die Zeilen auseinander trennen.

Jochen

Das wäre eben horizontal skalierend.

Jochen

Okay, alle Bücher, die mit Buchstaben A anfangen,

Jochen

kommen jetzt auf die Datenbank. Alle Bücher mit Buchstaben

Jochen

B bis F kommen auf die Datenbank.

Dominik

Oder so regional Queries trennen.

Dominik

Von wo kommt die denn jetzt oder sowas?

Dominik

Ja, regional kann man natürlich auch trennen.

Jochen

Das ist dann nochmal eine andere

Jochen

Geschichte. Könnte man auch machen.

Jochen

Das heißt aber, das wäre quasi horizontales

Jochen

Schaden auf den Usern.

Jochen

Nach Region eben.

Jochen

das wird, also meistens

Jochen

würde man auf Usern schaden, irgendwie

Jochen

tatsächlich, ja. Man sagt,

Jochen

was ist das für ein User? Und dann

Jochen

entweder regional oder halt

Jochen

irgendwie

Jochen

sonst irgendein Hash-Wert oder so.

Jochen

Und vertikal wäre halt,

Jochen

man trennt

Jochen

nach Tabellen auf. Das heißt, man sagt,

Jochen

okay, wir haben hier ein System, das kümmert sich um die Bücher.

Jochen

Wir haben hier ein System, das kümmert sich um die User.

Jochen

Wir haben ein System, das kümmert sich um Lagerhaltung.

Jochen

Das wäre halt, man teilt dann

Jochen

nicht quasi in den Zeilen,

Jochen

sondern man teilt halt an den Tabellengrenzen.

Jochen

Ja, macht natürlich so vollständig

Jochen

Abfragen dann ein bisschen langsamer, oder?

Jochen

Ja, das Problem ist dann halt, dass man mehrere

Jochen

Systeme fragen muss, wenn man jetzt irgendwie

Jochen

was machen, also wenn man jetzt die Amazon-Seite

Jochen

anzeigen möchte, dann

Jochen

muss man halt unter Umständen viele Systeme

Jochen

fragen. Tatsächlich

Jochen

ist es etwas, was Amazon wirklich

Jochen

passiert ist, irgendwie, ich glaube 2008, 2009

Jochen

gab es dann auch irgendwie, haben sie

Jochen

Artikel darüber geschrieben,

Jochen

damals nannte sich das nicht, also heute läuft das Ganze

Jochen

unter dem Stichwort irgendwie

Jochen

Microservices oder so, so nennt man das dann, dass man halt

Jochen

Teile eines

Jochen

Systems in kleinere

Jochen

Services auslagert.

Jochen

Damals

Jochen

nannte sich das anders, war aber quasi

Jochen

eine gleiche Idee, nannte sich

Jochen

Service-Oriented Architecture.

Jochen

Und Amazon

Jochen

hatte das Problem, dass sie auf der Hauptseite,

Jochen

also wenn du einfach nur Amazon.com

Jochen

eingegeben hast, dann

Jochen

wurde dir halt das Ding, die Seite ausgeliefert.

Jochen

Aber damals war es

Jochen

halt schon so, dass da so viel Zeugs

Jochen

drin war. Also dann werden dir irgendwelche Empfehlungen angezeigt,

Jochen

dann wird dir irgendwas angezeigt,

Jochen

wie viel Zeugs in deinem

Jochen

Warenkorb ist. Und das

Jochen

ist einem zwar nicht so bewusst, aber das ist wirklich viel

Jochen

Zeug bei Amazon. Und

Jochen

sie hatten das Problem, sie machen ungefähr 300 SQL

Jochen

Statements, wenn du

Jochen

die Seite anguckst.

Jochen

Oder ein paar hundert, ja.

Jochen

Da das

Jochen

irgendwie,

Jochen

da die irgendwie nur sequentiell ausgeführt

Jochen

wurden, macht das halt die Latenz hoch, weil

Jochen

ja, synchron

Jochen

sequentiell, das heißt, die ganzen

Jochen

Latenzen addieren sich auf.

Jochen

Das heißt, allein bis die ganzen

Jochen

SQL-Statements abgearbeitet sind,

Jochen

vergehen ein paar hundert Millisekunden,

Jochen

die du einfach warten musst. Und das ist halt

Jochen

scheiße. Man weiß ungefähr so,

Jochen

pro hundert Millisekunden droppt dein

Jochen

Conversion 10% oder so.

Jochen

Ich weiß nicht, wahrscheinlich weniger, aber

Jochen

ist halt nicht so gut.

Jochen

Das heißt, du kannst ja ausrechnen, wie viel mehr Umsatz

Jochen

du machen würdest, wenn du das irgendwie schneller ausliefern

Jochen

könntest.

Jochen

Ja, und dann haben sie sich halt gesagt,

Jochen

okay, das müssen wir irgendwie anders machen.

Jochen

Dann haben sie das halt in Services aufgeteilt.

Jochen

Dann haben sie gesagt, okay, wir haben hier den Recommendation Service,

Jochen

wo sich die Webseite per

Jochen

JavaScript irgendwie macht, irgendwie ein

Jochen

XHTTP-Request oder so und holt sich dann die

Jochen

Recommendations von diesem Service.

Jochen

Und dann haben wir den, keine Ahnung,

Jochen

Basket-Service für deine

Jochen

Einkaufskorb oder so

Jochen

und da ist halt, das Ding

Jochen

holt sich halt, was für Dinge liegen da momentan

Jochen

gerade drin und ja.

Jochen

Genau.

Jochen

Und das

Jochen

haben die damals so gemacht.

Jochen

Ja und dann, das geht dann natürlich alles

Jochen

irgendwie mehr oder weniger, auch nicht so total parallel,

Jochen

aber mehr paralleler als vorher

Jochen

und dann kann die Webseite insgesamt deutlich

Jochen

schneller sein.

Jochen

Ja, genau. Heute

Jochen

würde man sagen, Microservices, du hast halt ein

Jochen

Microservice pro irgendwie Ding,

Jochen

was du irgendwie da machst auf der Webseite.

Jochen

Und die

Jochen

komplette Seite aggregiert nur noch

Jochen

irgendwie die Daten aus all diesen Services.

Jochen

Ja,

Jochen

damit kriegt man das tatsächlich in den Griff, wenn man

Jochen

so ein riesiges Ding hat und viele unterschiedliche Sachen und das

Jochen

nicht mehr in einer Datenbank passt, dann kann man das so machen.

Jochen

Es ist aber nicht so, dass man das machen sollte.

Jochen

Solange man das anders machen kann,

Jochen

solange man das mit einer Datenbank hinkriegt,

Jochen

sollte man das mit einer Datenbank machen, weil das ist viel

Jochen

viel angenehmer.

Jochen

Also Microservices sind halt

Jochen

Man schiebt dann halt einen Haufen der Komplexität in eine andere Richtung.

Jochen

Man hat dann plötzlich Architekturkomplexität,

Jochen

man hat plötzlich im Ops-Teil von DevOps wird es plötzlich viel schwieriger,

Jochen

man muss halt das alles irgendwie maintainen.

Jochen

Man muss halt plötzlich, wenn man jetzt sagt,

Jochen

okay, ich update jetzt diesen Service,

Jochen

dann hängen da halt andere Dinge von ab unter Umständen.

Jochen

dann habe ich halt,

Jochen

ich kann, ja,

Jochen

wenn man das halt irgendwie so schön hat,

Jochen

Master-Slave-Architektur, Loadbalancer davor,

Jochen

vor den Datenbanken, ein paar Frontends,

Jochen

dann, selbst da ist es schon kompliziert,

Jochen

wenn ich jetzt irgendwie

Jochen

zum Beispiel ein Schema ändern möchte oder so,

Jochen

was ich im Produktivbetrieb dann vielleicht nicht mehr tun kann,

Jochen

weil die Datenbank viel zu langsam liefe,

Jochen

weil wenn ich das Schema ändere, muss ich

Jochen

bei den Tabellen, die ich ändere,

Jochen

halt unter Umständen eine Kopie der Tabellen mehr oder weniger mache,

Jochen

das heißt, ich muss halt möglicherweise doppelt so viel

Jochen

Daten im Hauptspeicher halten, was halt vielleicht nicht geht.

Jochen

das heißt, ich muss vielleicht sowas machen wie

Jochen

ich tausche die Datenbank aus, ich mache eine Kopie der Datenbank

Jochen

und die Datenbank mit dem neuen Schema

Jochen

stelle ich dann ins neuen Master rein

Jochen

und so, so oft hat man dann so Sachen wie

Jochen

oder wenn man die Software updatet, man nimmt

Jochen

halt Sachen

Jochen

Rechner aus der Verteilung

Jochen

im Loadbalancer, updatet den

Jochen

oder die Hälfte davon

Jochen

und die andere Hälfte läuft noch

Jochen

auf der alten Software und dann schaltet man halt

Jochen

um oder so, solche Sachen kann man machen

Jochen

und das geht noch, das ist auch dann schon

Jochen

kompliziert, weil man muss sich dann halt Gedanken

Jochen

machen, wie man das tut

Jochen

und man muss halt irgendein System haben, das das

Jochen

unterstützt, dass man das automatisch machen kann, sodass man halt

Jochen

nicht jedes Mal, wenn man

Jochen

irgendwie sowas wie eine Schemaänderung macht oder wenn man

Jochen

halt irgendwie eine

Jochen

komplexere Änderung im Applikationscode

Jochen

in den Frontends hat, dass man da halt dann irgendwie

Jochen

jemand setzen muss und das dann von Hand macht, das sollte nicht so sein,

Jochen

sondern man sollte halt auf den Knopf drücken und sagen, okay,

Jochen

jetzt räumen wir das mal aus und dann passieren diese

Jochen

Prozesse, die dafür nötig sind, automatisch.

Jochen

Wenn man Microservices hat, wird

Jochen

das Ganze viel schlimmer. Das ist halt da nicht so,

Jochen

dann hat man viel komplexere Abhängigkeiten

Jochen

zwischen den Geschichten und dann wird dieses ganze

Jochen

Ops-Thema halt richtig

Jochen

ätzend. Auch

Jochen

Skalierung wird richtig ätzend, weil

Jochen

dann willst du halt, wenn du halt

Jochen

in so einer klassischen Architektur hast du nur

Jochen

wenige unterschiedliche Arten von

Jochen

Maschinen, die halt irgendwas machen. Du hast halt Datenbanken,

Jochen

du hast halt irgendwie Redis oder sowas,

Jochen

du hast halt Frontends,

Jochen

vielleicht auch vorne irgendwie

Jochen

Web-Server, die SSL

Jochen

Terminierung machen oder so, aber

Jochen

das war es im Grunde. Also du hast nicht so wahnsinnig viele unterschiedliche

Jochen

Dinge. Beim Microservice hast du halt

Jochen

vielleicht hunderte unterschiedlicher

Jochen

Arten von Microservices, die du unterschiedlich skalieren musst,

Jochen

wo du auf unterschiedliche Sachen aufpassen musst. Das ist alles

Jochen

furchtbar. Also geht. Also man

Jochen

kriegt damit halt Sachen in den Griff, die

Jochen

dann halt, wenn man mit

Jochen

diesem Muster, man hat halt eine Datenbank, in der

Jochen

die Wahrheit drin steht, nicht mehr, wenn das

Jochen

nicht mehr ausreicht, kann man das dann halt so

Jochen

in den Griff kriegen, aber es ist halt dann schon schlimm.

Jochen

Ja, genau.

Jochen

Okay, sind wir schon ganz schön groß,

Dominik

das heißt, wir müssen noch ziemlich viel beachtet haben.

Jochen

Genau, oh, das habe ich, ja, was haben wir denn?

Jochen

Ja, vertikalisch noch.

Dominik

Ich gucke gerade in die Liste, was wir schon alles haben und was noch nicht.

Dominik

Genau.

Dominik

Das ist nämlich tatsächlich relativ viel.

Dominik

Ja, ja, ja, ja.

Jochen

Oh mein Gott, ich weiß nicht, wie lange sind wir denn schon dran?

Jochen

Ich glaube, wir sind über zwei Stunden schon, oder?

Jochen

Oh nein.

Jochen

Nein, noch nicht ganz.

Jochen

Na gut, dann ist es harmlos.

Jochen

Achso, genau.

Jochen

Was ich hier noch an einem Punkt war, es können auch

Jochen

im Analyse-System auch Sachen wieder zurücklaufen.

Jochen

Zum Beispiel gibt es halt diverse Sachen,

Jochen

die gelockt werden, die dann aber trotzdem für die Transaktionen

Jochen

wieder eine Rolle spielen.

Jochen

Wie so etwas, das hatten wir noch gar nicht.

Jochen

Auch die Suche. Am Anfang

Jochen

braucht man ja auf jeden Fall, wenn man so eine E-Commerce-Seite

Jochen

hat, irgendwie eine Suchmaschine, wo man

Jochen

nach Büchern suchen kann oder so.

Jochen

Das geht

Jochen

auch tatsächlich mit Postgres direkt voll gut.

Jochen

Hat integriert

Jochen

integrierten Volltext-Index.

Jochen

Yay!

Jochen

Und man möchte halt auch so eine Facette

Jochen

Navigation, nennt man das, haben, wo man,

Jochen

wenn man jetzt nach irgendwas gesucht hat,

Jochen

hat halt eine Ergebnisliste, dann möchte man

Jochen

einschränken nach Kategorien oder nach, weiß ich jetzt,

Jochen

wenn es nicht um Bücher geht, sondern um

Jochen

Elektronik oder so, kann man vielleicht noch

Jochen

Hauptspeicher oder

Jochen

Videorekorder, genau,

Jochen

VHS oder Betamax, ja,

Jochen

das möchte man vielleicht auswählen können.

Jochen

Und,

Jochen

genau, das geht

Jochen

Postgres alles sehr schön. Auch da

Jochen

kann man

Jochen

irgendwie die Counts für die Facetten ganz gut

Jochen

rauskriegen. Ansonsten, wenn man das halt über eine eigene

Jochen

Spezial-Datenbank, sowas wie

Jochen

Elasticsearch macht oder

Jochen

beides Lucene-basiert oder

Jochen

Solr oder so macht, dann hat man das Problem,

Jochen

da hat man auch wieder dieses, wie bei ETL, das Synchronisationsproblem.

Jochen

Du hast halt, wenn sich an der Datenbank was ändert, müssen

Jochen

die Änderungen in den Index rein.

Jochen

Da hast du eine Latenz dazwischen.

Jochen

Wenn du Sachen aus dem Index rausholst,

Jochen

du hast jetzt eine Volltext-Suchanfrage,

Jochen

du kriegst jetzt IDs aus der

Jochen

Suchmaschine, dann

Jochen

möchtest du aber vielleicht nach was filtern, was nur in der Datenbank

Jochen

drin steht, dann musst du nochmal auf die Datenbank

Jochen

da alle Daten rausziehen

Jochen

und dann nochmal Counts anders ausrechnen.

Jochen

Vielleicht ein paar der Facetten-Counts kommen aus der Suchmaschine,

Jochen

ein paar kommen aber aus der Datenbank.

Jochen

Das heißt, du hast nicht nur einen Roundtrip über die

Jochen

Suchmaschine, du hast auch noch einen Roundtrip über die Datenbank,

Jochen

wo du halt irgendwie select

Jochen

diverse Sachen vom Datenbank-Ware

Jochen

und dann kommt halt ID in und dann

Jochen

kommen tausend IDs und so.

Jochen

das ist alles kompliziert. Wenn das halt

Jochen

ein Statement ist, was du halt abfeuerst,

Jochen

oder halt vielleicht eins für

Jochen

die Daten selber und eins für die Counts oder so,

Jochen

dann ist das halt

Jochen

deutlich, ist alles irgendwie viel

Jochen

einfacher. Und mit Postgres kriegt

Jochen

man auch das am Anfang alles hin.

Jochen

Und ja, das ist eigentlich

Jochen

sehr nett. Irgendwann geht

Jochen

das aber wahrscheinlich dann halt eben auch nicht mehr. Dann muss man halt

Jochen

nach und nach Funktionen in Spezial

Jochen

Services halt auslagern.

Jochen

Einer der ersten, den man wahrscheinlich auslagern wird, ist

Jochen

halt Volltext suchen möglicherweise. Das macht

Jochen

dann halt irgendwann ein Listing Search oder

Jochen

Solar oder so.

Jochen

Aber halt auch

Jochen

eben sowas wie, wenn man

Jochen

jetzt anfängt, eine Query

Jochen

zu schreiben, dann kann man

Jochen

eben Google Suggest, hatte ich eben schon erwähnt,

Jochen

kriegt man halt so Vorschläge.

Jochen

Das ist im Grunde,

Jochen

man macht dann halt, man sucht auf

Jochen

den Queries

Jochen

von anderen Leuten. Aber dann hat man halt

Jochen

genau das Problem, dass halt

Jochen

sozusagen die History der Queries

Jochen

es muss halt irgendwie aus dem Analyse-Ding wieder zurück

Jochen

ins OLTP-System oder in irgendeinen anderen

Jochen

Service, auf dem man dann

Jochen

per Suffix-Tree irgendwie nach

Jochen

Queries,

Jochen

die möglichst ähnlich sind

Jochen

zu den drei Buchstaben, die man jetzt schon eingegeben

Jochen

hat oder so, raussuchen.

Jochen

Wie man die schneller tippen kann,

Jochen

drei, vier, fünf, ja.

Jochen

Man kann das am Anfang auch alles über Postgres machen,

Jochen

wenn es dann halt komplizierter wird, muss man das in eigene Services

Jochen

auslagern und so weiter.

Jochen

Dann wird das System größer und schwieriger

Jochen

und ja.

Jochen

Genau. Und

Jochen

ja, und immer die Datenbanken,

Jochen

die man nimmt, werden halt immer spezialisiert.

Jochen

Also das würde ich auch empfehlen. Also man fängt halt mit Postgres an,

Jochen

macht mit Postgres einfach alles.

Jochen

Und wenn man dann halt irgendwann an Grenzen stößt, dann muss man

Jochen

halt, ja,

Jochen

wo du dir übel, dann Sachen in

Jochen

halt Spezialdatenbanken auslagern. Wo du?

Jochen

Und ja,

Jochen

bezahlt dann halt

Jochen

mit Komplexität.

Jochen

Genau.

Jochen

Ja, jetzt müssen wir nochmal

Dominik

gucken, wie wir das weitermachen. Genau.

Jochen

Wir nehmen Redes zum Cachen einfach

Jochen

von langlaufenden

Jochen

Queries und von irgendwie gerenderten Fragmenten,

Jochen

die halt aufwendig zu rendern sind, also

Jochen

irgendwelche Listen von Dingen oder so, die

Jochen

sich aber jetzt nicht dauernd

Jochen

ändern.

Jochen

Und

Jochen

genau.

Dominik

Jetzt werden unsere Daten immer größer.

Dominik

Ja, die Daten werden noch immer größer

Jochen

und das Problem ist auch, wir sind mittlerweile weltweit unterwegs.

Jochen

Wir verkaufen nicht nur

Jochen

Bücher, wir verkaufen

Jochen

alles von A bis Z

Jochen

wie Amazon. Ich weiß nicht, ob ihr das schon gesehen habt,

Jochen

es gibt diesen Pfeil von A bis zum Z

Jochen

von Amazon.

Jochen

Und

Jochen

ja, dann stellt sich

Jochen

ja die Frage, wenn wir das global machen, wo stellen wir dann den Master

Jochen

eigentlich hin? Das ist halt auch schwierig.

Jochen

Ja.

Dominik

Wo wird der entstehen? Also in einem sicheren Land?

Dominik

Ja.

Dominik

Wir müssen an alle Stellen

Jochen

irgendwie so einen kleinen Master stellen, wo halt viel

Jochen

Traffic ist. Kann man den Master mürren,

Dominik

dass man ja tatsächlich sagt, dass überall derselbe...

Jochen

Ja, es gibt natürlich auch irgendwie für diese

Jochen

Geschichten so Lösungen, dass man halt, dass die Master sich

Jochen

miteinander synchronisieren, das gibt es für Postgres auch,

Jochen

aber das ist alles irgendwie, ich weiß nicht so genau.

Jochen

Alles nicht so richtig.

Jochen

Das funktioniert alles nicht so richtig.

Jochen

Und ja, es gibt auf jeden Fall

Jochen

keine nette...

Jochen

Es ist halt auch ein mehr oder weniger unlösbares Problem.

Jochen

Also das ist auch theoretisch quasi

Jochen

nicht wirklich in den Griff zu kriegen.

Jochen

Man kann aber Dinge tun,

Jochen

indem man halt auf andere Architekturen umstellt.

Jochen

Man kann halt

Jochen

ja, also

Jochen

ich habe jetzt mal hier als Beispiel genommen

Jochen

diese, du willst halt, dass manche

Jochen

Sachen immer funktionieren.

Jochen

Ja, eigentlich sollte immer

Jochen

alle möglichen Sachen funktionieren.

Jochen

Und manchmal ist dir dann halt irgendwie die Konsistenz

Jochen

und so egal. Also

Jochen

zum Beispiel für Amazon super wichtig

Jochen

ist halt der Einkaufswagen. Du musst halt immer

Jochen

weiter, das Spice muss fließen.

Jochen

Du musst immer weiter einkaufen können.

Jochen

Auch wenn jetzt, daher haben sie das

Jochen

halt, ich glaube das war auch, also das

Jochen

Amazon Dynamo basiert

Jochen

auf einem System, das sie für sich selbst gebaut

Jochen

haben, eben für genau diesen

Jochen

Shopping Basket und

Jochen

der halt genau darauf ausgelegt ist, dass dieses Ding halt

Jochen

einfach immer funktioniert. Und das ist mehr

Jochen

oder weniger einfach nur so ein total simpler Key-Value-Store

Jochen

und

Jochen

du lebst halt dann damit, dass das

Jochen

nicht konsistent ist. Oder dass halt

Jochen

wenn du was kaufst,

Jochen

das halt vielleicht nicht mehr im Lager ist. Das kann dann durchaus

Jochen

passieren, weil dieses Ding ist halt ein eigener Service, das

Jochen

hat keine Verbindung zu einer

Jochen

zentral, das hat schon keine Verbindung, aber es kann halt

Jochen

nicht den echten Status abfragen, weil

Jochen

wo ist der? Das ist halt schwer zu sagen.

Jochen

Und das, was Amazon

Jochen

dann macht, tatsächlich, habe ich auch gehört,

Jochen

dass solche Sachen können dann ja

Jochen

auftreten. Du kaufst ein Buch, das ist nicht mehr

Jochen

lieferbar.

Jochen

Und jetzt? Also das heißt,

Jochen

es fällt erst so fünf Minuten später, fällt bei Amazon

Jochen

auf, geht nicht. Wir haben

Jochen

jetzt zwar, hat jemand was bestellt, wir haben

Jochen

die Bestellung zugesagt, du hast eine Bestätigungsmail

Jochen

bekommen irgendwie und jetzt fällt aber auf

Jochen

so, im Lager ist das nicht mehr drin.

Jochen

Wir können es dir nicht schicken.

Jochen

Was macht Amazon dann?

Dominik

Entweder nachordern von irgendeinem Service,

Dominik

wie wir eben das Problem hatten, oder die sagen dann irgendwann

Dominik

so, wir schicken dir

Dominik

einen Gutschein raus,

Dominik

gibt es nicht.

Dominik

Entschuldigungsmail und sie geben dir einen Gutschein.

Jochen

Da das nicht so super häufig passiert, ist das

Jochen

halt nicht schlimm. Das ist halt

Jochen

viel einfacher, das

Jochen

über Gutschein zu lösen, als

Jochen

über ein Datenbanksystem, was das

Jochen

irgendwie handeln kann, weil das gibt es eben einfach nicht.

Jochen

Und ja.

Jochen

Einfach kurz den

Dominik

Rendit-Drucker anschmeißen, wird schnell nachproduziert.

Dominik

Ja.

Dominik

Ja, genau.

Jochen

Das ist halt das auch, was dann halt

Jochen

gebrochen wird, in relationalen

Jochen

Antenmanagements oft Acid.

Jochen

Also Atomicity,

Jochen

Consistency, Isolation und Durability.

Jochen

Atomicity ist eigentlich quasi das, was

Jochen

Transaktionen betrifft, dass halt entweder alles

Jochen

gut geht oder

Jochen

alles fehlschlägt,

Jochen

aber nicht irgendwie Teile einer Transaktion oder Teile

Jochen

von einer Menge von Dingen, die man tun will,

Jochen

halt gehen und dann mancher Sachen nicht gehen.

Jochen

Das sollte halt nicht passieren. Konsistenz,

Jochen

die heißt halt,

Jochen

dass

Jochen

die ganzen Foreign Key, also es ist halt die

Jochen

referenzielle Integrität halt gewahrt bleibt,

Jochen

dass da Sachen nicht zerbrechen, was halt dann auch nicht mehr geht,

Jochen

wenn du Sachen über mehrere Datenbanken verteilst, weil

Jochen

hast du halt teilweise eben keine

Jochen

direkten Verbindungen, sondern du hast halt bloß

Jochen

VR-Pies dazwischen.

Jochen

Isolation ist halt

Jochen

die Geschichte, dass du

Jochen

nicht Sachen,

Jochen

die andere Transaktionen machen, in deinen Daten

Jochen

siehst, also das halt, man nennt das Dirty Read,

Jochen

wenn du halt

Jochen

in deiner Transaktion Dinge aus anderen

Jochen

Transaktionen siehst, die noch nicht abgeschlossen sind,

Jochen

sodass du halt, dass du immer,

Jochen

dass deine Sicht auf die Datenbank komplett

Jochen

isoliert ist von den anderen. Es gibt unterschiedliche Isolationslevel,

Jochen

Postgres hat

Jochen

per Default den höchsten,

Jochen

glaube ich,

Jochen

Serializable ist der höchste, dann gibt es noch Repeatable Read,

Jochen

Und repeatable read war es, glaube ich, lange.

Jochen

Aber mittlerweile ist es serializable.

Jochen

Da kann man auch nachgucken, was das bedeutet.

Jochen

Es gibt da feine Unterschiede.

Jochen

Und genau, Isolation und Durability ist halt einfach nur das,

Jochen

wenn eine Transaktion gesagt hat, okay, ich bin durchgeführt,

Jochen

dass dann halt auch nichts mehr schiefgehen kann.

Jochen

Was extrem schwierig ist zu implementieren.

Jochen

Strom aus.

Jochen

Genau, Strom aus muss trotzdem, wenn die Datenbank wieder hochkommt,

Jochen

alles im richtigen Zustand

Jochen

sein. Aber das kann man ja oft

Jochen

dann nicht so wirklich gewährleisten. Also man kann ja nicht

Jochen

das halt...

Dominik

Der Hauptspeicher ist ja flüchtig und nicht...

Jochen

Der Hauptspeicher ist flüchtig, das heißt, man darf es nicht in den Hauptspeicher

Jochen

einfach nur schreiben, sondern die Transaktion

Jochen

darf erst als dann durchgegangen

Jochen

zurück...

Jochen

ist durchgegangen, wird zurückgegeben,

Jochen

wenn das im Write-Ahead-Log gelandet

Jochen

ist und das mit F-Sync

Jochen

irgendwie auf die Platte geschrieben ist.

Jochen

Ja, und F-Sync ist halt teurer, teurer Syscall, das macht das sehr langsam, 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, du kannst unterschiedlichen Usern unterschiedliche Isolationslevel geben und dann kannst du sagen, wenn jemand Analyse-Queries macht oder bestimmte Arten von Queries, bei denen es völlig egal ist, ob die super isoliert sind oder nicht,

Jochen

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. So kann man Sachen deutlich beschleunigen. Dann, was man auch machen kann, das sollte man halt jetzt nicht tun, wenn man Bestellungstransaktionen prozessiert, aber zum Beispiel, wenn man testet.

Jochen

hat man ja viele Tests

Jochen

für eine Applikation und es dauert

Jochen

lange, bis die durchlaufen, wenn man jetzt irgendeine Änderung

Jochen

macht und man führt die Tests

Jochen

aus und das dauert ein paar Minuten, das ist halt schlecht, weil

Jochen

es halt diesen, man ändert

Jochen

was, führt die Tests aus und

Jochen

hat dann sofort Feedback-Cycle

Jochen

irgendwie kaputt

Jochen

macht, wenn man dann halt irgendwie Kaffee trinken

Jochen

gehen muss und das macht auch so ein bisschen die

Jochen

Konzentration kaputt.

Jochen

Daher wäre es schön, wenn die Tests

Jochen

irgendwie schnell laufen würden und

Jochen

da man aber

Jochen

auch für die Tests, jetzt wenn man jetzt ein Django-Projekt

Jochen

hat, auch die echte Daten, auch Postgres verwenden

Jochen

will, was viele Leute machen, früher gemacht haben,

Jochen

ist dann halt ein SQLite zu

Jochen

verwenden, das nur in Memory ist.

Jochen

Das geht dann viel schneller, aber das Problem ist halt,

Jochen

dass SQLite sich anders

Jochen

verhält als Postgres und dann laufen die Tests

Jochen

durch und man denkt, das ist alles gut und dann geht's

Jochen

auf die Datenbank und dann geht's schief.

Jochen

Nicht so gut. Aber was man

Jochen

tatsächlich machen kann, ist

Jochen

Postgres zu sagen, ja, irgendwie nicht F-Synchen.

Jochen

Macht man nicht. Und man

Jochen

kann auch die Postgres dann auf eine

Jochen

In-Memory-Partition

Jochen

legen quasi, das geht auch.

Jochen

Kann man auch irgendwie per Docker-Argumenten kann man das

Jochen

irgendwie sagen und dann sind die Tests halt viel, viel schneller.

Jochen

Ja, weil für Tests ist es mir egal, ob das jetzt,

Jochen

wenn der Strom ausgeht, dann ist es mir wurscht.

Jochen

Ich meine, die Testdatenbank schmeißt sich sowieso

Jochen

nach jedem Testlauf wieder weg quasi.

Jochen

Also, ja, aber

Jochen

für die echte Produktionsdatenbank, die muss

Jochen

halt bei Transaktionen tatsächlich dafür sorgen,

Jochen

dass das nicht mehr verschwinden kann und das heißt,

Jochen

sie muss Epsilon aufrufen und dann, ja, ist das

Jochen

halt einfach langsam, da kann man auch nichts machen.

Dominik

Okay, einmal ein bisschen Acid.

Dominik

Ja, genau, haben wir Acid.

Jochen

Und dann, ja, also was wir

Jochen

dann heutzutage oft haben, sehen

Jochen

bei

Jochen

Datenbanken,

Jochen

die das halt, oder Dokumentdatenbanken,

Jochen

genau, ist halt ein anderes

Jochen

Paradigmen, das nennt sich Base.

Jochen

Also Basic Availability, Soft State,

Jochen

Eventual Consistency.

Jochen

Also, wo man halt versucht, die Sachen so

Jochen

aufzulockern, um halt es möglich zu machen,

Jochen

dass man zum Beispiel mehrere...

Jochen

mehrere Datenbanken schreiben kann.

Dominik

Ja, wir sind jetzt ziemlich groß geworden, oder?

Jochen

Ja, genau, wir sind jetzt ziemlich groß

Jochen

und was wir jetzt haben, wenn wir auf mehrere Sachen

Jochen

schreiben wollen, ist halt, genau,

Jochen

das Asset ist halt weg, Pech gehabt.

Jochen

Nein, wir haben noch ein anderes Ding,

Jochen

das ist dann noch das Cap Theorem Consistency Availability

Jochen

und Partition Tolerance,

Jochen

das ist halt auch diese, immer wenn man so Sachen

Jochen

Pick-Two-Out-Of-Three-Sachen sieht,

Jochen

also das CAP-Theorem ist halt so das ursprüngliche

Jochen

Ding dafür, du kannst halt zwei davon

Jochen

hinkriegen, aber drei nicht. Und Partition Tolerance ist

Jochen

leider nicht optional. Das musst du halt haben.

Jochen

Partition was? Partition Tolerance.

Jochen

Also was ist, wenn Netzwerkverbindungen

Jochen

zwischen zwei deiner Datenbank-Dinger

Jochen

irgendwie wegfällt oder so?

Jochen

Das musst du halt leider,

Jochen

das ist halt mandatory

Jochen

sozusagen.

Jochen

Das heißt, du kannst nur noch zwischen

Jochen

Consistency und Availability

Jochen

halt irgendwie wählen.

Jochen

Und du hast halt, ja,

Jochen

dann gibt es halt Datenbanken, die dann halt

Jochen

unterschiedliche Trade-Offs realisieren.

Jochen

Ja,

Jochen

genau.

Jochen

Das ist zum Beispiel, ein interessanter

Jochen

Fall ist halt sowas wie CouchDB,

Jochen

die halt,

Jochen

wo du sogar, wenn du halt offline

Jochen

bist, immer noch

Jochen

eine Datenbankverbindung

Jochen

hast oder immer noch deine Applikation benutzen kannst

Jochen

und die schreibt dann halt das in eine lokale

Jochen

CouchDB-Instanz, auch interessant,

Jochen

weil es ist halt so ein JavaScript-Ding,

Jochen

aber

Jochen

früher hatte man

Jochen

so jQuery als Abstraktionslevel für

Jochen

alles, was irgendwie auf diesem

Jochen

DOM-Modell im Browser irgendwie Dinge

Jochen

tut. Man möchte es ja vereinheitlichen, alle Browser haben

Jochen

das unterschiedliche, haben da unterschiedliche Funktionen gehabt,

Jochen

also hatte man jQuery und wenn man jQuery

Jochen

konnte, dann war es einem halt quasi egal,

Jochen

welcher Browser da drunter lag.

Jochen

Und bei CouchDB ist es so, das abstrahiert so ein bisschen

Jochen

diese Storage-APIs, die Browser haben.

Jochen

Das ist halt quasi dafür gedacht,

Jochen

wenn du jetzt eine lokale,

Jochen

wenn du eine Webseite

Jochen

auf einem Smartphone hast

Jochen

oder so, und du hast halt nicht immer Verbindungen,

Jochen

du möchtest aber trotzdem,

Jochen

dass sich deine Webseite so anfühlt,

Jochen

als hättest du irgendwie eine Verbindung.

Jochen

So offline first

Jochen

oder so, jetzt im Shopping-Kontext

Jochen

ist das halt nicht so richtig gut

Jochen

vorstelle, warum das irgendwie sinnvoll ist, aber

Jochen

nehmen wir an, du hast jetzt irgendwie sowas wie

Jochen

Trello, also irgendwie so Tasks oder so,

Jochen

wo du Sachen machen kannst, da möchtest

Jochen

du nicht, dass wenn jetzt du durch einen Tunnel fährst,

Jochen

dann nichts mehr geht, sondern

Jochen

das geht halt mit CouchDB, das ist halt

Jochen

sozusagen wie Jackfairy ein Layer über dem

Jochen

Storage-API von deinem Browser, weil

Jochen

die können das ja auch alle mittlerweile, die haben meistens SQLite

Jochen

oder sonst irgendwas drunter und dann halt

Jochen

APIs, mit denen du da irgendwie Dinge drauf tun kannst

Jochen

und

Jochen

was CouchDB jetzt letztendlich macht,

Jochen

ist da nochmal ein Layer drüber zu liegen und

Jochen

so ein Replikationsfeature

Jochen

zu haben in alle möglichen

Jochen

Richtungen. Also es ist halt Master, Master

Jochen

oder Datenbank zu Datenbank

Jochen

in alle Richtungen. Es ist halt nur so, dass ab und zu

Jochen

Konflikte auftreten und die müssen dann vom User

Jochen

gelöst werden. Das heißt, du wirst dann

Jochen

manchmal gefragt, ist das oder das richtig?

Jochen

Aber das passiert

Jochen

jetzt auch nicht so super häufig und das ist halt

Jochen

schon sehr, sehr nett.

Jochen

Also du kannst

Jochen

halt, auch wenn du offline bist, deine

Jochen

Web-Anwendung weiter so benutzen als

Jochen

als wärst du online

Jochen

und das synchronisiert sich halt in dem Moment,

Jochen

wo du halt wieder Verbindung hast.

Jochen

Und

Jochen

ja, das ist halt dann sehr auf der Availability-Seite

Jochen

und halt dann auf der Konsistenz-Seite halt nicht.

Jochen

Deswegen musst du halt dann

Jochen

Sachen auch, Konflikte manuell unter Umständen

Jochen

lösen.

Jochen

Genau.

Jochen

Ja.

Jochen

So, jetzt haben wir, okay.

Jochen

Jetzt sind wir, glaube ich,

Jochen

im Grunde mit dem

Jochen

ganzen traditionellen Kram

Jochen

mehr oder weniger durch. Ja, wahrscheinlich nicht so wirklich.

Jochen

Er hat es schon ganz lange geschafft,

Jochen

bis er es hier geschafft hat.

Jochen

Ja, aber und jetzt kommt

Jochen

eigentlich nur noch ein Teil und das ist halt

Jochen

irgendwie so Big Data oder

Jochen

Urlaub-Geschichten für

Jochen

wirklich große Systeme. Really, really, really

Jochen

big things. Ja, also

Jochen

ich meine, Big Data ist ja so ein bisschen, ich weiß nicht, was

Jochen

ein Passwort.

Jochen

Was würdest du sagen, ist Big Data oder

Jochen

warum wollen Leute das haben?

Dominik

Ja, also erstmal hört sich cool an und also jede Excel-Tablette

Dominik

mit mehr als, weiß nicht, tausend Teilen kann man schon

Dominik

einen Trick machen oder sowas. Also das kommt

Dominik

halt, glaube ich, ein bisschen auf den Anwendungsfall an und jeder

Dominik

hat natürlich gerne Big Data, weil es natürlich super ist,

Dominik

man ganz viel machen kann, man

Dominik

kann Analysen mitfahren und sowas.

Dominik

Alles, was halt irgendwie anfällt

Dominik

an Dingen, die man durch die ganzen modernen

Dominik

Daten irgendwie so jederzeit bekommt,

Dominik

ist dann irgendwann sehr big. Fühlt sich einfach groß an,

Dominik

wenn man ganz viele

Dominik

Sensordaten von verschiedenen Punkten bekommt. Was soll man damit machen?

Dominik

Man treibt hier irgendwelche Excel-Tabellen rein.

Dominik

Die liegen dann halt auf irgendwelchen

Dominik

Servern oder halt auch

Dominik

einfach nur Rechnern rum und haben halt ganz

Dominik

viele große Informationen, ohne dass man damit was anfangen kann

Dominik

bisher. Das ist vielleicht schon Big Data,

Dominik

ich weiß nicht. Also ich glaube, dass überall

Dominik

Daten vorhanden sind, ist vielleicht das

Dominik

eigentliche Big Data, aber ob jetzt so

Dominik

im Einzelfall das wirklich Big ist, was sagst du?

Jochen

Ja, also genau, ich habe

Jochen

auch, es gibt dann sehr unterschiedliche

Jochen

Auffassungen

Jochen

davon. Es gibt dann Leute, die sagen so, ja, was ist nicht mehr

Jochen

in der Excel-Tabelle, was ist das schon so?

Jochen

Also ich würde sagen, vielleicht etwas halbwegs

Jochen

Vernünftigere ist halt, was nicht mehr auf einen Computer passt.

Jochen

Aber auch das greift eigentlich zu kurz.

Jochen

Ich habe dann letztens nochmal irgendwie

Jochen

Meine Spiele dann nur.

Jochen

Das war irgendein Talk von Michael Stonebreaker.

Jochen

Das sind immer die gleichen Namen,

Jochen

auf die man irgendwie in dieser Datenmark-Welt stößt.

Jochen

Das sind halt so Michael Stonebreaker,

Jochen

Jim Ray, Ted Kord,

Jochen

weiß ich nicht,

Jochen

Ducatting.

Jochen

Das ist auch

Jochen

der, der hat auch

Jochen

der hat Postgres mitbegründet

Jochen

oder Ingress vorher und dann Postgres

Jochen

und auch viele

Jochen

der noch moderne, der heute

Jochen

ganz modernen Geschichten wie

Jochen

Column Stores, also C-Store, Paper ist von ihm

Jochen

VaultDB für so

Jochen

In-Memory-Datenbanken-Geschichten

Jochen

ja, der definiert das so

Jochen

der sagt halt, naja, es gibt eigentlich nur noch drei Arten

Jochen

wie Data Big sein kann, nämlich

Jochen

irgendwie, ja, es ist einfach zu viel

Jochen

ja, du hast, und der sagt halt

Jochen

nicht irgendwas Konkretes, sondern du hast halt

Jochen

Probleme mit der Datenmenge. Also es ist halt, wenn du

Jochen

wirklich Schwierigkeiten damit hast und damit nicht fertig wärst,

Jochen

dann hast du halt ein Problem mit der

Jochen

Datenmenge und dann hast du halt Big Data, weil es

Jochen

halt für dich schwierig ist, mit dieser Menge

Jochen

klarzukommen. Aber was halt auch sein kann,

Jochen

ist, und dann hast du halt auch ein Big Data Problem,

Jochen

auch wenn es jetzt nicht unbedingt

Jochen

eins ist, das

Jochen

mit der Datenmenge zu tun hat, wenn die Daten zu schnell kommen.

Jochen

Also du könntest mit der Datenmenge vielleicht klarkommen,

Jochen

aber sie kommen so schnell, dass du irgendwie nicht fertig wirst.

Dominik

Dann hast du so ein Respy oder sowas und das ist dann mal begrenzt

Jochen

und dann... Ja, dann hast du auch ein Big Data Problem,

Jochen

aber halt eine andere Art von Big Data Problem.

Jochen

Es gibt dann noch eins, das ist halt, wenn

Jochen

Daten aus ganz vielen sehr unterschiedlichen

Jochen

Quellen und sehr unterschiedlicher Art kommen,

Jochen

es sind vielleicht gar nicht so viele und sie kommen auch nicht so schnell,

Jochen

aber du kriegst sie nicht schnell genug integriert

Jochen

oder kriegst es halt nicht in den Griff. Da hast du auch wieder

Jochen

ein Big Data Problem, was auch wieder leicht anders ist. Und diese drei

Jochen

Dinger sind halt eigentlich alle irgendwie so ein bisschen

Jochen

unterschiedlich. Und

Jochen

ja,

Jochen

oft

Jochen

wird es nicht so richtig klar. Und oft ist es,

Jochen

also ich würde sagen, Big Data ist so ein gehyptes

Jochen

Ding und

Jochen

ja, irgendwie

Jochen

es werden ganz viele Hadoop-Cluster verkauft.

Jochen

Was ist ein Hadoop-Cluster?

Jochen

Ja, es ist

Jochen

Hadoop ist irgendwie so

Jochen

ein, das Start ist

Jochen

ein Apache-Projekt,

Jochen

das irgendwie mal gestartet ist als

Jochen

Implementierung eines

Jochen

Konzepts, nennt sich MapReduce.

Jochen

Das ist ein Paper, das hat Google mal veröffentlicht.

Jochen

Jeff Dean und noch ein paar andere

Jochen

haben das veröffentlicht, 2004

Jochen

glaube ich. Und

Jochen

das ist halt eine Art, mit

Jochen

großen Datenmengen umzugehen und die halt so

Jochen

horizontal auf ganz viele

Jochen

Maschinen zu skalieren.

Jochen

Das funktioniert im Grunde so, dass es halt auch genau dafür gedacht

Jochen

ist, wenn man jetzt einen großen Suchindex, wie man

Jochen

bei Google zum Beispiel hat,

Jochen

bauen möchte über das gesamte Web,

Jochen

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

Jochen

auf möglichst

Jochen

viele Maschinen, so eine halbe Million oder eine Million oder so

Jochen

skalieren. Wie macht man das?

Jochen

Und das Konzept, das sie sich dafür überlegt haben,

Jochen

nennt sich halt MapReduce und

Jochen

ist auch eigentlich nicht wirklich was Neues.

Jochen

Früher gab es auch schon ähnliche Konzepte,

Jochen

wie sich ScatterGather oder sowas.

Jochen

Und im Distributed Computing Teil

Jochen

gibt es auch diverse Geschichten, die so ähnlich sind.

Jochen

Aber so auf der Skala und so

Jochen

und die Art, wie sie das konkret machen,

Jochen

war schon irgendwie was Neues

Jochen

und auch ein sehr, sehr cooler Ansatz.

Jochen

Und zwar machen sie das halt so,

Jochen

also im Grunde kann man sich das vorstellen,

Jochen

wenn man jetzt eine Webseite hat,

Jochen

viele Rechner, die halt Webseiten crawlen,

Jochen

nimmt man den Text, zerlegt den halt in Worte

Jochen

und man spuckt jetzt

Jochen

sozusagen für jedes Wort, einmal das Wort

Jochen

oder für die Webseite, die Worte

Jochen

aus, aus denen die Webseite besteht,

Jochen

plus die Anzahl, wie oft das vorkommt.

Jochen

Das ist halt sozusagen die Map-Phase.

Jochen

Und das machst du jetzt auf allen

Jochen

Maschinen. Und dann

Jochen

führst du das halt irgendwann wieder zusammen in einem Reducer.

Jochen

Und

Jochen

also was du bauen möchtest,

Jochen

ist sozusagen so ein

Jochen

Index, das ist halt

Jochen

wie ein Index

Jochen

in einem Buch,

Jochen

wo halt steht,

Jochen

welches Wort kommt auf welcher Seite vor.

Jochen

Und du musst halt für so ein Webseiten-Internet

Jochen

musst du halt sagen, welches Wort kommt auf welcher

Jochen

Webseite

Jochen

vor. Das ist halt das, was du

Jochen

hinterher haben willst.

Dominik

Und die sortiert man dann nach der Reihenfolge,

Dominik

wie oft das immer vorkommt oder so ungefähr. Genau.

Jochen

Aber man muss halt auch wissen, wie oft das vorkommt, weil

Jochen

man halt bestimmte Geschichten

Jochen

nennt.

Dominik

Wir stehen am Anfang von der Liste, wie oft das vorkommt.

Jochen

Ja, man rechnet so TF-EDF-Scores

Jochen

aus und dafür braucht man halt die Termfrequenz.

Dominik

So bitte was? TF-EDS?

Jochen

Ja, Termfrequenz mal

Jochen

Inverse Document Frequency ist halt sozusagen

Jochen

ein wichtiger Wert dafür, wie

Jochen

wichtig jetzt

Jochen

ein Wort ist

Jochen

in der Webseite oder

Jochen

in einem Dokument. Und dafür muss man

Jochen

halt zählen, wie oft ein Wort vorkommt.

Jochen

Ja, aber man muss halt auch

Jochen

zählen, wie oft das Wort

Jochen

überhaupt vorkommt.

Dominik

Und dann generell das noch mit dem Kontext und der

Dominik

Wichtigkeit und so und zusammensetzen.

Jochen

Also in dieser Webphase imitiert man im Grunde nur,

Jochen

welche Webseite war das, wie oft ist das

Jochen

Wort da vorgekommen und dann werden diese Ströme

Jochen

dann zusammen reduced und dann

Jochen

sozusagen

Jochen

hat man halt irgendwie dann diesen Index, wo dann zu jedem

Jochen

Wort steht, auf welchen Webseiten es vorkam und

Jochen

ja, wie oft und wie oft

Jochen

es insgesamt vorkam und so und dann kann man

Jochen

irgendwie so Anfragen machen und das

Jochen

kann man halt komplett voneinander trennen, da halt

Jochen

bestimmte,

Jochen

da man, da sich diese Sachen

Jochen

komplett voneinander, du kannst halt

Jochen

nach Worten auftrennen.

Jochen

Also, du musst halt nur

Jochen

dafür sorgen, dass das gleiche Wort immer

Jochen

auf, dass alle Sachen, die zum gleichen

Jochen

Wort gehören, zusammengeführt werden.

Jochen

Aber du kannst halt

Jochen

ja, für unterschiedliche Worte unterschiedliche

Jochen

Maschinen benutzen.

Jochen

Das ist halt gar kein Problem. Und damit kannst du

Jochen

es quasi beliebig horizontal skalieren.

Jochen

Auch da wiederum ist es schwer zu erklären,

Jochen

man kann sich das einfach mal angucken.

Jochen

Dann bietet sich einfach so ein Rechenzentrum,

Dominik

da schaltet einfach noch eine Maschine ein, wenn du welche brauchst.

Jochen

Genau, kannst dann halt immer, einfach immer mehr

Jochen

Maschinen dazustellen. Und ja,

Jochen

viele Leute haben sich gedacht, oh, das war eine coole, coole

Jochen

Idee. Und dann

Jochen

ja, derjenige,

Jochen

einer von denen, der Namen

Jochen

man immer hört, irgendwie, Duck Cutting,

Jochen

der hat damals schon bei Excite irgendwie

Jochen

die Suchmaschine gebaut, hat dann später eine sehr

Jochen

populäre, oder immer noch die populärste

Jochen

Volltext-Suchmaschine, die es so gibt,

Jochen

Lucine, oder ist die Engine darunter,

Jochen

jedenfalls geschrieben, auch

Jochen

ein Buch darüber, das

Jochen

ja, und

Jochen

Irgendwann ist er eher in diesen Big-Data-Hadoop-Bereich gegangen.

Jochen

Der hat ursprünglich auch dieses Hadoop-Projekt losgetreten.

Jochen

Und dabei ging es halt darum, ein System wie das, was Google zum Bauen der NDCs verwendet hat,

Jochen

in Open Source nachzubauen unter diesem Apache-Projekt-Schirm.

Jochen

Und ja, das hat auch gut funktioniert.

Jochen

Alles 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

Jochen

Dinge verwendet, für die es vielleicht nicht so gut geeignet

Jochen

ist eigentlich.

Jochen

Zum Beispiel? Ja, also es ist

Jochen

glaube ich für viele Firmen heute so die generische

Jochen

Data Warehouse-Lösung

Jochen

geworden. Obwohl es

Jochen

dafür, weiß ich nicht.

Jochen

Also ich würde ja sagen, zum Beispiel viele Firmen haben

Jochen

eben keinen Big Data. Die haben

Jochen

keines dieser drei Big Data-Probleme,

Jochen

sondern

Dominik

Besser nicht, wie die es machen sollen.

Jochen

Ja, die haben einfach nur Daten und

Jochen

eigentlich passt das an den Hauptspeicher und die brauchen

Jochen

nichts davon. Das ist, die können einfach, die

Jochen

Einrichtung mit einem

Jochen

Postgres-Server. Ja, oder

Jochen

irgendwie nicht mal das.

Jochen

Sikulat Errori.

Jochen

Jaja, also da

Jochen

ein Freund von mir sagt dann immer so, oder

Jochen

ich weiß nicht mehr, das, ach, ich hab das

Jochen

und ich glaube, ich hab es auf Twitter gelesen, Unsinn.

Jochen

Man sollte irgendwie,

Jochen

ich weiß aber nicht mehr, wer es war, ich sollte

Jochen

eigentlich mal einen Consulting-Service gründen,

Jochen

der irgendwie,

Jochen

den man engagieren kann,

Jochen

wenn man vor der Frage steht, ob man sich jetzt

Jochen

ein Hadoop-Cluster irgendwie kaufen möchte

Jochen

oder nicht. Die Antwort ist immer nein.

Jochen

Gehe ich da hin und sage,

Jochen

lass mich überlegen,

Jochen

nein.

Jochen

Deine Daten

Jochen

finden in RAM.

Jochen

No.

Jochen

Und da einfach jedes Mal

Jochen

10.000 Dollar für verlangen.

Jochen

Das würde, hätte ich irgendwie

Jochen

ein nettes Einkommen durch und

Jochen

würde den Unternehmen ein Vielfaches davon sparen.

Jochen

Von dem, was sie dann ausgeben, wenn sie

Jochen

das nicht will.

Jochen

und da ist

Jochen

leider viel Wahres dran, also es gibt wenige, die das

Jochen

wirklich brauchen, viele

Jochen

schaffen es sich trotzdem an und haben dann ein

Jochen

kompliziertes, eine

Jochen

komplizierte Lösung für ein Problem, das sie nicht haben

Dominik

Ich meine, das ist natürlich für die Leute, die

Jochen

Geld verdienen. Genau, für das Problem, was sie haben, ist das

Jochen

einfach total kompliziert zu benutzen

Jochen

also Dinge wären viel einfacher, wenn sie

Jochen

das nicht machen würden, aber naja, so ist es halt

Jochen

nun mal

Jochen

und von diesem

Jochen

MapReduce-Ding ist auch

Jochen

diese ganze Hadoop-Welt auch schon so ein bisschen

Jochen

wieder weg. Auch Google macht nicht mehr wirklich

Jochen

MapReduce, also für manche Sachen machen sie möglicherweise

Jochen

noch MapReduce, aber es sind ja auch andere

Jochen

Systeme gegangen, Prägel,

Jochen

so ein Graph-Processing-Ding, was

Jochen

sie da machen, was halt relativ viel

Jochen

tut von dem, was früher MapReduce gemacht hat.

Jochen

Und

Jochen

auch bei Hadoop ist es halt so,

Jochen

dass das, was geblieben ist, ist

Jochen

irgendwie so ein verteilter Dateisystem-Layer,

Jochen

so auch Management von

Jochen

diesen Nodes

Jochen

irgendwie in diesem Cluster.

Jochen

Aber

Jochen

die Engines, die

Jochen

jetzt irgendwie Queries darauf prozessen,

Jochen

davon gibt es halt, das nennt sich Hive,

Jochen

da schreibt man Queries in so einem SQL-ähnlichen

Jochen

oder das ist schon SQL,

Jochen

man schreibt halt so SQL

Jochen

und das wird dann halt in MapReduce

Jochen

Jobs verwandelt und wird dann halt auf den

Jochen

ja, also im Grunde die Idee

Jochen

bei der ganzen Geschichte ist, dass man halt

Jochen

nicht mehr die Daten zu einer Stelle bringt,

Jochen

wo sie dann prozessed werden, sondern man bringt

Jochen

den Algorithmus zu den Daten.

Jochen

Man kann die Daten nicht mehr an einer Stelle zusammenführen,

Jochen

weil es sind einfach zu viele. Die liegen halt auf den lokalen

Jochen

Nodes und man trägt

Jochen

jetzt den Algorithmus zu diesen Daten

Jochen

und der läuft dann halt lokal auf den

Jochen

Cluster-Nodes darüber und dann am Schluss wird das

Jochen

alles wieder zusammengeführt, zusammenreduced

Jochen

und dann kriegt man halt das Ergebnis.

Jochen

Und für einen selber sieht das so aus, man schreibt halt ein

Jochen

SQL-Statement und kriegt halt ein Ergebnis

Jochen

und in Wirklichkeit hat man

Jochen

dann halt irgendwie einen Job gebaut, der dann halt

Jochen

100 Mapper, 100 Reducer

Jochen

angestoßen hat und das lief halt über 200 Maschinen

Jochen

und

Jochen

Wow, that's big.

Dominik

Hatte vielleicht das Problem nur Big Data

Dominik

dann, also Big,

Dominik

nicht Data.

Jochen

Aber es wäre

Jochen

und das hat dann vielleicht eine halbe Stunde gedauert

Jochen

aber es ist halt auch möglich, wenn man das anders gemacht hätte

Jochen

hätte diese ganze Geschichte

Jochen

auch in der Minute durchlaufen können.

Jochen

Ja, es gibt dann auch

Jochen

andere Geschichten, die jetzt auf solchen Clustern

Jochen

laufen, zum Beispiel rein in Memory-Geschichten

Jochen

so was wie Impala

Jochen

einer von

Jochen

den

Jochen

PhD-Studenten von Michael

Jochen

Stonebraker, die damals

Jochen

Postgres mitgeschrieben haben, ist da

Jochen

irgendwie CTO von der Firma, die da, ich habe jetzt aber auch wieder vergessen,

Jochen

welche das ist.

Jochen

Das macht das halt in Memory, das ist

Jochen

in C geschrieben, das ist alles schneller,

Jochen

das ist viel angenehmer, wenn man damit arbeitet,

Jochen

aber es ist auch so ein bisschen komisch und

Jochen

es ist halt auch nicht so richtig,

Jochen

es ist halt nur ein bisschen instabil.

Jochen

Ist

Jochen

gibt diverse

Jochen

andere Geschichten. Ach, das war noch ein eigenes

Jochen

Thema eigentlich. Spark, SpySpark.

Jochen

Was ganz interessant ist,

Jochen

ist, was man vielleicht

Jochen

lasst mich überlegen.

Jochen

Also was sehr interessant ist,

Jochen

ist, dass wir heute etwas

Jochen

sehen,

Jochen

was wir früher eigentlich auch schon

Jochen

gedacht hätten, dass wir das im relationalen Bereich bekommen,

Jochen

nämlich, oder MySQL hat damit mal angefangen,

Jochen

so, die hatten irgendwie

Jochen

so eines der coolen Features bei MySQL

Jochen

am Anfang war, dass die Storage-Engines

Jochen

pluggable waren. Das heißt, du konntest deine eigene

Jochen

Storage-Engine da reinbauen. Hat auch kaum

Jochen

einer gemacht. Es gab eigentlich nur zwei

Jochen

relevante. Was ist eine Storage-Engine?

Jochen

Wie die Daten tatsächlich auf der Platte liegen.

Jochen

Ah, okay. Letztlich.

Jochen

Und das ist halt, es gab MyISAM,

Jochen

es gab auch eine CSV-Engine für MySQL,

Jochen

da hast du einfach CSVs genommen.

Jochen

Aber MyISAM war so populär.

Jochen

MySQL hatte aber Probleme. Hatte das Problem,

Jochen

dass du, wenn du geschrieben hast, wurde mir die komplette Table

Jochen

gelockt. Das heißt, also da lieber nur lesen, nichts

Jochen

reinschreiben. So reinschreiben, eher doof.

Jochen

hat trotzdem irgendwie, haben das

Jochen

viel lange verwendet, Transaktionen und so, das geht alles nicht.

Jochen

Asset war nicht so richtig bei MySQL am Anfang und dann

Jochen

hatten sie eine Storage-Engine, die das dann aber schon konnte,

Jochen

die auch so wirklich Multiversion

Jochen

Concurrency-Kontrolle halt richtig konnte und das war

Jochen

InnoDB und

Jochen

ja, aber eigentlich

Jochen

so nachdem InnoDB sich durchgesetzt hatte

Jochen

oder irgendwie gut genug war,

Jochen

dann hat sich dieser

Jochen

Pluggable-Storage-Engine-Geschichte von

Jochen

MySQL hat sich dann auch wieder erledigt.

Jochen

Aber Postgres

Jochen

bekommt jetzt, glaube ich, mit der Version 12, also

Jochen

das ist noch nicht sicher, aber es sieht ein bisschen danach aus, als ob sie

Jochen

Plugable Storage Engines wieder zurückbekommen.

Jochen

Was interessant,

Jochen

da ist es dann zum ersten Mal, aber

Jochen

das Konzept nochmal irgendwie

Jochen

doch nochmal angefasst wird.

Jochen

Und interessant ist auch in diesem ganzen

Jochen

Analytics-Big-Data-Bereich,

Jochen

dass wir da auch sowas sehen. Wir sehen

Jochen

halt, es gibt nicht mehr so ein Datenbank-

Jochen

System, wo halt die

Jochen

wie die Daten gespeichert werden, tatsächlich

Jochen

an die anderen Teile,

Jochen

Also im Grunde besteht ja so ein Datenbanksystem aus vielen unterschiedlichen Geschichten. 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. Also auch wichtig, wenn man diese Analysegeschichten macht, hat man im Grunde, ist die Art, wie Daten in relationalen Datenbanken gespeichert werden, ist zeilenweise.

Jochen

weil die Art von Curries, die man

Jochen

da macht, oft nur wenige Zeilen betreffen.

Jochen

Ein paar tausend oder so, aber es sind immer noch

Jochen

sehr wenige. Daher macht es Sinn,

Jochen

irgendwie zeilenweise zu arbeiten.

Jochen

Sozusagen.

Jochen

Aber für diese

Jochen

Analysegeschichten, dieses ganze Data Warehousing Zeugs,

Jochen

ist das überhaupt nicht sinnvoll.

Jochen

Dieses Muster, dass man halt

Jochen

eher Millionen

Jochen

von Zeilen anguckt, aber nur wenige Spalten,

Jochen

weil man sich nur für einen bestimmten Aspekt interessiert.

Jochen

Man interessiert sich oft eben nur für

Jochen

Umsatz oder Preis

Jochen

oder sowas. Aber man

Jochen

interessiert sich gar nicht für den Namen des Autors

Jochen

oder so. Daher möchte man eigentlich nicht

Jochen

irgendwie alle Zeilen

Jochen

immer komplett angucken, weil dann guckt man sich

Jochen

ganz viel Zeug an.

Jochen

Der Flaschenhals ist oft

Jochen

wie

Jochen

die Wandbreite

Jochen

zwischen Platte und Hauptspeicher.

Jochen

Man muss das halt dann irgendwie durch den Prozessor

Jochen

ziehen. Und je weniger Daten man dadurch

Jochen

ziehen muss, umso besser. Und bei

Jochen

einem zeilenorientierten Format muss ich,

Jochen

ich die Datei lese und die Datensätze

Jochen

halt zeilenweise drinstehen, muss ich halt da

Jochen

sequenziell durch die Zeilen durchgehen.

Jochen

Das geht nicht anders.

Jochen

Das ist halt total ineffizient, weil wenn ich halt nur

Jochen

einen kleinen Teil von diesen Zeilen, nämlich nur

Jochen

eine Spalte, irgendwie überhaupt lesen möchte, das heißt,

Jochen

wenn ich

Jochen

so Analyse-Querys

Jochen

auf Datenbanken mache,

Jochen

die zeilenbasiert ihre Daten speichern,

Jochen

dann ist das super ineffizient und ich habe halt

Jochen

so einen Verlust von circa, man sagt

Jochen

immer so einen Faktor 50 ungefähr,

Jochen

sind die halt einfach aufgrund

Jochen

dieser Architekturgeschichte langsamer

Jochen

und zwar unoptimierbar

Jochen

langsamer als sogenannte

Jochen

Column Stores, die halt Daten

Jochen

spaltenweise speichern.

Jochen

Und

Jochen

die ersten

Jochen

Dateisystemformate

Jochen

oder Formate, in denen die Daten zum Beispiel in Hadoop

Jochen

gespeichert wurden, Avro ist glaube ich

Jochen

das erste, ich weiß nicht genau,

Jochen

sind auch alle zeilenbasiert, weil das war halt so.

Jochen

Man hat halt irgendwie zeilenbasiert Sachen gespeichert,

Jochen

aber das ist halt eben total

Jochen

ineffizient, wenn man halt nur

Jochen

bestimmte Spalten von Datensätzen haben

Jochen

möchte und dann gibt es halt neuere File-Formate

Jochen

wie zum Beispiel, oder

Jochen

Serialisierungsformate,

Jochen

Parquet-Dateien zum Beispiel,

Jochen

das ist halt das, was heute eigentlich immer so verwendet wird,

Jochen

das ist halt dann

Jochen

spaltenbasiert

Jochen

und dann liest man eben nur die Dateien

Jochen

oder die Spalten,

Jochen

es ist halt in einer Datei nur eine Spalte

Jochen

sozusagen, man liest halt nur die Dateien,

Jochen

die man halt braucht

Jochen

und das ist komprimierbar,

Jochen

Es ist chunkbar, sodass ich es auf mehrere Rechner verteilen

Jochen

kann und so und hat halt all diese hübschen

Jochen

Eigenschaften.

Jochen

Und

Jochen

ich habe jetzt diese Paket-Files, aber

Jochen

das Format der Daten

Jochen

auf der Platte, das Serialisierungsformat, ist nicht mehr

Jochen

gebunden an die Datenbank, sondern

Jochen

als Layer darüber, mit dem ich jetzt

Jochen

Abfragen mache, habe ich jetzt sowas wie Hive,

Jochen

das macht dann MapReduce-Jobs draus irgendwie.

Jochen

Ich habe

Jochen

aber auch sowas wie Impala, ich habe

Jochen

vielleicht andere Geschichten, ich habe Spark.

Dominik

Spark hast du eben noch vergessen, übrigens.

Jochen

Ja, Spark, genau, gut, Spark

Jochen

hat auch irgendwie, ist was mit anderen

Jochen

gestartet, die

Jochen

hat auch

Jochen

ein eigenes DataFrame-Format, was

Jochen

jetzt nicht Parquet war, aber

Jochen

also worauf es hinausläuft, ist

Jochen

im Grunde, dass ich jetzt

Jochen

so ein Format habe wie Parquet,

Jochen

in dem die Daten auf der

Jochen

Platte liegen und jetzt

Jochen

habe ich halt unterschiedliche Engines, die

Jochen

jetzt irgendwie, mit denen ich jetzt Queries verarbeite,

Jochen

drauf. Ja, also quasi eine

Jochen

Trennung zwischen

Jochen

dem System, das jetzt meine

Jochen

Queries irgendwie beantwortet und dem

Jochen

Speicherformat, also quasi sowas ähnliches wie

Jochen

ein Plugable Storage Engine, so nur, dass

Jochen

halt der Storage-Format ist halt für alle unterschiedlichen

Jochen

Engines irgendwie gleich, nämlich Paket,

Jochen

aber das, was halt die Dinge

Jochen

darauf machen, ist halt unterschiedlich.

Jochen

Das ist eine ganz interessante Entwicklung, finde ich. Also das

Jochen

ist halt, das ist schon faszinierend

Jochen

und

Jochen

ja,

Jochen

die

Jochen

ja, Column Stores

Jochen

sind halt sozusagen, das sind für so Data-Warehousing

Jochen

eigentlich das Coole. Es gibt

Jochen

C-Store,

Jochen

Paper ist halt auch eine

Jochen

Firma entstanden, Vertica, glaube ich.

Jochen

Die machen halt,

Jochen

wenn man irgendwie ein großes Data-Warehouse haben möchte,

Jochen

dann ist es wahrscheinlich irgendwie so das Beste, wenn man irgendwie

Jochen

zu so einer Firma geht und das macht.

Jochen

Keine Ahnung. Oder gibt es auch wahrscheinlich

Jochen

auch noch andere, die sowas ähnliches machen.

Jochen

Aber was halt nicht gut wäre, ist halt, wenn man

Jochen

mit so einem Problem zu Oracle

Jochen

geht. Weil Oracle ist halt nicht

Jochen

Column-Oriented, sondern die sind halt

Jochen

zeilenbasiert, egal was sie dazu sagen. Sie versuchen das

Jochen

in ihrem Marketing immer zu verschleiern, aber es ist halt

Jochen

genau wie MSSQL zwar war

Jochen

und die ganzen klassischen relationalen

Jochen

Datenbanken, die sind alle zeilenbasiert und da

Jochen

gibt es auch nichts, was man tun könnte.

Jochen

Ja, es sei denn, man tauscht

Jochen

die Storage-Engine aus.

Jochen

Bei Postgres wird das nochmal interessant.

Jochen

So Postgres, da hat man das Problem halt,

Jochen

wenn man ein Data Warehouse auf Postgres aufbaut,

Jochen

dann ist man immer dann an die Zeilenweise

Jochen

Verarbeitung

Jochen

gebunden, kann halt auch nichts machen.

Dominik

Wenn man das demnächst dann mit Parquet machen könnte, dann...

Jochen

Ja, wenn man irgendwie Parquet und Postgres

Jochen

irgendwie verheiraten könnte, das wäre natürlich schon

Jochen

ziemlich cool dann irgendwie.

Jochen

Ja,

Jochen

genau. Und das sind halt so die

Jochen

ja,

Jochen

das sind halt so diese Geschichten beim

Jochen

Data Warehousing.

Jochen

Genauso Hadoop, man nennt das auch so, nicht Data Warehouse,

Jochen

sondern weil man auch alles mögliche andere drin speichern kann.

Jochen

Data Lake, weiß ich gar nicht, ob man da so ins Detail gehen muss,

Jochen

aber man hat auch noch Bilder und sonst wie andere

Jochen

man kann halt alle möglichen Arten von unterschiedlichen

Dominik

Ein Datensee, wie bei der FNES, ganz, ganz tief.

Dominik

Ja, das kann auch so ein bisschen umkippen,

Dominik

wenn man das dann, Data Swamp.

Dominik

Ja,

Dominik

und

Dominik

ja,

Jochen

also, ich bin

Jochen

nicht, ehrlich gesagt, nicht so ein Riesenfan von

Jochen

Hadoop, muss ich sagen. So, aber

Jochen

auch, ich hab da

Jochen

auch schon ein bisschen so schmerzhafte

Jochen

Erfahrungen mit gemacht.

Jochen

Weil so Daten

Jochen

rein und raus kriegen, ist irgendwann so ein bisschen hässlich

Jochen

und das ist auch immer noch alles

Jochen

nicht so weit, also bei so klassischen Datenbanken

Jochen

ist halt, da merkt man, also wenn man Postgres-Rat

Jochen

verwendet zum Beispiel, merkt man halt so, da ist halt schon

Jochen

Jahrzehnte

Jochen

Erfahrung drin

Jochen

und viele der Use-Cases, die man so hat,

Jochen

also wenn man da auf blöde

Jochen

Probleme stößt, dann ist man wahrscheinlich selber schuld.

Jochen

Also das ist halt

Jochen

sehr selten, würde ich jetzt mal so

Jochen

90 Prozent der

Jochen

Probleme sitzen vor der Tastatur.

Jochen

Dass man auf etwas stößt und man hat wirklich ein Problem mit der Datenbank,

Jochen

sondern man hat ein Problem mit, man hat die Dokumentation

Jochen

nicht genau genug gelesen oder man weiß

Jochen

man hat irgendwie ein Verständnisproblem oder so

Jochen

und das sind ja alles Sachen, die sich leicht fixen lassen.

Jochen

Also es wäre halt

Jochen

wenn man tatsächlich ein Problem mit der Datenbank

Jochen

hat, wäre es natürlich schlecht,

Jochen

weil da kann man nichts machen, außer Datenbank wechseln

Jochen

oder irgendwie

Jochen

selber neu schreiben oder sowas, nicht gut wäre.

Jochen

Und

Jochen

bei Hadoop habe ich so das Gefühl,

Jochen

es kann natürlich auch was sein, dass ich einfach zu blöd

Jochen

war, es nicht zu bedienen, aber ich habe so das Gefühl,

Jochen

viele Dinge, die man da macht, sind nicht dadurch

Jochen

begrenzt, dass man irgendwie nicht genug weiß oder nicht genug

Jochen

nicht richtig verwendet, so das falsch rum hält

Jochen

irgendwie, sondern

Jochen

bestimmte Sachen gehen einfach noch nicht

Jochen

oder gehen nicht richtig. Man hat Use Cases

Jochen

und dann stellt man so fest, so ja,

Jochen

hat niemand drüber nachgedacht, ist nicht so richtig

Jochen

abgebildet, blöd.

Jochen

Und

Jochen

das wird wahrscheinlich alles irgendwie viel besser, aber momentan

Jochen

ist es noch nicht so, ist noch ein bisschen

Jochen

scharf, fühlt sich alles ein wenig scharfkantig an.

Dominik

Man kann sich überall schneiden und wehtun und aua.

Jochen

Ja, und außerdem, dass es halt alles auf dieser Java-Geschichte

Jochen

aufsetzt, ist auch sowas, muss ich auch sagen.

Jochen

Ah, jetzt sind wir wieder bei dem

Dominik

Ding, was wir eigentlich als Running-Gag nehmen wollten, da haben wir es doch

Jochen

dazu verlassen. Ja, Java, Java, mal wieder.

Jochen

Das ist...

Dominik

Nach zweieinhalb Stunden sind wir doch wieder drauf gekommen, ja.

Jochen

Ja, aber da ist dann

Jochen

möglicherweise der Ausweg, irgendwie sowas wie PySpark

Jochen

zu verwenden. Spark, auch nochmal, eigentlich müssen wir

Jochen

dann mal ein eigenes Thema zu machen,

Jochen

aber sehr schön, das Ding ist so, dass man halt

Jochen

quasi

Jochen

Sachen automatisch verteilen kann,

Jochen

man hat sie lokal, man kann

Jochen

damit anfangen, dass man es auf einer Maschine hat und dann

Jochen

führt man Sachen auf einen Cluster

Jochen

aus und das ist wirklich mehr oder weniger

Jochen

seamless.

Jochen

Das Einzige,

Jochen

man hat sogar einen vollständigen

Jochen

Python-Interpreter, das ist irgendwie nicht so

Jochen

eine verkrüppelte Version. Man kann halt tatsächlich

Jochen

irgendwie Sighten-Sachen

Jochen

damit machen. Das heißt, man kriegt Sachen auch wirklich, wirklich

Jochen

schnell.

Jochen

Im Gegensatz zu

Jochen

Java. Java geht vielleicht auch, ich weiß es nicht genau,

Jochen

aber ich glaube, es ist ziemlich schwer, Sachen wirklich

Jochen

optimiert hinzukriegen.

Jochen

Während in Python ist es halt relativ

Jochen

leicht, irgendwie mit

Jochen

Seiten halt ein Dialekt von Python

Jochen

zuschreiben, wo man dann Typ-Annotationen dazu schreibt,

Jochen

wo die dann halt zu C

Jochen

kompiliert werden, dann wird das als C-Modul, dann wird es wieder

Jochen

reimportiert und das kann man halt auch

Jochen

auf den Cluster irgendwie ausrollen

Jochen

irgendwie über PySpark

Jochen

und dass man jetzt irgendwie C-Code irgendwie

Jochen

in Java reinbastelt und das

Jochen

dann halt über Hadoop, über die MapReduce-Service verteilt,

Jochen

weiß ich nicht. Kann auch sein, dass das geht, keine Ahnung, aber das

Jochen

klingt irgendwie nicht so leicht.

Jochen

Ja, wie auch immer. Also

Jochen

Spark ist auf jeden Fall auch noch eine super

Jochen

interessante Geschichte, vor allen Dingen, wenn es jetzt darum geht,

Jochen

Wenn man jetzt sowas hat wie so ein Data Lake und so,

Jochen

wie kommen da die Informationen rein?

Jochen

Man möchte eigentlich nicht da so ETL-Jobs machen.

Jochen

Das funktioniert alles nicht mehr.

Jochen

Man möchte ja auch Echtzeit-Dashboards haben irgendwie.

Jochen

Und dann wechselt man halt irgendwann auf so eine Streaming-Architektur,

Jochen

wo halt Dinge auf der Webseite,

Jochen

also auch gerade wenn man jetzt sowas hat wie,

Jochen

also auch Amazon wird, selbst wenn man die Bestellungen nimmt oder so,

Jochen

das ist alles noch nicht Big Data,

Jochen

aber wenn jetzt zum Beispiel Amazon, und das tun sie bestimmt,

Jochen

irgendwie jeden Klick den User

Jochen

macht auf der Webseite, auch

Jochen

irgendwo eine

Jochen

Fakten-Tabelle

Jochen

in ihr Data Warehouse, Data Lake

Jochen

Ding reinspeichern möchte,

Jochen

dann wird das big.

Jochen

Weil das ist halt schon viel.

Jochen

Dann ist so ein Verhältnis von Bestellungen zu

Jochen

Leute machen irgendwie Web-Requests oder klicken

Jochen

auf der Seite rum, ist halt wahrscheinlich nochmal so

Jochen

ein Faktor 100 oder mehr.

Jochen

Und

Jochen

dann wird es tatsächlich sehr, sehr groß.

Jochen

Und man möchte das aber trotzdem

Jochen

alles in Echtzeit haben. Das heißt,

Jochen

man macht es nicht so, dass man

Jochen

diese Geschichten wieder in die

Jochen

OTP-Datenbank reinschreibt

Jochen

und dann extrahiert und batchmäßig

Jochen

jeden Tag ein Analyse-System

Jochen

schreibt, sondern dann generiert

Jochen

man halt so Events,

Jochen

die dann halt über irgendeinen

Jochen

Streaming

Jochen

Zeugs halt

Jochen

Service laufen,

Jochen

der das dann halt

Jochen

an unterschiedliche Consumer

Jochen

irgendwie ausliefert. Und das sind meistens

Jochen

Kafka, AWS hat noch eine eigene

Jochen

Lösung, normalerweise auch wieder den Namen vergessen.

Jochen

Meinst du aber nicht die Lambda-Service?

Jochen

Nee, nee, das ist was anderes.

Jochen

Nee, das ist eine eigene, ja.

Jochen

Aber, sagen wir mal, Kafka als Beispiel

Jochen

ist auch ein Apache-Projekt, das das halt

Jochen

sehr schön macht. Und dann serialisiert man

Jochen

halt irgendwie die Daten, die man im Event hat,

Jochen

also irgendwie als Protokoll-Buffers

Jochen

oder sowas.

Jochen

Und dann gehen die Dinger halt

Jochen

auch da wiederum Serialisierungsformate

Jochen

sehr, also es gibt halt sehr unterschiedliche

Jochen

Protokoll-Buffers und super, wenn man Daten übertragen möchte

Jochen

oder auch dieses Rift von Facebook

Jochen

super scheiße, wenn man

Jochen

das halt auf die Platte schreibt. Also es wäre halt

Jochen

dann auch wieder zeilenbasiert, kann man hinterher nicht mehr gut analysieren.

Jochen

Also man kann halt nicht einfach

Jochen

irgendwie die Events, die man generiert

Jochen

als Protokoll-Buffers irgendwie

Jochen

in Kafka kippen und dann

Jochen

das irgendwo auf eine Platte schreiben lassen.

Jochen

Das reicht halt nicht,

Jochen

sondern man muss es halt dann doch auch irgendwie

Jochen

wieder irgendwie so Zwischendinge

Jochen

kippen, aber man kann halt auch, man kann halt

Jochen

etwas haben, was halt teilweise aus

Jochen

diesen Parquet-Files liest.

Jochen

Und dann halt die aktuellsten Daten liest es halt aus einem Log der Protokoll-Buffer-Events.

Jochen

Das muss ja dann vielleicht nur für die letzte halbe Stunde sein oder so, kommt halt mal drauf an.

Jochen

Ja, und dann kann man halt tatsächlich Echtzeit-Daten sehen.

Jochen

Dann könnte man halt ein Dashboard machen, wo man halt in Echtzeit sieht, wie sich die Zugriffsmuster ändern,

Jochen

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 in Echtzeit, wie die Conversion runtergeht.

Jochen

Ah, der Preis war gut.

Jochen

Und dann kann man halt so als

Jochen

Manager vor diesem Dashboard sitzen

Jochen

und den Knöpfen drehen.

Jochen

Die Firma vor die Wand fahren.

Jochen

Und dann irgendwie Profit

Jochen

maximieren.

Jochen

Das ist schon

Jochen

sehr nett. Ist aber auch halt sehr aufwendig.

Jochen

Das macht alles

Jochen

nochmal viel komplizierter.

Jochen

Ja, und

Jochen

diese Serialisierungsformat-Geschichte

Jochen

ist halt sehr wichtig.

Jochen

etwas, was mir bei dem

Jochen

Hadoop-Erfahrung

Jochen

dann geholfen hat, war

Jochen

ein Projekt

Jochen

namens Apache Arrow,

Jochen

wo es

Jochen

darum geht, das ist von dem

Jochen

ursprünglichen Autor

Jochen

von Pandas, also dieser

Jochen

DataFrame-Library

Jochen

für Python,

Jochen

der hat das gestartet,

Jochen

weil der da halt ein,

Jochen

und das ist auch tatsächlich,

Jochen

also ich, während ich mich halt mit

Jochen

Hadoop-Geschäfte, aber mich hat es an den

Jochen

gleichen Stellen gejuckt sozusagen, also ich

Jochen

das war so zuerst gemacht, also ihn hat es wohl

Jochen

auch irgendwie genervt, der hat bei

Jochen

Cloudera gearbeitet irgendwie, das ist halt auch so eine von diesen

Jochen

Firmen,

Jochen

die halt so in diesem Big Data, Hadoop-Bereich

Jochen

viel unterwegs sind, auch da irgendwie glaube ich

Jochen

einer von den Chefs oder Gründern ist halt

Jochen

einer von den, ist auch ein PhD-Student

Jochen

von Michael Stonebaker, so sind

Jochen

alles irgendwie immer die gleichen Leute und

Jochen

der, genau,

Jochen

da geht es darum, ging es darum,

Jochen

sozusagen ein Interface zu haben,

Jochen

das genauso ist wie

Jochen

Pandas, also Dataframe

Jochen

API quasi zu haben, sodass man halt

Jochen

Dinge, man hat so das Gefühl, man hat ein

Jochen

Dataframe-Objekt, macht da irgendwelche Sachen drauf,

Jochen

so als wäre es ein Pandas-Dataframe,

Jochen

aber in Wirklichkeit passieren im Hintergrund

Jochen

Sachen auf deinem Cluster.

Jochen

Das war in der Bibliothek, nannte sich Ibis,

Jochen

und das ist halt genauso auch mein Problem damit,

Jochen

dass halt, ich mache ja eigentlich eher

Jochen

so Machine-Learning-Dinge

Jochen

und benutze

Jochen

Pandas eigentlich so zum

Jochen

Daten aufräumen, Daten transformieren,

Jochen

bevor ich das dann halt in irgendwie

Jochen

Machine Learning-Aggregate und so

Jochen

und Modelle reinfüttere,

Jochen

die dann aber, die dann selber wieder nur Arrays,

Jochen

NumPy-Arrays normalerweise nehmen

Jochen

und keine DataFrames, aber DataFrames

Jochen

ist halt so ein Zwischenschritt und man kann halt sehr leicht

Jochen

aus einem DataFrame irgendwie ein Array

Jochen

machen, indem man einfach sagt, DataFrame.Values,

Jochen

dann hat man das Array

Jochen

und ich

Jochen

hatte halt immer das Problem, wenn ich jetzt

Jochen

damit so Systemen wie Hive oder Impala draufgegangen

Jochen

bin, dann kriege ich halt irgendwie so

Jochen

eher so ein CSV oder

Jochen

so ein Result-Set und dann kriege ich das nicht schnell da raus.

Jochen

Das ist halt alles

Jochen

ultra langsam und

Jochen

ich brauche aber für meine Modelle doch durchaus große Daten

Jochen

oft. Das geht alles nicht

Jochen

und dann

Jochen

wäre es natürlich viel besser gewesen, wenn ich

Jochen

einfach nur, wenn jetzt, also

Jochen

das, was diese Systeme machen, ist, man schreibt SQL-Statements

Jochen

und die machen dann halt irgendwie automatisch

Jochen

machen die halt irgendwelche Aktionen

Jochen

auf dem Cluster. Wenn es jetzt

Jochen

so gewesen wäre, dass ich das einfach nur in DataFrame-Syntax,

Jochen

was ich mit den Daten machen wollte, hätte hinschreiben

Jochen

können, dann wäre mir ja schon viel geholfen

Jochen

gewesen. Und genau das hat

Jochen

halt Ibis, diese Bibliothek, die dann

Jochen

Westmorekenny bei Cloudera gebaut hat,

Jochen

gemacht. Man hatte ein Ding, das war

Jochen

wie ein Pandas-Data-Frame,

Jochen

wo man da halt irgendwie Group-By gesagt hat und

Jochen

dann hat das halt nicht

Jochen

das im Hauptspeicher gemacht, wie Pandas,

Jochen

sondern das hat dann halt SQL-Statements erzeugt,

Jochen

automatisch, die man aber nicht gesehen hat,

Jochen

und die dann

Jochen

auf den Cluster irgendwie

Jochen

losgelassen. Und dann

Jochen

magisch

Jochen

mit den Ergebnissen irgendwas gemacht.

Jochen

Ja, aber

Jochen

das hat auch nicht gereicht, weil auch da wieder das Problem war,

Jochen

wie kriegt man die Daten wieder, wenn man jetzt,

Jochen

man kann eben sowas nicht sagen, wie

Jochen

wenn man es jetzt richtig transformiert hat, also da war das schon

Jochen

eine Hilfe, aber jetzt hätte man gerne die Werte,

Jochen

um sie tatsächlich in den Machine Learning

Jochen

Algorithmus reinzupumpen, damit er

Jochen

möchte irgendwie ein Modell drauf trainieren.

Jochen

Man kann eben jetzt bei diesem Data Frame eben nicht sagen

Jochen

df.values. Das geht

Jochen

halt nicht, weil die Daten sind halt im Cluster.

Jochen

weil sie da irgendwie rauskriegen und man kriegt sie nicht raus.

Jochen

Es geht nicht. Also der Weg von

Jochen

ja,

Jochen

ja, und das war halt dann auch

Jochen

irgendwie ein Problem, wo dann das IBIS

Jochen

Projekt so ein bisschen dann vorbei war

Jochen

und Westman Kinney hat dann auch

Jochen

ist dann von Cloudera irgendwie weg und hat

Jochen

dann Apache Arrow gestartet und Apache Arrow

Jochen

macht halt genau

Jochen

da weiter und das hat mir dann auch wieder

Jochen

weitergeholfen, weil

Jochen

okay, es geht nicht

Jochen

anders, man muss tatsächlich auf die rohen

Jochen

Parquet-Files im Cluster irgendwie

Jochen

zugreifen.

Jochen

Und wenn man jetzt irgendwie da drauf was

Jochen

machen möchte, man braucht irgendwie ein

Jochen

Array-mäßiges Interface auf

Jochen

diese Files. Wenn man das hat, dann

Jochen

ist man eigentlich im Grunde, dann funktioniert alles.

Jochen

Und das macht Arrow.

Jochen

Arrow ist halt sozusagen ein

Jochen

In-Memory-Datenstruktur,

Jochen

Array-Datenstruktur, die halt

Jochen

von unterschiedlichen, das ist auch das Ziel dabei,

Jochen

ist auch eine Kollaboration mit irgendwie einem der

Jochen

wichtigeren Leute, die hinter

Jochen

R oder RStudio

Jochen

zusammen.

Jochen

Die haben das

Jochen

beide zusammen gemacht, dieses Projekt.

Jochen

Genau.

Jochen

Die Idee ist sozusagen, du hast halt

Jochen

eine Abstraktionsschicht,

Jochen

die halt irgendwie so ein Array-Store

Jochen

im Hauptspeicher hält.

Jochen

Das macht Apache Vero. Das Ding ist in C++

Jochen

geschrieben, aber du kannst halt von Python aus zugreifen

Jochen

oder von AdRof zugreifen,

Jochen

von Java aus.

Jochen

Und du musst es halt nur einmal im Hauptspeicher halten

Jochen

und du hast es dann halt in dem Format,

Jochen

in dem du es brauchst, um es halt in Machine Learning-Modelle

Jochen

reinzupumpen.

Jochen

Ja, was du halt, diese ganze

Jochen

Loop-Welt, du kannst dein Machine Learning

Jochen

Algorithmus ja nicht als MapReduce, das geht halt nicht

Jochen

schreiben, weil wenn du ein neuronales

Jochen

Netz hast, das hat Verbindungen überall hin,

Jochen

dann kannst du es halt nicht klar auf horizontal

Jochen

auftreiben in Mapper und Reducer, das funktioniert

Jochen

einfach nicht, das ist halt Quatsch.

Jochen

Viele Machine Learning

Jochen

Algorithmen lassen sich nicht einfach so verteilen.

Jochen

Oder, ja, sie brauchen halt

Jochen

irgendwie ihre Daten in einem bestimmten Format

Jochen

und das ist halt so ein Array-Format, weil das ist alles

Jochen

linearer Algebra. Und linearer Algebra

Jochen

funktioniert mit Vektoren, Matrizen

Jochen

oder halt, man nennt die

Jochen

Dinger allgemein Arrays halt.

Jochen

Also beliebig dimensionale Arrays.

Jochen

Ja, und

Jochen

das geht halt so einfach eigentlich

Jochen

irgendwie nicht. Und

Jochen

ja, mit Apache

Jochen

Arrow halt schon. Und außerdem macht

Jochen

Apache Arrow dann halt so ein paar Sachen wieder.

Jochen

Jetzt sieht es wieder gerade, die halt bei NumPy so ein bisschen kaputt sind.

Jochen

Unter anderem

Jochen

Was halt total blöd ist, aber das habe ich auch schon mal erwähnt, dass es halt keinen Null für Integer gibt und so. Also mit Missing Values ist halt schwer bei NumPy Arrays. 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 immer so Data Science und Machine Learning irgendwie so angedockt.

Jochen

Also das ist halt, Business Intelligence ist etwas, was halt große Firmen halt schon lange haben, aber die machen halt sowas wie, ja, also einmal die Leute, die dann Dinge da machen, sind halt so Analysten, oft super schlaue Leute, aber ich überlege gerade, wie man ein Beispiel nehmen kann.

Jochen

sagen wir mal so, was die halt tun können.

Jochen

Nehmen wir an, du bist Walmart und

Jochen

du interessierst dich jetzt dafür,

Jochen

keine Ahnung, weißt jetzt,

Jochen

es kommt eine Flut, die irgendwie

Jochen

deine Stadt überschwemmen wird und

Jochen

dann, was werden

Jochen

die Leute dann kaufen?

Jochen

Okay.

Jochen

Für was musst du irgendwie vorsorgen?

Jochen

Und bei einem klassischen BI-Ansatz

Jochen

wäre halt, du guckst dir halt die Icons an,

Jochen

wo Städte überflutet worden sind, da gibt es nicht so viele.

Jochen

Substrahierst

Jochen

da halt irgendwie so, kriegst dir das halt eine Woche

Jochen

vorher, später an

Jochen

und überlegst dir dann halt irgendwas und das machst du

Jochen

dann. Und dann machst du irgendwie

Jochen

gewisse Voraussagen und sagst so, das könnte ungefähr so und so

Jochen

aussehen. Das ist halt das, was passiert

Jochen

und das ist halt auch das, was heute noch in BI-Abteilungen

Jochen

hauptsächlich passiert, dass die Leute halt irgendwie so

Jochen

historische Daten angucken und dann so überlegen, so

Jochen

und

Jochen

ich denke,

Jochen

das wird alles so in Zukunft

Jochen

eher Richtung Data Science laufen.

Jochen

Damit meine ich, dass

Jochen

solche Antworten kommen halt dann

Jochen

eher von Systemen, die

Jochen

Vorhersagen machen.

Jochen

Und die werden das deutlich

Jochen

besser können.

Jochen

Und die werden das halt auch,

Jochen

also ein Großteil dieser Analysegeschichte

Jochen

wird man halt automatisieren können.

Jochen

Und das Problem momentan ist halt

Jochen

so ein bisschen, dass die

Jochen

Tools, die man hat, nicht zueinander passen.

Jochen

Zu dem, die

Jochen

so Hadoop-Welt

Jochen

passt eigentlich eher so zu dem klassischen

Jochen

BI-Ansatz.

Jochen

Äh, 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, also das sind auch oft Leute, nicht, nicht unbedingt Leute, die halt dann Produkte bauen können, die halt entwickeln können oder Services bauen können, auch mit diesem ganzen, wie baut man Dinge, wie, wie, wie macht man Produktentwicklung, ja, nicht so, das ist nicht so was, 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 bei fühlen.

Jochen

Das aber halt absolut erforderlich ist, weil viele von den Sachen sollen ja dann automatisch auch Dinge tatsächlich tun. Ja, 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 einen Management-Layer gibt oder so, 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

Jochen

entwickeln eigentlich, dann bist du halt so Teil

Jochen

der Produktentwicklung

Jochen

und ja, das geht halt auch nicht so

Jochen

richtig gut und was da ein bisschen fehlt

Jochen

ist halt so ein

Jochen

ist halt

Jochen

etwas, was halt Daten

Jochen

in Array-Form im Hauptspeicher hält

Jochen

und das macht Apache Arrow

Jochen

und deswegen finde ich das Projekt so super interessant

Jochen

es gibt dann noch SideDB

Jochen

oder sowas

Jochen

glaube ich, die auch sowas ähnliches machen, aber da geht's

Jochen

irgendwie hin. Und

Jochen

ja, es geht Richtung Streaming.

Jochen

Spark macht ja auch ganz viel mit Streaming.

Jochen

Wobei mich natürlich besonders interessiert

Jochen

PySpark, weil Python und so.

Jochen

Ja.

Jochen

Haben wir da noch irgendwann?

Jochen

Ich wollte gerade sagen, wir haben jetzt ganz, ganz

Dominik

lange schon, also fast drei Stunden

Dominik

schon über die ganzen Daten gesagt. Man merkt ja,

Dominik

Jochen ist ja sehr tief drin.

Dominik

Das ist auch ein super breites Thema.

Dominik

Haben wir tatsächlich die meisten Sachen

Dominik

schon jetzt durch? Oder hast du noch was, was du unbedingt

Dominik

da zu dem Thema beteiligst? Genau, genau, genau.

Dominik

Ja, ach so, ah, und genau,

Jochen

wenn man jetzt nochmal zurückkommt zu dem E-Commerce-Ding,

Jochen

das war jetzt so eine Exkurs Richtung Big Data.

Dominik

Ja, also wenn wir ganz groß sind,

Dominik

immer so ein Maß oder so.

Jochen

Ja, also das hatten wir auch vorher schon mal

Jochen

kurz angeklärt, also

Jochen

relationeller Datenbanken oder so, diese Art,

Jochen

Daten umzugehen, ist halt besonders gut dann,

Jochen

wenn es Daten über Sachen sind, die nicht

Jochen

Daten sind. Also physikalische

Jochen

Sachen, die sich nicht so schnell ändern,

Jochen

bei denen es Sinn macht, ein festes

Jochen

Schema zu definieren, dass dann halt auch über längere Zeit

Jochen

mehr oder weniger gleich bleiben kann. Man kann natürlich Sachen ändern,

Jochen

aber Dinge grundsätzlich ändern

Jochen

ist dann schwierig.

Jochen

Aber

Jochen

das ist jetzt tatsächlich die Zukunft.

Jochen

Es ist auch nicht so richtig sinnvoll, diese Amazon-Geschichte

Jochen

also heute Amazon zu bauen,

Jochen

ist viel, viel einfacher natürlich. Also ich meine,

Jochen

das hört sich so an, als wäre es total einfach, Amazon

Jochen

zu werden. Das ist es

Jochen

nicht.

Jochen

Es war auch zu der Zeit, als Amazon

Jochen

geworden ist, war es viel schwieriger, weil da gab

Jochen

es halt keine Tools. So was wie Postgres

Jochen

gab es, aber es war

Jochen

nicht in dem

Jochen

Zustand wie heute.

Jochen

Es wäre nicht nutzbar gewesen.

Jochen

Also es gab damals,

Jochen

ich weiß nicht wann die angefangen haben, Anfang der 90er

Jochen

oder, also Amazon hat sehr, sehr früh angefangen,

Jochen

Mitte der 90er, ich weiß nicht genau.

Jochen

Da gab es halt nichts.

Jochen

Die mussten alles selber bauen. Das ist natürlich

Jochen

nochmal ein ganz anderes Problem.

Jochen

Während heute man wahrscheinlich mit Postgres,

Jochen

Django, Redis

Jochen

und ein paar Rechnern wahrscheinlich einen Markt

Jochen

wie Deutschland mit so einer ähnlichen

Jochen

Seite wie Amazon versorgen könnte.

Jochen

Das

Jochen

ging halt damals nicht und

Jochen

das macht es heute einem natürlich

Jochen

vielleicht, aber heute ist halt das Problem, es gibt Amazon schon,

Jochen

man muss mit Amazon konkurrieren und

Jochen

leider hat man da keine Chance.

Jochen

Deswegen funktioniert das auch nicht.

Jochen

Aber was natürlich interessant möglicherweise

Jochen

ist, ist sich zu überlegen,

Jochen

okay, was kann Amazon denn mit dem, was sie

Jochen

tun, nicht machen und wo entwickelt sich das

Jochen

halt in Zukunft hin.

Jochen

Ich habe das auch schon wieder 10 Jahre her,

Jochen

unglaublich, oder noch mehr als 10 Jahre sogar.

Jochen

Mein Vortrag gehört

Jochen

von David Weinberger,

Jochen

der ist ein Philosoph,

Jochen

hat sich auch viel mit Internetgeschichten

Jochen

beschäftigt in Harvard.

Jochen

Kann man mal gucken, ich packe ja auch noch

Jochen

in die Shownotes.

Jochen

Der Vortrag heißt

Jochen

Everything's Miscellaneous.

Jochen

Da gibt es auch ein Buch zu.

Jochen

Der Talk bei Google ist halt

Jochen

eine Vorstellung von dem Buchinhalt,

Jochen

Oder weniger, wo er darüber spricht, dass wir jetzt so in der Zeit von Internet und Computern sich ja Dinge komplett verschieben im Grunde.

Jochen

Und wir das aber noch gar nicht so richtig antizipiert haben.

Jochen

Sein Beispiel ist halt auch E-Commerce und halt auch so Faceted Navigation.

Jochen

Und er sagt halt, naja, also in so einem klassischen Laden, wenn du da reingehst, muss man sich überlegen.

Jochen

wo man welche Dinge hinpackt, ja, also

Jochen

da

Jochen

physikalische Objekte nur an einem Ort gleichzeitig sein

Jochen

können oder

Jochen

überhaupt irgendwo sein müssen, muss man halt

Jochen

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

Jochen

Sinn, wenn sie reinkommen, ist immer der

Jochen

Salat irgendwie vorne rechts oder keine Ahnung

Jochen

und das muss man eigentlich,

Jochen

wenn man jetzt Daten über Daten

Jochen

hat, gar nicht mehr so

Jochen

machen, man könnte das irgendwie so slicing und

Jochen

dicing, wie man wollte, also man könnte halt sagen,

Jochen

okay, ich bin jemand, der nur schwarze T-Shirts anzieht,

Jochen

also alles andere interessiert mich nicht.

Jochen

Ich brauche jetzt eine Navigation innerhalb dieser schwarzen T-Shirts,

Jochen

aber alle anderen Sachen kann ich schon mal so irgendwie wegschneiden.

Jochen

Das würde für alle anderen vielleicht keinen Sinn machen

Jochen

oder für andere Leute, jeder hat vielleicht andere Arten.

Jochen

Aber ich kann jetzt eine Seite bauen,

Jochen

die auf die Bedürfnisse von jedem im Grunde zugeschnitten ist

Jochen

oder sich leicht so an...

Dominik

Die eigene Filter-Bubble immer erzeugt für den jeweiligen...

Jochen

Genau, weil elektronisch habe ich das Problem nicht.

Jochen

ich kann für jeden

Jochen

eine eigene Art von Laden

Jochen

erzeugen

Jochen

oder eine eigene Art von Navigation

Jochen

bauen. Nur wenn ich denjenigen

Jochen

kenne natürlich. Natürlich.

Jochen

Oder wenn er es mir halt irgendwie sagt, indem ich

Jochen

ein Interface habe, wo man das halt irgendwie einstellen könnte.

Jochen

Aber

Jochen

das wird kaum gemacht. Es gibt halt meistens

Jochen

doch wieder einen Kategorienbaum, der

Jochen

halt irgendwie

Jochen

Kategorienbaum auf einer Seite ist ja im Grunde

Jochen

sowas wie ein

Jochen

Weg durch den Laden, der halt vorgegeben ist.

Jochen

Warum muss das denn so sein? Das muss

Jochen

ja eigentlich, also wir adaptieren da

Jochen

eine Sichtweise aus der

Jochen

physischen Welt, die

Jochen

vielleicht insofern hilfreich ist, weil

Jochen

die Leute kennen das so. Ja genau, die kennen das so, ja.

Jochen

Insofern macht das auch durchaus Sinn, das so zu tun,

Jochen

aber es müsste eigentlich nicht so sein und vielleicht

Jochen

wäre es, wenn man das anders machen würde, halt viel effizienter

Jochen

und

Jochen

genau. Das ist Raum für ein Startup da

Jochen

übrigens gerade. Ja, das Problem ist halt nur,

Jochen

also ich fand das ja schon vor über 10 Jahren

Jochen

interessant, aber

Jochen

in der Richtung hat sich noch nicht so wirklich

Jochen

wahnsinnig viel getan. Insofern bin ich mir nicht

Jochen

sicher, ob das eine gute Idee ist. Also damals war es auch, wenn wir

Jochen

zurückblicken, kann man jetzt sagen, damals ein Startup in die

Jochen

Richtung zu starten, wäre keine gute Idee gewesen.

Jochen

Vielleicht wäre es jetzt eine gute Idee.

Jochen

Vielleicht ist es aber erst in fünf Jahren eine gute Idee.

Jochen

Keine Ahnung, wann der Zeitpunkt

Jochen

richtig ist. Keine Ahnung.

Dominik

Man braucht ein Gespür für. Und wenn man das Gespür hat

Dominik

und dann an der richtigen Stelle ist, dann ja.

Dominik

Braucht man nur noch ein bisschen Geld

Dominik

und Geduld.

Jochen

Aber genau der

Jochen

Punkt, auf den ich eigentlich hinaus will, ist,

Jochen

was ist eigentlich, Amazon hat das gleiche

Jochen

Interface für alle Arten von Dingen, die sie verkaufen.

Jochen

Sie haben am Anfang mit Büchern angefangen,

Jochen

weil bei Büchern das Problem,

Jochen

weil sie da einen ganz klaren

Jochen

Vorteil gegenüber den anderen

Dominik

Verkäufern... Du möchtest ein Framing bauen

Dominik

für den jeweiligen Kunden.

Jochen

Ich möchte halt zum Beispiel einfach nur so

Jochen

in die Richtung gehen,

Jochen

warum

Jochen

muss die Navigation immer gleich aussehen?

Dominik

Das eigene Holodeck. Also manchmal geht man

Dominik

im Mittelalterladen einkaufen, mal im Cyberstore.

Dominik

Genau, je nachdem, was man

Jochen

verkaufen möchte. Amazon

Jochen

macht jetzt nicht nur Bücher, sondern mittlerweile

Jochen

machen sie, Bücher ist jetzt wahrscheinlich

Jochen

gar kein großer Anteil mehr an ihrem Geschäft.

Jochen

Sie verkaufen viel Elektronik und das sieht

Jochen

man der Seite halt auch an. Also vieles von

Jochen

der Navigation ist darauf optimiert, dass ich halt

Jochen

irgendwie so Elektronik, weiße Ware

Dominik

irgendwie kaufen kann. So ein bisschen wie Ambilight beim

Dominik

Fernseher.

Dominik

Ja, aber halt inhaltlich.

Jochen

Das liegt halt vor allen Dingen, dass die Navigation so aussieht, wie sie

Jochen

aussieht, liegt halt am Datenbankschema.

Jochen

Weil das lässt halt gar

Jochen

nicht zu, dass ich irgendwie was großartig anderes baue, weil

Jochen

das ist halt mehr oder weniger fix.

Jochen

Jetzt ist es natürlich schon so, dass

Jochen

unterschiedliche Dinge, also Fahrräder haben halt

Jochen

bestimmte, das kann ich schon irgendwie, da kann ich

Jochen

ein Schema bauen, das das irgendwie modelliert, oder Bücher

Jochen

oder Waschmaschinen.

Jochen

Aber die Daten über die

Jochen

Daten, die kann ich natürlich irgendwie

Jochen

beliebig modellieren.

Jochen

Da könnte ich auch beliebige Navigationen draufbauen.

Jochen

Und ich könnte auch, also wenn ich jetzt,

Jochen

also der Witz ist, was ich

Jochen

eigentlich eventuell gerne hätte,

Jochen

Und wenn jetzt ein Produktmanager, der für die Kategorie Fahrräder oder sowas zuständig ist, auf eine super Idee kommt, wie man das Navigieren macht und die Leute zufriedener zu den Fahrrädern, die sie haben wollen, führen kann, dann müsste er ja die Navigation umstellen können.

Jochen

dafür müsste er das Schema ändern können.

Jochen

Das heißt, er müsste das Schema live

Jochen

irgendwie ändern können. Was in relationalen Daten,

Jochen

das kannst du vergessen. Also du kannst,

Jochen

ich meine, du musst eine Migration machen, du musst halt

Jochen

irgendwie,

Jochen

das kannst du alles, das kannst du komplett, also

Jochen

sagen wir mal so, es geht technisch, aber das ist auf jeden Fall

Jochen

Entwicklerarbeit. Das ist halt nicht etwas, was irgendjemand,

Jochen

der auf einer Webseite irgendwas einstellt,

Jochen

irgendwie, das geht halt

Jochen

eher nicht.

Jochen

Aber, wenn man jetzt

Jochen

sich von diesem relationalen

Jochen

Paradigmen so ein bisschen löst und sagt,

Jochen

okay, ja, dann ginge das eventuell

Jochen

schon. Also im Grunde, wenn man

Jochen

jetzt nicht Daten über physikalische

Jochen

Objekte hat, sondern Daten über Daten und

Jochen

eine Datenbank, die halt

Jochen

nicht mehr so

Jochen

Fixschema, nicht so ein Fixschema

Jochen

hat, dann könnte man eventuell das so machen, dass man

Jochen

die Seite

Jochen

live so ändert, wie sie

Jochen

halt eventuell mehr Sinn macht. Und vielleicht

Jochen

könnten das auch die User tun, keine Ahnung. Es ist halt nur so,

Jochen

es ist halt so eine Idee. Es ist halt einfach so eine Idee,

Jochen

wie geht es jetzt eigentlich weiter?

Jochen

Ich meine, Amazon ist im Grunde mehr oder weniger fertig,

Jochen

Wir haben Amazon nachgebaut und wir hatten auch das Problem, dass unsere Navigation, egal ob das jetzt Fahrräder, Waschmaschinen oder sonst irgendwas ist, würde halt genau gleich aussehen oder Mode.

Jochen

Und da könnten wir im Grunde nichts machen, weil das Schema halt für Angebote halt immer gleich sein muss, weil die sind ja alle in einem Datenbankschirm.

Jochen

Genau, aber das könnte halt irgendwie wie etwas anders aussehen.

Jochen

Und was halt da sehr interessant sein könnte,

Jochen

sind halt Grafendatenbanken zum Beispiel.

Jochen

Wo man halt eben nicht,

Jochen

ich hatte das ja auch am Anfang schon mal erwähnt,

Jochen

es hätten sich auch Grafendatenbanken durchsetzen können.

Jochen

Das ist überhaupt nicht so klar, warum das relational geworden sind.

Jochen

Gut, die Grafendatenbanken waren ein bisschen später dran,

Jochen

aber ja, und da gibt es zum Beispiel auch ein super interessantes Projekt,

Jochen

nennt sich D-Graph.

Jochen

D-Graph.

Jochen

Ja.

Jochen

das ist ein Ex-Mitarbeiter von Google

Jochen

und

Jochen

der

Jochen

ja, der hat sich

Jochen

der hat sich irgendwie getroffen

Jochen

Google-Beschäftige und dann halt auch

Jochen

überlegt, was sind denn jetzt die Sachen, die man

Jochen

heutzutage, die Probleme, die man hat, also es muss halt irgendwie so

Jochen

es muss halt, Brides müssen

Jochen

halt auch

Jochen

man darf nicht nur einen Master haben, es muss halt irgendwie skalierbar

Jochen

sein, es muss halt

Jochen

irgendwie schnell sein und

Jochen

der hat, das hat letztes Mal

Jochen

als wir über Skalierbarkeit und so, ich glaube, das war in der

Jochen

ersten Folge oder so, geredet haben, habe ich auch gesagt,

Jochen

Go wäre eventuell ein guter Kandidat, um

Jochen

da drin eine Datenbank zu schreiben. Also Python

Jochen

halt nicht so. Das ist halt eines der

Jochen

wenigen Anwendungsfälle,

Jochen

wo ich sagen würde, gut, dafür ist Python nicht so gut geeignet,

Jochen

weil, also Python ist gut geeignet, wenn

Jochen

man IOMultiplexen muss, also man

Jochen

macht einfach nur viel Netzwerk in alle möglichen Richtungen.

Jochen

Das geht, da braucht man gar nicht unter Umständen

Jochen

viel CPU für, also solange man nicht viel

Jochen

CPU dafür braucht. Oder

Jochen

es ist gut dafür geeignet, wenn man viel CPU braucht,

Jochen

aber nicht so viel

Jochen

Concurrency hat, wenn man beides hat,

Jochen

man hat viel Concurrency und viel CPU,

Jochen

die das braucht, dann ist es halt eher scheiße,

Jochen

weil dann erwischt einen halt

Jochen

dieser Global Interpreter-Log und

Jochen

da stößt man an so

Jochen

prinzipielle Grenzen,

Jochen

was

Jochen

Skalierbarkeit angeht bei Python,

Jochen

aber ich würde sagen, naja, nicht so schlimm,

Jochen

ist eigentlich ganz gut, weil

Jochen

diesen Anwendungsfall haben die wenigsten Programmierer

Jochen

und ein Beispiel war

Jochen

halt, ja, Datenmarken sind eventuell

Jochen

so etwas, was halt genau

Jochen

diese Anforderungen hat und was man dann in Python vielleicht

Jochen

dann doch nicht so gut schreiben könnte.

Jochen

Und ja, tatsächlich,

Jochen

dgraph ist in Go

Jochen

geschrieben und

Jochen

ja, mit Grafen

Jochen

könnte man das halt tun. Da kann man halt

Jochen

das Schema ändern, live,

Jochen

ohne dass man irgendwie

Jochen

da so, weil man kann halt beliebige Beziehungen

Jochen

ziehen, beliebige Kanten.

Jochen

Man muss nicht unbedingt

Jochen

sozusagen alles in dieser

Jochen

Tabellen, man hat ja nicht mehr unbedingt diese Tabellenstruktur.

Jochen

und ja, das ist halt schon

Jochen

ziemlich interessant, auch wenn man

Jochen

es gibt ja nochmal bei den grafischen Datenmarken

Jochen

sowieso Unterschiede, es gibt auch diese ganzen

Jochen

ADF-Geschichten, da ist es aber so, dass

Jochen

die das nicht

Jochen

so optimiert irgendwie auf der Platte

Jochen

speichern, also das ist halt eher so

Jochen

ein Textformat

Jochen

es gibt ja auch Mikroformate auf Webseiten, wo man das benutzen kann

Jochen

wo man irgendwelche

Jochen

halt Metadaten

Jochen

über die Seite irgendwie hinterlegen kann

Jochen

ist bei uns auch eine vielleicht nicht so doofe

Jochen

Geschichte, gerade was Google angeht, Mikroformate.

Jochen

Dann kann halt

Jochen

Google automatisch eine ganze Menge Informationen

Jochen

aus der Seite ziehen, ohne dass sie das

Jochen

halt irgendwie raten müssen.

Jochen

Das geht auch schon alles so ein bisschen

Jochen

in Richtung Semantik-Web.

Jochen

Aber das Problem dabei

Jochen

ist, es ist halt nicht optimiert

Jochen

und für Graphenabfragen auch nicht optimiert.

Jochen

Daher wird es halt alles immer ziemlich langsam

Jochen

sein. Und es gibt halt Graphendatenbanken,

Jochen

die das halt so optimiert speichern.

Jochen

Dazu gehört Dgraph auf jeden Fall,

Jochen

die älteste und weitestverwaltete

Jochen

Datenbank Neo4j

Jochen

macht das auch so,

Jochen

aber Neo4j ist

Jochen

halt auch, das ist halt Java,

Jochen

kann ja schon mal nicht gut sein,

Jochen

aber es ist halt auch viel langsamer, muss man

Jochen

sagen, als die gemacht, und es ist halt auch, es hat

Jochen

eine komische Abfragesprache,

Jochen

Cypher heißt die irgendwie,

Jochen

ja, und

Jochen

naja, und ob das alles

Jochen

so, also ist auch Asset und so,

Jochen

das ist alles nicht so,

Jochen

es geht in die Richtung, aber es ist nicht so toll,

Jochen

irgendwie und bei D-Graph sieht das alles

Jochen

viel besser aus. Und was auch

Jochen

super cool ist bei D-Graph, das ist die Abfragesprache, die nehmen einfach

Jochen

GraphQL oder

Jochen

Dialekt davon und das ist natürlich auch nochmal sehr

Jochen

interessant, weil GraphQL ist natürlich auch momentan

Jochen

ein sehr heißes Thema.

Jochen

Ja, und

Jochen

möglicherweise, wenn man jetzt

Jochen

ein neues Amazon bauen würde,

Dominik

würde man damit anfangen, würde man

Jochen

jetzt das vielleicht nicht auf einer relationalen

Jochen

Datenbank aufsetzen, sondern auf sowas wie D-Graph.

Jochen

Und dann könnte man

Jochen

das so bauen, dass sich die

Jochen

Navigation, je nachdem, was

Jochen

man da einkauft, halt ändern lässt, auch

Jochen

live.

Jochen

Und es ist ja trotzdem schnell.

Jochen

Und ja,

Jochen

und das

Jochen

wäre so ein bisschen, dann könnte die Reise irgendwie

Jochen

gehen. Ich habe keine Ahnung, ob das

Jochen

passieren wird, aber. Ja, let's go.

Jochen

Ja, genau. Und dann

Jochen

auch, was auch interessant ist, ist halt noch,

Jochen

dass man irgendwie durchaus

Jochen

so hybride Formen

Jochen

haben kann zwischen Dokument-basiert

Jochen

oder Schema-less

Jochen

oder nur SQL

Jochen

und nur NoSQL, das heißt entweder

Jochen

steht für Not-Only-SQL

Jochen

oder eben

Jochen

kein SQL.

Jochen

Naja,

Jochen

in Postgres hat man zum Beispiel die Möglichkeit, das

Jochen

ein bisschen zu kombinieren. Da gibt es halt

Jochen

ein sehr schönes

Jochen

sehr schönen Spalten-Typ

Jochen

nennt sich

Jochen

BinaryJSON.

Jochen

Also man muss aufpassen, JSON gibt es auch,

Jochen

ist aber nur so aus Legacy-Gründen noch dabei.

Jochen

Den nicht nehmen,

Jochen

der ist alt

Jochen

und nicht so gut.

Jochen

Aber BinaryJSON ist super,

Jochen

weil

Jochen

da kann man auch Indizes auf

Jochen

Felder innerhalb von dem JSON machen. Das heißt, man kann

Jochen

halt die Teile, bei denen man sich nicht sicher ist, wie das

Jochen

Schema dafür eigentlich aussehen wird oder die man, wo man

Jochen

sozusagen die Definition des Schemas in die Applikation

Jochen

verlagern möchte, also wo dann ein

Jochen

Applikationsentwickler sagen kann, okay,

Jochen

an der Stelle speichere ich die Daten jetzt so und so,

Jochen

ja, ich möchte aber gar nicht die Datenbank verändern,

Jochen

dann kann er das, wenn er das

Jochen

in eine Spalte schreibt, die halt Binary JSON ist,

Jochen

einfach so reinschreiben, er kann sogar Sachen

Jochen

darin indizieren und so, und

Jochen

das ist halt sackschnell,

Jochen

das ist ähnlich schnell wie MongoDB,

Jochen

MongoDB macht ja, MongoDB ist

Jochen

mehr oder weniger nur diese

Jochen

B-JSON-Spalte

Jochen

aus Postgres.

Jochen

Das ist halt mehr oder weniger das Gleiche.

Jochen

Das heißt, ich kann das, was ich mit MongoDB mache,

Jochen

auch in einer solchen Spalte in Postgres machen.

Jochen

Ja gut, MongoDB ist vielleicht noch ein bisschen schneller,

Jochen

hat noch ein paar andere Funktionen,

Jochen

aber ich glaube nicht,

Jochen

dass viele Leute tatsächlich was anderes brauchen würden.

Jochen

Ich kann aber auf der anderen Seite bei den Sachen,

Jochen

bei denen ich weiß,

Jochen

also es gibt ja so etablierte Geschichten,

Jochen

da ist schon klar, wie das funktioniert.

Jochen

Userverwaltung, wenn ich eine Webseite habe,

Jochen

so wenn sich User anmelden,

Jochen

das ist alles relational, das ist auch etabliert,

Jochen

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,

Jochen

wo ich nicht weiß, in welche Richtung das geht,

Jochen

schreibe ich das halt als JSON, irgendwelche Spalten da.

Jochen

Und wenn das dann halt klar geworden ist, wie das Schema da aussieht,

Jochen

dann ziehe ich das dann auch Stück für Stück in ein relationales Schema.

Jochen

Sodass ich halt dann Vorteile aus beiden Welten habe.

Jochen

Und ich würde sagen, das ist halt momentan auch so ein relativ unschlagbares Feature

Jochen

von Postgres gegenüber den meisten anderen Datenbanken,

Jochen

dass man das halt so flexibel miteinander kombinieren

Jochen

kann, weil wenn ich MongoDB habe, habe ich ja das Problem,

Jochen

okay, also relational und

Jochen

konsistent und sicher und so, das geht

Jochen

halt alles nicht so richtig gut. Ich habe halt nur

Jochen

dieses Ding,

Jochen

wo ich halt meine, ich kann zwar auch ein

Jochen

Schema definieren oder so, aber

Jochen

ja, das

Jochen

ist alles nicht so weit wie bei Postgres.

Jochen

Ja,

Jochen

also genau, das wollte ich auch noch erwähnt haben, dass das halt

Jochen

eine schöne Geschichte ist

Jochen

an Postgres.

Jochen

Ja, ich glaube, langsam haben wir es, ne?

Jochen

Und so langsam sind wir dann eigentlich im Grunde...

Dominik

Ich habe ja wirklich viel durchgehalten heute, also über drei Stunden, das war schon die Mammut-Folge hier jetzt, also...

Jochen

Okay, ja, aber ich bin mal auch gespannt, wie das so ankommt, weil das ist ja jetzt immer so ein bisschen...

Jochen

Ist ja jetzt nicht so Einsteiger oder so, sondern 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

Man kann sich ja irgendwann die Folge nochmal anhören, wenn man so ein bisschen weiter ist in dem Thema und dann vielleicht merkt man so,

Dominik

hey, wow, ja, da sind einige interessante Gedanken drin, wie sich das so verändert im Laufe der Zeit.

Jochen

Ja, ach so, PIX, genau.

Jochen

Ja.

Jochen

Hast du, du machst, was machst du mit Datenbanken oder welche Sachen?

Dominik

Ich bin da gerade am Anfang, ich nehme erstmal so ein bisschen SQLite oder sowas, das ist ganz super, das ist ja direkt dabei und da kann man direkt loslegen und seine ersten Datenbanken ein bisschen füttern.

Dominik

Wird für den Einstieg auch gar nicht so schlecht, dann kann man erstmal ein paar SQL-Skates mit sehen und vielleicht mit SQL-Alchemy das machen und dann.

Jochen

Das ist auch interessant, ich glaube SQLite ist eine der Software, die mit am weitesten, die weiteste Deploy-Basis hat irgendwie so.

Jochen

Ich glaube, es konkurriert noch mit Curl oder so.

Jochen

Das wird auch fast überall

Jochen

mit drin. Aber ich glaube, SQLite

Jochen

ist auch ein Kandidat für das. Das ist fast überall drin.

Jochen

Das ist auch

Jochen

CoreData, das ist der

Jochen

Datenabstraktionslayer von iOS.

Jochen

Da ist auch SQLite drunter.

Jochen

Das ist in fast allen Browsern drin.

Jochen

Das heißt, wenn man einen Browser hat, hat man SQLite.

Jochen

Wenn man irgendwie, das ist auf einer

Jochen

Apple Watch, ist eine SQLite-Datenbank

Jochen

und zählt die Schritte. Das ist echt total krass.

Jochen

Also skaliert von

Jochen

einer kleinen Uhr zu

Jochen

ich glaube momentan das theoretische

Jochen

Limit für SQLite sind irgendwie

Jochen

144

Jochen

Terabyte oder sowas.

Jochen

Kriegt man

Jochen

schwer voll. Ja, und es gibt

Jochen

glaube ich große SQLite-Datenbanken

Jochen

tatsächlich da draußen. Also

Jochen

das ist ein super interessantes Projekt und

Jochen

ja, auch ich glaube, es wurde

Jochen

mal vorgeschlagen, für Langzeitarchivierung

Jochen

das SQLite-Format zu nehmen, weil es halt so

Jochen

von

Jochen

irgendeiner Bibliothek

Jochen

ach, weil es halt auch

Jochen

sich seit Jahren nicht mehr

Jochen

geändert hat, das ist relativ schnell und

Jochen

ja, SQLite, super cooles Projekt

Jochen

und

Jochen

im Zusammenhang habe ich, ist auch einer von

Jochen

meinen Pics, was man sich vielleicht mal

Jochen

angucken kann, ist ein Projekt namens

Jochen

Datasette.

Dominik

Datasette, die Kassette, also zum Aufrollen noch.

Jochen

So wie, genau, und

Jochen

und zwar geht es darum, dass halt für so

Jochen

Datenjournalismus, es geht darum, dass man

Jochen

Datensätze, die irgendwo veröffentlicht

Jochen

wurden, wie man die jetzt navigierbar

Jochen

macht für Leute, die jetzt nicht

Jochen

das in eine Datenbank importieren wollen

Jochen

und dann selber Statements schreiben

Jochen

und das macht das halt

Jochen

und man kann halt CSVs nehmen, die da reinwerfen

Jochen

und dann kriegt man halt so auch ein Interface mit

Jochen

Faceted Navigation, mit Volltextsuche, weil

Jochen

SQLite kann halt Volltextsuche

Jochen

und man kann sogar SQL-Statements

Jochen

reinschreiben, man kann aber auch das irgendwie über eine Webseite

Jochen

navigieren, das ist ziemlich cool

Jochen

und

Jochen

ja, das wollte ich auf jeden Fall mal

Jochen

erwähnt haben, das kann man sich mal

Jochen

anschauen, es gibt dann da so Teile

Jochen

von, wo man auch CSVs automatisch

Jochen

in SQLite-Datenbanken umwandeln kann.

Jochen

Auch interessant, dass man da so frei SQL-Statements

Jochen

irgendwie eingeben kann. Das geht ja auch kaum.

Jochen

Das geht halt deswegen, weil man bei SQLite

Jochen

auch sagen kann, oh, das ist jetzt ein Read-Only-Datenbank.

Jochen

Und dann kann man halt mit Statements

Jochen

nichts mehr kaputt machen.

Jochen

Ja, das ist

Jochen

halt ein sehr schönes

Jochen

Projekt.

Jochen

Ja.

Jochen

Genau. Auch wie man

Jochen

auf Datenbanken von Patent aus zugreift.

Jochen

Es gibt so

Jochen

Async

Jochen

PG als

Jochen

asynchroner Datenbank

Jochen

Client für Python.

Jochen

Das wird noch sehr interessant, also das ist momentan

Jochen

noch ein Problem. Also PsychoPG

Jochen

ist halt so der

Jochen

Standard Postgres Datenbank

Jochen

Client für Python und der kann aber nur

Jochen

Textprotokoll und nicht Binary.

Jochen

Ist halt schon relativ schnell, aber

Jochen

es geht halt mit dem Binärprotokoll halt noch

Jochen

schneller und er ist halt nicht asynchron.

Jochen

Also was halt ein Problem ist, wenn man jetzt zum Beispiel

Jochen

bei Postgres, macht man jetzt

Jochen

Volltext-Suche und Navigation

Jochen

auf einer Webseite, dann hat man,

Jochen

wenn man das mit Django macht, Django ist auch synchron,

Jochen

dann

Jochen

macht man halt einmal

Jochen

und hat jetzt Facet Navigation,

Jochen

das heißt, man muss halt an den Facetten,

Jochen

das heißt Tags oder Kategorien oder

Jochen

irgendwelchen anderen

Jochen

Monaten oder was auch immer man halt

Jochen

navigierbar halten will,

Jochen

schreibt man jetzt noch so Counts dran oder man muss halt

Jochen

überhaupt wissen, was hat ein Count von größer 0, damit man

Jochen

diese Facette anzeigt oder nicht anzeigt.

Jochen

Das sind halt zwei unterschiedliche Statements. Man kriegt

Jochen

einmal die Suchergebnisse und dann macht man nochmal ein

Jochen

Statement, um die Counts zu holen und

Jochen

meistens hat man aber nicht nur diese zwei, sondern noch

Jochen

ein paar mehr und das ist halt jedes Mal ein Datenbank

Jochen

Roundtrip, das ist jedes Mal, dauert das

Jochen

irgendwie ein paar Millisekunden, also

Jochen

bei den Suchanfragen, bei den Counts dauert es sogar so

Jochen

30, 40 Millisekunden, sodass man halt

Jochen

bei so einer normalen Navigation

Jochen

auf einer Seite

Jochen

wahrscheinlich schon so 150 Millisekunden

Jochen

nur SQL-Anfragen hat und

Jochen

dann ist man schon bei, wenn dann das Template

Jochen

gerendert wird, ist man leicht bei 400, 500 Millisekunden

Jochen

und das ist halt dann schon relativ lang, das ist

Jochen

schon viel für eine Webseite, eigentlich ein bisschen

Jochen

zu viel und man könnte es leicht

Jochen

deutlich drücken, wenn jetzt diese

Jochen

Statements, die ja nicht voneinander abhängen,

Jochen

sondern die man auch parallel abfeuern könnte,

Jochen

tatsächlich parallel an die Datenbank gestellt

Jochen

würden und dann

Jochen

hat man nur noch, ist die Latenz

Jochen

oder die Zeit, die man

Jochen

braucht, um SQL-Abfragen zu machen

Jochen

in dem Webfrontend, ist halt

Jochen

dauert nur noch so lange wie das längste Statement

Jochen

und alle anderen Sachen sind halt vorher da und das würde halt

Jochen

wahrscheinlich bedeuten, dass dann ist man runter auf 50

Jochen

Millisekunden oder so, dann haben wir 100 Millisekunden gespart.

Jochen

Das wäre ziemlich cool. Aber dafür

Jochen

müsste halt Django asynchron sein, dafür müsste

Jochen

man halt irgendwie

Jochen

AsyncPG verwenden statt

Jochen

PsychoPG und

Jochen

das wird alles noch ein bisschen dauern. Wahrscheinlich Jahre,

Jochen

fürchte ich. Ist auch so, dass

Jochen

der Autor von Django Channels,

Jochen

das ist diese Geschichte mit den

Jochen

WebSockets,

Jochen

dass man halt bidirektionale

Jochen

Kommunikation zwischen Client und Server hat

Jochen

bei Web-Anwendungen.

Jochen

Und der hat jetzt dieses Projekt so ein bisschen aufgegeben oder ist nicht mehr Maintainer davon.

Jochen

Und das, was man jetzt macht, ist jetzt, der versucht Django Async fähig zu machen.

Jochen

Bin mal gespannt, wie das wird.

Jochen

Das war ja auch in der Django-Folge, hatten wir das ja irgendwie kurz,

Jochen

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 damit sind wir im Grunde durch.

Dominik

Sind wir durch mit einer Mammut-Folge.

Dominik

Wenn ihr es bis hierhin geschafft habt, also gut ab.

Dominik

Ich würde jetzt einiges mehr über Daten backen,

Dominik

dass man damit alles anstrengen kann.

Dominik

Ja, schöne Sache.

Dominik

Ja, und dann...

Dominik

Super, dass ihr dabei wart.

Dominik

Genau.

Dominik

Und ja, wo ihr immer hier seid,

Dominik

schönen Tag und so weiter.

Dominik

Wenn ihr Fragen habt,

Dominik

hallo.at.peisenpodcast.de

Dominik

Ja, super.

Dominik

Ja, dann bis zur nächsten Folge.

Dominik

Ja, bis dahin.

Dominik

Tschüss.

Dominik

Ciao.