Ja, hallo liebe Hörer und Hörer, herzlich willkommen beim Paisen-Podcast, Episode 43.
Heute reden wir ein bisschen über Mimaria und Max und vielleicht ein bisschen über Postgres SQL.
Und wir haben natürlich wieder den Jochen da. Hallo Jochen.
Hallo Dominik.
Ich bin der Dominik.
Und die Susanne ist heute dabei.
Hallo Dominik, hallo Jochen.
Hallo Susanne.
Ja, haben wir News?
Wir starten immer mit News.
Wir starten immer mit ein bisschen News und ja, es war nicht so wahnsinnig viel.
Ich weiß nicht, ich kann ja einfach mal so erzählen, was ich irgendwie für bemerkenswert halte irgendwie.
Was in der letzten Zeit so passiert ist.
Ja, ich mache hier schon mal die Kapitelmarken, dann spare ich mir ein bisschen Zeit.
Das hilft wahrscheinlich auch nicht.
Genau, ja, also was ist alles so irgendwie passiert?
Zum Beispiel, es gibt jetzt irgendwie PyTorch für Apple, für M1.
optimiert. Also es ist halt noch nicht so schnell,
also es ist auch noch nicht wirklich vergleichbar
mit Nvidia.
Aber
tatsächlich geht da so ein bisschen was in die Richtung.
Also vorher konnte man schon ein bisschen was machen mit PlateML,
aber jetzt gibt's
halt auch tatsächlich direkt Unterstützung von PyTorch
aus. Und
das sah eigentlich schon mal ganz interessant aus und da geht bestimmt
noch mehr in Zukunft.
Es ist auf jeden Fall jetzt gut zu sehen, dass das mal so ein bisschen in die Gänge kommt.
Das war jetzt ganz lange Zeit,
also es ist jetzt auch, ich glaube 2020 oder so sind die
rausgekommen, das ist ja jetzt schon zweieinhalb Jahre
her. Ja.
Genau.
Das ist aber jetzt eher so eine
Minor-News. Ja,
außer man hat
fast ausschließlich Apple-Hardware, so wie ich dann.
Dann ist das natürlich super wichtig, ja.
Ja.
Ansonsten, ich meine, wenn ihr mal
dieses ganze Machine-Learning-Thema
und so interessant findet,
ich letztens, kann ich
den Robot-Brains-Podcast empfehlen von
Peter Abiel und da war
letzte Woche war da irgendwie Jeffrey Hinton
zu Gast oder es gibt jetzt zwei Episoden.
Das war, ja, war sehr interessant.
Also irgendwie quasi
derjenige, der so die ganzen, oder
einer von denen, die diesen Deep Learning
Hype irgendwie so mit losgetreten haben.
Oder was heißt Hype? Ist ein bisschen, eigentlich ist er ja
schon durchaus was hinter.
Und, ja,
der erzählte so ganz interessante Dinge.
Also, ja, kann man sich
ja mal vielleicht irgendwie anhören.
Ja, es gab, das ist jetzt schon ein bisschen länger her, ich habe jetzt eigenartigerweise erst davon erfahren oder vielleicht haben wir das ja auch schon erzählt, das weiß ich nicht so genau. Es gab ein Paper in Nature, NumPy ist jetzt tatsächlich als quasi Artikel irgendwie in einem renommierten Magazin erschienen.
Damals, Travis Oliphant hat da ja
seine Doktorarbeit für abgebrochen und ihm haben alle
gesagt, bist du verrückt? Irgendwie
sowas komisches zu machen, Nampai, das interessiert
doch niemanden. Und
ja, jetzt hat das doch nochmal auch akademische
Weinen irgendwie
gezeitigt. Das war gar nicht so
schlecht. Spät, aber ja.
Tja.
Genau.
Sonst habe ich auch eigentlich nicht so wirklich was.
Wir wollten nochmal, vielleicht Blührepeisen haben wir ja schon ein paar Mal
eingeladen. Blührepeisen. Bist du jetzt eigentlich da oder
weißt du noch nicht? Also ich schon. Ich habe keine
Ich habe keine Unterkunft gefunden, jedenfalls nicht so, dass wir da alle hinfahren könnten.
Daher, wenn, dann bin ich alleine da.
Kurzfristig, okay.
Ja, kurzfristig könnte sein, dass das klappt.
Aber man muss halt nochmal gucken, weil Urlaubsplanungen anderweitig sind.
Ansonsten müssen wir alleine ein Bier trinken gehen.
Also meine Unterkunft ist nicht weit von der Brewdog-Bade entfernt.
Ich habe übrigens nachgeguckt, da gibt es keine Zimmer mehr in dem Hotel.
Oh, ausgeworfen?
Ja.
Okay, wow.
Hat erst im Mai eröffnet.
Tja. Okay. Also, ja.
Tja, so ist das.
Na gut, dann sind wir heute mit den News dann relativ schnell durch,
würde ich sagen, oder? Ja.
Haben wir schnell gemacht.
So schnell waren wir nur nie, drei Minuten.
Wir könnten auch noch irgendwie, es gibt jetzt auch eine
Postgres 15 Beta, glaube ich.
Da könnten wir eigentlich schon eine Überleitung machen.
Oh.
Was ist denn in der Postgres 15 Beta drin?
Weißt du das? Das weiß ich nicht.
Susanne, auch nicht? Oh, okay.
Nee, das weiß ich jetzt auch nicht auswendig.
Da müsste ich auch nachgucken, was jetzt wirklich drin ist
in der Beta und was nicht.
Ich könnte da jetzt zählen, wie das immer so funktioniert
bei Postgres mit den Beta und den Releases.
Ja, dann machen wir doch das.
Dann gehen wir da direkt über.
Dann machen wir doch genau das.
Hauptthema.
Hier steht ja, bei Postgres 50 steht
Developer Experience and Performance.
Ja, also es gibt immer, bei Postgres musst du einen Patch einreichen,
wenn du ihn geschrieben hast.
Einschließlich Dokumentation, ganz wichtig.
Und dann gibt es halt ein paar Reviewer, die da drüber gucken.
Das machen dann andere Entwickler und dann kriegst du den Patch entweder, ich sage immer, du kriegst ihn zurück, also da kriegst du dann eine E-Mail, was mit dem Patch ist, ob der so in Kiki ist oder nicht okay ist.
Wenn du da eine Klammer ans Ende gesetzt hast, das sind die neue Zeile, kriegst du den Patch zurück, weil da wird massivst drauf geachtet auf solche Sachen.
Und wenn dann noch irgendwie eine Ausnahme ist, dass auf dem Mars ein Vulkan ausbricht, dann wird der Patch halt auch nicht angenommen, also wenn da irgendwas passieren könnte, was du nicht bedacht hast.
Und da Postgres ja überhaupt keine Kunden dahinter hat, die jetzt irgendwo Druck machen könnten, weil es ist ja eine kostenfreie Software, können wir natürlich auch recht früh sagen, also wenn wir sagen, okay, wir releasen und da ist jetzt noch irgendein neues Feature drin oder irgendein Patch drin, der noch nicht hundertprozentig ist, können wir den noch einfach zurückstellen.
Also wir haben da nicht den Druck, dass da jetzt irgendwelche Kunden sagen, der Patch muss jetzt aber unbedingt in die nächste Version, sondern das passiert auch schon mal, dass die so kurz vor knapp nochmal zurückgestellt werden und dann erst ins nächste Release kommen. Das ist gar nicht so selten, das passiert, ja.
Mittlerweile schaffen wir es immerhin, rechtzeitig zu releasen. Das war auch schon mal eine Zeit lang nicht so. Eigentlich wird immer ein neues Release rausgebracht zur OSCON, glaube ich, also zu irgendeiner amerikanischen Konferenz, in der Regel im Oktober.
Also ich hatte das schon, dass ich im Linux Hotel gesagt habe, es müsste bald, wir haben Oktober, es müsste bald ein neues Release rauskommen und in den zwei Tagen später, noch während der Schulung, kommt das neue Release raus. Aber was genau drin ist, sieht man auch erst immer, also man sieht natürlich, was alles entwickelt wird, aber was da jetzt davon jetzt in das nächste Release kommt und was nicht, das sieht man dann tatsächlich erst am Ende, weil da werden natürlich auch riesige Tests gefahren.
Und es gibt auch absichtlich dann, dass nicht angekündigt wird, was drin ist, eben damit man nochmal sagen kann, wir stellen das eine oder andere nochmal zurück. Deswegen wird das auch nicht so groß publiziert, was da jetzt, also wir publizieren jetzt nicht ein halbes Jahr vorher im nächsten Release kommt das und das, sondern das sieht man erst immer mit der neuen Version, mit den Release Notes, was da passiert ist und was nicht.
Auf alle Fälle, ab Version 13 ist Postgres noch mal wahnsinnig viel schneller geworden.
Also ich kann allen nur empfehlen, zumindest auf 13 abzugraden.
Wer noch auf 9.6 ist.
9.6 müsste auslaufen.
Ich richtig gerechnet habe jetzt gerade.
Ah, okay.
Ja, ich würde sagen, jetzt haben wir die News auf jeden Fall durch.
Ja, ja, ja.
Und können wir anfangen mit unserem Thema.
Ja.
Und das Thema ist ja tatsächlich irgendwie so ein bisschen dann Datenpacken.
Datenbank, ja. Speziell im Allgemeinen
oder auch noch ein bisschen im Detail.
Du hast ja ganz viele Erfahrungen mit Susanne.
Du kennst halt die ganzen Unterschiede
zwischen Mü,
Maria. Soll ich das erzählen?
Ja. Also ich habe,
ich erzähl mal kurz die ganze Geschichte.
Ich hab mal irgendwann Informatik studiert, vor gefühlten
100 Jahren. Und
damals an der Uni hatten wir
Informix. Und
die Rechenzentren waren auch noch nicht so wirklich
klimatisiert. Und SSH gab es
schon. Erstmal fragen, was ist Informix?
Informix ist ein konventionelles Datenbanksystem.
Das gehört zu IBM.
Und
ich hatte
mir dann überlegt, ich war ja
faul, wollte nicht immer ins
Rechenzentrum, wie gesagt, SSH gab es schon.
Und habe dann geguckt, wie ich zu Hause programmieren kann.
Und welches Datenbanksystem
ich dann nehme. Und es gab dann
damals schon MySQL so ein bisschen.
Und es gab ein bisschen PostgreSQL.
Und PostgreSQL
hatte
mehr Ähnlichkeit. Also da gab es schon
irgendwelche Features, die gab es bei MySQL noch nicht.
Ich weiß nicht mehr genau, was es war. Ich habe dann
PostgreSQL genommen und
es war damals wirklich noch ziemlich
identisch. Ich habe später
erfahren, PostgreSQL und Informix
hatten denselben
Urkurs. Das war beides irgendwie
an der Universität Barclay entwickelt. Nein, das heißt,
es gab einen, der das an der Universität
Barclay, dieses Datenbanksystem entwickelt hat.
Ich weiß nicht, ob das auch schon
Michael Stonebreaker war. Ja, das war Michael Stonebreaker.
Ich komme noch nicht drauf. Ingress.
Ingress heißt es. Ich kam jetzt nur gerade so schnell
nicht auf den Namen. Also Michael Stonebreaker
hatte dieses Projekt mit Ingress.
Michael Stonebreaker hat dann die Universität
zweimal verlassen. Ich weiß jetzt nicht, bei welchem
Mal und mit dem
Code zusammen. Und er hatte dann den
Code irgendwie verkauft.
Deswegen hieß es dann, ist dann wieder zurück
zur Uni. Da er das nicht mehr Ingress nennen
konnte, musste es jetzt Postgres heißen.
Also nach Ingress. Post für nach
Ingress. Und
aus dem einen Mal, wo er es verlassen hat,
samt Code ist dann später Informix
entstanden. Also die basieren
wirklich beide auf dem uralten Ingress-Code
und deswegen war das zu der Zeit
noch, so 2099,
2000 war das noch ziemlich identisch.
Das heißt, du konntest auch so den Dampf vom
einen in den anderen einspülen und so weiter, das war
noch relativ, so unterschiedliche
Features hatten sie nicht. Ist heute natürlich
nicht mehr so, nach 20 Jahren Weiterentwicklung.
Und
ja, so bin ich
irgendwie da reingekommen
in diese Postgres-Geschichte.
Dann hatte ich einen Job in PostgresQL
und ich hatte
festgestellt, PostgresQL kann was
nicht. Ich hatte
im Studium gelernt, dass irgendeine Update-Syntax
eine spezielle wäre Standard,
aber Postgres konnte das nicht und
dann hieß es,
ja, entwickle doch.
Und ich hatte dann einen Mentor dazu,
einen der großen Entwickler von PostgresQL,
mit dem habe ich mir ein Büro geteilt.
bestimmt gar nicht, der war im Nachbarbüro, aber wir haben zusammen
in derselben Firma gearbeitet
und dann habe ich angefangen
an PostgreSQL mitzuentwickeln
und das fand PostgreSQL
ganz toll, weil da hatte
eine Susanne einen Patch eingereicht,
ein weiblicher Vorname
und dann haben die also wirklich ganz große E-Mails
geschrieben, ob es noch eine zweite Frau gibt
oder ob ich die erste wäre
und dann haben sie festgestellt, ich war die erste Entwicklerin,
die einen Patch dann committed bekommen hat
und in den PostgreSQL-Code
und das haben die, da haben die irgendwie so
waren die so stolz, so juhu, wir haben endlich
eine Frau, das hat so ein bisschen
Welle geschlagen und dann
habe ich aber irgendwie diesen Job
naja, da ist was passiert
und dann kriegte ich dann, ich
brauchte einen neuen Job und ich kriegte
dann per ICQ
schrieb mich dann jemand an
wie das nochmal, oh oh
ich weiß es nicht mehr
aber es war der CEO
von MySQL
Er schrieb mich bei ICQ an, ich habe gehört, was passiert ist, du suchst doch bestimmt einen neuen Job, du kannst morgen bei uns anfangen. Und ich stand da, ich habe von MySQL überhaupt keine Ahnung, ich, hallo, ja, das lernst du.
Und dann musste ich dann natürlich ein bisschen durch diesen ganzen, wir wissen noch nicht in welcher Abteilung, aber wir nehmen dich an und dann, wie kannst du bei uns anfangen, hab mir das dann natürlich erstmal überlegt und musste dann so ein bisschen durch diesen Bewerbungsprozess durch mit erstes Interview auf Englisch einer Frau aus Maine, die ich überhaupt nicht verstanden habe.
mein späterer Chef sagte, das ist auch schwierig,
diesen Dialekt zu verstehen,
weil sie hatte
mich nach irgendwas gefragt und ich habe ihr was völlig anderes
erklärt, weil ich das Englisch nicht
verstanden habe. Naja, und
Hat sie das gemerkt?
Sie hat mich einfach erklären lassen.
Natürlich. Ich weiß gar nicht mehr, wonach
sie mich gefragt hat.
Ich habe, glaube ich, Point-in-Time-Recovery
erklärt und sie wollte
irgendwas anderes wissen, aber sie hat mich einfach erklären lassen.
Irgendwann hast du irgendwas
Schönes doch gewusst.
Und ja, natürlich, sie wollte, glaube ich, nur so
generell so ein bisschen abprüfen.
Und ja, dann war ich jahrelang
bei MySQL, bis die dann standen wurden.
Da habe ich auch noch mitgemacht und dann wurden sie
Oracle.
Und dann bin ich mit vielen
anderen Kollegen gegangen.
Das musst du nochmal genauer erklären, das war ganz...
Ja, also MySQL
ist
sehr, sehr schnell gewachsen. Wir waren
zum Schluss, als wir noch
MySQL, also MySQL ist in Schweden gegründet,
ein schwedisches Unternehmen, weltweit alle
im Homeoffice. MySQL ist tatsächlich
auch einer der Vorreiter, was Homeoffice
angeht, also echtes Homeoffice mit eigenen
Büros und was man da alles beachten muss, das ist nämlich
gar nicht so einfach.
Und
wir hatten, glaube ich, zum Schluss 400 Mitarbeiter,
200 Techniker, 200 Sales
oder irgendwie so, so Pi mal Daumen und Auge.
Und im Höhepunkt
des Erfolges sind die dann für
zwei Milliarden an Fun Microsystems
verkauft worden. Also da
gab es dann auch natürlich, man hat dann
wohl Geldgeber gesucht. Das war dann so
die Überlegung, machen wir jetzt eine IPO, also gehen wir
an den Aktienmarkt, ganz offiziell.
Machen
eine AG drauf im Grunde, würde man in Deutschland
sagen. IPO heißt das Ganze. Ich weiß
jetzt nicht, was IPO in Langkorn heißt.
International,
keine Ahnung. Ist ein klassischer
Börsending, wenn eine Firma
und dann haben sie aber
beschlossen, sie verkaufen es, die Aktionäre
das war ja schon irgendwie
haben dann beschlossen,
sie verkaufen es an Sun Microsystems für
zwei Milliarden. Zwei Milliarden
finde ich schon eine ganze Menge.
Initial Public Offering.
Initial Public Offering, genau.
Und dann
haben sie es verkauft an Sun Microsystems
und ein Jahr später ist Sun Microsystems
von Oracle gekauft worden.
Und
jetzt könnt ihr euch vorstellen, dass wir mit Oracle
jetzt, das war jetzt der größte Konkurrent
eigentlich so.
In der Zwischenzeit hatte aber
der Montevideo News.
Vielleicht noch ganz vorher, also MariaDB war vorher Open Source?
Nein, nein, nein, MySQL.
Das war alles MySQL noch, MariaDB komme ich jetzt zu, also da irgendwie in diesem Sun Oracle hatte der Monty Vitenius, der Urentwickler, einer der Gründer, der Urgründer von MySQL.
Dessen Tüchter dann auch.
Das sage ich gleich auch noch, genau. Der hatte irgendwie den Code aber geforkt von MySQL, den er forken konnte legal und hat dann MariaDB gegründet. MariaDB, weil er hat drei Kinder, My, also M-Y, aus Englisch My, Schwedisch eigentlich My.
Die jüngste Tochter heißt Maria und er hat auch einen Sohn, der heißt Max. Es gibt auch einen MaxDB, ich weiß nicht, ob es das noch gibt, aber das war eine Datenbank, die unter SAP oder im SAP-Umfeld mit war. Ich glaube aber, die ist mittlerweile ganz, die war schon fast eingestompft, als ich bei MySQL war.
Und also hat er gesagt, okay, das nächste System heißt dann Maria, nach meiner jüngsten Tochter. So ist das dann mit MariaDB gekommen. Und auch die anderen Chefs, was ja immer häufig so ist, wenn eine Firma aufgekauft wird, wer gehen muss, sind die ganzen Geschäftsführer, hätte ich gesagt, oder die ganz, ganz hohen Chefs.
so auch der von den ganzen Services,
also Training, Consulting, Support.
Und der hatte dann damals eine Consulting-Firma gegründet,
SkySQL, weil sie hatten sich überlegt,
sie wollten nicht mehr Entwicklung
und die Dienstleistung in einer Firma haben.
Mittlerweile ist das wieder alles MariaDB,
die haben dann das wieder zusammengelegt,
aber sie wollten ja ein bisschen aus Erfahrung lernen.
Das ist so MariaDB.
Es sind ganz, ganz viele Kollegen
damals von den Entwicklern zu MariaDB gegangen.
Also ich weiß nicht, wer da noch bei Oracle heute ist, ich wüsste jetzt keinen, aber es heißt nicht, dass da keiner mehr ist, aber die.
Also quasi komplett einfach alle gekündigt und zum.
Ja, das war ganz viel bei diesem Sun Microsystems, Oracle kauft Sun Microsystems, ich weiß nicht, ob ihr das gehört habt, Java zum Beispiel, die Java-Leute haben auch fast alle gekündigt, die Open Office-Leute haben fast alle gekündigt und MySQL halt entsprechend auch.
Wo sind die Java-Leute alle hingekommen?
das weiß ich nicht. Keine Ahnung.
Keine Ahnung.
Also wenn ihr es wisst, schreibt mal an
halloatpaisenpodcast.de. Ja, genau.
Und ja, so war das. Und ich
bin dann zurück zu meinen
Urzeln. Ich habe mich dann mit einem
Franzosen, mit einem Engländer,
mit noch einem zweiten Deutschen
und einem aus den USA
und einem
Italiener zusammengetan.
Und wir haben dann PostgreSQL
erst mal. Es war
so ein bisschen gemischt. Die Firma heißt
Second Quadrant ist jetzt
Enterprise DB
und
ich habe hauptsächlich
Consulting gemacht, weltweit
für PostgreSQL, also ich bin
ganz viel um die Gegend gefahren,
geflogen mit dem Amerikaner
zusammen und irgendwann wurde uns das zu viel,
mir zumindest, weil wenn du ganz viel
unterwegs bist, irgendwann machst du das nicht mehr
und dann habe ich gesagt, okay,
ich muss kürzer treten,
habe dann erst noch so ein bisschen promoviert
Und dann am Ende gesagt, eigentlich liebst du das Ganze und machst bis heute im Grunde PostgreSQL und MariaDB als Consultant und Trainer, aber hauptsächlich halt, wo man gut hinkommt. Also keine Langstreckenflüge mehr. Ich brauche das nicht heute Amerika, morgen Japan.
Also so, wo man gut hinkommt. Das ist dann auch zum Beispiel, Amsterdam ist näher als Bayern. Nein, ich fahre natürlich auch nach Bayern, so ist das nicht, aber es ist halt nicht so. Das ist so das, was ich mache. Ich war dann zwischendurch noch, Sun Microsystems hatte noch die Idee, nein, die hatten das Angebot gekriegt von ANSI, von dem American National Standard Institute.
Genau, du wolltest mich erzählen, du hattest mich doch mal diese ganze Reisetätigkeit vorher im Zusammenhang da mit dem SQL-Standard gemacht.
Ja, Ansi, also Ansi ist an Microsystem herangetreten und hat gefragt, ob sie jetzt nicht jemanden, da sie jetzt ja MySQL aufgekauft haben, ob sie nicht jemanden im Standardgremium haben wollen.
Ob wir nicht jemanden ins Standardgremium stellen können.
Und bei Postgres war immer das Problem, das wollte der Standard nicht, weil das ja keine Legal Entity hat, also macht ja kein Geld, ist ja irgendwie Open Source, da war etwas komisch. Und dann hatte Sun auch noch JavaDB und ich weiß nicht was, die hatten noch ein paar mehr Datenbanksysteme.
Und dann gab es irgendwo auf einer Konferenz ein Meeting, ich war nur per Skype zugeschaltet und ich wusste auch gar nicht genau, weil wenn man in so einem Meeting per Skype zugeschaltet ist, du kriegst nicht wirklich mit, wenn die alle durcheinander reden, um was es da geht.
Und ich hatte dann irgendwie so meinen einen Kollegen Sergey, den hatte ich im IAC. Also ich hatte Sergey dann gefragt, um was geht es? Und dann erzählte er mir groß, ja, die suchen jetzt jemanden, der uns da im Standardgremium vertreten kann. Und irgendwie so eine Minute später, hast du Lust? Und ich sagte, ja.
Und dann hörte ich nur, dass Sergej sagte, ich habe da jemanden. Also es muss so gesehen sein, dass Peter dann wohl von PostgreSQL, den hatten wir mittlerweile zusammen geholt, das war auch lustig, mein alter Kollege Peter Eisentraut, mein uralter Mentor, der ist mir mehrfach gefolgt in mehrere Firmen, das ist ganz lustig.
Peter muss wohl auf den Monitor, auf alle Fälle hörte ich nur wie Peters Stimme, oh ja, das ist eine coole Idee, da bin ich mit einverstanden. Und dann war wieder Stille und dann hörte ich meinen Chef sagen, auch ohne, dass mein Name bis dahin gefallen war, ja, genau, das ist perfekt.
Und dann hörte ich, wie alle anderen fragten, wen meint ihr denn jetzt? Und dann kam raus, ja Susanne. Und so bin ich dann erstmal in diesem Ansiedgremium gelandet.
Was sehr lustig ist in Amerika, weil man muss bei ISO sagen, so ein ISO-Standard funktioniert oder so ein Standard funktioniert so, du brauchst immer drei verschiedene Parteien.
Also ich sag mal, du brauchst einen Hersteller, du brauchst irgendwie eine Universität und noch was Drittes oder zwei Hersteller. Wenn du drei Gruppen hast, kannst du erstmal einen nationalen Standard gründen. Also bei DIN, die brauchen auch immer drei und das dürfen nicht drei Universitäten sein. Irgendwer muss da schon mal Gewinn bringen mit was zu tun haben.
Und dann hast du nationalen, wenn du dann irgendwie drei europäische Nationale hast, kannst du einen EN-Standard gründen und wenn du drei internationale hast, kannst du einen ISO-Standard gründen. Irgendwie so. Und im ISO-Gremium hat jedes Land nur eine Stimme. Egal wie groß das ist.
So, jetzt das amerikanische Gremium. In Amerika saßen natürlich sämtliche Datenbankhersteller, das ist eine riesengroße Gruppe gewesen. Da saß auch Microsoft drin, die haben kaum was gesagt. Im Grunde haben sich da immer nur IBM versus Oracle, die beiden da ausgemacht.
Und Oracle hat natürlich auch Leute, die nichts anderes den ganzen Tag machen, als sich neue Ideen für den Standard ausdenken so ungefähr oder versuchen dann die Features, die Oracle sich ausgedacht hat, in den Standard reinzubringen, so muss ich das mal höflich sagen. Und IBM und Oracle saßen auch fast in jedem Land.
Wer hat mein Geld, da kann man mir einfach was auf den Stand nehmen.
Ja, aber wenn du bei ANSI bist,
vertrittst du natürlich in dem ISO-Gremium auch die USA.
Und dann war ich dann auf diesem ersten internationalen ISO-Meeting.
Dann kam Deutschland auf mich zu und sagt,
warum zur Hölle vertrittst du die USA?
Und dann haben die mich zu DIN geholt.
Und dann habe ich halt ganz lange bei DIN mitgemacht.
Und weil die Länder machen immer die Vorschläge in dem ISO-Gremium.
Das kommt auch noch dazu.
Also wenn du eine Idee hast, dann macht das Land einen Vorschlag und im ISO-Gremium wird dann abgestimmt, ob das genommen wird oder nicht. Und das ist extremst politisch auch teilweise. Also das ist nicht so einfach. Da kann es dir passieren, dass es uns mal passiert tatsächlich, dass dann ein asiatisches Land gegen den Vorschlag von Deutschland gestimmt hat.
Und dann fragte der Kanadier oder der Engländer, irgendwer fragte nach, warum? Und dann kam, ja, weil Deutschland in irgendeiner Schrauben-Norm gegen Japan gestinkt hat oder gegen das asiatische Land. Ich weiß nicht mehr, welches genau. Also so, wir standen da, wir kannten diese Schrauben-Norm nicht mal.
Vielleicht nochmal genau erklären, worum es eigentlich geht bei so einem Standard. Da geht es halt darum, welche Features so eine Datenbank haben muss, damit sie sich so nennen darf?
Nee, es geht darum, so ein bisschen Einigkeit zu haben. Also zum Beispiel, dass du egal, welches Datenbanksystem du hast, dass vor dem SQL-Standard hatte jedes Datenbanksystem seine eigene Sprache.
Und da hieß dann auch nicht immer alles Select, wenn du jetzt was raussuchst, das konnte auch ein Feind sein, ich habe keine Ahnung, wie es hieß. Und die hatten halt, es gab ja schon Oracle und die IBM und Postgres, das gibt es ja alles schon seit den 70ern.
Und dann hat sich Oracle und der Stonebreaker und einer von IBM, wenn ich das richtig weiß, die haben sich dann damals mal Ende der 70er zusammengesetzt und haben gesagt, okay, wir entwickeln dann mal eine gemeinsame Sprache, damit wir nicht auf jedem System wieder das komplett umprogrammieren müssen.
Und so ist dann der SQL-Standard entstanden und ich sage mal, so ein Select ist ja zum Glück auf allen Datenbankensystemen funktioniert, so ein Insert funktioniert auch meistens noch, dass das Grund-SQL funktioniert meistens noch auf allen gleich.
Aber in den Dialekten weicht das dann von Standard ab, oder?
Ja, genau. In den Dialekten wird es anders.
Und das kommt daher, weil natürlich,
diese Gremien, da wird dann ein Vorschlag gemacht.
Und du machst keinen Vorschlag,
wenn du das nicht schon implementiert hast.
Also ich kann zum Beispiel sagen,
die Limit-Geschichte ist ganz witzig.
MySQL hat Limit erfunden.
Also Limit heißt, wenn ich was raussuche
und ich mache am Ende Limit 1,
dann kriege ich nur den ersten Wert raus.
Wenn ich mache 1,3, dann kriege ich, wirft er die ersten drei weg und er gibt mir den vierten Wert, bei der Offset dann drei ist. Also super so ein Tax. Postgres fand Limit total cool und hat gesagt, das implementieren wir auch, aber diese Limit 1,3, also x,y, das ist jetzt ein bisschen arg kryptisch und die haben es dann schon implementiert mit Limit x Offset y.
Und dann hieß es, bring das mal in den Standard, dann haben wir dafür einen Vorschlag gemacht. Und das ist auch durchgegangen am Ende. Und allerdings war dann in dem internationalen Gremium, kam dann zu bedenken, ja, das wäre aber immer noch nicht die Syntax, wie SQL eigentlich aussehen würde.
und die offizielle Syntax heißt jetzt, glaube ich,
Fetch X-Rows
X-Next-Rows-Offset
Y.
Ja, also das ist dann sowas.
Ja,
ich glaube, MySQL oder MariaDB hat
mittlerweile die Limit
X, Y gibt es, glaube ich, auch nicht mehr.
Die haben das, glaube ich, auch auf Offset geändert,
weil das zu kryptisch war. Da bin ich mir aber nicht
hundertprozentig sicher. Im Moment müsste ich ausprobieren.
Aber so funktioniert
halt das Standard. Und was halt, wo
man das halt merkt, wo alle
schon was hatten bei sämtlichen
Zeitgeschichten.
Wenn man ein Date bei Oracle eingibt, ist das
immer mit Uhrzeit zum Beispiel.
Da merkt man schon, okay, das hatten sie vorher
schon. Und dann kann man natürlich
als Datenbanksystem sagen, wir implementieren das
nach. Wir machen dann Alias draus
oder ähnliches. Aber zumindest das
Uhr, das Grund ist erstmal
dasselbe. Ich sage ja, so ein Insert Statement, so ein
normales Update Statement, das funktioniert bei
allen ziemlich gleich. Und dann hast du irgendwann
die Dialekte, wie du es so schön gesagt hast.
Aber Standard ist halt
politische Geschichte.
Die treffen sich dann auch zweimal im Jahr.
Immer ein Land lädt ein.
Und je nachdem, welches Land
einlädt, will sich dann auch
hervorheben.
Dann hast du dann so Meetings auf Hawaii.
Nein. Auf Kreta.
Ja, sagst du so.
Welche Insel?
In Deutschland hatten wir mal überlegt, das auf Sylt
zu machen. Kommst du natürlich
super hin. Wir waren dann am Ende doch
in Berlin, weil das DIN-Gebäude in Berlin
bot sich an. Wir waren auch in London.
Weil auch da haben die gesagt, das bietet sich an. Das ist schon ganz schön, das ist natürlich teuer, weil die Reisen musst du ja auch irgendwo bezahlen. Und Standardisierung ist ein spannendes Thema, ist halt, ja, wenn man weiß, wie es funktioniert.
Und Amerika kam immer mit 15 Leuten auf diese internationalen Meetings, weil es konnte ja passieren, dass bei den Diskussionen irgendwas dann entschieden werden musste, wo das Land eine Stimme abgibt und damit die dann überhaupt eine Mehrheit hatten.
Während Deutschland, wir waren damals zu zweit, es war noch die Uni Aachen damals mit in dem Gremium, als ich da drin war. Die haben gesagt, wenn ihr beide euch einig seid, einer von Eureka und ich, dann passt das schon so ungefähr. Und auch die anderen Länder waren kleiner. Aber wie gesagt, IBM und Eureka, die saßen fast in jedem Land, hatten die versucht. Das war schon sehr spannend.
Und Postgres wollten sie immer nicht haben oder nicht annehmen, weil es war ja rein Open Source, da gab es keine Legal Entity und so weiter und so fort. Mittlerweile sitzt der Peter tatsächlich im Standardgremium in Deutschland, glaube ich auch.
Wir haben den Peter sowieso schon mit dazugeholt von PostgresQL. Der hat eine Zeit lang in Finnland gelebt und den haben wir aber immer beratend schon mit dazu gehabt, weil wir Deutschen hatten eigentlich nichts dagegen, wenn Postgres mit drin ist. Weil ich habe offiziell ja MySQL vertreten oder MariaDB. Ne, MySQL tatsächlich, nicht MariaDB, weil es wurde ja von Auric bezahlt.
Und natürlich hat das Gremium aber mich auch eher dann zu PostgreSQL befragt, weil das war hinterher, als das Oracle war dann ganz lustig, weil eigentlich mussten die von Oracle jetzt MySQL mit vertreten und irgendwie kannte ich dann MySQL doch besser als die und waren die immer sehr froh, dass ich dann noch mit drin war, aber irgendwann bin ich dann da ausgestiegen, weil ich dann auch nicht mehr, ja, wie gesagt, das ist eine teure Angelegenheit.
Und mittlerweile ist der Peter Eisentraut da mit drin, dann brauche ich dafür PostgreSQL nicht mal rein und wenn MariaDB da jemanden drin haben möchte, dann, da ich nicht bei MariaDB arbeite, ich weiß nicht, ob einer von MariaDB irgendwo im Gremium sitzt, weiß ich jetzt nicht.
Aber das war eine spannende Geschichte, mal zu sehen, wie so Standardisierung funktioniert. Und ich finde das dann ganz lustig, weil SQL heißt nämlich nur SQL. Das ist auch eine sehr lustige Geschichte, die ist bei Wikipedia ganz spannend.
Die hatten, ich hatte vorhin gesagt, vor dem Standard hatten die alle eigene Sprachen. Und die von IBM hieß SQL. Und das Gremium hat dann beschlossen, sie nennen diese neue Sprache, die sie da entwickeln, SQL. War natürlich ein bisschen angelehnt an das IBM SQL, aber war es nicht.
Was heißt Sequence Query Language?
Gar nichts, das heißt einfach nur SQL.
Das steht immer bei Wikipedia,
Standard Query Language,
Structured Query Language, irgendwie sowas.
Und es wird dann, wir schreiben
dann immer schon, im Englischen ist das lustig,
wir schreiben dann in die Diskussion immer schon rein und
ändern das und schreiben dann rein, passt nicht und so.
Hier, siehe Standard, heißt nur SQL.
Dann steht es drei Tage auch
richtig drin und dann ändert es wieder einer.
Im deutschen Wikipedia
steht es, glaube ich, mittlerweile richtig drin.
Also das ist auch so von wegen
wie funktioniert Wikipedia?
Wenn man dann da steht
und denkt so, ich hab's erfunden.
Das glaube ich auch irgendjemand anderes mal passiert,
irgendeiner berühmten Person, die hat
dann irgendwas geändert
zu sich selbst.
Das hat Wikipedia wieder zurückgeändert,
weil sie meinten, sie kennen ihn besser als er selbst.
Das hat mich geändert.
Kniffliges Problem, genau.
Wer ist da autorisiert?
Deswegen ist Wikipedia auch,
ich erkläre das immer bei Studierenden,
deswegen ist Wikipedia auch keine
zitierwürdige Quelle, wenn die so
wissenschaftliche Arbeiten schreiben müssen,
weil das jeder ändern kann
und weil du dann auch solche Phänomene hast.
Ja, ganz viel dazu.
Spannend mal
die Geschichte vom Datenbanksystem.
Ja, wir können natürlich sowohl
Postgres als auch Maria, also ich mache
überwiegend heute MariaDB
und PostgresQL, selten noch
das Original-MySQL, weil das
Original-MySQL gibt es natürlich bei Oracle immer noch.
Ich habe aber
das Gefühl, irgendwo ist meine
Kundenwolke die, die dann in dem
Bereich MariaDB einsetzt.
Also weniger das echte
MySQL.
Weil MariaDB ist immer noch
die Lizenz des Open Source.
Hat sich da in der Lizenz
mal, weil MySQL hat ja so ein bisschen
früher eine etwas komische Lizenz.
Das war, oder im Vergleich
zu anderen, also jedenfalls im Vergleich zu Postgres,
Postgres ist ja sehr liberal, aber
eine super Lizenz.
Die BSD-Lizenz, das heißt, du kannst es einfach nutzen
und gut, deswegen
ist ja auch Postgres
findest
du ja auch manchmal an ganz lustigen Stellen.
Das findest du dann
in irgendwelchen Autos, in irgendwelchen
Waschmaschinen oder in irgendwelchen Geräten.
Ich weiß jetzt nicht, auf einer Waschmaschine jetzt wirklich.
Aber da ist
dann häufig, häufig ist auf solchen Geräten
dann abgesprengt, es ist net BSD drauf,
wegen der BSD-Lizenz.
Und dann, wenn sie ein Datenbanksystem
wirklich brauchen, dann eine Postgres auch
wegen der Lizenz.
Auf der Apple Watch ist SQLite, wird auch
gerne verwendet. Also wenn die
Schritte gezählt werden, auf der Apple Watch
macht das eine SQLite.
Aber ja, Postgres auf einer
Uhr ist vielleicht auch ein bisschen übertrieben.
Ich darf nicht unbedingt über Referenzen reden, aber
es ist schon spannend, wo Postgres da so
überall drin sitzt.
Deswegen MySQL und MariaDB, die sagen ja immer
oder MySQL hat sich damit immer gebrüstet,
vor allen Dingen Oracle und MySQL,
Die weltverbreitetste Datenbank, ich weiß das gar nicht,
weil Postgres, ich würde das nicht unterschätzen,
was da so auf den Geräten ist, wo du nicht als Mensch dran bist.
Natürlich, MySQL, MariaDB ist unter Webseiten nicht wegzudenken.
Und du hast ja heute auch in den großen Firmen,
du hast ja alles im Einsatz.
Also wenn ich mir mal meinen lieben alten Kollegen Christian Köntorp anhöre,
was der da an Datenbanken, wie viele Systeme der bei seiner Firma,
wo er heute arbeitet, im Einsatz hat,
Das ist ja ganz viel auch von den
NoSQL-Systemen, das wird ja alles gemischt.
Ganz viel auch mit den Adobe,
Adobe, Apache,
HBase und wie sie alle heißen
und Neo4j
und weiß ich nicht.
Das wird ja tatsächlich auch sinnvoll
eingesetzt. Nimm das
Datenbanksystem oder
mach nicht alles
im Relationalen, mach das im Relationalen,
was du im Relationalen abbilden kannst
und wenn du was
Graf, was besser in Grafen
abbilden, wenn es bildet, ist ein Grafen ab.
Sowas wie Kunden, die auch
X, die X gekauft haben, haben auch XY
gekauft. Das ist eher in so einer grafischen
Datenbank aufgehoben, als in
einer relationalen.
Ich würde auf diese beiden Punkte gleich nochmal irgendwie eingehen.
Ja, aber ich, genau,
also da,
ich finde Postgres ist eigentlich
immer ganz schön, oder sagen wir mal so,
weil es halt so ein bisschen ähnlich ist,
wenn ich Webentwicklung
mache, meistens ja sowas Django,
mäßiges oder halt, ich mag diesen
Batteries-Included-Ansatz eigentlich
da sehr gerne und ich finde, Postgres
ist das so ein bisschen für die Datenbankwelt, so was
so Django für die Web, oder Ruby on Rails
für die Webwelt ist, ist halt so, weil also
es ist zwar jetzt vielleicht nicht in allen
Sachen spitze, aber
es kann halt, also fast alles, was man
so braucht, ist da schon mal drin und
man kann das einfach so verwenden
und ja,
für viele Sachen ist es halt auch gut genug.
Vorsicht!
Tatsächlich, wenn ich so objektiv, ich kann ja objektiv sein, weil mir ist das ja ganz egal, was du einsetzt und ich kenne ja jetzt beide, also ob jetzt Maria oder Poskos einsetzt, ich kenne ja beide Systeme sehr, sehr gut und ich gucke mir tatsächlich, wenn mich jemand fragt, ich gucke mir an, was wollen die machen, was ist das für ein Kunde?
natürlich erstmal, da gibt es
ganz viel, da ist das völlig wurscht, ob du Postgres
oder MariaDB nimmst. Es gibt da so
Eckpunkte, wo man dann
sagt, okay, das ist vielleicht eher da
besser und das ist das besser. Aber was
ich mir auch angucke, ist dann teilweise die Menschen,
die es hinterher bedienen müssen, weil
auch das ist etwas, der eine kommt mit
Postgres besser zurecht und der andere kommt
mit MariaDB besser zurecht. Das finde ich jetzt
spannend. Welchen Nasenfaktor gibt es
zu MariaDB? Welchen Postgres?
Postgres ist, es kommt
darauf an, wo du herkommst, also
von welchem Daten, auf welchem
Datenbasis-System hast du gelernt
Wenn du jetzt wirklich aus
der DB2
Informix im IBM-Ecke
kommst, ist
Postgres häufig für dich intuitiver
Wenn du
aus der Oracle-Ecke kommst
möchtest du vielleicht auch
Postgres, aber nicht, weil es intuitiver ist
sondern weil die Migration
einfacher ist. Wobei ich das
heutzutage auch mal dahingestellt lasse,
du kannst auch zu MariaDB migrieren.
Wenn du jetzt wirklich aus der
Webentwicklung kommst,
Alter LempStack, oder?
So PHP, was weiß ich,
ja, Lemp,
ist vielleicht MariaDB für dich
intuitiver.
Also es kommt ein bisschen
drauf an, wie Hardcore hast du SQL
gelernt? Auch.
So sage ich jetzt mal
ganz trocken. Oder auch, an welcher
Uni hast du SQL gelernt? Weil die
SQL-Kurse sind ja häufig
auch schräg.
Also wenn ich mal so...
Habe ich das
gut ausgedrückt?
Ich habe da wirklich schon,
wenn ich so junge Menschen, wenn die so
lernen, SQL oder Datenbank
Vorlesungen, es ist schon
sehr spannend. Dann hat man so ein reines
Oracle-Dialekt.
Teilweise.
Was würdest du denn empfehlen, um überhaupt SQL zu
lernen. Also wenn ich
SQL-Kurse gebe, jetzt für Anfänger,
also für Grundkurse heißt das ja,
ich mache Standard-SQL.
Also
ich erzähle dir auch erstmal nicht, dass
es in Postgres einen Datentyp Text gibt oder
ähnliches, sondern ich mache wirklich erstmal
Standard-SQL und mache wirklich die
Standardsachen, weil die funktionieren wirklich bei allen.
Kennst du da irgendwelche besonderen Tools, die man vielleicht noch
verlinken könnte? Achso, du meinst jetzt
für Leute, die das grafisch machen
wollen? Ja, oder nicht unbedingt
grafisch, aber einfach so als
Kontext drumherum.
Wenn du bei mir SQL lernst,
dann musst du das natürlich selbst runterschreiben.
Ja, das finde ich super. Aber genau das ist ja
vielleicht, also ich habe zwei tolle Sachen entdeckt
im Netz, die mir da sehr geholfen haben. Und zwar eins,
ein Detektivspiel,
wo man irgendwie einen Mordfall aufklären musste.
Geführt mit SQL. Das war ein
SQL-Tutorial. Das will ich sehen. Genau, das
finde ich cool, weil ich finde Gamification ganz
gut. Wenn du bei mir die Schulung buchst, dann kriegst du dann
einen Bindfaden und darfst dann an einer
Pinnwand mit Bindfaden und Moderationskarten
rumspielen, damit
das ein bisschen lustiger wird
in der Gruppe oder so, aber
ich erkläre auch Normalisierung.
Das ist ja auch so ein Thema, was
immer noch ist. Das müssen wir auch gleich
nochmal machen, das finde ich nämlich auch interessant, das machen wir aber auch
gleich, glaube ich, nochmal extra, Normalisierung.
Das ist halt nur,
wenn du so teilweise die ganz
jungen Menschen, wenn die so SQL in der
Uni oder wo auch immer eine Ausbildung bei
der IHK oder so,
teilweise, wenn du da reinguckst,
Also ich werde ja dann häufiger auch mal nach Hilfe gefragt
von jungen Menschen, so ganz unabhängig.
Und was ich da teilweise sehe, wo ich dann denke,
okay, wir schlucken mal.
Das ist jetzt aber ganz stark Eureka-Lastik
oder ganz stark MySQL-Lastik hast du auch.
Häufig, was ich traurig finde
in der heutigen Datenbankausbildung ist,
also ich weiß jetzt nicht, wie es jetzt in der Pandemie
kann sich das ja geändert haben.
Ich glaube das aber nicht.
Also die letzten Datenbank-Vorlesungen, die ich gegeben habe,
ich habe dann tatsächlich mich da mal reingekniet
und mir auch die anderen angeguckt,
weil die sind seit 2007 auf dem Markt.
Und ich kann nicht mehr nur relationale Datenbanken machen,
wenn ich es lerne, sondern ich sollte vielleicht auch mal sagen,
was ist eine grafenbasierte Datenbank oder eine dokumentenbasierte,
dass man das zumindest mal vorstellt und mit reinmacht.
Du musst jetzt kein GQL und SQL.
Ich glaube, das ist für so ein Informatikstudium,
wenn du es hinterher nicht brauchst.
Datenbank ist ein Pflichtfach. Das ist ja
sowas. Nur, dass du es zumindest schon mal
gehört hast, das finde ich halt sehr
wichtig, dass man nicht nur immer auf die
Relationalen eingeht.
In der Ausbildung.
Ich mache natürlich hauptsächlich Relationale,
weil das ist mein Thema. Zum Anfang, ich habe es
rausgefunden, und zwar ist das SQL Murder Mystery.
Ah ja. Das ist das erste.
Da geht es halt darum, den Mordfall, also Murder
in SQL City,
die muss man aufklären und dafür lernt man halt die ersten
Queries zu machen, wer war denn in welcher Straße,
wann, wie, wo. Das ist sehr interessant.
Das muss man halt auch schreiben dann, die Queries selber.
Ich habe eine Zeit lang auch mal
irgendwie sowas gemacht. Stell dir vor, du bist in deiner Küche
und dann duftest du deine eigene Küche.
Wo sind die Teller und so weiter.
Das habe ich auch schon mal gemacht.
Aber das finde ich cool, ja.
Und ich habe noch ein zweites Story mal gemacht.
Das ist auch sehr schön. Select Star, SQL heißt das.
Da geht es darum,
das ist ein bisschen ein traurigeres Thema, aber die
Gefängnisinsassen in Texas, die zum Tode verurteilt waren,
auszuwerten, was denn deren letzten Worte waren
und warum und so.
Ja, aber da gab es dann auch ein...
Ich habe gerade bei den Psychologen,
die Psychologen-Statistik,
sollten dann irgendwelche BWL-Statistiken machen,
Umsatzstatistiken und so weiter,
wo die Psychologen dann da standen,
was ist das eigentlich alles?
Also, weil das so BWL-lastig war.
Und dann habe ich auch,
ich hatte denen halt im Tutorium geholfen
und dann habe ich dann einfach die eine Aufgabe gegeben.
Ich glaube, es war eine Umsatzstatistik.
Da habe ich die Sterbestatistik draus gemacht.
Es war dann auch zwar makaber,
Aber es war für die leichter Nachfolge zu vollziehen
als irgendwas BWL-lastiges.
So, was passiert jetzt?
Wie viele Menschen sterben da jetzt von?
Deswegen, also da muss man immer gucken,
was man für ein Publikum hat.
Und das ist in der Ausbildung halt sehr, sehr schwierig,
weil am besten findest du natürlich Beispiele,
die auch alle kennen.
Deswegen nehme ich immer gerne,
ich habe es aufgegeben, das Kochbuch zu nehmen,
weil so ein Kochbuch, so eine Kochbuch-Datenbank
ist recht komplex.
Vor allen Dingen heutzutage,
also früher habe ich immer gesagt,
es googelt, es sucht niemand in einer
Datenbank nach, gebe mir alle Rezepte
mit einem Teelöffel.
Oder wo die Menge fünf ist.
Brauchst du aber heute doch.
Doch einzeln normalisierst du tatsächlich auch aus heutzutage,
weil Rezepte, dann hast du natürlich heute auch den Anspruch dran,
ich will das mal für zwei Personen kochen,
mal für vier Personen, dann wird mit den Mengen gerechnet.
Dann brauchst du die Mengen wieder einzeln.
Aber nach wie vor sucht natürlich keiner nach,
gib mir alle, wo Teelöffel drin vorkommt oder so,
oder Messbecher oder Tasse oder was man immer eine Prise,
gib mir alle Rezepte, wo eine Prise drin vorkommt, das Einheit.
Ein Quäntchen Glück.
Ja, aber Kochbuch ist schon eine recht aufwendige Datenbank, das kannst du dann so als Prüfung mal verkaufen, aber dann willst du meistens auch noch irgendwas, du hast hier noch ein View oder ähnliches, dann ist ein Kochbuch wieder auch zu viel.
Ich glaube, wenn du so eine volle Datenbank hast, mit der interessant ist, dann ist zum Lernen vielleicht besser, also wenn das nicht nur so trockene BWL-Daten sind, weil man dann vielleicht selber Neugier bekommt, auch mal in andere Datensätze reinzuschauen und dadurch, dass man das dann selber eintippen muss, dann halt lernt, wie die Syntax ist, um die Sachen so zu filtern, wie man das mag.
Du nimmst halt irgendwas Kleines als Beispiel und machst dann aber mittlerweile auch schon sowas wie Datensicherheit mit rein oder Datenschutz. Du musst ja, heute hast du ja auch sowas wie Transparenz und du musst ja, wer hat was, wann, wie geändert und so weiter auch noch mit festhalten.
Ja, aber gut, wenn ich SQL schreibe, ist das eigentlich nicht mit drin, das muss ja mit einem Meta.
Nö, das kannst du ja mit, wann du die Zeile geendet hast,
du on update, da machst du noch eine Spalte mehr dran
und dann hältst du das dann fest last update.
Genau, aber das muss ja ein Modell mit drin stehen haben.
Ja, ja, eben, deswegen, das sind dann aber so Sachen,
da gehst du dann vielleicht noch mal drauf ein,
wenn du so, also dass du ein bisschen mehr auf Datenschutz eingehst.
Du machst immer dieses Beispiel, was sind Transaktionen,
stell dir vor, du willst dem jetzt 100 Euro überweisen
und das muss natürlich auf beiden Konten sein oder auf gar keinem.
Ich kann nicht sagen, bei dir sind 100 abgezogen
und bei dir sind sie nicht angekommen,
wenn das in der Zwischenzeit, ne, das erklärst du
immer noch, aber das weiß auch jeder, dass du das in der Praxis
nicht machst. Noch so ein Thema, das müssen wir gleich noch mal kurz
Transaktionen, das müssen wir gleich alles noch mal
aufmachen, da können wir uns die Reihenfolge überlegen,
aber ja, zum
Einstieg, ist dir noch was eingefallen, wie man das am besten
lernen kann oder was du denkst?
Tja, ich hab, ich weiß es nicht genau,
ich hab vielleicht eine pessimistische,
etwas pessimistische
Ansicht dazu, dass man, ich glaub, ich weiß nicht,
ob man das so trocken lernen kann,
also, oder vielleicht bin ich einfach nicht der Typ
dafür. Ich kann das nur lernen,
wenn ich das tatsächlich brauche.
Und es dauert auch lange.
Ich habe
angefangen, mich mit diesem Thema zu beschäftigen.
Ich fühle mich einigermaßen sicher.
Bei relationalen Daten machen wir das eher so Jahre.
Und das waren,
wenn man jetzt eine Vorlesung
hört oder eine Prüfung schreibt,
das ist aus meiner Sicht nicht so richtig gut möglich.
Ihr müsst jetzt aber wieder verstehen, dass wenn Jochen meint,
dass er so einigermaßen sich wohl fühlt, ist er derjenige,
der das richtig aus dem Schlaf dann...
Nein, einfach so, dass man halt ungefähr weiß,
was man da tut, dann das ist...
Dann hatte ich einen guten Prof, also ich
habe das relativ schnell, aber
tatsächlich merke ich, dass
das Spannende an SQL
ist,
das Spannende an
Mengenlehre ist, ich hatte ja in der ersten
Klasse noch Mengenlehre.
Du musst ja sofort erklären, bitte, was
ist Mengenlehre? Mengenlehre
war in der ersten
Klasse, du hast da so
ovale gemalt,
einen links, einen rechts, das war deine
Menge mit den roten
Plättchen und das war deine Menge mit den
blauen Plättchen.
Und dann wolltest du jetzt wissen,
ja, gebe mir alle Plättchen,
die die Dreiecken haben.
Und dann hast du die übereinander
gelegt und dann hast du die Schnittmenge aus dem
roten und dem blauen Plättchen mit der Schnittmenge
die Dreiecken haben. Und die wurde dann lila.
Nein.
Dann hast du da die viereckigen drin und die fünfeckigen
und die Kreise hast du da beides und die
dreieckigen waren halt die Schnittmenge.
Das ist Mengenlehre. Das nennt man auch
so, wie heißt das,
Kombinatorik heißt das dann im Studium
oder
Kombinatorik ist es
mit A und B
und nicht A oder B
und solche Geschichten, genau.
Und ich sage immer, SQL besteht ja fast
nur aus Mengenlehre.
Du hast ja, entweder hast du die Schnittmenge
Join, ein einfacher Join ist ja
ein innerer Join, ist ja nichts anderes als die Schnittmenge.
Und ein Outer Join ist immer
irgendwie eine Menge plus der Schnittmenge
oder halt irgendwie
je nachdem, wenn du das natürlich negierst
oder gib mir nur das eine
oder das andere. Gib mir alle
Werte, die aus
Tabelle A, die nicht in Tabelle B stehen.
Das wäre jetzt auch ein Outer Join mit einem
Nicht drin und so weiter. Also
es basiert immer
irgendwie, kommst du am Ende immer auf
Mengenlehre. Also SQL ist ganz viel
Mengenlehre und
jetzt habe ich den Faden verloren.
Was war deine Frage? Ja, ich wollte
kurz, dass du über die Mengenlehre sprichst, weil du gesagt hast,
dass die Mengenlehre darunter steht.
Ja, aber du hast vorher was gefragt
zu SQL.
Ach so, ja genau.
Ich habe halt im Studium
und auch später, wenn ich mal
junge Menschen ausgebildet habe,
es gab, du hast
entweder dieses
logische Verständnis für
diese Kombinatorik
oder du hast sie nicht.
Also ich hatte immer, wenn ich
Prüfungen abgenommen habe
und bewertet habe, ich hatte nur immer Einsen und Fünfen.
Also nur so ungefähr, es gab
keine Mitte. Und dann kommen
dann so einige Institute auf die Idee,
du musst ja jetzt deine Noten nach der
Normalverteilung verteilen.
Und ich sage, super, du hast nur welche, die haben es verstanden
und nicht, da kannst du ja vielleicht
eine Nuance, vielleicht 1,3 oder 1,7
draus machen oder halt, nee.
Das ist dann immer sehr schön.
Macht man heute zum Glück nicht mehr mit der
Normalverteilung, mit den Noten.
Wüsste ich jedenfalls nicht, aber
ich weiß nicht, ob das
angeboren ist oder wie auch immer.
Vielleicht wäre es interessant, vielleicht Leute, die in der
ersten Klasse sowas wie Mengenlehre hatten.
Das war in meinem Studium, ich habe ja Informatik
erst angefangen zu studieren, da war ich schon 28.
Und
da gab es dann natürlich
auch schon Menschen, weil das wurde nur
in den 70ern in der
Grundschule in der ersten Klasse unterrichtet.
Das war eigentlich keine schlechte Idee,
muss ich sagen. Aber da haben sich
so viele Eltern, also man hat sie in Niedersachsen
und in NRW unterrichtet, ich weiß nicht
wo noch, da haben sich so viele
Eltern, da waren die Eltern so massiv dagegen,
weil sie das nicht verstanden haben, weil sie es ja nicht kannten.
Und dann hat man es wieder aufgegeben
und jetzt fängt man dann wieder mit Zellen.
Also Zellen kam es nach der Mengenlehre so
ungefähr, oder was man heute in der ersten
Klasse Mathe macht, ich weiß es nicht.
Oder in Rechnen heißt das ja, aber
wir hatten halt Mengenlehre. Und im Studium
habe ich dann festgestellt, also es gab
ja die, die das nicht
mehr in der Schule hatten, in der ersten Klasse.
Und es gab
auch noch einen Teil, der das in der ersten Klasse hatte
und mir war im Studium aufgefallen,
dass mit der Kombinatorik, die ist
natürlich viel umfangreicher.
Mit diesen ganzen A
und B und oder B und so weiter,
die machst du ja in Mathe im Studium
und brauchst sie auch dann später
zum Beispiel für SQL Kombinatorik
und die hatten weniger
Schwierigkeiten damit. Ich dachte, na,
das ist ja wie Mengenlehre, so ungefähr.
Da ist nur ein bisschen, dass du nicht mehr
nur rote und blaue und bunte Plättchen hast
und Dreiecke und Vierecke, sondern
komplexere Sachen
da hast, aber im Grunde, während
die anderen, die Jüngeren, hatten damit mehr
Probleme, weil sie das halt nicht schon aus der ersten
Klasse kannten. Das war mir so aufgefallen
in der Mengenlehre.
Und aber...
Ich frage deswegen, weil vielleicht konnte man sich ja vorbereiten
zu sowas, indem man nochmal sich so
diese Basismengenlehre, wie du sagtest,
mit den unterschiedlichen Schnittmengen, Kreisen
vor Augen führt, um dann
zu überlegen, wie das in der SQL ausfällt.
So ein, jemand, der sowas noch nie
gesehen hat, der irgendwie einen komplexeren Outer-Join
ein bisschen zu fassen sieht,
der ist vielleicht erstmal befordert.
Ich habe da auch eine Folie für, wo ich
wirklich das wie in der Schule mit den Ovalen,
ich nenne das immer Eier, mit den
Ovalen und Schnittmenge und was
ist A und B, A oder B
oder A und nicht B und solche
Geschichten.
Es ist sehr lustig,
es ist immer, dass das funktioniert bei
MariaDB nicht so ohne weiteres.
Es gibt mir dann alles aus
A und B, nur nicht die Schnittmenge.
Das ist dann ein lustiges Query.
Wenn man das in der Anwendung braucht, ist dann was anderes.
Aber nur, damit man dann mal die Logik dahinter versteht.
Aber es gibt halt, ich weiß nicht, ob das eingeboren ist oder woher.
Es gibt ja auch beim Programmieren,
wenn ihr so Algorithmen habt in der Programmiersprache,
da ist mir auch schon aufgefallen, dass es da Menschen gibt,
die können der Logik nicht folgen.
Warum auch immer.
Die haben aber dann ganz, ganz tolle andere Fähigkeiten,
die ich nicht habe, aber
das ist dann.
Naja.
Nein, aber bei SQL ist es
wirklich so, du kannst da nicht so viel falsch machen.
Also wenn du es verstanden hast, hast du es verstanden.
Und was du dann
vielleicht machen kannst, ist
diese Normalisierung, was du vorhin dann sagtest.
Aber auch das,
wenn du es einmal verstanden hast, dann
ist es auch nicht so schwer.
Was der Normalisierung überhaupt ist,
Da gibt es ja, glaube ich, verschiedene Ebenen von oder Stufen, wie man die machen kann.
Also wenn ich das so laienhaft richtig verstanden habe, ist das das Aufbrechen einer ganz komischen Tabelle in die richtige Form,
wo halt die einzelnen Tabellen voneinander getrennt werden, wenn Informationen redundant vorhanden sind.
Und die verbindet man dann halt über Foreign Keys oder sowas.
Also es gibt, ich kann dir das jetzt erstmal, ich will das jetzt nicht so ganz mathematisch erklären.
Du hast, ja, es gibt verschiedene Grade von Normalisierung.
Es gibt die erste Normalform, die zweite Normalform,
es gibt die dritte und noch folgende.
Vierte, fünfte, sechste, ich habe keine Ahnung.
Normalerweise normalisierst du nach der dritten Normalform.
Das ist so das Übliche.
Ich kann dir jetzt auswendig nicht sagen, was die erste und die zweite sind.
Musst du es jedes Mal nachgucken, wenn ich es schule.
Weil du brauchst immer nur am Ende die dritte.
Im Grunde geht es darum, das ist eigentlich ganz simpel,
du möchtest zum einen keine Doppelten.
Also wenn ich jetzt ...
Also in zwei Spalten irgendwo eine Adresse steht,
dann möchte ich die nicht zweimal drin haben,
sondern eine eigene Adresse, eine Tabelle mit Adressen.
Ich hätte jetzt gesagt Stadt.
Ich hätte jetzt gesagt, ich hätte es noch weiter runtergebrochen,
so Postleitzahl Stadt, das Klassische, was du so in der Tabelle hast.
Aber wir nehmen mal nur den Städtennamen.
Ich komme jetzt aus Bielefeld und ich habe vorher mal in Osnabrück studiert.
Ich habe mittlerweile einen Anschlag von, haben sie erst vor zwei Wochen in China getestet, von 675.
Osnabrück schaffe ich nie richtig zu schreiben.
Ich schreibe immer Osanbrücke.
675 ist ja ein Rekord, finde ich nicht.
Ja, und Bielefeld schreibe ich auch immer falsch.
Und wenn ich jetzt aber irgendwie eine Tabelle habe, wo ich jetzt eine Adresse drin habe.
Also ich habe dann irgendwo die Adresse und ich will jetzt alle Leute suchen, die in Bielefeld wohnen. Und ich habe da Bielefeld fünfmal falsch geschrieben. Dann finde ich die natürlich nicht, die ich falsch geschrieben habe.
Und um das zu vermeiden, macht man halt eine Tabelle Städte, da hat man dann das Wort Bielefeld einmal drin stehen und dann hat Bielefeld vielleicht die ID 33615, weil das die Postleitzahl ist und oder wonach man das auch immer nur bei Städten wäre, Postleitzahl wäre eine super ID, kann auch eine andere Nummer nehmen, die 760 und dann steht halt bei der Tabelle mit der Person unter Stadt nur 760.
Und dann kann man das verlinken und sieht dann, ah, die 67 ist Bielefeld. Das ist einfach, das ist eine Sache, damit man sich nicht verschreibt, damit man es nicht irgendwo dann nicht wiederfindet, dass man halt immer dasselbe hat. Und wenn man dann in der Städtetabelle nicht Bielefeld, sondern Bieleflät geschrieben hat, dann ist das halt überall Bieleflät.
Also das ist das.
Einfach zu ändern.
Wenn man es löscht, dann gibt es Bielefeld plötzlich nicht mehr.
So ungefähr.
Wie kann das denn sein?
Ich hätte auch Düsseldorf nehmen können,
aber bei Düsseldorf tippe ich nicht so häufig.
Da vertippe ich mich noch nicht so häufig.
Aber Bielefeld und Osnabrück ist noch schlimmer zu tippen.
Du tippst immer Osanbrück.
Das ist tatsächlich der klassische Tippfehler.
Also das andere ist die Sache, dass du das zusammenpackst, was zusammengehört und nicht mehr.
Da nehme ich jetzt den Küchenschrank.
Du hast in deinem Küchenschrank vielleicht eine Schublade, wo die Teller drin sind.
Oh, da drauf ist noch die Küchenwaage und die Küchenwaage ist umgedreht und in die Schale von der Küchenwaage war es noch ein Messbecher.
Du hast einen Ort, wo deine Teller sind, du hast einen Ort, wo deine Gläser sind. Ich hatte mal eine Mitarbeiterin, die hat tatsächlich beim Ausräumen der Spülmaschine, nein, ich hatte mal eine Mitarbeiterin, die hat beim Ausräumen der Spülmaschine das einfach immer in irgendeinen Schrank gestellt.
und dann standen dann die Teller und die Tassen
irgendwie so alle durcheinander und ich habe nichts mehr wieder
gefunden. Und
nein.
Also du sortierst
in einem ordentlichen Schrank.
Du sortierst in deiner Küche,
ich habe jetzt die Küche genommen, ich hätte auch deinen Kleiderschrank
nehmen können. Du sortierst das ja ein bisschen.
Und
du hast vielleicht
einen Schrank, wo nur die Gläser drin sind.
Da hast du Weingläser drin, Biergläser drin und so weiter.
Aber das ist
der Schrank, wo nur die Gläser drin sind.
Und dann hast du einen Schrank, dann nimm mal die ganze Wohnung,
da sind nur deine Unterhosen drin.
Die mischst du nicht.
So.
Wenn du das mischen würdest, wäre das ganz lustig.
Aber das ist erst mal so, dass du das so weit runterbringst,
dass du das, was zusammengehört, diese Einheit,
mal die Einheit Teller oder was in diesem Küchenschrank ist.
Du kannst auch sagen, ich habe die Küche mit den Küchengeräten.
Und da habe ich das Schlafzimmer, da liegt das.
Du hast ja auch nicht unbedingt deine Kleidung in der Küche
liegen. Also du kannst auch zimmerweise
das machen, je nachdem. Aber dass
du diese Einheit hast,
in die du das runterbrichst.
Das finde ich jetzt interessant, weil ich glaube,
das ist sehr, sehr schwierig, weil ich stelle mir das jetzt
so vor, dass da relativ viel Validierung
nötig ist, das da reinzubekommen, weil
beispielsweise habe ich jetzt einen Schrank, wo Gläser reinkommen,
aber ich müsste jetzt dann vielleicht doch teilen
zwischen Weingläsern und Biergläsern und Wassergläsern.
Dann machst du halt zwei Tabellen. Aber woher weiß
ich denn jetzt, ob Wasser ein Weinglas oder ein Bierglas oder
ein... Das hast du ja irgendwo
definiert. Ja.
Also, du kannst es auch anders
machen.
Wir nehmen mal Autos.
Autos
haben eine Farbe.
Autos haben eine Marke. Autos haben einen Typ.
Und so weiter.
So.
Und die haben einen Preis. Du willst jetzt
so eine Autowebseite machen,
wo du dein Auto verkaufen kannst.
Jetzt stell dir
vor, du packst alles, alle Informationen
des Autos in eine
Tabelle.
So,
und jetzt will ein Käufer
danach suchen.
Er möchte jetzt nur, nennen wir eine
Automarke, nur Mercedes haben.
Bestimmt ein Typ noch,
ein bestimmtes Baujahr.
Und dann überlegt sich der
Käufer, okay, also du musst dann alles aus dieser
einen Tabelle raussuchen.
Dann überlegt sich der Käufer, naja, eigentlich möchte ich nur diesen Typen haben von dem Auto.
Jetzt steht der Typ da immer wieder in dieser Tabelle drin, du hast ja keine zweite Tabelle, wo der Typ drin steht und hast dann nur die Nummern drin, auch noch fünfmal falsch geschrieben wahrscheinlich, ne?
Mercedes vielleicht auch noch dreimal falsch geschrieben.
Du hast alles in einer Tabelle, das wird sehr, sehr schnell, wird die Tabelle sehr, sehr breit.
Auch bei der Farbe, gib mir alle roten Autos, Frauen suchen ja gerne, habe ich mal gehört, nach der Farbe der Autos, weiß ich jetzt gar nicht, ob das, habe ich noch nie ausprobiert bei solchen Sachen, gib mir alle roten Autos, aber theoretisch geht das wahrscheinlich, praktisch geht das wahrscheinlich auch, aber erstmal wird die Tabelle ziemlich breit und du bist da.
Also breit hast du viele Spalten.
Viele Spalten, also du hast halt viele Informationen zu dem Auto.
Es hat vier Reifen, es hat vielleicht noch die Reifentypen und so weiter.
Und die Reifengröße und was weiß ich, was man da Baujahr und wie alt, Tachostand und alles mögliche.
Aber das ist alles in eine Tabelle und dann sucht jemand,
möchtest du einen Käufer haben, der jetzt bestimmte Eigenschaften daraus sucht.
Ich kann dir sagen, das wird sehr, sehr groß.
Es gab in der Vergangenheit eine Plattform, die was Ähnliches gemacht hat und die hatten wirklich nur eine Tabelle. Und die haben mit Hardware skaliert, weil sie das nicht mehr anders skaliert haben und die sind auch dann ein wenig in finanzielle Not geraten, weil die Hardware dann irgendwann nicht mehr bezahlbar war.
Okay, immer teurer, mehr Geld aufmachen.
In der Zwischenzeit waren aber ein paar Kollegen von mir da. Die hatten erst, glaube ich, eine Oracle-Datenbank. Ich wusste davon nichts. Als ich dazu kam, waren sie dann mittlerweile, weil sie Konkurs gegangen waren, von einem großen IT-Unternehmen aufgekauft worden, das ganz viele dieser Plattformen aufgekauft hat.
Und ich durfte dann nach London zu diesem großen IT-Unternehmen. Und dann wollten sie, sie wollten damals von MySQL nach PostgreSQL migrieren. Und sie hatten immer noch diese eine große Tabelle. Und ich habe dann gesagt, naja, das liegt nicht an dem Datenbanksystem, was ihr da drunter habt, das liegt an dem Design eurer Datenbank. Das solltet ihr mal ändern. Ihr werdet mit PostgreSQL genau das gleiche Problem kriegen wie mit MySQL war es damals noch.
Ich bin dann nach Hause gefahren und dann kriegte mein britischer Kollege einen Anruf, der konnte die Consultant verscheißen. Ich habe ja nicht das gesagt, was ich hören wollte so ungefähr. Schick mal einen anderen.
Und mein britischer Kollege hat dann einen ganz jungen dahin geschickt, weil er meinte, naja, ich werde auch nichts anderes sagen als du. Und ich habe mich dann, ohne überhaupt irgendwie einen Namen zu nennen, weil das ist ja auch immer gefährlich so zu Hause, man hat ja auch Geschäftsgeheimnis und so weiter.
Ich habe das dann zu Hause, ich habe mich mit meinem Mann darüber aufgeregt, über diesen Kunden, ohne ihn zu benennen. Ich weiß jetzt nicht, ob mein Mann wusste, bei welchem großen Kunden ich war. Er wusste jedenfalls nichts von dieser Plattform.
Und ohne, dass ich das jemals erwähnt hatte, sagte mein Mann dann, das war die Plattform, ich so, woher weißt du das? Und dann hat er mir das erzählt, dass zwei sehr bekannte MySQL-Consultants, da damals schon mal waren, da wollten die von Oracle nach MySQL migrieren und die beiden hatten auch, der erste hatte gesagt, naja, das liegt nicht an Oracle, das liegt an eurem System.
Und dann war der, aber hatte dann bei MySQL dann auch, Consultant ist scheiße, dann ist der andere hingefahren, auch sehr namhaft und bekannt, der hat das dann auch nochmal gesagt und ich glaube ein dritter war dann auch nochmal da.
Der hat dann gesagt, hat er gehört, was die vorher beraten, hat er gesagt, oh ja, ja.
Nee, nee, das brauchst du gar nicht, das war so offensichtlich. Und naja, okay. Und dann hatten die nie wieder was davon gehört, bis ich dann da war. Und ich kriegte dann am Ende einen Anruf von dem großen Unternehmen und wurde dann gefragt, nur so irgendwie eine Stufe höher, was denn da los war. Und dann habe ich das erzählt und dann haben die wirklich diese Plattform ein halbes Jahr aus dem Netz genommen und komplett neu programmiert.
Die Plattform gibt es heute noch, ist aber komplett anders, aber das passiert, wenn du alles in einer Tabelle hast und wenn du da so viele Informationen drin hast, wenn du dann 250 Spalten hast in einer Tabelle, das macht auch nicht mehr wirklich Spaß, die Informationen daraus zu suchen, die willst du auch nicht mehr lesen und nicht mehr warten.
Ja, das ist, MariaDB hat irgendwo ein Spaltenlimit bei, ich weiß nicht wo, 256 oder so. Wenn du das erreichst, ich habe so Tabellen gesehen, wenn das dann nur noch hochscrollt an Spalten, das ist überhaupt nicht mehr wartbar. Also mal abgesehen davon, dass da ganz komische Artefakte passieren, aber irgendwann denkst du dir schon von dir aus, okay, ist es vielleicht sinnvoll, diese Tabelle mal mehrere aufzuteilen.
Ja, das vielleicht unter Kategorien zu fassen.
Ja genau, also das Normalisieren heißt einfach, du fasst es irgendwo so zu Kategorien zusammen oder das zusammen, was zusammen gehört. Wenn du jetzt das klassische Wikipedia-Beispiel zur dritten Normalform oder überhaupt zu den Normalformen ist immer Musik. Die haben dann immer Interpreten, Alben und Songtitel. Kann man jetzt den Lieblingsinterpreten draus machen, was auch immer.
Wenn du jetzt natürlich eine Tabelle hast,
da steht dann fünfmal Helene Fischer,
äh, dumm, fünfmal die
Ärzte, kenn ich mehr Titel,
und da steht
dann 127 Mal, oder wer weiß, wie
viele Songs die Ärzte gemacht haben, da
drin, 127 Mal die
Ärzte und daneben steht dann,
sag mal, erst mal, wie
viele Songs sind auf so einem Album?
30 Mal
das eine Album, dann das
andere Album und dann die Songtitel nochmal.
Dann hast du erst schon 127
Zeilen, wo du die Ärzte doppelt
zigfach drin hast und dann
das machst du ja nicht nur mit einem,
das machst du dann ja mit deiner ganzen Plattensammlung
oder deiner ganzen Song-Sammlung
und dann hast du eine riesige Tabelle.
Also, was
machst du da? Du machst natürlich
als erstes mal, du nimmst erst mal die
Interpreten raus,
machst da von der eigenen Spalte, da hast du
eine Interpretenspalte. Kannst du vielleicht noch mal die Adresse
oder wo du dann die
Autogrammkarten kriegst oder was auch immer,
je nachdem, warum du jetzt die Musiktitel sammelst,
noch mit dazu packen,
Ansprechpartner oder Ähnliches von der Band.
Aber die packst du in eine Tabelle,
die kriegen eine ID,
diese klassische Personen-ID,
die lässt du automatisch generieren,
haben die halt so, was weiß ich,
die Ärzte ist vielleicht Nummer 1
und dann steht in deiner Song-Tabelle
nur noch die 1 drin für die Ärzte
und die 2 für Rammstein
und die 3 für irgendwas.
Und die 27 für Helene Fischer
sowas in der Richtung. Also
hast du danach die Nummer und du kannst dann nachgucken,
wenn du dann hinter der Tabelle bist, okay, interpretest
Nummer, was hatte ich vorhin, drei
und dann guckst du in der anderen Tabelle nach, Nummer drei
ist,
habe ich vergessen.
Hatte ich überhaupt eine drei?
Weiß ich nicht mehr, aber eine zwei bei Rammstein,
das weiß ich noch. Und die drei ist dann
Sepultura, irgendeine Metalband. Ja, egal.
Nur, dass du dann halt
nur noch über die Zahlen das machst.
Dasselbe machst du mit den Alben.
weil ja auf so einem Album, du willst ja den Titel haben am Ende,
wir sind ja bei dem Titel im Grunde,
aber auf so einem Album ist ja immer auch mehr als ein Song drauf.
Also lagerst du die Alben auch aus.
Da kannst du noch eine Verknüpfung machen,
Album und Band, so eine Zwischentabelle,
dass du das Album und die Band noch zusammenlegst,
dann hast du nicht bei dem Album immer noch die Band stehen,
sondern du machst eine Zwischentabelle,
wo du das Album und die Band reinpackst
Und dann hast du dann, ab 18 ist vielleicht bei den Ärzten,
das erste Album hat die ID 1, ist von den Ärzten.
Und dann steht in dieser Zwischenstabelle nur noch 1, 1 drin.
Album 1, Interpret 1.
Und dann kannst du das so zusammenfügen.
Ziehst du halt alles ein bisschen auseinander.
Und dann hast du halt nur noch die Tabelle mit dem Titel,
wo dann draufsteht, Album 1, Band 1.
Ach so, da hättest du es sowieso drin,
dann brauchst du es gar nicht.
Oder nur Album 1.
Und dann kannst du es dann noch mal weiter verlinken,
wenn du da jetzt nochmal, jetzt wäre das doppelt,
aber das macht man schon dann, das
demonymisiert man dann schon mal leicht, aber
das wäre so, dass du es ein bisschen
sortierst, dass du es halt kleiner
machst. Wenn du es aber zu klein
machst,
es macht keinen Spaß, Kombinationen
aus Datenbanken zu suchen, wenn du
dabei weißt, wie viele Tabellen hast.
Also bei über 8
wird das irgendwo spannend.
Es macht dann auch nicht mehr wirklich Spaß,
die alle zu verjoinen. Dann fängst
dann angezielt zu denormalisieren.
Ich hatte das jetzt gerade schon gemacht,
indem ich dann halt
gesagt habe beim Titel, okay, das ist
auf Album 1 und auf dem Interpreten
1. Es hätte ja gereicht,
der Interpret steht ja schon mal beim Album.
Den hätte ich gar nicht so doppelt
drin gehabt. Aber das wäre so eine leichte
Denormalisierung schon. Und das
erklärt man auch immer gerne. Beim Kochbuch habe ich das
früher erzählt, niemand sucht nach
Teelöffel. Das heißt, du kannst bei der
Menge auch sagen, 200 Teelöffel,
200 Gramm oder so.
Da ist es auch egal, ob du Gramm groß, klein oder nur GR schreibst.
Oder wie du Teelöffel abkürzt, ist auch völlig egal,
weil da sucht keiner nach.
Heutzutage ist es aber nicht mehr so,
dass du in die Menge beim Kochbuch einschreiben kannst,
300 Gramm Mehl, ne?
Also du hast Mehl und dann 300 Gramm,
wenn du jetzt die Zutaten zusammen mischt,
weil du ja diese Funktion hast,
ach, gib mal jetzt für zwei Personen oder drei
und teil mal, dann brauchst du plötzlich nicht mehr 200 Gramm,
sondern 150 oder so.
Da musst du dir schon ein bisschen mehr wieder überlegen, aber vom Prinzip her, wo du dann mal gezielt Bottlenecks auch dir angucken kannst und sagen kannst, okay, da den normalisiere ich jetzt bewusst.
Du machst aber nicht mehr als die dritte Normalform, alle anderen sind eher universitär und unübersichtlich, also so ein bisschen.
Also die ein bisschen tiefer gehen halt.
Ja, also die dritte Normalform ist eigentlich das, was du am Ende brauchst und du brauchst immer einen Schlüssel, jeder Datensatz sollte einen Schlüssel haben.
Es ist ganz lustig, wenn du Datensätze in einer Datenbank hast,
die keinen Schlüssel haben.
Und da steht dann in der Datenbank fünfmal drin,
Volker-Meyer-Adolf-Straße 27 in Düsseldorf.
Jetzt hast du den Datensatz ausgesehen, fünfmal erfasst.
Er sieht aber identisch aus, komplett.
Fünfmal.
Du willst ihn eigentlich nur einmal haben.
Du musst ja jetzt die vier da rauskriegen.
Wie kriegst du die da raus?
Das ist schon eine lustige Aufgabe, passiert manchmal, ich weiß, wie man es rauskriegt, aber alleine schon deswegen ist es sinnvoll, dem Ganzen auch noch eine Kennung zu geben, irgendeine Eindeutigkeit und deswegen hast du meistens dann, meistens heißt die Spalte dann auch ID, in den meisten Datenbanken heißt die dann ID, dass da eine Spalte davor sitzt, wo du dann eine Kennung rein hast.
Und dann hast du dann, Nummer 1 ist Klaus-Meyer, Nummer 2 ist Klaus-Meyer, 3 ist Klaus-Meyer, 4 ist Klaus-Meyer, 5 ist Klaus-Meyer und dann kannst du dann sagen, delete alle, wo Name Klaus-Meyer ist oder alle mit ID 2 bis 4.
Könntest du ja auch so machen.
Dann hast du da eine Eindeutigkeit, jede Spalte sollte eine Eindeutigkeit haben.
Jeder Datensatz sollte zumindest in einer Spalte eindeutig identifizierbar sein.
Und das ist dann meistens der primäre Schlüssel, über den du die auch finden kannst und über den du diesen Datensatz auch bearbeiten kannst, diesen alleinigen. Das ist das noch, was dazukommt. Und dann hast du die dritte Normalform, du brauchst ein Primärkey und du musst, Primärkey heißt das auf Deutsch, Primärschlüssel heißt das so. Und du solltest es halt so ein bisschen ordentlich sortieren, dass du nicht alles in einer Tabelle hast.
Okay, und wenn man dann davon weggeht,
dann schreibt man halt alles rein.
Was?
Ich würde sagen, Normalisierung haben wir, glaube ich,
soweit verstanden, oder?
Ja, also, genau.
Also, ich meine, irgendwann,
ich habe dann irgendwie meistens,
wenn bei irgendeinem neuen Problem oder so,
da oft dann angefangen,
so ein Entity-Relationship-Diagramm hinzumalen oder so.
Und das, genau, das macht man dann eigentlich meistens.
Irgendwann hat man das dann so ein Gefühl,
wie das dann aussehen kann.
Das mache ich tatsächlich auch.
Also, dass ich mir das grob
auf irgendeinem Schmierzettel
aufmale und
wenn ich es nicht, wenn es nicht nur drei Tabellen
sind, das kriege ich im Kopf und hin, aber
tatsächlich mache ich das auch
tatsächlich, dass ich mir das dann teilweise mal auf dem Schmierzettel
überlege. Wie ich da eigentlich immer
dran gehe, ist, wenn ich eine Datenbank neu aufsetze,
ist, ich gucke erstmal nach, was muss ich
überhaupt alles an Informationen in dieser Datenbank
speichern.
Also wirklich so als reines Sammelsurium,
das ist natürlich für andere Firmen
programmierst du das so, musst du das erstmal
aus den ganzen Besprechungen raushaben, was brauchen die
überhaupt alles in der Datenbank,
dann musst du noch gucken, meistens für die Firmen
mit, was ist überhaupt erlaubt, abzuspeichern.
Gibt es ja auch sowas
wie diesen
bei der Kreditkarte,
bei der EC-Karte hinten die Nummer, die darfst du
glaube ich gar nicht mit abspeichern.
Oder solchen Sachen.
Dass man da nochmal guckt und
man muss ja immer versuchen, man hat ja in der Regel
nicht mit IT-Lern zu tun oder mit
technischen Menschen, sondern mit anderen.
Aus deren
Sprachgebrauch rauszufinden, was
davon kann ich denn überhaupt als Daten
abspeichern, als Information und
das sammle ich dann einfach auch immer erstmal ganz
wild durcheinander und sortiere das dann
und dann überlege ich mir, wo könnte
ich jetzt was davon hinpacken und was gehört
da wie zusammen und
so baue ich das Ganze auf und dann gucke ich, wie
kann ich das dann vernetzen und auch ich mache
es so, ich mache auch immer erstmal die dritte
Normalform und gucke dann,
gut, manchmal sieht man dann schon auf Anfang an,
okay, da kannst du ein Bottleneck haben, da kannst du was rein haben.
Ich kann mal ein Beispiel
nennen für ein Bottleneck
eine Spielefirma
mit Online-Spielen.
Die haben mehrere Online-Spiele
und natürlich
hat der Nutzer nur
einen Account.
Und dann
hat der auch Nick, der Nutzer.
Aber die sind hinterher dazu
übergekommen, weil jetzt von diesen
mehreren Millionen Nutzern
musste natürlich
immer die Account-Tabelle
aufgerufen werden,
um dann irgendwas über den Nutzer rauszufinden.
Bei den Spielen, wie weit ist der Spielstand oder so weiter.
Und die mussten dann immer den Nutzer,
und wenn da auf eine Tabelle immer laufen,
zwei Millionen Sachen raufkommen oder noch mehr Spieler,
ist das natürlich etwas schwierig.
Und dann sind die hingegangen und haben die nix,
der Spieler dann noch mal in den Spielen hinterlegt.
dass die nicht immer auf die eine Tabelle zugreifen konnten.
Deswegen ist das ganz häufig so,
Passworte ändern ist meistens einfach.
Und ganz viele, ich weiß nicht, ob es immer noch so ist,
ich spiele so selten,
aber den Nick ändern ist immer etwas schwieriger und aufwendiger.
Das liegt daran, dass das dann nicht nur in der einen Tabelle,
sondern weil die den nochmal denormalisiert haben,
und zwar aus Absicht,
weil das einfach sonst zu viel wird auf einer Tabelle.
Okay, da muss man dann tatsächlich zurückgehen
auf diese Tabelle und gucken.
Ja, und dann, deswegen ist so ein Nick ändern bei so Spielen
häufiger mal so ein Problem gewesen, eine Zeit lang.
Ich weiß nicht, ob es immer noch so ist.
Aber das wäre so ein Beispiel für eine gezielte Denormalisierung.
Aber das ist halt das.
Ja, also dann, wenn ganz viele Zugriffe auf eine Tabelle sind,
dann muss man vielleicht drüber nachdenken.
Was ich auch mal aus Versehen denormalisiert hatte,
war so eine Stempeluhr-Datenbank.
Da habe ich einen Start und einen Stopp.
Stempeluhr ist ganz einfach.
Ich habe eine Startzeit, ich habe eine Stoppzeit.
Und ich habe dann noch clevererweise die Differenz
mit abgespeichert, weil das war dann einfach
okay, wenn ich das dann, wenn ich Stopp sage, kann ich
auch gleich nochmal eben schnell die Differenz
Stopp minus Start ausrechnen und das auch mit abspeichern.
Das war dann auch meine
Riesenrettung, weil ich habe dann als Admin
tatsächlich mal irgendwo
ganz schnell wollte ich,
obwohl es da Skripte für gab,
noch irgendeine Stoppzeit
nachtragen und habe
die Werkklausel vergessen.
Und dann alle geupdatet.
Genau.
komisch, warum dauert das Update denn so lang?
Na, das ging relativ schnell,
es war ein guter Server, so viele Mitarbeiter
waren das nicht, aber dann so, ja,
die Stempelur lief auch erst irgendwie so
zwei Jahre, also es war nicht so schlimm.
Ja, aber zum Glück
gab es die Differenz noch,
also konnte ich dann ganz schnell mal
ein Update fahren, mach mal Start plus
Differenz und dann hatte ich wieder die richtige Stoppzeit
drin, also das
kann auch mal passieren.
Wobei ich da auch dachte, okay, eigentlich ist
das ist ja eine Hitze, die die Differenz
ja gar nicht gebraucht, aber ich fand das
damals sinnvoll, sie mit abzuschleichen und ich rate
das auch bei einer Stempelung, jeden das gleich
mitzumachen. Doppeltet, besser
dann, ja? Ne, das ist auch teilweise
wie du es in der Anwendung brauchst, wenn du immer
diese Differenz brauchst, dann
brauchst du auch nur die Differenz abfragen
und musst nicht immer Start und Stop abfragen, später
in der Anwendung. Ja, genau. Das ist
dann auch noch was, das musst du ja auch noch wieder ein bisschen
mit dazu tanken und du musst
natürlich heutzutage auch so ein bisschen Sicherheit
da in Schutz und was weiß ich was mit berücksichtigen,
Deswegen hast du auch ganz viel in den Tabellen, fast jede Tabelle noch last updated und so weiter.
Update 3 updated.
Ja, irgendwie sowas. Oder hast du noch eine History-Tabelle, wo die alten Werte reinkommen oder ähnliches. Das hast du ja auch noch.
Ein Model History Tracker.
Ja, das hast du ja auch bei Preisen. Wenn du jetzt ganz normal so eine Verkaufstabelle machst, dann hast du ja auch bei Preisen häufig, wenn du einen Preis änderst, solltest du den alten Preis ja auch nochmal irgendwo sehen.
Ja, schon praktisch, dann kann man das auch in die Entwicklung gucken.
Ja, nicht nur das, weil du änderst vielleicht heute den Preis, aber es haben noch nicht alle die Rechnungen bezahlt und dann brauchst du ja noch in einem Jahr solche Geschichten.
Das ist lustig, es gibt auch Unternehmen, da wird dann der Preis bezahlt, der jetzt gerade aktuell gilt.
Das ist auch lustig, was auch immer mal wieder passiert ist, für die Schlüssel, dass dann die Namen genannt werden. Ich hatte mal eine Firma, die hatte wirklich bei den Mitarbeitern als Schlüssel die Namen. Ich so, was macht ihr denn, wenn ihr Mitarbeiter habt, die gleich heißen?
Das ist ja minus zwei.
Haben wir nicht, stellen wir nicht ein.
Ja, sehr gut.
Also das sollte man natürlich nicht machen, sondern bei Mitarbeitern, also bei sowas nimmt man meistens auch die Kennung. Es gibt natürlich auch natürliche Schlüssel. Ich weiß nicht, ob Autos jetzt das Kfz-Zeichen unbedingt sinnvoll ist, als Kennung zu nehmen, aber es gibt halt so Schlüssel, so ISBN-Nummern oder sowas, die könnte man auch als Schlüssel nehmen.
Oder wenn man jetzt die Postleitzahlen hat,
Postleitzahlen sind auch super Schlüssel bei Städten.
Ist das sinnvoll, ein Datensatz?
Nee, das ist schon sehr sinnvoll, wenn das so eine ganze Zahl ist.
Jedenfalls, je nachdem, was man für einen Index verwenden will,
vielleicht auch drauf.
Aber zum Normalfall denke ich schon,
dass es vielleicht nicht so unpraktisch ist.
Ja, das wäre eine interessante Frage.
Also irgendwie sehe ich in letzter Zeit sehr häufig,
dass Leute UUID-IDs verwenden.
Also dann könnten wir den Hash nehmen.
bitte? Ich nehme gerne auch den
Unix-Timestamp
für bestimmte Dinge auch.
Ja, also irgendwie
in der JavaScript-Welt ist das halt so total super,
was ich in gewisser Weise verstehen kann, weil
da hat man ja oft irgendwie nur das,
wenn man jetzt eigentlich das erzeugen möchte,
will man ja, dass sie eindeutig sind, hat aber keine zentrale
Datenbank möglicherweise.
Es gibt halt
diese Sache bei Postgres
und bei MariaDB und so weiter,
sogar im Standard gibt es den Datentyp Serial,
der soll einfach immer einen hochzählen
und das kann man
natürlich machen und wenn das völlig egal ist,
was du für eine Nummer hinterher hast,
nimmst du den
und zählst dann einfach mal, dann zählt der automatisch
beim Einfügen einen hoch und dann hat das
Ding eine eindeutige ID.
Auto-Increment heißt das
bei MySQL, bei PostgreSQL.
Nimmst du den Datentyp Serial oder
genau und dann macht er das automatisch.
Ja, also
Ich weiß nicht, ich habe dann irgendwann mal Benchmarks
gesehen. Also ich meine, das macht es halt, weil einfach
UUID ist halt so riesig. Das heißt,
wenn du das dann tatsächlich
als Primary Key hast, dann macht das halt Joins
bei Postgres, das letzte, was ich gesehen habe, so
viermal langsamer oder sowas.
Bei den meisten ist das halt wurscht,
weil irgendwie Datenbank ist vielleicht
da eh nicht das Bottleneck, aber
ich meine, es kostet halt viel mehr Speicher und es macht
Dinge langsamer. Daher tendiere ich immer
dazu zu sagen, hey, lieber eine Zahl
nehmen.
Und dann, wenn man sowas haben will,
so eine Eigenschaft will man ja oft haben, dass man nicht
sehen kann, wann
ein Datensatz eingefügt worden ist, weil an der Zahl kann man
das natürlich sehen, oder welche miteinander
zusammenhängen oder so, dann kann man
sowas wie Hash-IDs im Frontend verwenden, wo man
die IDs hasht. Aber das
sozusagen, den Hash in der Datenbank zu verwenden,
weiß ich nicht.
Ich tatsächlich häufiger mal
als Kundennummern oder so auch Timestamps
gesehen habe.
Genommen auch schon.
Das ist natürlich, wenn du dann so einen Support am Telefon
nennen sie mir mal ihre Kunden-ID und dann fängt
er da an, so ein Unix-Timestamp-Bot zu lesen.
Gut,
du erkennst es als Laie nicht als
Timestamp.
Da musst du schon freak zu sein, dass du
raffst, dass das ein Timestamp ist,
von wegen Eindeutigkeit und schwer
zu raten, aber
ist halt auch eindeutig,
dass du dann irgendwie so in derselben Sekunde
mehrere Kunden dann liest, ist dann doch schon schwierig.
Also so viel,
kommt auf dein Business drauf an, kann natürlich sein,
im Online-Business würde ich das vielleicht
jetzt nicht machen, den Timestamp nehmen, aber
wenn du jetzt so eine normale Firma hast.
Dann schon,
also das kannst du auch machen oder wie du dir noch immer
generierst, du musst dir halt was
überlegen und ganz häufig bei den Tabellen ist es
einfach automatisch hochgezählt.
Macht wahrscheinlich dann Sinn. Und wie gesagt,
Postleitzahlen sind recht eindeutig. Oh, aber das ist
so eine interessante Sache, weil was mache ich denn jetzt,
wenn ich die Postleitzahleneingabe
nicht kontrollieren kann, weil ich die irgendwo herbekomme
und dann hat irgendjemand dann D-Postleitzahlen
eingegeben oder sowas.
Und dann habe ich ja das Problem, dass ich dann
Doppelte habe, quasi.
Naja, es kommt darauf an, wie du die
Postsatz an der Datenbank abgelegt hast.
Ja, also in Malarbeit, wenn es jetzt sechs Zeichen,
ja, nein, dann geht es halt kaputt.
Also ich würde sowas ja prüfen
in der Software, bevor ich es an die Datenbank schicke
und die Datenbank prüft es und wirft es dir zurück,
weil,
ganz einfach,
weil ich muss ja erstmal, also ich
nehme die Daten entgegen, also die Software
jetzt in eurem Fall
in Python geschrieben, die nimmt die Daten
entgegen. So.
Jetzt nimmt es die Daten so, wie sie sind
und schmeißt sie in die
Datenbank. Die Datenbank, äh, kann ich
nicht einfügen, falscher Datentyp oder was auch immer.
Gibt dann, erst mal habt ihr
eine Verbindung aufgemacht, die sind bei Postgres
relativ teuer. Da rein.
Die gibt es dann zurück, kann ich nicht. Ihr kriegt
den Fehler, behandelt den Fehler
wieder in Python. Das ist doch dann
sinnvoller bei sowas, die Postsatz
das gleiche in Python zu prüfen. Oder auch beim
Geschlecht oder sowas. Das Problem ist halt
die Frage, ob ich jetzt wirklich alle Ausnahmen
irgendwie abfangen kann, die sich irgendwie ausdenken kann
oder es halt alles runterbreche oder ob ich sage,
ich mache da einfach ein Textfeld raus, das ist mir egal und dann ist halt
dann die Identität weg. Weil was ich bei Postleitzahlen machen würde,
ist, die gibt es ja als CSV,
die würde ich einmal importieren und dann würde
ich mir die als Liste, dann kann er die auswählen.
Also es gibt, ja, okay, Tri-Suite, ja, gut, aber
ja.
Ja, aber
wenn die dann halt nicht passt, das ist halt das Problem.
Oder die Stadt anfangen
einzugeben und dann zeichnet der automatisch
Ja gut, aber da muss ich ja das Formular schon
in der Hand haben quasi.
Ja, aber da gibt es halt unterschiedliche
Sichten. Also ich meine, ich finde das Problem deswegen schön,
weil das halt vielleicht klar macht,
dass das alles nicht so ganz einfach ist.
Aus einer Datenbank-Sicht kann ich mir vielleicht eine ideale,
ich habe auch, das hat wahrscheinlich jeder schon
ein paar Mal gemacht, aber irgendwie so versucht,
normalisiert Adressen zu speichern.
Und dann, wenn man das aber dann benutzt,
dann stellt man fest, so, oh, das gibt aber ganz viele Fälle,
die passen dann halt nicht.
Mannheim.
Irgendwelche heiligen
Dinge, die halt irgendwie nicht so
richtig da reinpassen wollen.
Also dann, wenn man dann sich mit Leuten unterhält,
die dann aus dem Web-Dings da drauf gucken,
die sagen dann eher so, ja,
okay, du kannst das ja vielleicht in der Datenbank so speichern,
aber wenn du es zum Beispiel dann hinterher irgendwie
Leuten anzeigen oder ausdrucken oder sonst irgendwie, dann nimm
halt immer irgendwas, was reiner Text ist,
weil alles andere geht eh nicht.
Alles andere kannst du eh nicht machen, weil es funktioniert
hinten und vorne. Also was ich tatsächlich
mache, ist, ich mache einfach mal nur Adresse
1 bis 6, 6 Felder
und da können die reinschreiben, was sie wollen.
Also so ungefähr.
Du kannst es ja dann
irgendwie prüfen.
Also, ich weiß
nicht, wie du es prüfst.
Irgendein Reckhex, wenn es nicht matcht, dann irgendwie
Error, oder?
Also, du kannst die Länder kurz, kannst du natürlich,
ich würde auch sowas wie Postleitzahlen nochmal
extra vielleicht,
kannst du ja importieren.
Für Deutschland, ja. Hast du natürlich, wenn du
international bist, dann auch wieder.
Aber ich sag mal so, Straßen, Mannheim
hat ja die Quadrate T633,
hab ich mal drin gewohnt, glaube ich, und so.
Aber das geht halt auch nur dann, wenn ich halt den Input wirklich kontrollieren kann.
kann. Wenn ich halt irgendwas bekomme und das muss
halt dann da ins Postleitzahlenfeld rein, dann ist das
natürlich schwierig.
Wofür willst du das unbedingt in das Postleitzahlen?
Warum willst du da unbedingt irgendwas
reintun, was keine Postleitzahl ist? Das verstehe ich nicht.
Weil ich die Adresse anlegen muss, um eine Bestellung anlegen zu können.
Ja, aber dann leg das doch, tu doch die Adresse
in das Textfeld. Ja, genau.
Und dann kannst du ja versuchen,
eine Postleitzahl zu extrahieren oder so.
Oder die Postleitzahl kommt direkt ins Textfeld.
Die Frage ist ja, wofür
brauchst du diese Adresse? Genau.
Ja, nein, also
was halt noch schwieriger wird hinterher, ist halt Filtern
von Adressen. Also wenn du
ein Verkäufer bist,
der etwas
online verkauft
und du brauchst jetzt die Lieferadresse, um das
dem Kunden zu liefern, da hat der Kunde ja schon
ein gewisses Interesse dran, dass richtig
Das Textfeld, dann kommt
das halt auch an. Aber wenn ich jetzt dann hinterher in der Analyse
hingehen will, in welchem Postleitzahlengebiet habe ich
denn jetzt wie viel geliefert beispielsweise, dann ist halt
dann das Problem, dass die Textwelle halt nicht mehr
Ja, aber dann genau ist halt die Frage, wie wichtig ist es,
bis auf die letzte Adresse stimmt und dann...
Genau, dann muss ich mir halt dann halt die Filter überlegen,
wie ich das dann wieder rauskomme.
Dann ist auch die Frage, ob du diese Analyse überhaupt fahren darfst
oder ob das gegen die Datenschutzrichtlinien für dich stimmt.
Na gut, aber das ist ja ein anderes Problem.
Also im Zweifel hat man ja berechtigte Interessen
und dafür eine jeweilige Datenschutzvereinbarung.
Ja, auch nicht.
Aber bei Business-to-Business-Kunden meistens schon.
Ja, das ja.
Aber, ich habe die hier gleich aufgegessen.
Nun, das ist ja lecker.
Nein, aber das ist so dieses...
Nee, aber tatsächlich, ich habe das auch schon mehrfach,
die war dann einfach faul.
Ich habe dann mal angeguckt, was passt denn auf einen Briefkopf?
Ich glaube, du hast sechs Zeilen, hast du fünf?
Also ein normaler Briefkopf hat immer fünf.
Mir heißt die Adresse 1, Adresse 2 oder ADR 1, 2, 3, 4, 5, 6,
weil mir ist das doch auch völlig egal,
ob der Name der Kunde jetzt ganz oben steht oder in der zweiten Zeile.
Der Kunde wird ja wissen, wie seine Rechnung ist
beziehungsweise wie seine Adresse ist.
Ja.
Und wenn der was geliefert haben will,
hat der auch ein entsprechend großes Interesse,
dass das ankommt, dass er seine Adresse schon richtig
da eintippt.
Und
dann schickst du ihm ja auch nochmal eine E-Mail,
bevor du das lieferst und so weiter und so fort.
Bei Rechnungsadressen,
ja.
Ja, ich glaube, ihr redet rein.
Das ist wurscht. Also da ist das ja,
die schickst du ja auch selten noch mit der Post.
Ich glaube, das Normalisierungsthema würde ich
dann damit auch abschließen wollen. Und ich würde gerne
noch zu was anderem überkommen. Und zwar
könnt ihr euch jetzt aussuchen, ob ihr erst Transaktionen sprechen
wollt oder Verbindungen oder über
NoSQL vs. SQL.
Und am Ende wollen wir
nochmal Maria gegen ProSquares
wissen.
Was wolltest du zu Transaktionen
wissen?
Vielleicht erstmal, was ist das überhaupt?
Also eine Transaktion
ist, der Dominik
möchte dem Jochen
100 Euro überweisen.
Jetzt zieht die Bank, stell dir vor,
du bist eine Bank. Jetzt zieht die Bank
die 100 Euro von Dominiks Konto ab
und die Datenbank bricht zusammen.
Oder das System bricht zusammen.
Ja, es ist halt beim
Jochen nichts angekommen, aber beim Dominik
sind die 100 Euro auch weg.
Das wäre nicht gut.
Ist in einem schwarzen Loch versunken.
So, also
macht man das Ganze in
einer sogenannten Transaktion, das heißt
beim Dominik werden
die 100 Euro abgezogen und
beim
Jochen draufgepackt
und erst wenn beides passiert ist,
ist der Prozess abgeschlossen.
Das macht man mit einem Commit.
So heißt der Befehl.
Wenn jetzt zwischendurch das Datenbanksystem abfällt,
sagen wir mal, die 100 Euro werden abgezogen
und das System bricht zusammen,
dann ist kein Commit passiert,
sondern dann wird das Ganze zurückgerollt
und dann hat der Dominik dann,
sobald das System wieder da ist,
die 100 Euro noch auf dem Konto und es ist einfach gar nichts
passiert. Okay, also tatsächlich eine Isolation
von mehreren Arbeitsschritten.
Ja, nicht nur von mehreren,
eigentlich war es früher so,
das ist auch heute noch so, das wird noch heute
so automatisiert, dass es keiner mehr weiß,
sobald du irgendwas auf eine Datenbank
schreibst,
jedes schreibende Zugriff,
also jeder, ne, eine Transaktion
ist eigentlich jeder Befehl, aber jede
schreibende Transaktion,
das heißt, du machst ein Insert oder ein Update,
wenn du das mal so früher in C
gemacht hast, musstest du immer
ein Commit hinten dran werfen.
Warum jetzt unbedingt den C, die Programmiersprache
war eigentlich egal, aber du musst
immer ein Commit hinten dran werfen.
Also du musst immer erstmal Insert sagen
und dann darunter Commit.
Mittlerweile machen die Datenbanksysteme
alle Auto-Commit.
Das heißt, wenn du ein Insert-Befehl
abfeuerst, dann wird er automatisch committet.
Aber das Commit ist natürlich intern immer noch
da. Aber
es wird dann automatisch da hinten
dran gefeuert, dass du das nicht mehr machen
musst, das ist ja immer noch ein Commit einzeln.
Das kann man auch ausstellen. Und das kannst du ausfallen,
dafür gibt es den SQL-Befehl.
Im Standard-SQL heißt das Start
Transaction, damit stellst du das Autocommit
aus, dann machst du deine ganzen Schreiben
und Transaktionen und sagst am Ende Commit.
Das wäre jetzt das
mit dem Kontoüberweis. Also das würde man
zum Beispiel machen in der Business-Logik
von so einer Applikation, wo man zwischendurch noch andere Dinge abfragen
muss, wo man Verbindungen aufbauen muss, wo man
nicht weiß, ob die klappen oder so.
Ja, also bei allem, wo
du mehrere Schritte hast und die halt
entweder alle funktionieren sollen oder keine Ahnung.
Genau, also das mit der Bank ist immer
so ein, das macht, die Banken funktionieren
natürlich noch viel komplexer, aber das ist immer so ein
schönes Beispiel, weil das ist so
schön anschaulich.
Und Postgres
und MariaDB haben aber
eine Abkürzung für Start Transaction,
das ist Beginn, also da kann man auch Beginn
sagen, Start Transaction, das ist
weniger Tipparbeit.
Und
das ist halt so ein schönes Beispiel, aber man hat
tatsächlich immer mal wieder solche Fälle.
in Anwendungen,
wo du das brauchst tatsächlich,
dass du das in einem Jahr
oder das ist wirklich so
entweder alles oder nichts.
Das ist im Grunde.
Man hat erstmal so ein Letter und dann muss man die einzelnen Transaktionen
dann committen und dann gucken.
Sehr schön, auch wenn du jetzt mal ganz große Sachen,
ich sag mal, ich hätte vorhin schon ein paar Mal gesagt,
du willst jetzt aus dem CSV
die ganzen Postleitzahlen Deutschlands importieren.
Ja, aus dem CSV,
okay, das ist eh nur eine Transaktion,
aber du würdest das mit einem Insult-Statement machen.
Da möchtest du auch entweder alle drin haben oder keine.
Du willst nicht irgendwo, dass der dir nach der Hälfte irgendwie,
dann hast du die halben Posterzahlen drin und die andere Hälfte nicht.
Du willst da alles ein.
Würdest du auch mit einer Transaktion machen.
Wie gesagt, wenn du das CSV hochlädst, ist es nur eine.
Aber du könntest das auch anders lösen.
Das war jetzt zum Beispiel, was mir einfällt.
Also es gibt da aber durchaus ganz viele,
kriegt da wahrscheinlich jetzt ganz viele Zuschriften,
was da die Leute als Beispiel schon haben für Transaktionen.
Aber das ist so das Transaktion und das wird mitgelockt tatsächlich.
Das Transaktions-Log ist ja das Wichtigste überhaupt bei Postgres oder bei Datenbanken.
Und das wird halt mitgeloggt, damit du dann, wenn deine Datenbank abstürzt,
hast du immer noch das Transaktions-Log und aus dem Bestand,
den du auf der Festplatte in deinem Datenverzeichnis hast
und den Transaktions-Logs kann die Datenbank wieder hergestellt werden.
Die Backup ist ja wichtig.
Naja, aber die Datenbank muss es halt schon irgendwann mal geschrieben haben auf die Platte.
Ja, das Transaktions-Log schreibt halt immer auf die Platte.
Das ist das Wichtige daran.
Es sei denn, da muss man immer aufpassen.
Aber man kann es auch abschalten.
Macht Tests unter Umständen schon selber.
Man kann das abschalten, ja.
Das kann man machen. Ganz viel fieser
ist aber, dass Festplatten nicht unbedingt permanent
speichern. Dass auch
Festplatten mittlerweile irgendwelche Caches
haben und wenn dann wirklich mal so richtig
heftig was ausfällt,
ist in Deutschland seltener. Also in Amerika
mit Stromausfällen haben wir jetzt nicht ganz
so viel hier zu tun. In Amerika fällt ja ganz häufig
der Strom aus und so weiter. Dass dann
das nur in dem Cache der Festplatte war
und noch gar nicht richtig auf der Festplatte
und dann weg ist. Da wird dann immer geraten,
man soll den Plattencache ausstellen und solche
Geschichten, damit das dann...
Ja gut, ich weiß es nicht genau.
Ich glaube, man kann...
Ist auch bei VMs, dann sagt die
VM, es ist fest auf der Platte, es ist aber
erst im Cache des Hoses oder so.
Das ist auch was, da habe ich
bei VMs dann keinen Einfluss drauf.
Also bei den Datenbanken,
so Hardware-Datenbanken, die ich mal so irgendwie
in Racks gesehen habe, die hatten meistens dann halt
so RAID-Controller mit Batterien drauf.
Ja, wenn du wieder wegkommst.
Ansonsten, ich glaube, Postgres verwendet irgendwie F-Sync.
Und F-Sync kann man auch irgendwie sagen,
sag mir, werd erst fertig,
wenn du es wirklich, wirklich auf der Platte geschrieben hast.
Das ist das, was...
Das macht es auch langsamer, aber ja.
Nein, F-Sync ist das, was wir immer den OpenStreetMap-Mann sagen,
stell das aus, wenn sie wieder ganz NRW
oder die halbe Welt hochladen wollen, weil das geht schnell.
Und da kannst du auch mal sagen,
entweder du hast alles oder gar nichts,
du willst ja die ganze Welt hochladen.
F-Sync sollte man nie abschalten.
Es gibt Synchronus Commit bei Postgresql
und bei MariaDB heißt das
Ganze, ein Kollege von mir
sagte mal, es ist die längste Variable, die es
gibt.
Es gibt die Variable
mit selber, also die heißt nur anders.
Das kannst du ausstellen,
dann würde es
schon das OK zurückgeben,
wenn
es im Cache, wenn die Transaktion im Cache
liegt und nicht auf der Platte.
Ansonsten kriegst du immer erst das,
wenn du ein Statement abfeuerst,
kriegst du erst das ACK,
das Acknowledgement oder das OK, zurück.
Wenn wirklich das von der Transaktion,
wenn das System sagt, ja, das Transaktionslog,
also dieser Schnipsel, den du da geändert hast,
der ist jetzt wirklich auf der Festplatte
im Transaktionslog.
Und du kannst halt, das Transaktionslog hat nochmal
ein Cache da drüber und du kannst halt auch schon
sagen, okay, gib mir das schon zurück, wenn das in dem Cache
angekommen ist. Da verlierst du
bei PostgreSQL
maximal 600
Millisekunden an Transaktionen, also deine
letzten 600 Millisekunden an Transaktionen
kannst du verlieren. Ist bei MariaDB
nicht anders.
InnoDB
Transaction Commit
irgendwie so ähnlich. Ist eine ganz lange
Variable bei
MariaDB. Ich weiß immer nicht, wie sie
heißt. Dann gab mir
ein ehemaliger Kollege einen Tipp.
Er sagte, ich weiß auch nicht, wie sie heißt, aber es ist
die längste Variable, die es gibt.
Maria, die hat wahnsinnig viele
Server-Variablen. Das war wirklich die längste,
aber ich glaube, es gibt mittlerweile eine längere.
Aber sie ist relativ
sprechend auch.
Flash
Transaction Commit, irgendwie so
ähnlich heißt sie.
Und das ist das.
Aber F-Sync sollte man eigentlich nicht abstellen.
Wie gesagt, die OpenStreetMappler, wenn die
dann wirklich anfangen und wir laden jetzt
mal auf einen frischen Server irgendwie die halbe Welt,
dann ist F-Sync abstellen,
dann sind die wesentlich schneller fertig
und da kann man auch sagen,
okay, wenn jetzt nach zwei Tagen die halbe Welt
nicht da ist, dann fängt es von vorne an.
Wenn dann wirklich mal der Server
abgeraucht ist.
Da sollte man wirklich wissen, was man tut.
Ja, ja.
Ja, genau,
aber ich glaube, also Isolation und so,
das gibt es ja auch noch, aber es gibt halt eigentlich,
Transaktionen ist ja nicht das einzige Ding.
Also eigentlich will man ja diese
Asset-Bedingungen
halt sozusagen gewährleistet haben.
je nachdem, für manche Sachen reicht
auch Eventual. Also Datenbanken sollten
Asset-konform sein, das heißt Atoma,
das wäre mit der Normalisierung zu lösen,
Konsistent, auch das
macht man über die Normalisierung.
Die Isolation,
die
macht man über
Isolationslevel, das wird aber automatisch
gemacht und wir haben den
Isolationsmittel
Repeat Committed oder Repeater,
ist sowieso Standard, da muss man eigentlich nicht nochmal dran.
Es sei denn, man
ist irgendwo im tiefen universitären
Bereich und will das auf serializable
stellen. Da kann ich aber auch sagen,
die meisten Bugs haben, alle Datenbanksysteme haben
ein Riesenproblem mit diesem
Isolationslevel. Können wir noch mal
drüber machen, was das bedeutet.
Und dann haben wir noch die Durability
oder in Deutsch heißt das so schön dauerhaft.
Und
das ist heute ein Riesenproblem,
weil Datenbanken sollten natürlich dauerhaft
speichern.
Und das hatte ich vorhin schon angedeutet.
Das ist so eine schöne Theorie, warte, bis es auf der Festplatte ist.
Aber ganz, ganz viele Datenbanken laufen heute auf virtuellen Maschinen.
Und Festplatte heißt dann die Festplatte vom Host.
Und viele virtuelle Maschinen sagen, ja, das ist auf der Festplatte,
obwohl es erst im Rahmen des Hostes liegt.
Und noch gar nicht wirklich auf der Festplatte.
Und da habe ich zumindest als Datenbanksystem
erst mal keinen Einfluss drauf.
Das ist dann eine Administratorsache, das dauerhaft hinzukriegen.
Und jetzt guckst du mich fragend an, ich weiß auch nicht, wie.
Also ich weiß nur, dass wir ganz häufig, wenn ich ganz komische Artefakte habe und dann den Kunden frage, ist das eine virtuelle Maschine? Also ich hatte auch schon Kunden, die dann nein gesagt haben, dreimal und am Ende kam raus, es war doch eine.
Weil du kannst auch diese Übergabe je nach virtuelle Maschine, also je nach System, da gibt es ja KVM und was auch immer, kannst du das nicht wirklich monitoren, was da der Host eigentlich noch macht. Also diese Übergabe, virtuelle Maschine, Host, dann verschwinden die Daten, die virtuelle Maschine sagt, ich bin fertig, aber es ist vom Host noch gar nicht da abgelegt, wo es sein soll oder du hast nicht genug RAM gekriegt vom Host oder was auch immer.
Also es gibt da ganz lustige Artefakte mit den virtuellen Maschinen.
Ja, nur das ist halt so das mit der Dauerhaftigkeit.
Isolation heißt, wenn...
Ja, also wenn man jetzt zum Beispiel die geänderten Daten
begonnener Transaktionen schon sehen kann in der anderen
oder halt erst, wenn die Transaktion durch ist zum Beispiel
oder so solche Sachen halt.
Also wer wann welche Sachen sehen kann.
Fällt mir ein nettes Beispiel zu ein.
Jochens Frau möchte Jochen einkaufen schicken.
Und Jochens Frau hat da so ein paar Sachen irgendwie an die Wand geschrieben, die eingekauft werden sollen.
Hat aber noch fünf weitere Sachen im Kopf, die sie da draufschreiben will.
Jochen geht schon einkaufen.
Nein, Jochen hat jetzt schon mal ein Foto gemacht von der Liste und ist einkaufen gegangen.
Und die Frau schreibt dann erst, und erst danach schreibt die Frau die Sachen auf die Liste.
Das heißt, Jochen hat sie schon unterwegs.
Also es ist im Grunde, also jeder, der was ändert, ändert das erstmal für sich, ohne dass es ein anderer sieht. Und der andere sieht das erst, wenn auch wirklich das Commit gekommen ist.
Dann sieht der andere es erst, das ist das Read Committed, also ich kann erst das vom anderen lesen, wenn er das auch wirklich Committed hat. Es gibt in der Theorie noch Dirty Read und Phantom Read und so weiter, das wären Sachen, dass der andere das schon lesen kann, bevor ich das Committed habe.
Das hat Postgres gar nicht implementiert.
Das ist sehr einfach, das haben wir gar nicht implementiert.
Ich hatte letztens eine Migration,
die hatten ganz viel dieses Dirty Read benutzt.
Und dann habe ich dann die Entwickler gefragt,
warum braucht ihr das?
Dann mussten die erst mal ganz tief forschen.
Ja, weil das hat mal ein Kollege, der längst in Rente ist, gesagt,
dann ist das irgendwie schneller oder so.
Und dann mussten die noch länger forschen.
Und dann haben sie festgestellt, eigentlich brauchen wir es gar nicht.
Das können wir auch komplett anders machen.
Nur, weil Postgres das ja einfach nicht kann.
Also wir fangen erst mit Read Committed an,
das alles da drunter geht nicht.
Bei MariaDB geht es, glaube ich, so ein bisschen.
Habe ich aber auch noch nie wirklich eingestellt.
Und das Repeatable Read ist,
wenn jetzt einer anfängt, ein Select zu machen
und er braucht jetzt den Wert aus Spalte 5
und der Wert, sagen wir mal, ist 7.
Und der Select läuft länger
und er braucht diesen Wert mehrfach in diesem Select Query.
Also er greift mehrfach auf diese Spalte 5 drauf zu,
um den Wert sieben nochmal, weil er da irgendwie
Berechnungen macht. Und währenddessen ändert
ein anderer den Wert auf neun.
Ist natürlich doof, weil dann hat
das Query, das Select-Query mal sieben mal neun,
das will man nicht und dann kriegt halt
repeatable read, das heißt, wenn er das
einmal gekriegt hat, kriegt er dieses Ergebnis auch
bis zum Ende. Das heißt, du bekommst dann immer
die sieben, die neun wird ja erst,
wenn du das Select dann nochmal ausführen würdest,
wird das komplett mit neun machen.
Das ist repeatable read. Das kann PostgresQL,
auch wenn da irgendwie,
Ich glaube, wir nennen das nur Read Committed,
weil es kann ja mal passieren, dass auf dem Mars
ein Vulkan ausbricht und den Islandkreis
gerade schneit und der Jupiter
mit dem Saturn auf einer Linie steht,
da gibt es irgendeine Ausnahme.
Keine Ahnung.
Aber Maria HDW macht es auch.
Das ist eigentlich das, was standardmäßig heute passiert.
Und dann gibt es noch den Serializable.
Da kriegst du immer dasselbe Ergebnis,
solange wie die Session offen ist.
Und das ist
natürlich sehr, sehr schwierig.
wenn du da drei Tage eine Session offen hast.
Das kann lange sein, ja.
Du willst dann immer noch das Ergebnis von
vor drei Tagen, das ist 30 Mal geändert worden.
Das ist sehr, sehr schwierig
zu implementieren und deswegen, wenn man
mal so in die Buglisten guckt,
für die Datenbanksysteme, egal ob ich
einen Oracle nehme oder eins der IBMs
oder MariaDB oder PostgreSQL,
es gibt da Bugs
im Bereich serializable.
Also wenn man
da so SQL-Bugs, das ist ganz
häufig, dass es nur den
Serializable
betrifft, weil das auch
unwahrscheinlich schwierig ist zu implementieren.
Ich habe immer noch nicht rausgefallen, in all diesen
20 Jahren, wann überhaupt das
Serializable mal sinnvoll ist und wann er
eingesetzt wird. Meine Information
ist im universitären Bereich, aber auch da
ist er mir persönlich noch nicht begegnet.
ja, keine Ahnung.
Macht man nicht so ohne weiteres.
Aber ich weiß halt, heutzutage,
wo man immer ein bisschen dran denken muss, ist an dieses
dauerhaft.
Als Admin muss man da so ein bisschen dran denken,
dass man Datenbanken auch dauerhaft hat.
Hat das mit der Session vielleicht was mit Verbindungen
zu tun?
Eine Verbindung in der Session ist ein und dasselbe.
Okay, da können wir jetzt vielleicht direkt
drauf einsteigen, weil das noch ein Punkt auf der Liste war.
Also, wenn ich natürlich,
das ist eine Client-Server-Anwendung,
du hast halt die Datenbank
Server oder auch Dienst
oder auch Demon genannt
und du hast dann Client.
Der Client
kann alles Mögliche sein.
Das kann die Software sein.
Das ist in der Regel ein Stück Software, was auf die Datenbank
zugreift, so kann ich das am einfachsten sagen.
Am einfachsten erklärt das immer
bei dem
Webservice. Das ist auch
Client-Server. Du hast einen Webserver irgendwo stehen
im Rechenzentrum und das ist die Browser, die darauf zugreifen
und das sind die Clients.
Das hast du
bei Datenbanken genauso, nur dass
da die Clients halt in der Regel Software sind.
Und
Und ja, diese Software macht dann eine Verbindung zur Datenbank auf und schickt dann das Query, was sie anfragen will, die Datenbankanfrage, das kann jetzt das sein, was sie schreiben will oder was sie lesen will, schickt sie zu der Datenbank, die Datenbank führt das Ganze aus und schickt das dann über diese Verbindung zurück.
Man kann pro Verbindung zeitgleich, pro Verbindung und zeitgleich immer nur ein Query abschießen.
Das ist auch bei allen Handmachsystemen so.
Also es geht nicht, dass du in derselben Verbindung zeitgleich zwei Queries abschießt.
Das geht nicht ab vorerst.
Also du brauchst halt, wenn für jedes zeitgleiche Query, was du abscheuig schicken willst, brauchst du eine extra Verbindung.
Ja.
Also wenn es wirklich richtig zeitgleich ist.
Nacheinander kannst du natürlich, aber pro Verbindung kannst du es nicht.
Das heißt, du musst entweder immer warten oder tatsächlich
mehrere Verbindungen aufrufen. Ja, das
wird jetzt auch mit Async und so
sehr interessant dann noch, ja.
Ja, du musst halt mehrere Verbindungen aufmachen, das ist aber
auch nicht tragisch. Na, ist halt die Frage, wenn
die auf was Gleiches zugreifen, auf die gleiche
Zeile oder sowas? Nee, damit hat das
nichts zu tun.
Eine einzelne Verbindung
hat damit nichts zu tun.
Du kannst natürlich, wenn du zwei Verbindungen
hast und die greifen auf dieselbe Zeile zu,
dann muss der eine auf den anderen warten.
Aber von der Datenbankseite her dann? Von der Datenbankseite.
Das macht die Datenbank. Aber
du musst halt immer bedenken,
du hast eine Verbindung. Und bei Postgres,
bei Postgres ist eine Verbindung ein echter
Prozess. Und deswegen sind die Verbindungen
so teuer. Bei MariaDB ist es
ein Thread. Da hast
du irgendwann Probleme bei,
ja, wenn deine TCP-Ports
ausgehen.
Weil wenn du da, das hatte ich
schon ein paar Mal, dass ich Web-Server hatte,
dass die dann mit 5, 6, 7 oder mit 30 Web-Servern
auf eine Datenbank, dann hast du irgendwann
keine TCP-Boards mehr.
Dann fängst du mal an
und da gibt es dann ein Pooling
von InnoDB, für das du dann noch mit
100.000 Verbindungen zeitgleich und so weiter
auch noch spielen kannst.
Bei Postgres und bei denen, die prozessbasiert sind,
also fast alle anderen
großen,
bist du da viel früher dran,
dass du da Probleme kriegst, weil jede Verbindung
ist ein echter Prozess.
Und jeder
Prozess
braucht vom Betriebssystem her
erst mal einen Core, einen Kern,
einen Core. Ich kann
pro Core zeitgleich nur
einen Prozess abbilden.
Das heißt,
wenn ich acht Verbindungen aufhabe
und ich habe acht Cores, dann läuft
auf jedem Core eine Datenbankverbindung
zeitgleich.
Wenn ich da mehr
Verbindungen zeitgleich aufhabe, sagen wir mal, ich habe jetzt
vier pro Core auf, dann
gibt es den Betriebssystem-Scheduler,
der das schedult.
Und ja, dann gab es mal vom Postgres diese nette Empfehlung von meinem lieben Kollegen aus den USA. Ja, so vier Verbindungen pro Core zu einer Zeit, wo Cores auch noch nicht so gut verbreitet waren. Also generell, auch bei MySQL ist das übrigens nicht anders. Datenbanken sind immer sehr, sehr Core-lastig. Je mehr Cores, umso besser, gerade bei Web-Anwendungen und so weiter. Du kannst da nie genug voran haben.
Und du musst dir halt überlegen, wie viele Verbindungen habe ich zeitgleich und weil das echte Prozesse sind, ist da auch irgendwo mal eine Grenze. So man sagt so vom Bauch her irgendwie so 200, 400, das ist je nachdem, wenn du fragst, ist das ein bisschen anders, aber es gibt ein Connection Pooling.
Das heißt, du packst zwischen deiner Datenbank und deiner Anwendung einen Pooler. Ist sehr lustig. Ich habe mal in meiner Studentenzeit im letzten Jahrhundert, Anfang dieses Jahrhunderts, hatte ich einen Job bei einer großen deutschen namhaften Firma.
und damals hatte
der Datenbankhersteller
die Idee, wir verkaufen mal
Datenbanklizenzen pro
Verbindung. Richtig
teuer. Und die Firma
hatte dann fünf Verbindungen zu dieser Datenbank
gekauft und ich durfte
dann einen Pooler schreiben, der dann dafür sorgte,
dass immer nur fünf Verbindungen zu dieser Datenbank
kamen und alle anderen wurden dann
geschedult, ähnlich wie das Betriebssystem das
schedult. Da gibt es dann, häufig wird der
Ron-Robin-Scheduler genommen, der das dann
Und sowas gibt es halt auch für die Datenbanksysteme. Der von Postgres heißt PG-Bouncer, den wir immer empfehlen, wenn es keinen anderen gibt. Den setzt du meistens in die Nähe der Datenbank. Auch das ist eine Sache, die kannst du bis zum Umfallen diskutieren. Setze ich den Pooler in die Nähe der Datenbank oder setze ich den in die Nähe der Anwendung?
Wenn ich eine Java-Anwendung habe, irgendwas mit Tomcat und weiß der Kuckuck was, die bringen meistens einen Pooler schon mit, da brauche ich keinen zweiten. Das ist auch sowas, das sehe ich immer. Ich sehe manchmal Datenbanken, die haben dann drei Pooler, wo ich mich frage, warum einer reicht.
Wie ist das bei
Python? Weiß ich jetzt nicht.
Ne, da ist es also zum Beispiel Django macht das jetzt
ab 4.1, kommt jetzt irgendwann im Sommer
gibt es einen
internen Pool sozusagen
also für die
aber normalerweise
kannst du die Anzahl der Verbindungen, die jetzt dein
Applikationsserver sozusagen zur Datenbank macht, kannst du normalerweise
einstellen, aber das ist jetzt halt schwierig
geworden mit Async,
weil wenn du jetzt sagen wir mal so
fünf Queries machst und die können alle
gleichzeitig laufen und
ab Django 4.1 hast du halt auch schon
zumindest ein Async-Interface für
dein ORM. Also der ORM ist noch nicht
Async-fähig, aber es gibt
zumindest das Interface.
Dann könnte sozusagen
dann der ORM
fünf Verbindungen aufmachen, die alle gleichzeitig rausschicken.
Weil es geht halt nicht auf eine Verbindung, sondern fünf Verbindungen aufmachen.
So, wenn du jetzt aber eingestellt hast
in deiner Django-Config,
soll aber nur zwei
Verbindungen zur Datenbank aufmachen, dann ist das natürlich
ein Problem. Also
das muss man dann halt irgendwie handeln und dafür gibt es halt
eine Pool-Implementierung direkt
in Django, jetzt ab der nächsten Version, aber
genau,
ja. Also wie gesagt, das
kommt ein bisschen auf deine Hardware drunter an.
Ich sehe, du findest da so etwa 200, 400
Verbindungen. Musst du auch mal gucken,
zeitgleich.
Das ist auch sowas, wenn man das mal
monitort, das ist bei MariaDB einfach zu monitoren
und bei Postgres,
da habe ich da 10.000 Verbindungen
und gucke ich, habe ich
zeitgleich vielleicht maximal 64 gehabt.
Exakt zeitgleich.
Also das muss man ja auch
gucken, wie viel sind das denn wirklich
exakt zeitgleich, das ist so das
mit den Verbindungen.
Ja, also
ich meine, das ist halt, würde ich sagen, das ist eine der Haupt
Vorteile von
oder war früher auf jeden Fall
von MySQL, dass man da nichts machen musste.
Das halt so quasi
jedes Statement, das man abgefeuert hat von PHP aus,
hat halt einfach eine einwöhnliche Verbindung aufgemacht und
nach dem Statement war sie wieder zu.
Ja, nichts machen. Also ich hatte jetzt tatsächlich mal in der Pandemie einen Kunden, der durfte ich dann mit Servern spielen mit 128 Cores, das war schon sehr lustig, aber die Verbindungen waren dann auch, da hatte ich auch zeitgleich mehr, aber da hatte ich dann so irgendwie in die 200.000 Verbindungen und noch mehr.
und da fängst du dann auch bei MariaDB
anzupoolen und dann wird's lustig.
Ja. Dann macht's Spaß.
Weil dir dann auch irgendwann
die, wie gesagt, du, da hampelst du ja
plötzlich, da rechnest du dann auf einmal, wie viele
Ports hab ich denn überhaupt und
ja, und liebe
Web-Server, könnt ihr da vielleicht auch noch mal was
vorschalten oder so, aber das ist dann
schon, das macht dann Spaß,
aber. Ja gut, man kommt da wahrscheinlich
auch irgendwann ein, aber so für die
Feld und Wiesen. Nein.
Das ist auch das, was viele halt falsch machen,
wenn sie von der MariaDB MySQL-Schiene zu Postgres kommen,
dass sie dann die Verbindung so wahnsinnig hochsetzen
und dann macht das Betriebssystem auf einmal die Grätsche.
Das ist auch so eine Sache, genau.
Naja, also das war irgendwie, das war jedenfalls früher,
war das immer so ein, fand ich, so Haupt-Selling-Point für MySQL,
dass man sagen kann, okay, das kostet vielleicht eine Latenz,
30 Prozent oder so, aber dafür muss man sich keine Gedanken
um diese ganzen Sachen machen. Und die Infrastruktur
ist einfacher und so und
ja.
Lizenz hatten wir noch gar nicht drüber geredet.
Also wir hatten angefangen, also Postgres ist halt BSD
und BSD ist
sehr, sehr einfach zu handeln.
Deswegen hat man das auch viel in Maschinen, auch beim
Betriebssystem ist das viel BSD.
Maria, die bis GPL
und die haben dann noch
die,
erstmal muss man bei der GPL ja mal gucken,
GPL und welche
Version und die Verträge sind
ein bisschen länger und
man muss dann
gucken, MariaDB hat
so dieses, ich denke mal, das haben sie immer
noch, du kannst
es nutzen für deine eigene Zwecke,
aber wenn du Software hast, die du
verkaufst, und da, Maria,
dann musst du nämlich eine Lizenz bei MariaDB
kaufen, was ja auch eine faire
Geschichte ist. Wenn du das dann
nutzt in deiner Software, die du verkaufst,
dann musst du Lizenzen
kaufen. Genau, und dann
gibt es bei Postgres noch,
es gibt dann immer, das nennen wir immer das
Contrib-Verzeichnis, es gibt dann
auch so Tools. Bei einigen
dieser Tools fragt man
sich, warum
zur Hölle ist das nicht im Hauptpaket mit drin?
Das hat man
ganz häufig. Also es gibt da zwei Gründe.
Das eine ist, weil das Tool so groß ist. Früher
musste der Code ja noch auf eine Diskette passen.
Ganz lange. Nein, nein.
Eine Diskette hatte 3,
5 ein Viertel.
Nein, wie viel
1,44 Megabyte, genau.
Und ihr wisst noch, was eine Diskette ist.
Ja, ich kenne die, die biegsam.
Den Fünfeinviertelstoll angefangen,
nur 360 Kilometer drauf.
Ich bin noch mit Datasette angefangen.
Aber, ja.
Und dann gibt es dann so ganz große
Projekte wie das PostGIS mit den ganzen
Geodaten oder
der JDBC für Java.
Das sind so große Projekte, wo man gesagt hat,
okay, die macht man einfach einzeln, weil die braucht nicht jeder.
die kann man nachladen.
Erstmal das, das ist das eine.
Das andere ist, es gibt auch kleine Projekte,
wo man sich fragt, warum zur Hölle ist das nicht mit drin.
In 99%
oder in 98% der Fälle,
kann auch 100 sein,
also in 99, sage ich mal,
liegt das an der Lizenz, weil
diese Tools irgendwas nutzen, was
GPL mitbringt, was
nicht mehr mit der BSD-Lizenz
kompatibel ist und wo man
dann ansonsten das, also
die irgendwas nutzen, was dann aus
der GPL-Welt kommt
und das dann... Also um da nochmal
vielleicht zusammenzufassen, GPL
tendiert dazu, dass die Lizenzen halt nicht
kommerziell freien nutzbar sind für alle Zwecke, sondern
nur privat und BSD
hat halt für alle Zwecke auch für kommerzielle
komplett frei verwendet. Hast du schön gesagt.
Deswegen findest du auch immer Postcards in deinem Auto.
Nein. Was ist der Unterschied zwischen
BSD und MIT-Lizenz? Gibt es da überhaupt einen?
Nein. Ist das quasi dasselbe? Nee, MIT nicht.
BSD ist Barclay.
Barclay University.
Und MIT-Lizenz? Das ist eine andere.
East Coast versus West Coast,
ich weiß nicht, aber
die sind tatsächlich relativ ähnlich, also
die sind beide sehr liberal.
Genau wie Apache auch, ist auch sehr liberal.
Ja, Apache ist auch genau, das ist so das.
Da gibt es noch so Patentgeschichten, aber das ist auch normal.
Offiziell heißt die von Postgres auch Postgres-Lizenz,
aber die BSD-Lizenz.
Das ist alles von der Universität von Barclay,
die BSD-Lizenz.
Und MIT,
ja, ist halt,
ja, MIT, ich finde das immer so lustig,
Harvard und MIT sitzen in der
Ort, wenn du mal dir überlegst,
wo liegt das MIT? Jeder weiß, was die
Harvard-Universität ist und die MIT-Universität
hat man eigentlich schon mal gehört.
Die Städte, die sind,
die liegen tatsächlich nebeneinander und die Stadt
heißt Cambridge.
Und da muss man immer aufpassen, wenn man so im
universitären Unterwegs ist.
Hat man jetzt
die echte Cambridge-Universität,
also die in England, die ja auch nicht ohne ist,
die will man ja manchmal auch wirklich haben.
Oder hat man da wirklich wieder MIT und
Harvard, weil die auch gerne unter
Cambridge dann irgendwas veröffentlichen.
Das liegt im Übrigen
in der Nähe von Boston, falls es noch einer fragt.
Genau.
Und, ne, aber das ist,
die kenne ich jetzt gar nicht, die Lizenz.
Ich glaube, das ist für mich, also
MRT sind fast identisch, also du sagst es irgendwie
Patent. Ja, ja, das ist. Ne, das
Apache macht noch diese expliziten Geschichten mit den
Patenten, aber also
MSD weiß ich jetzt gar nicht genau.
ist aber auch, vielleicht die liberalste
ist wahrscheinlich MIT, da ist es eigentlich quasi nur
Copyleft, da steht nur drin, du musst halt sagen,
du darfst es nicht entfernen, aber sonst...
Nicht mal das, glaube ich.
Die BSD ist, glaube ich, nur, lass meinen Namen
in Zeitung.
BSD, es muss Namen drin bleiben, bei MIT ist es völlig egal.
Ja, ist beim Python übrigens auch so,
Python hat auch die Python-Lizenz,
aber es ist auch einfach nur BSD.
Wir haben irgendwann vor etlichen
Jahren mal, auf einmal war das alles
nicht mehr BSD-Lizenz, sondern jedes Projekt hatte
seine eigene Lizenz, was aber eigentlich die BSD-Lizenz
Das war, ich nehme an, da gab es irgendwelche Namensgedöns-Geschichten.
Keine Ahnung.
Sag auf jeden Fall, von wem es gewesen ist, wenn du das sagst.
Mach mal so was.
Ja, irgendwie so.
Ja, interessant.
Ja, ist doch schon relevant, wenn man das als Unternehmensgründe nutzen möchte.
Also ich war mal in einem Unternehmen als Diplomant damals.
Die hatten wirklich überlegt, aus dem Maschinenbau dann irgendwann das mal,
wurde das ja weiter automatisiert und so weiter.
Und die haben dann damals echt diese Diskussion geführt,
was nehmen wir für Platinen oder was
machen wir für ein Betriebssystem auf
unsere Platinen oder auf unsere Hardware
drauf und da war eine Diskussion Linux
versus BSD
und die haben sich dann für BSD entschieden,
weil ein abgespecktes Linux
kriegst du ja auch hin und es war damals
ja auch noch nicht so groß,
eben wegen der Lizenz, weil die das
auch ohne Probleme dann in jedes
der Geräte, die du heute in jedem
Handel kaufen kannst, auch einfach drunter
legen kannst und ich meine, viele
Autos nutzen auch BSD Lizenz, also
Das ist ganz, ganz spannend, wo du überall BSD drauf hast.
Das ist sehr, sehr interessant.
Du kommst ja heute gar nicht mehr dran.
Früher haben wir uns ja immer noch den Spaß gemacht,
die Geräte auseinanderzubauen und zu gucken, was da drauf ist.
Das stellen die Hersteller ja heute,
kommst du da nicht mehr so ohne weiteres dran.
Oder du hast eine Rest-API denn irgendwo.
Ja, du hast halt ganz viel da, BSD.
Und wenn die dann eine Datenbank brauchen, eine etwas größere,
dann hast du auch ganz häufig Postgres.
Das ist interessant.
wir haben jetzt noch zwei Sachen auf der Liste,
die da vielleicht ganz gut reinfallen. Also Maria
wäre das Postgres, wäre vielleicht das. Also da hatten wir
schon mal kurz. Und das andere war NoSQL.
Achso, ja, also
da gibt es jetzt nicht ganz
viel zu sagen. Es gibt halt neben den
Relationalen, die sich, also
diese, ja erstmal ist ja NoSQL
ist ja Not Only SQL.
Und da fanden die
hierarchischen Datenbanksysteme,
wer das mal gelernt hat,
hierarchische Datenbanksysteme, sowas wie
oder auch das Detailsystem.
Das ist auch ein Datenbanksystem.
Die waren dann plötzlich NoSQL. Das fanden
die sich überhaupt nicht mehr mit zurecht,
weil, ja, not only SQL.
Und nein, es gibt halt
tatsächlich sind dann so
2007 hat das so ein bisschen
begonnen oder
seit 2007 hat sich das angefangen
zu etablieren.
Meines Wissens sind das
Dokumentenbasierte,
von der Technik her Dokumentenbasierte
Datenbanksysteme und Graf-Datenbanksysteme,
die grafenbasiert sind.
Und das grafenbasiert
habe ich vorhin schon mal so versucht, das sind dann
so die Klassiker, Kunden,
die das gekauft haben, haben auch das und das gekauft.
Das ist
so das klassische Beispiel dafür.
Das könnte man wahrscheinlich auch in einer normalen SQL abbilden.
Ja, da kriegst du aber die Krise bei, wenn du das abbildest
in einer normalen SQL. Weil die Trails dann zu groß werden
oder die Joints zu groß werden. Ja, du spielst dann ja
mit Matrizen am Ende und weißt ja, guck, guck,
du brauchst ja unendlich viele Tabellen.
Also da wird es echt,
Das ist das Grafen-Dingen. Und wenn du dann mal so heute in größere Firmen guckst, ich nenne jetzt keine Namen, das darf ich jetzt ja wahrscheinlich nicht, die haben immer Kombinationen. Also ich sag mal so ein Web-Anbieter, der hat ganz, ganz häufig Kombinationen.
Also für solche Sachen hat er dann eine Graf-Datenbank
und ansonsten hat er eine Relationale
für das ganze Kunden- und Verkaufsabwicklungs-Git,
dann hat er das Relationale.
Und was dann immer noch, Material vielleicht auch.
Und das kann man dann auch verknüpfen.
Die nutzen ganz viel, meine Erfahrung ist,
was sie da ganz viel nutzen, ist von Apache,
das ganze Hadoop mit HBase, HGraph und wie sie alle heißen.
Also die meisten Firmen nutzen sowieso Maria und Postgres.
Also du hast nicht mehr nur ein Datenbanksystem,
dem, du hast halt ganz viele. Und
dokumentenbasiert ist von daher interessant,
wir bei Postgres empfehlen ja immer
Elasticsearch.
Das ist nicht, dass
du Dokumente ablegst.
Also Dokumente könnten jetzt, ich
nehme immer ganz gerne auch Bilder als
Beispiel jetzt. Bilder oder
auch irgendwelche langen Textdokumente.
PDFs oder so.
Aber das
Gute an dokumentenbasierten Baden-Baden
ist, dass du in den Dokumenten suchen kannst.
Das heißt, du kannst mir sagen, gib mir alle Bilder,
die den Farbcode rot haben.
Oder wo rote Pixel drin sind.
Das kannst du natürlich nicht.
In einer relationalen Datenbank
liest du das Dokument so als Blob ab.
Und du kannst nur das Dokument,
du kannst aber nicht reingucken in das Dokument.
Ich müsste halt vorher beim Speichern reingucken,
müsste quasi den Link zu dem Dokument
in die Datenbank schreiben.
Ja, aber dann weiß man immer noch nicht,
wo die Farbpixels raus oder ähnliches.
Ja, die müsste ich ja einfach speichern.
Nein, aber bei der Dokumentenbasierten
oder wenn du PDFs,
dann kannst du in den PDFs auch suchen,
wenn du da Text hast.
Wobei das bei PDFs heutzutage wieder schwierig ist,
weil ganz viele PDFs aus Kopierschutz als Bilder sind.
Das ist dann auch, ist ätzend, wenn du die kopieren willst.
Aber das ist so was, wo du dokumentenbasiert
natürlich super für gebrauchen kannst,
wenn du in den Dokumenten selber suchen willst.
Gib mir jetzt Gesichtserkennung, ganz klassisch.
Das ist so was, wo du dann Dokumenten basiert hast
mit Farbcode und mit was auch immer.
Gesichtserkennung wäre jetzt so was.
wobei ich da nicht weiß.
Sie speichert ja bestimmte Punkte wahrscheinlich und dann die Winkel
dazu. Ja, aber das ist jetzt was, was mir einfällt,
wo du so bei Bildern ganz
viel machst, das ist das.
Es gibt natürlich Dokumenten, MongoDB
ist dokumentenbasiert, MongoDB
ist natürlich sehr extremst umstritten.
Wie gesagt, die Firmen, die ich kenne, die haben
dann da aus der Apache-Geschichte
Hadoop und so weiter.
Warum ist MongoDB umstritten?
Und meine Erfahrung mit MongoDB ist, dass es extrem rammlastig ist und auch sehr rammaggressiv ist.
Aber es gibt da tatsächlich Tests von großen Firmen, die mit F anfangen oder mit B anfangen.
Oder ähnlich ist die MongoDB auch wirklich auf die kleinsten Niere auseinandergenommen.
oder mit G anfangen,
wo es dann auch mal
Dokumente dazu gab,
warum sie das dann jetzt nicht einsetzen.
was ich halt hatte,
es gab auch eine Zeit lang Hoster, die gesagt haben,
du darfst keinen
Tor-Server auf deinem
Server machen und keine MongoDB.
Gerade in VMs,
weil sie dir den Ramp vom ganzen Host
mit wegbringen oder ähnliches.
Auch weil MongoDB am Anfang
halt keine, defaultmäßig keine Authentifizierung
hatte, du konntest dich einfach drauf verbinden.
Ja, irgendwas war da, ja.
Das war so ähnlich wie bei MySQL auch,
weil da war es am Anfang auch so,
naja. Aber wie gesagt, die meisten
greifen dann aber tatsächlich im professionellen
Bereich auf diese ganze Apache
H-Dub, H-Base, 11-Grad-Graf
und was weiß ich was zurück.
Neo4j ist, glaube ich, auch H-Graf.
Das hängt irgendwie
zusammen. Bei den grafenbasierten
Elasticsearch
ist so ein klassisches
Dokumentendingen zum Suchen in Dokumenten.
Also da gibt es
verschiedene. Da müssten wir jetzt auch nochmal eigentlich
im Einzelnen nochmal, wie man das denn macht.
Ja, da bin ich aber auch nicht wirklich so.
Da ist halt das Problem, dass es da ganz viel Software gibt
und dass du da, deswegen
sage ich immer, man muss das dann auch heutzutage
den jungen Menschen beibringen. Es gibt halt
nicht nur Relationale. Es gibt halt diese
anderen und wenn ihr die wirklich braucht,
du kannst die nicht alle im Studium
lernen. Also da gibt es dann GQL und so weiter.
Ich weiß nicht, ob das auch sinnvoll ist, die alle
im Studium zu lernen oder hinterher Kurse dafür
anzubieten, wie du es programmierst. Gut, wenn du
jetzt Programmierer wirst, ist das natürlich
vielleicht sinnvoll, dass du es noch lernst. Ich weiß es nicht.
Aber wenn man es braucht vielleicht.
Ja, wenn man es braucht, dann muss man sich
da mal reinfuchsen. Ich weiß auch nicht, wie viele
Schulungen es da schon gibt. Also ich weiß, dass
CouchDB da mal eine ganze Menge gemacht hat im
Schulungsbereich. Und bei den
CouchDB ist, glaube ich, auch Dokumenten basiert.
Für mich jetzt nicht alles täuschen.
Das ist
so ein Misch, glaube ich,
aus beiden. Ja, das glaube ich,
das ist halt so ein sehr, das kann man
sehr gut verteilen. Das ist auch mehr, aber
eigentlich eher so ein Key-Value-Store.
Aber ja, also es gibt
ja ganz viele unterschiedliche Dinge. Ich weiß
nicht. Ich glaube, das ist gar nicht so
einfach, sich zu überlegen, was man da jetzt
braucht, wenn man sich damit nicht so auskennt. Ich glaube,
wenn man sozusagen weiß,
was man daneben, also wenn man das
Problem hat, dann weiß man das.
Wenn man das nicht weiß, sollte man lieber Postkarten sehen.
Ich habe tatsächlich an der Uni dann so ein bisschen
die Studierenden mit Nois,
Quatsch, mit Neo4j spielen lassen.
Ich habe aber auch eher so einen Zugang
zu den Grafen als es zu den anderen.
Weil bei die anderen
kann man sich auch besser vorstellen.
Die sind dann auch wahrscheinlich leichter im Selbststuhl.
Ich habe die also echt mit Neo4j,
die hatten es mal ein bisschen rumspielen lassen,
dass sie das mal gesehen haben.
Und das ist ja auch schon mal was.
Damit du überhaupt weißt,
dass du es mal gesehen hast.
Was würde man denn jetzt nehmen, wenn keiner ein GrafQL mit ein bisschen
rumspielen will? Was würde man jetzt da drunter schicken?
Neo4j. Das hat auch eine Oberfläche
tatsächlich auch.
Das ist das, womit ich rumgespielt habe.
jetzt.
Du meinst GraphQL, das von Facebook?
Zum Beispiel, ja.
Das kenne ich gar nicht.
Ja, das ist irgendwie so eine neue Geschichte,
so quasi als Alternative zu
JSON über
so JSON-API.
Aber das weiß ich nicht,
das gibt keine Datenbank, die sowas direkt
glaube ich. Außer Neo4j?
Vielleicht kann die das, ich weiß es nicht, vielleicht gibt es
irgendeinen Adapter oder so, aber ich glaube dieses,
die Sprache, die die verwenden, irgendwas mit
Cycle oder weiß ich nicht.
Es gibt tatsächlich standardisiert das GQL
mittlerweile, da hat Katana auch ganz viel
mitgemacht.
Nein, aber das ist, es ist ja
erstmal auch wichtig, guck mal,
ich muss auch nicht jede Programmiersprache kennen,
aber es ist schon mal schön zu wissen, wie sie heißen
oder nicht jede Programmiersprache
programmieren können.
Ich kann jetzt auch kein Python,
Und bin ich ganz ehrlich, doch, ich habe mal was mit Python gemacht
vor gefühlten 100 Jahren.
Irgendwo ist mir Python mal wirklich ...
Wahrscheinlich, wenn es länger hält.
Nee, früher musste man auch schon mal an so Software noch rumspielen,
damit man irgendwelche Features hatte, die man nicht hatte.
Ich weiß aber gar nicht mehr, wie das Tool ist,
wo man das brauchte in Python, was in Python geschrieben war.
Aber so ähnlich, wie man bei AutoCAD auch erst mal Lisp lernen musste,
um da irgendwelche Funktionen zum Zeichnen zu machen,
weil es gab nur eine Linie und kein Kopieren
oder kein Spiegeln oder so. Das muss man sich selbst
probieren in Lisp. Und irgendwie war das
auch, da gab es irgendein Tool.
Blender ist eins, was Python schon ganz lange
gemacht hat.
Also wenn du C kannst, kannst
du die meisten anderen auch wenigstens halbwegs
lesen.
Und es ist nicht so schwer, da irgendwo reinzukommen.
Postgres ist im Übrigen
komplett in C geschrieben.
MariaDB ist so ein Misch
aus C und C++.
Ich meine, ich habe da jetzt nicht so viel
Erfahrung. Ich habe einmal versucht, in MySQL
einen Bug, den ich gefunden habe, irgendwie zu
debunken. Das war eher schwierig.
Also ich fand das so, war so, auch gerade
diese Swearing-Geschichte war, fand ich
war, war,
hat, ich,
hat jetzt nicht so viel Joy
bei mir gesparkt, muss ich sagen. Wohin gegen Postgres?
Sehr gut, kann ich empfehlen. Kann man sich sehr gut
angucken. Ja, das ist das. Postgres hat da auch
immer Lob für gekriegt, dass die einen sehr, sehr
guten Quellcode haben. Sehr gut lesbar
auch. Aber das liegt natürlich
auch daran, dass da wirklich einer drüber
guckt und dir jeden Code, jedes Mal
den Patch zurückführt, wenn du die Klammer auch nur
in der falschen Zeile hast.
Und wenn du dir den Postkastcode
anguckst, also nur alleine,
du machst ihn auf in irgendeinem Editor
und du guckst dir den Postkastcode an
und du guckst dir irgendeinen anderen Code an.
Du siehst diesen Unterschied.
So ein sauberer Code.
Das ist was wert, ne Jochen?
Ja, finde ich auch.
Also früher war immer der Horror, OpenOffice
zu kompilieren.
Das war immer ganz schrecklich und MariaDB brauchte einfach immer lange, es kompilierte immerhin durch, aber es brauchte halt auch wahnsinnig lange Postgres-Kompilieren, war auch früher mit alter Hardware schon relativ schnell.
Und das ist halt der Unterschied zwischen C und C++, dass C++ auch länger zum Kompilieren braucht. Also es gab da, wenn du mal die Gentoo-Leute fragst, die können dir genau sagen, welche Software da besseren Code hat und welche nicht und welche der Horror ist zum Kompilieren. Das ist so, ja. Du hattest noch eine Frage?
Ich habe noch ein News vergessen, fällt mir da gerade ein. Und zwar wurde von C89 auf C11 geändert in dem Linux-Kernel vom Standard.
Achso, wow, also richtig moderne Geschichten.
Ja, das war halt, ja, modern. Aber das war das erste Mal, dass es da irgendwie Diskussionen gab, wo Linus irgendwann eingesetzt ist.
Also, Unterschiede Postgres MariaDB, wann würde ich was einsetzen? Es gibt ganz viele Bereiche, wo das völlig wurscht ist.
Wenn ich im GIS-Bereich
unterwegs bin, würde ich immer
Postgres nehmen, weil Postgres ist irgendwie
mit dem PostGIS doch führend.
Ja, genau. Gibt es auch bei kommerziellen
Orgel kann das auch nicht.
Wenn ich im Hochverfügbarkeitsbereich
bin,
da ist irgendwie
majestuell allen anderen schon vor
Jahrzehnten sowas von dran vorbeigelaufen.
Und
also ich kann bei
MariaDB
Hochverfügbarkeit, wir reden jetzt
von Replikation.
Man darf heute nicht mehr
Master und Slave sagen aus
politischen Gründen.
Man spricht dann heute von
Primary und Secondary oder
Primary und Standby.
Technisch ist es wahrscheinlich dann trotzdem genau nicht.
Was ich erstmal machen kann
bei MariaDB, weil es Thread-basiert ist
in den Verbindungen und nicht Prozess-basiert
ist, ich kann da einen Master machen
oder Primary und dann
10.000 Slaves dahinter hängen.
10.000. Ihr wisst was.
Standbys dahinter hängen. Gar kein Problem.
Oder ich kann natürlich
auch dann immer einen Standby
also ich kann immer replizieren
Standby von Standby von Standby.
Also kann man so eine Kette aufbauen.
Aber es ist überhaupt
kein Problem und das wird auch häufig genug
gemacht. Ein Master und dann
mehrere tausend Standbys.
Machen die Großen alle.
Und wenn du mal guckst, die meisten Großen,
meisten ganz Großen haben auch da in diesem
Bereich immer MariaDB oder
MySQL halt entsprechend von Oracle,
aber nichts anderes.
Bei
Postgres ist es prozessbasiert
und da hatten wir ja das, Verbindungen
sind halt Prozesse, also
da kriegen dann die Postgres, da kriegen Schnappatmungen
und du sagst, du willst einen Master
haben und 1000 Standby.
Das ist schon mal eine Sache,
da muss ich mir das überlegen.
Die Streaming Replication von
Postgres funktioniert super. Ich habe
mal
einen Wettaufsetzen gemacht
mit einem von
MariaDB, mit einem der Chefs von
MariaDB, mit dem Chef von MariaDB
mit reichlich
Alkohol dabei
und wer
mehr Key Hits braucht zum Aufsetzen
eines Standbys, und ich hatte
zwei weniger als er, obwohl das Wort
Postgres länger ist als
MariaDB, aber
das ist relativ simpel.
Man will eigentlich bei Postgres die
Streaming-Replication haben.
Was ich bei,
ja, man will sie eigentlich haben.
Dann kann ich bei MariaDB
auch sowas machen, wie
ich habe zwei Master.
Die kann ich theoretisch auch als Master
Master-Replikation nutzen.
Das will man aber nicht. Da hat man andere
Affe-Fakte. Aber ich kann schon mal
zwei Master aufsetzen und da jeweils ein paar
tausend Slaves hinterhängen.
Ich setze die
als Master-Master auf, das heißt, die replizieren
gegenseitig.
Ich nutze die tatsächlich als Master-Slave.
Das heißt, ich spiele alles,
was ich schreibe, nur auf den einen Master
und der repliziert.
Wenn ich jetzt aber den Wartungsfall habe,
kann ich den einen
Master, dann brauche ich nur die IP
schwenken auf den anderen Master
und dann kann ich den einen warten.
Und der zieht sich alles nach, was er
verpasst hat.
Und ich muss nichts weiter konfigurieren.
Das ist das, wie dann auch, das machen auch gewisse weiterführende Tools, das ist jetzt das einfachste Clustering mit Hochverfügbarkeit und Master, Master und, nee, wie heißt das, Failover oder sowas, also, dass ich dann einen Master rausnehme, den kann ich dann warten und dann schwenke ich die IP, also ich schwenke die IP auf den anderen Master, dann wird da einfach weiter, der Anwender merkt da nichts von, das macht Pacemaker, CoroSync,
Das machen die innerhalb vom Augenblick, die IP schwenken und dann geht das auf dem anderen Master weiter. Dafür ist das sehr, sehr sinnvoll. Das kann ich mit der Streaming-Replication von Postgres nicht. Das gibt die Streaming-Replication nicht her.
Dann hat man ja erfunden, PostgreSQL, logische Replikation, die kann aber kein DDL, die kann Master, Master und die kann alles mögliche, was man immer so kritisiert, die kann aber kein DDL, das heißt, ich kann damit keine Tabellen erzeugen oder ähnliches.
Das wird nicht repliziert, nur repliziert, was ich einmal aufgesetzt habe. Wenn ich danach irgendwie eine Tabelle ändere oder mein Datenbankschema ändere, das wird nicht repliziert. Ist natürlich blöd, weil ja jede Software auch mal irgendwie in ihren Updates auch Schemaänderungen mitbringt und müsste ich meine Replikation neu aufsetzen oder da irgendwie rum vorstellen, dass sich die Tabellen, die sich geändert haben, da wieder rein, ist natürlich etwas, das will man eigentlich heutzutage nicht mehr, man will, dass das automatisch geht.
Ist was geplant?
Nicht, dass ich wüsste.
Man will diese Streaming-Replication,
die ist auch super.
Aber wie gesagt, die will immer
ganz zwingend, dass das
Stand-by-Read-Only ist. Das heißt,
dieses Master-Master-Setup kann man nicht machen.
Man kann es, weiß das Gen schon,
konfigurieren, aber nicht so schön
einfach nur IP schwenken.
Man muss da im
Chorosync oder im Pacemaker
ein bisschen mehr konfigurieren. Der Pacemaker
muss ein bisschen mehr machen, um den zweiten
dann zum Laufen zu kriegen.
Wenn der Master wird.
Soweit, so gut. Manchmal braucht man ja auch
nur zwei Standbys oder so.
Dann ist das nicht so schlimm.
Mit den vielen Standbys könnte man ja Postgres
nehmen. Jetzt hat man aber das nächste
Problem, dass die Postgres
Replikation oder das
Transaktionslog, was das alles irgendwie
steuert, ist
von drei Sachen abhängig.
Fangen wir mit dem an, was
was heutzutage fast am irrelevantesten
ist und wo mich die meisten mal fragen, was ist
es? Es ist Endian-abhängig.
Und was ist
das?
Genau, das war die Sache mit
diesen Zahlen von rechts nach links oder links
nach rechts lesen.
Es gibt Big Endian und Little Endian,
die meisten heutige Hardware ist Little Endian.
Du hast kaum noch Big
Endian. Die alten
Sunsparks waren Big Endian.
Die haben einfach da
die Sachen andersrum drin.
und ich sage ja, das ist nicht
mehr ganz so. Dann ist sie,
auch das ist meistens was, was keinen
stört, betriebssystemabhängig.
Wobei
Betriebssystem heißt Linux
und nicht SUSE oder Debian,
sondern Linux versus
Microsoft oder
versus
was auch immer Microsoft da für Betriebssysteme
hat, BSD.
Also ich kann nicht replizieren von
einem Linux-Server auf Microsoft
oder andersrum.
das stört die meisten
auch noch nicht, weil meistens hat man
sowieso nur...
Und
das dritte ist, es ist
massivst versionsabhängig.
Und da
sind wir jetzt an dem Punkt, wenn ich eine
MariaDB habe, die kann ich hot
upgraden. Sagen wir, ich
habe da einen Master
oder ich habe da zwei Master, ich habe das
aufgesetzt als Master-Master-System
und habe da jeweils hinter den Master noch
fünf, ich habe dann vielleicht noch mal
drei Slaves hinter den Mastern direkt und die
haben nochmal zwei Slaves, jeder dahinter
und so weiter. Ich habe da nur so ein Kettensystem hinter
mit etlichen Slaves.
So, dann gehen dann große Firmen hin und die
sagen dann, es kommt eine neue Version raus,
die upgraden dann erstmal
den hintersten Slave bei MariaDB.
Weil MariaDB
kann ja problemlos von einer
niedrigeren, von einer älteren Version in eine
neuere Version replizieren.
Das heißt, die gucken erstmal
beim hintersten Slave oder beim hintersten
Standby nach, funktioniert alles.
Wenn da alles funktioniert, dann machen sie
die nächste Ebene und so weiter.
Es kann sein, dass dann mittlerweile schon noch eine neue
Version draußen ist, bis sie den
Master überhaupt mal upgraden.
Irgendwann kommen sie dann, schwenken die IP und
upgraden die Master. Ich kann das komplett
hot upgraden. Das heißt, ich habe
ja immer nur eine Maschine, die ich da rausnehme
aus dem Cluster.
Und das geht bei Postgres nicht, weil
ich kann nicht von der niedrigeren Version
von der älteren in die neuere.
Das heißt, wenn ich ein Upgrade habe,
habe ich immer eine Downtime.
Die kann ich irgendwie natürlich klein halten, wenn ich da noch mit irgendwie, ich baue noch nebenher noch eine logische Replikation oder so weiter, aber ich habe eine Downtime.
Irgendwann habe ich den Punkt, wo ich mal eine Downtime habe von dem ganzen System.
Und das ist tatsächlich etwas, was gerade so große Firmen.
Ja, kann teuer werden dann.
Ja, nicht nur das. Ja, teuer
auch. Lass mal die
Amazon-Seite nur 10 Sekunden
nicht verfügbar sein.
Bei Amazon hat das
auch noch, oder Facebook, 10 Sekunden
nicht verfügbar.
Das ist so ähnlich wie gute Zeiten, schlechte Zeiten,
wenn das Kabelfernsehen ausfällt, kann ich mir
vorstellen oder so. Habe ich nie
geguckt, weiß ich nicht, aber ich weiß, ich habe
mal von Monteuren
gehört, dass das, also gerade bei
Kabelfernsehen, dass die Leute da verrückt spielen.
Also ich kenne das aus Spielefirmen.
wie bescheuert da Spieler
werden, wenn da Angriffe nicht gefahren
werden können. Und du stehst da, das ist doch nur ein Spiel.
ja, aber lass mal so ganz große Sachen
da irgendwie,
das ist, also irgendwann bist du am Punkt,
da kannst du nicht sagen, okay,
mit der Downtime kann ich leben.
Es gibt natürlich andere
Anwendungen,
wo du sagst, ja Gott, dann haben wir mal einen Tag
Downtime, das schaffen wir schon, oder dann haben wir mal
zwei Stunden Downtime, das kriegen wir hin,
das kriegen. Wir haben genug Wartungsfenster
drin, zwei Stunden ist überhaupt gar nicht das Problem.
Ja, wenn man sich das aussuchen kann, dann kann man irgendwie wirklich
was nehmen. Du, es gibt ja
so Business, das passiert nur Montags bis
Freitags. Da kannst du am Wochenende
auch mal so Upgrades fahren.
Durchaus.
Jetzt nicht gerade in
einer Einzelhandelsindustrie.
Da sind ja auch genug Services, einfach Hauptgeschäftszeit
aus. Du hast ja auch tatsächlich
so natürliche solche
Schwankungen, auch nachts
kann man oft Backups machen, weil
Das ging ja zur Tagszeit gar nicht.
Ja, aber das ist lustig,
was zum Beispiel Auftragsprobleme sein kann,
dass du nachts die Backups gar nicht mehr machen kannst,
weil nachts so viele andere Services laufen,
die halt sonst im Betrieb nicht funktionieren.
Das habe ich mal gedacht.
Ich habe einen Kunden,
der machte Kassensysteme für einen Einzelhandel.
Und der hatte eine ganz große Kette Einzelhandel.
So 70.000 Bonds pro Minute.
Da könnt ihr euch vorstellen,
Kassenbonds pro Minute.
Da könnt ihr euch vorstellen, wie groß die Kette war.
die hatten kaum Wartungsfenster.
Jetzt denkst du, okay, so ein Geschäft macht ja
irgendwann abends um 10 zu.
Ich glaube, das war sogar eins, was um 8 zu
macht, so generell. Hat sonntags nie auf.
Samstags vielleicht
schon um 16. Also du hast da ja
durchaus nachts nichts laufen. Du kannst
da ja Wartungen machen oder sonntags. Die hatten
tatsächlich nur noch einen Tag im Jahr,
wo die Wartungen machen konnten. Ich glaube, das war
Ostermontag oder so.
Und Pfingstmontag oder irgendwie sowas.
Oder wenn Donnerstag
dass ein Feiertag war. Das ging glaube ich
auch nicht um mich, weil
nämlich diese Einzelhandelskette
dann immer, wenn die
Geschäfte geschlossen waren,
haben die Preisupdates und was weiß
ich, Warenwirtschaftsupdates gemacht.
Ohne Ende, aber auf der Datenbank, wenn die
geschlossen waren, hatten die Geschäfte viel mehr los,
als wenn die Geschäfte offen hatten und die ganzen Kassen liefen.
Aber weil die ja die ganzen Ware
aktualisieren mussten und weiß der
Kuckuck, das lief dann durch.
Und so kam das dann wirklich so
für administrative Dinge, dass das wirklich mal
down sein konnte, das System,
da mussten schon mehrere Feiertage hintereinander
folgen, damit das dann überhaupt noch mal einen Tag
blieb, so, dass die dann zu hatten.
Also, deswegen,
das ist so was, man muss das
vielleicht auch dokumentieren als Admin,
dass man da eine Downtime hat.
Man kann die natürlich,
man kann das geschickt machen, dass man
nicht ganz so viel Downtime hat.
Aber man hat eine Downtime, da kommt man nicht
drum rum. Und so
ohne Downtime, ganz ohne Downtime, dieses
Hot-Upgrade, wie es so wunderschön bei
Oder es ist halt nicht eingebaut, man muss es dann halt selber machen.
Was?
Man muss das dann ja vielleicht einfach selber machen.
Ich meine, ich kann ja schon zwei Datenbanken laufen haben
und switche dann halt am Loadbalancer um,
aber dann machen wir halt einen Loadbalancer an,
den man da switchen kann.
Was?
Das hat ja wahrscheinlich auch nicht jeder.
Naja, ich kann ja sozusagen eine Postgres,
nehmen wir an, ich habe eine Postgres-Datenbank
oder ich möchte die upgraden ohne Downtime,
ja, dann habe ich halt eine zweite.
Dann muss ich auf der, die ich upgraden möchte,
halt muss ich dann irgendwann sagen,
okay, jetzt darf nicht mehr geschrieben werden,
switche ich und muss die andere
sozusagen so lange repliziert haben, bis es
wieder da ist. Okay, ich habe eine kleine Downtime bestimmt
und dann switche ich das Ganze um.
Und du hast halt das Problem,
dass du, echte
Hochverfügbarkeit fängt ja bei drei
Maschinen an, damit du, wenn eine ausfällt,
immer noch zwei hast und nie eine alleine.
Du musst ja, wenn du jetzt
einen, egal, du hast einen Master
und zehn Standbys, du kannst die nur
alle zeitgleich upgraden.
Was in der Regel dazu führt, dass du
den Master upgradest und die Standbys neu aufsetzt
auf der neuen Version, aber du kannst
nicht, du kannst ja nicht, weil die sind ja
noch auf der alten Version, du kannst nicht in einer
anderen Version replizieren. Das heißt, du musst
deinen ganzen Cluster zeitgleich irgendwie,
das heißt, ganz häufig
fängst du dann an,
also meine Erfahrung ist, du fängst dann an,
du machst dann einfach nur die eine, die Mastermaschine, die
gradest du ab und die ganzen Standbys setzt
du neu auf, weil das ist schneller,
es ist ganz häufig schneller
als, nicht immer, manchmal
will sie sie auch einzeln upgraden, aber
ganz häufig ist es schneller, sie neu
aufzusetzen. Aber kann man das
nicht, ja gut.
Siehst du das Problem? So ein bisschen
ja, ja. Ich meine gut, muss man
also wie gesagt, du kannst mit einer,
wenn du wirklich keinen DDL hast und du
weißt, diese Nacht kommt auch kein DDL rein.
Ganz kurz auf Cache-Only stellen?
Nein, auf logische, kannst du noch
einen logischen Replikations-Server daneben
stellen. Da kannst du auch von einer niedrigeren
in eine höhere replizieren und andersrum,
dass du dann erstmal logisch
replizierst, das braucht natürlich ein bisschen das aufzusetzen,
das kannst du ja im laufenden Betrieb machen.
Und dann fängst du an
mit dem
Upgrade. Dann hast du dann erstmal die
logische Replikation, die dann weitermacht.
Da schreibst du rein.
Und weil du ja logisch
replizierst und damit kriegst du es dann ein wenig
niedriger, die Downtime.
Da musst du aber aufpassen, dass nicht
zeitgleich deine Software ein Upgrade macht oder ähnliches.
Wenn deine Software
so im normalen Tagesgebrauch
kein DDL braucht, also ganz häufig
DDL heißt Data Definition Language, das heißt
alles, was mit Create, Alter und
Drop zu tun hat oder Grant und Revoke
zählt da auch noch rein. Also
wirklich nur Insert, Update, Delete
und Select machen, mehr nicht.
Wenn du keine Creates hast
im Tagesgebrauch, dann könntest
du sowas machen, weil dann
hast du ja diese DDLs hast du dann
ja nur, wenn deine Software, die du dahinter
hast, ein Upgrade machst. Dann hast du ja
meistens, wenn du eine Software Upgrade hast, hat
die auch ein Upgrade in der Änderung
in der Datenbank. Irgendwie.
eine Schema-Änderung in der Datenbank, das ist ganz häufig.
Aber so kriegst du es dann hin.
Also, dass du die Downtime
geringer hältst.
Du kriegst sie nicht ganz weg.
Du hast immer, irgendwo hast du
eine Downtime und du musst ja
danach die Standbys wieder aufsetzen und das
dauert ja auch und je nachdem, wie viele Leute und
Manpower du hast. Ja, das kann ich ja vorher machen.
Ich muss da leben, dass der Repetitions-Lag halt
ein bisschen größer ist, eventuell.
Du ziehst das aus dem selben Backup, genau.
Genau. Ja, du kannst auch einfach
die Datenbank-Server neu aufsetzen und
dann aus dem Backup das ziehen und dann
die Standby ist dahinter. Dann hast du aber auch
eine Downtime.
Ohne Downtime kommst du da nicht aus.
Du kannst dich einfach wegcachen in der Zwischenzeit,
einfach sagen, okay, Datenbank ab, alles in Cache und dann
wird der Cache dann zurückgeschrieben.
Also das ist halt, wie gesagt,
das ist was, da musst du dir wirklich Gedanken drum machen
und das ist auch das große
Aus, wenn ich
so ein Business habe, ist das
meiner Erfahrung nach das Aus für PostgreSQL,
dann wird MariaDB genommen.
Und das ist dann auch was, wo ich sage, wenn ihr wirklich da so auf 24-7 online verfügbar, das sagt nicht nur ich, das sagen auch die großen Firmen, die haben alle in diesem Bereich MariaDB. Und das ist ja auch, weil es gab, Ericsson hat MySQL Cluster entwickelt. Das ist ein eigenes Produkt, das basiert auf MySQL. Das ist noch immer bei Oracle.
Das war ursprünglich von Ericsson. Ericsson ist ja nun mal, ihr kennt die Firma Ericsson. Und der ganze Telefonie-Bereich hat das eingesetzt. Und dann kam dieser, wir werden jetzt Oracle. Und dann brauchten die Kunden ja plötzlich auch irgendwie was von Cluster.
Und MySQL Cluster war sowieso schon Closed Source, glaube ich. Aber jetzt nochmal, ich weiß es nicht mehr genau. Auf alle Fälle brauchten die was Neues und dann ist Galera entwickelt worden dafür. Und da sitzen die großen Telefonfirmen alle mit dahinter oder saßen anfangs. Weiß ich nicht, ob immer noch so tief stecke ich jetzt bei MariaDB nicht mehr drin.
Und natürlich die großen anderen Firmen, die da auch alle mit drinstecken in dieser Entwicklung von MariaDB. Und die nutzen fast alle MariaDB eben halt wegen dieser Hochverfügbarkeit. Und die haben die auch teilweise mitentwickelt.
Also da hat Google mit dran rum, beziehungsweise Google hat es eingesetzt, Facebook hat es eingesetzt, wobei das derselbe, teilweise derselbe, dieselbe Person war, aber die haben ja auch teilweise Code zurückgegeben, wenn die irgendwas hatten, ein Feature oder so, haben die das auch an MySQL, also an uns damals zurückgegeben und das wurde dafür entwickelt und da haben einfach alle anderen nicht aufgepasst.
da ist MySQL schon vor
zehn Jahren und noch früher
einfach an allen anderen sowas von
vorbeigezogen. Und was
bei Postgres passiert ist, Postgres kann
jetzt in der Replikation genau das gleiche wie Oracle.
Mittlerweile kann Oracle mehr. Weil Oracle
hat ja mittlerweile auch kapiert, dass MySQL
da mehr kann. Und das ist ja
ein und dasselbe. Und das echte MySQL liegt
ja bei Oracle. Das gehört ja Oracle.
Also meines Wissens, meine Info
ist, dass Oracle da mittlerweile auch ein bisschen weiter ist.
Aber Postgres hat mit dieser logischen Replikation
einfach das entwickelt, was
Oracle zu dem Zeitpunkt konnte.
Und das war damals aber schon
nicht das, was da draußen die Welt
braucht. Und
wenn du wirklich so ein 24-7-Business
hast,
in der Form würde ich dir immer
sagen, ne Maria Debi.
Ja gut, da muss man aber auch
relativ groß geworden sein.
Ja, du musst es halt dokumentieren.
Ich kenne viele Firmen, die Postgres einsetzen
und die das Problem nicht
haben. Also das ist nur
du musst halt gucken. Ich sage ja,
ansonsten ist mir das immer völlig egal,
was du einsetzt.
Ich setze tatsächlich selber auch mal das oder das
ein. Ich bin da
einfach faul.
Ich habe jetzt
irgendeinen Grund, das Bedürfnis
PHP mit Postgres einzusetzen.
Das wäre noch
spannend. Nochmal, wenn ich
PHP nutze, weil ich ja auch nicht so
der Programmierer bin in PHP.
Warum? Was für ein Grund gibt es für PHP?
Keine Ahnung, aber
Dann würde ich dann auch eher, einfach weil, ja, machen wir mal eben mit Maria.
Du musst auch mal die nächste Majango einsetzen oder einen Python.
Ich habe mich mal irgendwie letztens wieder mit HTML rumgequält.
War auch spannend, hatte ich auch ewig nicht gemacht.
Aber nein, war jetzt ein Beispiel.
Also es ist so, genau wenn ich ein Tool habe, was ein Datenbanksystem braucht.
Ich nenne das große Web-Tool, was alle nutzen und keiner es mag, das McDonald's der Web-Tools. Keiner geht hin, aber alle setzen es ein. Ich meine, du kannst das sogar mit beiden benutzen, aber das ist halt für MariaDB oder für MySQL entwickelt als erstes, dann würde ich auch auf MySQL aufsetzen, wenn ich es nutzen würde.
Also das ist natürlich auch was, auf welchem System ist das Tool als erstes entwickelt, das ist meistens auch das, womit es einfach nur optimaler läuft.
Das liegt einfach auch daran, dass du als Entwickler natürlich auch nicht so tief reinguckst und du musst da halt, die sind halt in bestimmten Dingen auch komplett anders und du müsstest das komplette SQL teilweise auch umschreiben und dann, ja, also es ist natürlich schön, dass die Tools sagen, wir können mehrere Datenbanksysteme, dass du es dir aussuchen kannst.
Aber da ich ja beides sehr gut
kenne und mir das dann im Endeffekt
egal ist, welches eingesetzt wird, gucke
ich dann meistens, okay, auf was wurde das Tool
denn als erstes entwickelt und nehme das.
Ich weiß gar nicht, bei Django ist es glaube ich
auch MariaDB.
Nee, das war von Anfang an Postgres.
Nee, es war irgendein anderes Tool.
Bei Ruby und Rails war es
am Anfang MySQL.
Das würde ich tatsächlich auch
mit Postgres nutzen.
Heutzutage macht das kaum noch jemand.
Was?
Rubio und Rails mit
MariaDB benutzt. Also es geht zwar
wohl auch, bei Django
geht es auch, aber das machen halt wenige Leute.
Ich habe gehört, dass
der Grund für den Schwenk bei
vielen war Heroku. Heroku hat
von Anfang an eigentlich dann auf Postgres gesetzt
und dann war das halt so
der Default und die meisten haben ihre
Rubio und Rails-Geschichten bei Heroku laufen lassen und dann
ist das halt sich da so eingebürgert. Aber
da gab es halt so einen Schwenk quasi von
MariaDB oder MySQL, also damals
war es MySQL, auf Postgres bei
Django war es schon immer Postgres.
Ich vertue mich auch, irgendein anderes Tool war
Maria. WordPress war immer schon
Maria. Das ist klassisch.
Und da gucke ich
nach. Wobei ich auch manchmal danach gucke,
auf welcher Maschine setze ich das
auf. Und wenn das die Maschine
ist, wo ich Postgres zum Schulungsdatenbanken
drauf habe, dann nehme ich grundsätzlich eine Maria
und andersrum, weil sonst erschieße ich mir meine
Produktiven. Aber mittlerweile gibt es ja
VMs genug, dass das nicht mehr passiert.
Oder ist das mit den
VMs ja auch einfacher geworden, die aufzusetzen?
dass dir das nicht mehr passiert, aber da bin ich
Meister drin, dass ich mir in Schulungen dann irgendwelche
produktiven Datenbanken zerschossen habe oder so.
Deswegen nehme ich immer das andere System
dann, weil dann komme ich nicht auf die Idee, das
zu zerschießen.
Nein, also mir ist das relativ egal
und ich bin da ganz pragmatisch und gucke
einfach, okay, womit kann das Tool
besser umgehen, weil
der Rest ist mir egal. Was ich natürlich
mache, wenn du mir ein Tool gibst
und das braucht einer dieser Datenbanken und da gibt es
eine Tuning-Empfehlung, da kannst du dir
sicher sein, ich tune das ganz anders,
so wie ich denke.
Teilweise mache ich es dann
noch dichter, also wenn dann
irgendein User gebraucht wird, also ganz
schlimm ist, wenn ein Super-User gebraucht wird,
grundsätzlich erstmal ohne Super-User,
weil Super-User sollte man ja jetzt
nicht unbedingt für so ein Tool nutzen.
Und, ja.
Nee, aber
das sind so die ganz großen Unterschiede,
wo ich jetzt wirklich diese zwei unterschieden
meine, also wenn ich wirklich in dem ganz tiefen
Hochverfügbarheitsbereich bin, würde ich
MariaDB nehmen, auch wenn ich im GIST-Bereich
unterwegs bin, immer Postgres.
Und im mittleren Bereich
tun die sich beide nichts. Also da
ist das völlig egal.
Da sehe ich weder vor noch
Nachteile bei dem einen oder dem anderen.
Das ist halt ein bisschen,
das funktioniert halt,
das SQL ist leicht
anders, der Dialekt und
bei den Variablen, bei der
Konfiguration heißen natürlich
die Variablen zum Teil anders.
aber. Gut, und dann halt Lizenzen
und so und dann, ja. Ah ja, Lizenzen
kommen natürlich auch noch und wenn du natürlich sagst, du willst
das weiterverkaufen, da frage ich dich,
was willst du für ein Betriebssystem haben?
Da bin ich dann sowieso
diejenige, die das gar nicht mehr entscheiden muss,
weil dann sind die schon am Betriebssystem vorher
normalerweise.
Ja, stimmt, ja.
Das habe ich gar nicht mehr.
Ich würde beide niemals
auf irgendwie Windows laufen lassen.
Das ist auch noch
sowas, da hat man mal vor vielen
ihren Tests gemacht. Nicht ich,
sondern viele große Firmen.
Die haben dieselbe
wohlgemerkt Hardware genommen
und haben dann geguckt, weil da
kommt es immer darauf an, wie viel in fünf Minuten auf die
Festplatte gespeichert werden kann. Also wie viel
RAM auf die Festplatte ausgespült
werden kann. Also wie viel aus dem
Cache auf die Platte kommt. Und da gibt es
dann immer noch diese Fünf-Minuten-Regel.
Und die haben dann also mit
ganz, ganz vielen Tests festgestellt,
bei Linux war das im Schnitt
damals bei 8 Gigabyte.
Und bei Windows 512 Megabyte. Das Problem ist das Journaling, was Windows mitbringt, was das wohl so langsam macht. Und es ist auch tatsächlich so, das ist mir mal aufgefallen, du dachtest irgendwann, du hast nur Apple-Hardware, darf ich das sagen?
Ja, nicht ausschließlich, aber überwiegend.
Aber, wie gesagt, die Chinesen haben beim WTCF jetzt festgestellt, ich habe 675 Anschläge, das ist ein Wahnsinn.
Wenn du das mit Mac und dem LibreOffice machst, dann kann das noch zeitgleich mitschreiben.
Beim Windows und Word kann ich dann warten, bis mein Text angezeigt wird.
Tja.
Das ist tatsächlich so, das habe ich jetzt gerade ausprobiert, aber man merkt es halt nicht, weil die ganzen Leute, die Microsoft nutzen, die merken gar nicht, wie langsam Office ist, weil sie ja nichts anderes kennen.
Wenn du den dann wirklich mal so intensiv im LibreOffice gibst, erst danach merken sie, dass das langsam ist. Und das liegt in diesem Journaling von Microsoft. Und bei Datenbanken ist das dann natürlich massiv. Und das kannst du nicht abstellen. Ich kenne Microsoft jetzt nicht so gut. Du kannst es abstellen, aber irgendein Dienst stellt das immer wieder an. Aber ein Sechzehntel langsamer. Das Sechzehntel langsamer finde ich schon schwierig.
auf Microsoft
kann man auch Datenmarken
schnell betreiben. Also zum Beispiel,
das finde ich immer beeindruckend, gibt es auch lange Artikel drüber,
der Stack von Stack Overflow.
Stack Overflow war,
ich weiß nicht, ob es jetzt immer noch sind, aber
lange auch unter den Top 10 Seiten der Welt und das
läuft in einem halben Rack.
Und das zentrale
Stück Infrastruktur ist dann MS SQL Server.
Und das geht wohl auch sehr schnell,
wenn man das richtig macht. Aber das ist halt auch nicht so einfach.
Da musst du halt entsprechend administrieren
und da musst du halt gucken.
Nur das ist halt immer das, was so
meine Information dazu ist und
jetzt habe ich aber auch
die Kunden, die ich betreue, die haben meistens noch
Linux-Server. Sogar
meistens, entweder haben sie ein CentOS oder sie haben
ein Debian oder ein Ubuntu. Das kann ich
auch meistens nur einschränken. So sehe ich
ganz, ganz selten und irgendwas
anderes Linux-mäßiges auch nicht.
Also das tut sich so, das
echte Debian, das Ubuntu und dann
ein CentOS. Das hast du so. Oder ein Reel vielleicht noch.
Was? Ein Red Hat Enterprise.
Ja, selten. Selten. Tatsächlich selten. Da hast du ja auch das Problem mit Pakete nachladen. Ich weiß es nicht so genau. Ich hatte mal einmal einen Kunden mit Red Hat Enterprise, da mussten wir es nachinstallieren. Die CD lag 300 Kilometer entfernt. Das war auch sehr lustig.
also und so, mal eben
wir ziehen uns das von irgendeinem FDP, gab's
nicht und
das war auch sehr lustig
aber ja, das
kann halt ja natürlich auch noch passieren, Red Hat
Enterprise, aber du hast halt selten
Suse und alles andere, Gentoo und was es da
alles gibt, hast du auch
so gut wie gar nicht
was ich jetzt gehört habe
was wohl wieder im Kommen ist, ist
BSD
ich glaube das war auch schon
es gab immer Leute, die das lieber gemocht haben, gerade für
irgendwie wegen ZFS und so.
Ja, wobei das
ZFS, das bringt nichts. Das hat man auch
getestet. Also es ist immer noch XFS
oder du kannst auch X4 nehmen.
ZFS bringt gar nichts
bei Datenbanken, das hat man gedacht.
Bei Datenbanken, ja, ja. Reiser-FS
finde ich auch nicht.
BTRF,
das Butter-FS, auch nicht.
Was du da immer...
War das nicht jemand, der jemand
umgebracht hat? Was?
Ja, Hans Reiser hatte
Ja, der ist tatsächlich
im Gefängnis gelandet, weil er seine Frau umgebracht hat.
Aber, ja,
das sagt jetzt ja noch nichts über die Qualität
von Matthias' System.
Nein, also tatsächlich ist meine,
ich weiß, es gibt
ganz viele Microsofts, aber da draußen,
aber tatsächlich bin ich eher in der Linux-Welt
unterwegs und
mich buchen auch komischerweise meistens
die Leute, die einen Linux-Server haben.
Auch Migrationen, da habe ich
auch mit Linux, aber natürlich
musst du das Betriebssystem auch noch ein bisschen
tunen, das machen wir dann ja auch
und das ist bei Linux ja,
das ist auch völlig egal, welches Betriebssystem,
also ob du da welche Distributionen da hast,
das ist ein Linux und gut.
Das ist nur, was ich
immer, ich kenne mich natürlich,
weil ich aus der Debian-Ecke
komme, natürlich mit Debian und Ubuntu
am besten aus.
Das heißt, da weiß ich,
wo ich das Dateisystem finde, auf Anhieb.
Bei einem SUSE müsste
ich suchen.
jetzt nicht, dass es anders funktioniert.
Es ist nur woanders
abgelegt oder die
Konfigurationen liegen woanders oder
solche feinen Sachen, die Lockfights sind woanders.
Und man sollte auch immer aus den
Paketen, die das Betriebssystem mitbringt,
weiß ich gar nicht,
soll man das noch?
Jedenfalls nicht selber kompilieren.
Was ich
in der Regel mache, damit ich die neuesten Versionen
habe und das rate ich auch,
bei MariaDB gibt es
ganz cool
auf
der Download-Seite, da gibt es
ein Tool, das ist nur ganz klein verlinkt.
Da kann man dann angeben, was für ein Betriebssystem man
hat und welche Version von MariaDB
und dann kriegt man eine Anleitung.
Dann kann man auch angeben, von welchem Mirror man das
ziehen will und dann kriegt man eine Anleitung, wie man das
dann mal eben installieren kann.
Sodass es dann auch, wenn man das Betriebssystem
upgradet oder updatet,
auch upgedatet wird, also die Minor-Updates
mitfährt. Und bei Postgres gibt es das
ähnlich. Und wenn man jetzt
sagt, okay, das Betriebssystem, ich habe jetzt ein
LTS und das hat jetzt doch ein sehr altes Datenbanksystem,
ich will da ein neueres draufnehmen, dann
nehme ich halt diese Pakete und die
werden dann passend mit bei Debian
in die Sourceslisten eingefügt und dann
kommt dann bei jedem Update, was ich auf dem
Betriebssystem mache,
wenn ich da Security Fixes
oder so habe bei den beiden, dann werden
die gleich automatisch mit geupdatet. Also
man soll das nicht mehr selbst
kompilieren. So wie früher
machen wir auch in den Schulungen nicht mehr.
Schön auf Nixos. Was?
Schön auf Nixos.
Also ja, du kannst bei mir auch noch,
ich erkläre dir auch gerne, wie du es kompilierst
oder wie du da auch noch diverse Sachen,
die du beim Kompilieren ändern kannst, einstellen kannst.
Wenn du sowas machst auf ganz kleiner Hardware,
das passiert so alle Jubiläare mal,
dass ich mal angefragt werde für PostgreSQL
aus extrem kleiner Hardware auf irgendwelchen Geräten,
die dann doch sehr klein sind,
wo du dann irgendwelche Variablen in C noch ändern musst.
Auf Nixos sehe ich gerade,
ist das Service MySQL Enable True,
damit man mir hier die wie laufen lassen kann?
Ah, ja.
Interessant, ja.
Ja, Python, es hat
da so ein Problem, Python zu installieren, das ist immer nach wie vor
schwierig oder wüsste ich jetzt keinen Standardweg,
wie das geht. Auch wenn ich Python installiere
oder halt, sagen wir mal, so produktiv,
also Desktop gibt es vielleicht noch andere Möglichkeiten,
aber wenn ich es irgendwo auf dem Server veröffentliche,
ist es tatsächlich momentan auch noch selbbar, weil
es gibt keine gute Alternative.
Ja, das ist ja noch total
abhängig davon, was so eine Umgebung hat.
Reicht es nicht, was das
Betriebssystem mitbringt?
Naja, Debian macht es kaputt.
Debian macht es leider völlig kaputt.
Echt?
Ja.
Ja, ja, das ist...
Das ist eines der ungelösteren Probleme,
in dem man gucken muss, ob da was passiert.
Ja, weil eigentlich will man das halt
virtualisiert auch haben, das Python,
weil man quasi immer nur sein eigenes nutzt und nicht das System Python.
Weil da sonst komische Sachen passieren
und dann muss man das eigentlich immer neu
irgendwo herbekommen.
Auch bei Django und Co.?
Ja, ja, klar, natürlich.
Genau, das ist halt dann...
Das ist dann aber aufwendig.
Ja, die Pollen-Story ist da so ein bisschen
ungelöst, noch ein ungelöstes Problem.
Das ist ein bisschen schwierig, ja.
Ja, es gibt da so Tools für, wie PyEnv oder sowas,
dann sagst du einfach, was du hast, aber du musst halt wieder ein extra
Tool installieren, was dann halt dir dafür sorgt, dass du dann
die jeweilige Version hast und so.
Ja.
Wir sagen einfach immer, also da sind die wirklich
beide sehr, sehr gut, was das angeht.
Gerade auch so den Support für die
ganzen Linux-Systeme und Distributionen.
Du kriegst das natürlich jetzt, ich habe das jetzt vorhin mal eben schnell für Debian erklärt, eben halt, weil das war sehr auswendig, aber du kannst dann auch in dem Weg, was habe ich für ein, was habe ich für ein, du kannst auch Red Hat Enterprise angucken oder Center, du kriegst es genau erklärt, du kannst es per Copy und Paste einfach in deine Shell packen.
Hast du die URL gerade im Kopf?
Was? Für MariaDB?
Ja.
Geh mal auf
downloads.mariadb.com
oder org.
MariaDB.com
Server Download? Nein.
MariaDB.com Downloads.
Ja, zeig mal dann die Ansicht.
Und da gibt es irgendwo
Configuration Tool. Nee, das ist es nicht.
Haben die jetzt die Webseite geändert?
Möglicherweise, aber ist ja,
dann gucken wir erst mal.
Nee, du brauchst doch den Org.
Download.
Punkt.
MariaDB, ich meine
Maria.
Gucken wir jetzt einmal live nach.
Downloads MariaDB.org.
So, genau da.
Und da hast du,
wo ist denn das? Hier auf der Handy-Version
ist natürlich auch super, ne? Ja, natürlich.
I'm sorry.
Wie heißt denn dieses Tool?
Ich gucke es uns einfach später nach.
Genau, das kann ich euch noch.
In der Desktop, also in der
normalen hätte ich das jetzt, aber es kann auch sein,
dass sie die Webseite geändert haben.
Da gibt es jedenfalls ein Configuration-Tool.
Das heißt auch irgendwie
Download-Configuration-Tool oder so ähnlich.
Und dann kannst du das
so anklicken. Das ist total cool eigentlich.
Und genau.
Ja, auf Mac
habe ich tatsächlich noch nie.
Ich habe das mal
installiert.
Ich weiß nicht mehr, welches schlimmer war als
das andere. Eins wollte, glaube ich, gar nicht.
Also das war bei
beiden nicht so das Gelbe vom Ei.
Würde ich jetzt auf Mac nicht betreiben.
Weder das eine noch das andere.
Also ich...
Ja, ja, ja.
Quasi produktiv sowieso
nicht, aber zum Entwickeln geht es eigentlich
beides ganz gut. Ich habe nicht so viel Erfahrung
mit MariaDB, aber ja.
hab's mal probiert, hat's schon funktioniert.
Aber, ja. Du kannst es
beides irgendwie hin, das zu installieren.
Ja, genau, ne, aber
Ich mach das dann tatsächlich, dass ich das
irgendwo auf den Server packe und
aber ich auch tatsächlich
mit dem Mac nicht entwickle.
Also da hab ich tatsächlich noch ein ThinkPad
und ein Linux und eine Shell und
das ist von der Tastatur
auch etwas gruselig, programmieren auf dem Mac.
Ja, da gibt's Leute, die, ja, oder
sagen wir mal, das war eine ganze Zeit lang total kaputt.
Ich bin in dieses Problem auch eingelaufen,
das war furchtbar.
Mit dieser schönen F-Bar, die dann irgendwie ausgeblendet
zum Scrollen, naja.
Ja, es gab da diverse Probleme.
Die Touchbar hatte das Problem, es gab keine
S-Tab-Taste mehr, das war hoher.
Und gerade als
wie Ayusa, muss ich sagen, fand ich nicht so gut.
Genau.
Ja, so mittel.
Und eine andere Geschichte, die halt auch total nervig war,
ist halt, dass von
2015, also von
2016 bis
2021 oder 2020,
auf jeden Fall Ende 2020,
waren die Tastaturen alle kaputt und
da sind die Tasten oft nicht mehr gegangen.
Und wenn halt irgendeine Tasse nicht mehr geht, ist das auch eher
nervtötend. Und das Problem ist, man
kann halt auch nicht, also das war halt,
ja, um das zu lösen,
muss das Mainboard getauscht werden. Das heißt, man muss damit
irgendwie irgendwo hin, dann muss das eingeschickt werden,
dauert das eine Woche. Und wer mal
darauf angewiesen ist, dass Rechner funktionieren, ist das natürlich
eher auch gut.
Aber wisst ihr was, ich glaube, über Mac-Hardware
reden wir gleich bei einem Getränk weiter.
Wir haben heute richtig viel
gelernt über Datenbank. Vielen Dank.
Das war echt super.
Ja, ich würde
sagen, wir haben alles besprochen.
Die Picks der Woche lassen wir heute weg, Jochen,
oder was sagst du?
Eine Geschichte würde ich vielleicht noch
ganz nett, wenn man
so ein bisschen grafischer
das mag, irgendwie zu sehen, wo man
eventuell Performance-Probleme hat. Da gibt es für Postgres
ein schönes Tool, ein kommerzielles Tool,
PG Mustard. Kann sich mal
angucken. Ansonsten, ja,
was ich nicht... Also ja, ich hätte irgendwie noch,
ich mache ja gerne dann Modelle irgendwie mit
Pydentic, die man irgendwie wegschreibt und weil das
zwischendurch ein bisschen langsam war, weil so pur Python
dann schon manchmal Probleme haben kann, gibt es
Pydentic Core, das ist in Rust gecodet,
das macht das Ganze deutlich schneller.
Ja, das vielleicht noch.
Ja, dann vielen Dank fürs Zuhören,
dass ihr eingeschaltet habt. Vielen Dank, dass du da warst nochmal,
Sanne. Ja, vielen Dank. Wir bleiben uns bewogen,
schalten uns mal wieder ein und alle
Feedback, Kritik, Anregungen an hallo-at-python-podcast.de
Tschüss, bis zum nächsten Mal.