Ja, hallo liebe Hörer und Hörer. Herzlich willkommen beim Python 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 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, Jochen im Hintergrund, tippen.
Ja, ich mache hier schon mal die Kapitelmarken,
dann spare ich mir ein bisschen Zeit,
aber 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 es halt auch tatsächlich direkt
Unterstützung von PyTorch aus
und ja, das sah eigentlich schon mal ganz
interessant aus und da geht bestimmt noch mehr in Zukunft
das 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 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.
Das ist natürlich super wichtig, ja.
Ja.
Ansonsten, ich meine, wenn ihr mal
dieses ganze Machine-Learning-Thema
und so interessant findet,
letztens kann ich
den Robot Brains Podcast empfehlen von
Peter Abiel und da war
letzte Woche war da irgendwie Jeffrey Hinton
zu Gast. Es gibt ja zwei Episoden.
Das 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? 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 Olyphant hat da ja seine Doktorarbeit
für abgebrochen, weil die haben alle gesagt, so bist du
verrückt, irgendwie sowas komisches
zu machen, NumPy, das interessiert doch niemanden.
Und ja, jetzt hat
das doch nochmal auch akademische Weinen irgendwie
gezeitigt,
was dann gar nicht so schlecht spät
war.
Ja, genau.
Sonst habe ich auch eigentlich nicht so wirklich was.
Wir wollten noch mal vielleicht
Büropeisen haben wir ja schon ein paar Mal eingeladen.
Bist du eigentlich da?
Ich habe keine Unterkunft
gefunden, jedenfalls nicht,
sodass wir da alle hinfahren könnten.
Wenn, dann bin ich alleine da.
Kurzfristig, okay.
Könnte sein, dass das klappt,
aber man muss halt nochmal gucken, weil
Urlaubsplanungen
andere Weitige...
und der
Überleitung.
Oh.
Was ist denn in der Postgres 15 Beta drin?
Weißt du das?
Das weiß ich nicht.
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 das hier.
Ja, also.
Hauptthema.
und zum Postgres.
Hier steht ja bei Postgres, 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 massiv 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
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 noch mal
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,
zu auskommen, 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 nochmal wahnsinnig
viel schneller geworden. Also ich kann
allen empfehlen, zumindest auf 13
abzugraben, wer noch
auf 9.6 ist. 9.6
müsste auslaufen.
Nicht richtig gerechnet habe ich jetzt gerade.
Ah, okay.
Ja, also ich würde sagen, jetzt haben wir die
News auf jeden Fall durch.
Und wir können noch anfangen
mit unserem Thema.
Und das Thema ist ja tatsächlich irgendwie so ein bisschen
Datenpacken.
Speziell im Allgemeinen oder auch
noch ein bisschen im Detail.
und Python-Programmierung.
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 Urquart.
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.
Ingress heißt es.
Ich kam jetzt gerade zu schnell nicht auf den Namen.
Also Michael Stolbrecker hatte dieses Projekt mit Ingress. Michael Stolbrecker 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 nehmen 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 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.
Das stimmt 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.
Dann haben sie festgestellt, ich war die erste Entwicklerin,
die ein Patch dann committed bekommen hat
und in den Post-Restore-Code.
Da 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.
Leider ist was passiert.
Ich brauchte einen neuen Job
und ich kriegte dann
per ICQ
schrieb mich dann jemand an.
Wie war das nochmal? Oh oh.
oder so. Ich weiß es
nicht mehr, aber es war der
CEO von MySQL.
Der 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.
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?
Ich habe mir das dann natürlich erstmal überlegt
und musste dann durch diese, 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 es 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-and-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 genau erklären.
Ja, also MySQL
ist sehr, sehr schnell gewachsen.
Wir waren zum Schluss,
als wir noch MySQL, also MySQL ist in Schweden gegründet,
war 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, 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
und Jochen unterhalten sich über die Programmiersprache Python
beschlossen, sie verkaufen es. Die Aktionäre
haben dann
beschlossen, sie verkaufen es an Sun Microsystems
für 2 Milliarden.
2 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.
Könnt ihr euch vorstellen, dass wir mit Oracle
und Python.
und irgendwie den Code aber geforgt von MySQL, den er forgen 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 ein MaxDB, ich weiß nicht, ob es das noch gibt, aber das war eine Datenbank, die unter SAP oder im SAP-Unfeld mit war.
Ich glaube aber, 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, dass 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.
Also quasi komplett einfach
alle gekündigt. 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.
Also wenn ihr es wisst, schreibt mal an hallo-at-python-podcast.de.
Ja, genau.
Und ja, so war das.
Und ich bin dann zurück zu meinen Nürzeln.
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 erstmal.
Es war so ein bisschen gemischt.
Die Firma heißt Second Quadrant,
ist jetzt EnterpriseDB
und
ich habe hauptsächlich Consulting gemacht,
weltweit,
für PostgreSQL. Also ich bin ganz viel
in 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 mach bis heute im Grunde Postgreskel 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 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 nämlich erzählen, du hast nämlich doch mal
diese ganze Reisetätigkeit vorher im
Zusammenhang
da mit dem SQL-Standard
gemacht. Ja, 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, das macht ja kein Geld.
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,
aber 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 sagte er
erzählte er mir groß, ja die suchen jetzt jemanden
der uns da
im Standardgremium vertreten kann
und irgendwie so in der Minute
hast du Lust? Und ich sagte ja.
Und dann hörte ich, dann hörte
ich, dass Sergey sagte
ich hab da jemanden
also es muss so gesehen sein,
dass Peter dann wohl von PostgreSQL
den hatten wir mittlerweile
zusammengeholt. 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 Peter stimmen. 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 alle anderen
fragen, wer meint ihr denn jetzt? Und dann kam raus, ja Susanne. Und so bin ich
dann erstmal in diesem Anziehgremium 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.
und Jochen unterhalten sich über die Programmiersprache Python
und 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 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.
Google hat mein Geld, da kann man
mir einfach was aus der Stunde sagen.
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.
Weil die Länder machen immer die Vorschläge
im 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.
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 fragt 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
Datenbank-System du hast,
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 sag mal, so ein Select
ist ja zum Glück auf allen
Datenbankensystemen
funktioniert es und Insert funktioniert auch meistens noch,
dass das Grund-SQL
funktioniert meistens noch auf allen
gleich.
Und
in den Dialekten wird es dann, weicht das dann
ab? 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.
Weil der Offset dann 3 ist.
Super so ein Tag.
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-next-rows-offset-y.
Okay.
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, war 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, machen dann Alias draus
oder ähnliches. Aber zumindest
das Uhr, das Grund ist erstmal
dasselbe. Ich sage ja, so ein Insights-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
eine politische Geschichte.
und 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.
Oh nein. Auf Kreta.
Ja, das sagst du so.
Welche in Sylt?
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
Mehrheit hatten.
Deutschland, wir waren damals zu zweit,
es war noch die Uni Aachen,
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.
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 dazu geholt
von PostgresQL, der hat mit seiner
in Finnland gelebt und den haben wir aber immer
beraten und 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
und Jochen unterhalten sich über die Programmiersprache Python
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,
wieso Standardisierung funktioniert.
Und ich finde es 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ß Sequel.
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 Sequel, aber war es nicht.
Was heißt das? Sequence Query Language? Gar nicht.
Das heißt einfach nur SQL.
Es 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 habe es erfunden Ich glaube ich habe auch irgendjemand anderes mal passiert irgendeiner ber Person Die hat dann irgendwas ge zu sich selbst
Das hat Wikipedia wieder zurückgeändert, weil sie meinten, sie kennen ihn besser als er selbst.
Das ist ein 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
teilweise
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 ist Open Source.
Hat sich da in der Lizenz,
weil MySQL hatte ja so ein bisschen früher
eine etwas komische Lizenz.
Oder im Vergleich zu anderen,
also jedenfalls im Vergleich zu Postgres.
Postgres ist ja sehr liberal.
Postgres hat eigentlich ja nicht.
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
SnapBSD drauf, wegen der BSD-Lizenz.
Und dann, wenn so ein Datenbank
System wirklich brauchen, dann eine Postgres auch
wegen der Lizenz.
Auf der Apple Watch ist SQLite, wird auch
gern 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
überall drin sitzt.
Deswegen MySQL, MariaDB,
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öhnthopp 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, 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 du besser in Grafen abbilden kannst, bilde es in 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
genau, also da
ich finde
Postgres ist eigentlich immer ganz schön, oder sagen wir so,
weil es halt so ein bisschen ähnlich ist,
ich meine, ich mache ja so, 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,
was so Django für die Webwelt oder Ruby on Rails für die Webwelt ist.
Es ist zwar jetzt vielleicht nicht in allen Sachen spitze,
aber fast alles, was man so braucht, ist da schon mal drin
und man kann das einfach so verwenden.
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 Poskis 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 es völlig wurscht, ob du Poskis
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
und die Programmiersprache Python.
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 Lampstick oder?
So PHP, was weiß ich.
Ja, Lamp.
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
und Python.
Ich erzähle dir auch erstmal nicht, dass es im 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, 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 toll. Wenn du bei mir die Schulung buchst, dann kriegst du dann Bindfaden und darfst dann an der 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.
und das ist halt nur, wenn du so teilweise die ganz jungen Menschen, wenn die so SQL in der Uni oder wo auch immer in der Ausbildung bei der IHK oder so, teilweise, wenn du da reinguckst, 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 jetzt in der Pandemie kann sich das ja
geändert haben, ich glaube das aber nicht.
Also die letzten Datenbankvorlesungen,
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
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-Mörder-Mystery.
Ah ja.
Das ist das Erste, da geht es halt darum, den Mordfall, also Mörder 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.
Und dann, das ist sehr interessant, das muss man halt auch schreiben dann,
denn 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, ja.
Aber das finde ich cool, ja.
Und ich habe noch ein zweites Story mal gemacht, das ist auch sehr schön, 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 einen...
Ich habe gerade bei den Psychologen, die Psychologenstatistik, 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, habe ich die Sterbestatistik draus gemacht.
und es war dann auch zwar makaber,
aber es war für die leichter
Nachfolge zu vollziehen, als irgendwas
BWL-lastiges.
Was passiert jetzt? Wie viele Menschen sterben
da jetzt von?
Deswegen, 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
und Jochen unterhalten sich über die Programmiersprache Python
Tasse oder was man immer eine Prise, ich gebe mir alle Rezepte mit einer Prise drin, wo man das einheißt.
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 du lernen vielleicht besser, also wenn das nicht 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
füllen, wie man das mag. Genau, 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 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 Meter
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 nochmal 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...
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 nochmal kurz...
Transaktionen, das müssen wir gleich alles nochmal aufmachen,
da können wir uns die Reihenfolge überlegen.
Aber ja, zum Einstieg, Jochen, ist dir noch was eingefallen,
wie man das am besten lernen kann oder was du denkst?
Tja, ich weiß es nicht genau.
Ich habe vielleicht eine etwas pessimistische Ansicht dazu.
Ich glaube, ich weiß nicht, ob man das so trocken lernen kann.
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
und 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 sich einigermaßen nicht wohl fühlt, ist er derjenige,
der es richtig aus dem Schlaf dann...
Nein, einfach so, dass man halt ungefähr weiß, was man da tut.
Das ist natürlich ein guter Prof.
Also ich habe es 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, was ist Mengenlehre.
Mengenlehre war in der ersten Klasse,
und Jochen unterhalten sich über die Programmiersprache Python
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
Bucce Algebra, nee, Kombinatorik
ist es mit
A und B und nicht A
oder B und solche Geschichten.
Und ich sage immer, SQL
besteht ja fast nur aus Mengenlehre.
Entweder hast du
die Schnittmenge Join, ein einfacher Join
ist ja ein innerer Join, ist ja nichts anderes als
die Schnittmenge. Und OuterJoin
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
OuterJoin 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
durch den Faden verloren. Was war deine Frage?
Ja, ich wollte kurz, dass du über die Mengenlehre
sprichst, weil du gesagt hast, dass die Mengenlehre
drunter liegt. Ja, aber du hast vorher was
gefragt zur SQL.
Achso, 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 bei
und Jochen unterhalten sich über die Programmiersprache Python
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.
Zellen kam das 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. Das ist ja wie
Mengenlehre, so ungefähr.
Dass du nicht mehr nur
rote und blaue und bunte Plättchen hast,
und Dreiecke und Vierecke, sondern dann auch mal komplett mehrere 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.
Ich frage deswegen, weil vielleicht könnte man sich ja vorbereiten zu sowas, indem man nochmal sich so diese Basismengenlehre, wie du sagtest, mit den unterschiedlichen Schlittmengenkreisen vor Augen führt, um dann zu überlegen, wie das in SQL ausfällt.
so ein, jemand der sowas noch nie gesehen hat, der irgendwie einen komplexeren Outer-Droiden ein bisschen klatschen sieht, der ist vielleicht erstmal gefordert.
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.
ist sehr lustig, ist immer, dass das funktioniert bei MariaDB nicht so ohne weiteres, 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
wir haben aber dann ganz ganz
tolle andere Fähigkeiten
die ich nicht habe
aber das ist dann
naja
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 das einmal
verstanden hast, dann ist es auch nicht so schwer.
Vielleicht ist es jetzt Zeit, nochmal darauf einzugehen, also was
denn 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 es 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.
4., 5., 6., ich habe keine Ahnung.
Normalerweise
normalisierst du nach der dritten Normalform.
Das ist so das Übliche.
Ich kann dir jetzt auswendig
nicht aus
nicht sagen, was die erste und die zweite sind.
Ich muss das 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...
Wenn in zwei Spalten irgendwo eine Adresse steht,
dann möchte ich die nicht dreimal drin haben, sondern
eine eigene Tabelle mit Adressen.
Ich hätte jetzt gesagt Stadt.
Ich hätte es noch weiter runter gebrauchen.
So Postleitzahl Stadt, das Klassische,
was so in der Tabelle ist. 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 Rekord, finde ich.
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
nun das Wort Bielefeld einmal drinstehen und dann
hat Bielefeld vielleicht die ID 33615,
weil das die Posterzahl ist und
oder wonach man das auch immer bei
Städten wäre, die Posterzahl wäre eine super ID, kann auch eine andere
Nummer nehmen, die 67 und dann steht halt bei der
Tabelle mit der Person unter Stadt nur
67 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?
Dann 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.
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...
und Jochen unterhalten sich über die Programmiersprache Python
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.
Wenn du das mischen würdest, wäre das ganz lustig.
Aber das ist erstmal 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.
und Jochen unterhalten sich über die Programmiersprache Python
und macht da halt zwei Tabellen.
Aber woher weiß ich denn jetzt, ob Wasser ein Weinglas, 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 versuchen.
Er möchte jetzt nur, nennen wir eine Automarke, nur Mercedes haben.
Ein bestimmter 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.
Du hast alles
in einer Tabelle.
und Jochen unterhalten sich über die Programmiersprache Python
es hat vielleicht noch die Reifentypen und so weiter
und die Reifengröße
und weiß weiß ich was
man da Baujahr und wie alt
Tacho stand 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.
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 Postgres genau das gleiche Problem kriegen wie mit MariaDB.
Der MySQL war es damals noch.
Und ich bin dann nach Hause gefahren und dann kriegte mein britischer Kollege
einen Anruf, der konnte die Konsulten 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.
Also 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 denn du das Und dann hat er mir das erz 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.
Hat er gehört, was sie vorher beraten hat
und hat gesagt, oh ja, ja.
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.
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
erwartbar. Also
mal abgesehen davon, dass da ganz komische Artefakte
passieren, aber
irgendwann denkst du dir schon von
dir aus, okay, es ist vielleicht sinnvoll,
diese Tabelle mal mehrere aufzuteilen.
Ja, das vielleicht unter Kategorien zu fassen.
Ja, genau. Und das Normalisierende ist
einfach, du fasst das irgendwo so zu Kategorien
zusammen oder das zusammen, was
zusammengehö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, fünfmal die Ärzte, kenn ich mehr Titel. Da steht dann 127 Mal, wer
weiß, wie viele Songs die Ärzte gemacht haben, da drin. 127 Mal die Ärzte und daneben steht dann,
und sagen wir erstmal, 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 ersten 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 Songsammlung und dann hast du eine riesige Tabelle.
und Jochen unterhalten sich über die Programmiersprache Python
haben die halt so, was weiß ich,
die Ärzte ist vielleicht
Nummer 1 und dann steht in
deiner Songtabelle 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 oder sowas in der Richtung.
Also hast du danach die Nummer
und du kannst danach gucken, wenn du dann in der Tabelle
bist, okay, interpretest Nummer,
was hatte ich vorhin, 3 und dann guckst du in der anderen
Tabelle nach, Nummer 3 ist
habe ich vergessen.
Hatte ich überhaupt eine 3? Weiß ich nicht mehr.
Aber eine 2 bei Rammstein, das weiß ich noch.
Und die 3 sind von Sepultura, irgendeine Metalband.
Ja, egal. Nur,
dass du dann halt nur noch über die Zahlen
das machst. Und 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 die Alben, 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 auch noch das,
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 der Zwischentabelle
nur noch 1 1 drin, Album 1,
Interpret 1.
Dann kannst du das so zusammenfügen.
Siehst du halt,
ein bisschen auseinander und dann hast du halt nur noch die
Tabelle mit dem Titel, wo dann draufsteht
Album 1, Band 1,
also da hättest du es sowieso drin, dann brauchst
du es gar nicht. Oder nur Album 1 und dann kannst
du es dann nochmal weiter verlinken.
Wenn du da jetzt nochmal hättest, wäre das
doppelt, aber das macht man schon, dann
das Deonomie sieht 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
acht wird das irgendwo spannend.
Es macht dann auch nicht mehr wirklich
Spaß, die alle zu verjoinen.
Dann fängst du dann an, gezielt 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
und Jochen unterhalten sich über die Programmiersprache Python
Ich sag's dir, den Datensatz hast du den 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 sie dann ID,
dass so eine Spalte davor sitzt, wo du dann eine Kennung
rein hast und dann hast du dann
Nummer 1 ist Klaus Mayer, Nummer 2 ist
Klaus Mayer, 3 ist Klaus Mayer, 4 ist Klaus Mayer,
5 ist Klaus Mayer und dann kannst du dann sagen, delete alle,
wo Name Klaus Mayer
ist oder alle mit ID 2
bis 4, dann kannst du ja auch so machen
und 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,
Primarykey, 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.
und wenn man dann davon weggeht, dann
spreit 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
bei irgendeinem neuen Problem oder so
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.
tatsächlich auf. 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 den Körper. 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 Musikgub alles an
Informationen in dieser Datenbank speichern.
Also wirklich so als
reines Sammelsurium, das ist natürlich
für andere Firmenprogrammierste das so,
und muss das erstmal aus den ganzen
Besprechungen raushaben, was brauchen die überhaupt
alles in der Datenbank, dann muss
man noch gucken, meistens führt die Firma mit,
was ist überhaupt erlaubt, abzuspeichern.
Gibt es ja auch sowas,
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 reinhaben.
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 er 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 nochmal 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 mehr
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.
Ja, da muss man dann tatsächlich zurückgehen auf diese Tabelle und gucken.
Ja, ja, und dann deswegen ist so ein Nick ändern
bei so Spielen häufiger
mal so ein Problem gewesen.
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 einer 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 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?
Das ging relativ schnell,
es war ein guter Server, so viele Mitarbeiter
waren das nicht, aber dann so, ja,
die Stellplatte 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 ja eine Hitze, die
Differenz ja gar nicht gebraucht, aber ich fand
das damals sinnvoll, sie mit abzuschleichen und ich
rate das Hauptbandbestimmungen jeden
Style-Mit zu machen.
Doppelt hält besser dann, ja?
Ne, das ist auch teilweise wie du es in der Anwendung
brauchst. Wenn du immer
Differenz brauchst, dann brauchst du auch nur
die Differenz abfragen und musst nicht immer
Start- und Stopp abfragen später in der Anwendung.
zu machen. 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 Zukunft, was weiß ich, was mit berücksichtigen.
Deswegen hast du auch ganz viel in den Tabellen,
fast jeden Abteil noch
last updated und so
weiter mit in jeder Spalte.
Update 3, update...
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.
und wenn du jetzt ganz normal so eine Verkaufstabelle machst, dann hast du ja auch bei Preisen häufig,
wie wenn du einen Preis änderst, solltest du ja den alten Preis ja auch nochmal irgendwo...
Ja, schon praktisch, dann kann man dann 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 allen Rechnungen solche Geschichten.
Ich habe zu welchen Plätzen gekauft worden.
Das ist lustig, es gibt auch Unternehmen, da wird dann der Preis bezahlt, der jetzt gerade aktuell gilt.
und das ist auch lustig, was auch immer mal wieder passiert ist,
so ja, 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, weil bei Mitarbeitern,
also bei sowas nimmt man meistens auch die Kennung.
Es gibt natürlich auch natürliche Schlüsse.
Ich weiß nicht, ob Autos jetzt
Kfz-Zeichen unbedingt sinnvoll ist,
als Kennung zu nehmen, aber
es gibt halt so Schlüsse, 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?
Ja, nee, das ist schon sehr sinnvoll,
wenn das so eine ganze Zahl ist.
irgendwie. 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 ist halt so eine Frage. Das wäre eine interessante Frage.
Also irgendwie sehe ich in letzter Zeit sehr häufig, dass Leute UUID-IDs verwenden.
Dann können wir ja vielleicht den Hash nehmen von dem Content.
Ich nehme gerne auch den Unix-Timestamp.
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, dann will man ja, dass sie eindeutig sind, hat aber keine zentrale Datenbank möglicherweise.
Es gibt halt diese Sache bei Postgres, bei MariaDB und so weiter, sogar im Standard gibt es den Datentypisch 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ählt es 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, 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 Wartelnack, 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, wie 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 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.
Das ist natürlich, wenn du dann so
einen Support am Telefon nennst, nennen sie mir mal ihre
Kunden-ID und dann fängt der da an,
Unix-Timestamps zu lesen.
Gut, du erkennst es als
Laie nicht als Timestamp?
Also da muss dir schon freak zu sein, dass du rastet, dass es ein Timestamp ist, von wegen Eindeutigkeit und schwer zu raten, aber es ist halt auch eindeutig, dass du dann irgendwie so in derselben Sekunde mehrere Kunden anlegst, das ist dann doch schon schwierig.
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-Postleitzahl eingegeben oder sowas.
Und dann habe ich ja das Problem, dass ich dann Doppelte habe quasi.
Naja, das kommt darauf an, wie du die Postleitzahl in der Datenbank abgelegt hast.
Ja, also in Maler-Adventure 6 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, das ist einfach, weil ich muss ja erstmal, also ich nehme die Daten entgegen, also die Software, jetzt in eurem Fall Python, in Python geschrieben, die nimmt die Daten entgegen, so, jetzt nimmt sie 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, erstmal habt ihr eine Verbindung drauf gemacht, 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 wie Postleitzahlen
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 ich irgendwie ausdenken kann
oder es halt alles runterbreche
oder ob ich sage, ich mache da einfach ein Textfeld draus und es ist mir egal
und dann ist halt dann die Eigentätigkeit weg.
Was ich bei Postleitzahlen machen würde, 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, TriSuite, ja, gut,
aber
Ja
Ja, aber
Also ich meine, wenn das
Oder die Stadt anfangen
einzugeben und dann zeichnet der automatisch
das. 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, aber ich finde das Problem deswegen schön, weil
das halt vielleicht klar macht, dass
das alles nicht so ganz einfach ist, also
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
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.
In Mannheim.
Irgendwelche halligen Dinge, die halt irgendwie nicht so richtig da reinpassen wollen.
Also dann, wenn man 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.
und Jochen unterhalten sich über die Programmiersprache Python
zu 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, habe ich mal drin
gewohnt, glaube ich.
Aber das geht halt auch nur dann,
wenn ich halt den Input wirklich kontrollieren kann.
Wenn ich halt irgendwas bekomme und das muss halt
dann da ins Postleitzahlenfeld rein, dann ist das
natürlich schwierig.
Die Frage ist, wofür brauchst du das?
Wofür willst du das unbedingt in das Postleitzahlen?
Warum willst du da unbedingt irgendwas reintun,
was keine Postleitzahlen ist?
Weil ich die Adresse anlegen muss, um eine Bestellung anlegen zu können.
zu finden oder sowas. Ja, aber dann legt das doch, tu doch die Adresse
in das Textfeld. Ja, genau.
Dann kannst du ja versuchen,
eine Postleitzahl zu extrahieren oder so.
Ja, oder die Postleitzahl kommt direkt ins Textfeld.
Die Frage ist ja, woher
brauchst du diese Adresse? Genau.
Ja, also die Frage,
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.
Dann nehme ich halt das Textfeld, dann kommt das halt auch an.
Aber wenn ich jetzt dann hinterher in die 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 angezeigt wird.
Ja, aber dann 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 rausnehme.
Dann ist auch die Frage, ob du diese Analyse überhaupt fahren darfst
oder ob das gegen die Datenschutzrichtlinien verpflichtet ist.
Na gut, aber das ist ja ein anderes Problem.
Naja.
Also im Zweifel hat man ja berechtigte Interessen und dafür eine jeweilige
Datenschutzvereinbarung.
Ja, noch nicht.
Ja, das ja.
Aber,
ich habe die hier gleich aufgegessen.
Das ist ja lecker.
Nein, aber das ist so dieses,
nee, aber tatsächlich,
ich habe das auch schon mehrfach,
ich war dann einmal 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,
oder da habe ich einmal,
wie 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.
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.
sofort. Bei Rechnungsadressen,
ja.
Ja, ich glaube, ihr redet nicht.
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 Postgres.
Okay.
Das würde ich auch schon.
Was wolltest du zu Transaktionen
müssen. Vielleicht erstmal, was ist das überhaupt? Also ich muss ja
davon ausgehen. Also eine Transaktion ist, der Dominik möchte
dem Jochen 100 Euro überreisen.
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.
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,
und Jochen unterhalten sich über die Programmiersprache Python
jedes schreibende Zugriff, also jeder, ne, ne, ne, 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 in C, die Programmiersprache war eigentlich egal, aber du musstest immer ein Commit hinten dran werfen.
Du musst immer einfach mal Insert sagen und dann darunter Commit.
Mittlerweile machen die Datenbanksysteme alle Autocommit.
Das heißt, wenn du ein Insert-Befehl abfeuerst, dann wird er automatisch committed.
Aber das Commit ist natürlich intern immer noch da.
Aber es wird automatisch da hinten dran gefeuert, dass du das nicht mehr machen musst,
dass du da immer noch ein Commit einzeln hinterher machst.
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 Schreibungen und Transaktionen
und du sagst am Ende Commit
das wäre jetzt das mit dem
Kontoüberweis. Also das würde man zum Beispiel machen
in der Businesslogik 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
Genau, also das mit der Bank ist immer so
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.
Genau, und
Postgres und MariaDB haben aber eine
Abkürzung für StartTransaction, das ist
Beginn, also da kann man auch Beginn sagen,
statt StartTransaction, 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 dass du wirklich so
entweder alles oder nichts.
Das ist im Grunde.
Dann macht man erst mal so ein Letter und dann muss man die einzelnen Transaktionen
dann kommitten und dann gucken.
Sehr schön, auch wenn du jetzt mal ganz große Sachen...
Ich sag mal, ich hatte 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 Insert-Statement machen.
Dann möchtest du auch entweder alle drin haben
oder keine.
Du willst nicht irgendwo, dass nach der Hälfte
irgendwie, dann hast du die halben Postleitzahlen drin
und die andere Hälfte nicht. Du würdest
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 Transaktionslog ist ja das wichtigste
überhaupt bei Postgres,
bei Datenmarken. Und das wird
halt mitgelockt, damit du dann, wenn
deine Datenbank abstürzt, hast du immer noch das Transaktionslogs und aus dem Bestand, den du auf der Festplatte in deinem Datenverzeichnis hast und den Transaktionslogs kann die Datenbank wiederhergestellt werden.
Das ist in den Backups so wichtig.
Naja, aber die Datenbank muss es halt schon irgendwann mal geschrieben haben auf die Platte.
Ja, das Transaktionslog 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 schneller.
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...
Ah, okay. Ja gut, ich weiß es nicht genau.
Ich glaube man kann Ich brauche bei VMs dann sagt die VM es ist fest auf der Platte es ist aber erst ein Cache des Hoses oder so Das ist auch was da habe ich bei VMs keinen Einfluss drauf
Also bei den Datenbanken, so Hardware-Datenbanken, die ich mal so irgendwie in Rex gesehen habe,
die hatten meistens dann halt so RAID-Controller mit Batterien drauf.
Ja, natürlich.
Ansonsten, ich glaube, Postgres-Verbände, irgendwie F-Sync und F-Sync kann man auch irgendwie sagen,
so sag mir, werde erst fertig, wenn du es wirklich, wirklich auf der Platte geschrieben hast.
Das ist halt, das macht es langsamer,
aber ja. Nein, F-Sync ist
das, was wir immer in den Opus
gibt, weil man sagen stellt, das ausschaut, 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 Synchronos 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 ACK, das OK zurückgeben,
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,
und Jochen unterhalten sich über die Programmiersprache Python
und irgendwie so ähnlich.
Ist eine ganz lange Variable bei
MariaDB.
Ich weiß immer nicht, wie sie heißt.
Dann gab mir mein Kollege, 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.
MariaDB hat wahnsinnig viele Servervariablen.
Es war wirklich die längste, aber ich glaube, es gibt
mittlerweile eine längere.
Sie ist relativ sprechend auch.
Flash
Transaction Commit, irgendwie so ähnlich
heißt sie. Genau.
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 dem 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,
das fängt von vorne an.
Wenn dann wirklich mal der Server abgeraucht ist.
Nur 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. Also je nachdem,
für manche Sachen reicht auch eventuell.
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 Isolationsmetall
Repeat Committed
oder Repeater, Repeat 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 Isolationsmetall
können wir nochmal drum machen
was das bedeutet
und dann hat man 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.
Auch gar nicht wirklich auf der Festplatte.
Und da habe ich zumindest unser Datenbanksystem
erstmal 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
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 auch im 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.
Boom, kaboom. Ja, nur das ist halt so das mit der Dauerhaftigkeit.
Isolation heißt, wenn
Ja, also wenn man jetzt zum Beispiel begonnene
Daten, die geänderten Daten begonnener Transaktionen schon sehen kann
in einer 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 erstmal ganz
tief forschen, 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 ReadCommitted an,
das alles darunter 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 7
und der Select läuft länger
und er braucht diesen Wert mehrfach in diesem
SelectQuery. Also er greift mehrfach
auf diese Spalte 5 drauf zu,
um den Wert 7 nochmal,
weil er da irgendwie Berechnungen macht.
Und währenddessen ändert ein anderer den Wert auf 9.
Ist natürlich doof,
weil dann hat das Query, das Select-Query
mal 7 mal 9, das will man nicht
und dann kriegt halt, repeatable read
heißt, wenn er das einmal gekriegt hat,
kriegt er dieses Ergebnis auch bis zum Ende.
Das heißt, du bekommst dann immer die 7,
die 9 wird dir erst, wenn du das Select dann nochmal
ausführen würdest, wird es komplett mit 9
machen. Das ist repeatable read.
Das kann PostgresQL,
auch wenn da irgendwie, ich glaube,
wir nennen es nur read-committed, weil es kann ja
mal passieren, dass auf dem Mars ein Vulkan
ausbricht und in Island gerade
schneit und der Jupiter
mit dem Saturn auf einer Linie steht, da gibt es
irgendeine Ausnahme. Keine Ahnung.
Aber Maria
macht es auch. Also 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. Also wenn du da
drei Tage eine Session offen hast,
und das ist 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 SQL-Bug.
Also wenn man da so SQL-Bugs ist, ist es 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 der 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.
also
ja
macht man nicht so ohne weiteres
aber was 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
Habt ihr jetzt mit der Session vielleicht was mit Verbindung
zu tun?
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 kleine Serveranwendung
Du hast halt den Datenbank-Server
oder auch Dienst
oder auch Demon genannt
und du hast deinen 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 sich das immer
bei dem Web-Service.
Das ist auch Client-Server.
Du hast einen Web-Server 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 Kleinsthalte in der Regel Software sind
Und
ja, diese Software macht dann eine Verbindung zur Datenbank auf
und die macht für
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 Handlungssystemen so.
Es geht nicht, dass du in derselben Verbindung
zeitgleich zwei Queries abschießt.
Das geht nicht ab vorerst.
Du brauchst halt, wenn du für jedes
zeitgleiche Query, was du
abscheuig schicken willst, brauchst du eine extra
Verbindung.
Also wenn es wirklich richtig zeitgleich
ist. Nacheinander kannst du natürlich,
und die Programmiersprache Python.
Seiten her dann. Von der Datenbank Seite, 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 Sweat.
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
Daten machen und hast irgendwann keine
TCP-Boards mehr.
Dann fängst du mal an
und da gibt es dann ein Pooling von
InnoDB, dass 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 erstmal 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, also 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.
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 Pool anschreiben, 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.
Da gibt es dann häufig, wird der Ron-Robin-Scheduler genommen,
der das dann poolt. Und sowas gibt es halt auch
für die Datenbanksysteme.
Der von Postgres heißt pgBouncer,
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 Datenbank, die haben dann drei Pooler, wo ich mich frage, warum einer reicht.
Wie ist das bei Python, Jochen?
Ne, da ist es also zum Beispiel Django macht das jetzt, ob der 4.1 kommt jetzt irgendwann im Sommer, da gibt es einen internen Pool sozusagen, aber normalerweise kannst du die Anzahl der Verbindungen, die jetzt dein Applikationsserver zur Datenbank macht, kannst du normalerweise einstellen.
aber das ist jetzt halt schwierig geworden
mit Async, weil
wenn du jetzt sagen wir mal so 5 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 ist halt natürlich
dann könnte sozusagen
der ORM 5 Verbindungen aufmachen
die alle gleichzeitig rausschicken, weil geht halt nicht
auf einer Verbindung, sondern 5 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 auf der nächsten Version,
aber genau.
So, wie gesagt,
das kommt ein bisschen auf deine Hardware drunter an.
Ich sehe, du findest da so 200, 400
Verbindungen. Musst du auch mal gucken,
zeitgleich.
Das ist auch so was,
und Jochen unterhalten sich über die Programmiersprache Python
da nichts machen musste.
Das ist halt quasi jedes Statement, das man abgefordert hat
von 4.4. aus, hat halt einfach eine Ein- und eine Verbindung
aufgemacht und nach dem Statement war sie wieder zu.
Na, nichts machen. Also ich hatte
jetzt tatsächlich mal während 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 es lustig.
Dann macht es Spaß.
Weil dir dann auch
irgendwann die UTC, wie gesagt, du, da
rechnest du dann auf einmal,
wie viele Ports habe ich denn überhaupt?
Und ja, und
liebe Web-Server, könnt ihr da vielleicht auch noch
mal was vorschalten oder so?
Das macht dann
Spaß.
Man kommt ja wahrscheinlich auch irgendwann ein.
Aber so für die
Feld und Wiesen,
Lab-Sec war das halt, da ging das eigentlich immer.
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.
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% 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.
MariaDB ist
GPL und die
haben dann noch die,
erstmal muss man bei der GPL ja mal gucken,
GPL und welche
Versionen,
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
Ja, dann musst du nämlich eine Lizenz bei MariaDK 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
Eine Diskette hatte 3,5
5,25
Nein, wie viel?
1,44
1,44 Megabyte, genau
Und
Ihr wisst noch, was eine Diskette ist
Ja, ja
5,25 soll angefangen
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,
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
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.
Du hast es so schön gesagt, deswegen findest du auch immer Postcards in deinem Auto.
Was ist der Unterschied zwischen
BSC und MIT-Lizenz? Gibt es da überhaupt einen?
Nein.
MIT nicht, BSC ist
Barclay University.
Und MIT-Lizenz ist?
Das ist eine andere, das weiß ich nicht.
East Coast versus West Coast,
ich weiß nicht.
Aber die sind tatsächlich relativ ähnlich.
Sie sind beide sehr liberal.
Genau wie Apache auch, ist auch sehr liberal.
Ja, Apache ist auch, genau.
und 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 Berkeley,
die BSD Lizenz.
Und MIT,
ja es 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 University ist und die MIT
University, hat man eigentlich schon mal gehört,
die Stadt, die da 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
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
naja, aber das ist, die kenne ich jetzt gar nicht,
die Lizenz.
Ich glaube, das ist für mich, also,
du sagst ja irgendwie Patente.
Ja, ja, das ist...
Apache macht noch diese expliziten Geschichten mit den Patenten,
aber, also,
BSD weiß ich jetzt gar nicht genau,
ist aber auch, vielleicht die liberalste ist
wahrscheinlich MIT, da ist es eigentlich quasi nur
Copy-Left, 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 Zeit.
Es muss ein Name drin bleiben, bei MIT ist es völlig egal.
Ist bei Python übrigens auch so.
Python hat auch die Python-Lizenz,
aber das 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
war. Ich nehme an, da gab es irgendwelche
Namensgedöns-Geschichten.
Keine Ahnung.
Ich sage auf jeden Fall, von wem es gewesen ist, wenn du das sagst.
Ja, interessant.
Ja, ist doch schon relevant.
wenn man das als Unternehmensgrunde 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
ein abgespecktes Linux-Gurus 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 drunterlegen 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.
und 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 sie dann eine Datenbank brauchen,
eine etwas größere, dann hast du auch ganz häufig Postgres.
Das ist interessant und wir haben jetzt noch zwei Sachen auf der Liste,
die da vielleicht ganz gut reinfallen.
Also Maria versus Postgres wäre vielleicht das, da hatten wir schon mal kurz.
Was andere war NuSQL?
Achso, ja, also
da gibt es jetzt nicht ganz viel zu sagen.
Es gibt halt neben den Relationalen
diese, also diese,
erstmal ist ja NoSQL ist ja NotOnlySQL
und da
fanden die hierarchischen
Datenbanksysteme, wer das mal
gelernt hat, hierarchische Datenbanksysteme
sowas wie LDAP oder auch
das Detailsystem ist auch ein Datenbanksystem.
Die waren dann plötzlich NoSQL.
Das fanden die sich überhaupt nicht mehr mit
zurecht, weil ja, NotOnlySQL.
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. Das grafenbasierte
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
Wenn du das abbildest in einer normalen SQL
Weil die Joints zu groß werden
Du spielst dann ja mit Matrizen am Ende
und weißt ja guck guck was, du brauchst ja unendlich viele
Tabellen und 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
so einen
Web-Anbieter,
der hat ganz, ganz häufig Kombinationen.
Also für solche Sachen hat der
dann eine Graph-Datenbank und ansonsten hat er eine
Relationale für das ganze Kunden- und
Verkaufsabwicklungs-Kit, das 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
und die meisten Firmen nutzen sowieso Maria und Postgres, also du hast nicht mehr nur ein Datenbanksystem, 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 Datenbanken 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.
Da legst 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ßt du immer noch nicht alle Farbpixels raus oder ähnliches.
Die müsste ich ja einfach speichern.
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 ätzend, wenn du die kopieren willst.
Aber das ist sowas,
wo du Dokumentenbasiert natürlich super für gebrauchen kannst,
wenn du in den Dokumenten selber
suchen willst.
Gibt mir jetzt Gesichtserkennung, ganz klassisch.
Das ist sowas,
wo du dann Dokumenten basiert hast mit
Farbcode und mit
was auch immer, Gesichtserkennung
wäre jetzt sowas.
Wobei ich da nicht weiß.
Ich glaube, du speicherst 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.
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 ein paar aus der
Apache-Geschichte, Hadoop und so weiter.
Warum ist MongoDB umstritten?
Meine Erfahrung mit MongoDB
ist, dass es
extrem RAM-lastig ist
und auch sehr RAM-aggressiv 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 denn 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
Ms, weil sie dir den Ramp von ganzen
Hosts mit wegbringen oder ähnliches.
Auch weil MongoDB am Anfang halt keine
Default-mäßig keine Authentifizierung hatte.
Du konntest dich einfach drauf verbinden.
Ja, irgendwas war da, ja.
Das war ähnlich wie bei MySQL auch.
Da war es am Anfang auch so.
Aber wie gesagt, die meisten
greifen dann aber tatsächlich im professionellen
Bereich auf diese ganze Apache
HBase, 11 Grad,
Graph und was weiß ich was zurück.
Neo4j ist glaube ich auch HGraph.
Das hängt irgendwie
zusammen bei den grafenbasierten Elasticsearch,
das ist so ein klassisches Dokumentending 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, wie es aussieht.
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 hier 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
für dich sinnvoll, dass du es noch lernst. Ich weiß es nicht.
Aber man braucht es vielleicht.
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 wird
im Schulungsbereich. Und bei den
CouchDB ist, glaube ich, auch Dokumenten basiert.
Ich möchte mich jetzt nicht alles täuschen.
Wie war es mit Cassandra?
Das ist
ein Misch, glaube ich, aus beidem.
Ja, das glaube ich, das ist halt so ein
sehr, das kann man halt sehr gut verteilen.
Das ist auch mehr, aber eigentlich eher so ein
Key-Value-Store.
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.
Und wenn man das nicht weiß, dann hat man lieber Postpapier.
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 Graphen als zu den
anderen, weil
bei den anderen kann man sich auch besser vorstellen.
Die sind dann auch wahrscheinlich leichter im Selbststudenten.
Ich habe die also echt mit Neo4j
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 GraphQL mit ein bisschen rumspielen will?
Was würde man jetzt da drunter schicken?
Neo4j. Das hat auch eine Oberfläche
tatsächlich auch.
Das, womit ich rumgespielt habe,
besetzt.
Du meinst GraphQL, das von Facebook?
Zum Beispiel, ja.
Das kenne ich gar nicht.
Das ist irgendwie so eine neue Geschichte,
quasi als Alternative zu
JSON über
JSON-API.
Aber das weiß ich nicht,
es gibt keine Datenbank, die sowas direkt,
glaube ich.
Vielleicht kann die das, ich weiß es nicht,
vielleicht gibt es da irgendeinen Adapter oder so,
die Sprache, die die verwenden,
irgendwas mit Cycle oder weiß ich nicht.
Es gibt tatsächlich schon ein Zisiert, das GQL
mittlerweile, da hat Kajaba auch ganz viel
mitgemacht.
Nein, aber das 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,
bin ich ganz ehrlich.
Doch, ich habe mal was mit Python gemacht vor gefühlten
100 Jahren. Irgendwo ist mir
Python eigentlich...
Wahrscheinlich wird es länger halten.
Nee, da musste man
früher musste man auch schon mal an so Software noch rumspielen,
damit man irgendwie Features hatte, die man
nicht hatte. Ich weiß aber gar nicht mehr, wie das
wo man das brauchte in Python,
was in Python geschrieben war, aber
so ähnlich wie man
bei AutoCAD auch erstmal List 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, das Python schon ganz lange macht.
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++.
Ja.
Ich habe jetzt nicht so viel Erfahrung. Ich habe einmal
versucht, in MySQL einen Bug,
den ich gefunden habe, irgendwie zu debunken.
Das war eher schwierig.
Ich fand das, auch gerade diese
Swerding-Geschichte,
hat
jetzt
nicht so viel Joy bei mir gespart.
Wohin gegen Postgres?
Sehr gut, kann ich empfehlen. Kann man sich sehr gut anschauen.
Ja, Postgres hat da auch immer Lob für gekriegt,
dass die einen sehr, sehr guten Quellcode
haben. Sehr gut lesbar auch.
und Python-Programme.
Office 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 zu kompilieren braucht.
Also es gab
da, wenn du mal die Gentoo-Leute fragst,
und 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.
Oh, wow. Richtig moderne Geschichten.
Ja, das war halt modern.
Aber das war das erste Mal, dass es da irgendwie Diskussionen gab,
wo Linus irgendwann eingestellt hat.
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.
Bei Postgres ist es irgendwie mit dem PostGIS
doch führend.
Wenn ich im
Hochverfügbarkeitsbereich
bin,
da ist
irgendwie MySQL allen anderen
schon vor Jahrzehnten sowas von
dran vorbeigelaufen.
Und
also ich kann
bei MariaDB
hochverübergreich,
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 wahrscheinlich dann trotzdem genau
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 das, Standby 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 ich kann auch 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, die meisten ganz Großen haben auch da in diesem Bereich immer MariaDB oder MySQL halt entsprechend von Oracle, aber nichts anderes.
bei Postgres
ist Prozessbasiert
und da, naja, das Verbindungen sind halt
Prozesse, also da kriegen
dann die Postgres, da kriegen Schnappatmungen,
du sagst, du willst einen Master haben
und 1000 Sendbys.
Das ist schon mal eine Sache,
da muss ich mir das überlegen.
Die Streaming-Replication von Postgres
funktioniert super. Ich habe mal
einen
Set-Aufsetzen 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 MySQL.
Das war also,
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, sie 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,
das machen auch gewisse
weiterführende Tools.
das ist jetzt das einfachste Clustering
mit Hochverfügbarkeit
und Master, Master und
wie heißt das?
Failover
oder sowas.
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 der
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
Postgres
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
und Jochen unterhalten sich die Programmiersprache Python keine Tabellen erzeugen oder Das wird nicht repliziert Es wird nur
und Jochen unterhalten sich über die Programmiersprache Python
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 Transaktions-Log, was das
alles irgendwie steuert, ist
von drei Sachen abhängig.
Fangen wir mit dem an,
was heute fast am
irrelevantesten ist und wo mich die meisten
mal fragen, was ist es? Es ist
NNN-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 NNN und
Little NNN, die meisten heutige Hardware
ist Little NNN.
Du hast kaum noch Big NNN.
Die alten Sunsparks waren Big-Anion.
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 dafür,
Betriebssysteme hat.
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 Linux.
Und
das dritte ist, dass es 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
und Jochen unterhalten sich über die Programmiersprache Python
älteren Versionen in eine neuere Version
replizieren. Das heißt, die
gucken erstmal 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.
Ich baue noch nebenher
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,
gerade bei Kabelfallen sind, dass die Leute
da verrückt spielen. Also ich kenne das aus Spielefirmen,
wie bescheuert
da Spieler werden, wenn der Angriff
nicht gefahren werden können und du stehst da,
das ist doch nur ein Spiel.
Aber ja, 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.
Wir haben genug Wartungsfenster drin.
Zwei Stunden ist überhaupt gar nicht das Problem.
Ja, wenn man sich das aussuchen kann, dann kann er 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
Einzelhandel zu beziehen.
Es fallen ja auch genug Services einfach auf Geschä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, also was zum Beispiel
Auftragsprobleme sind, dass du nachts die Backups gar nicht mehr machen kannst,
weil nachts so viele andere Services
laufen, die halt sonst in Betrieb nicht so klar sind.
Das hab ich mal gedacht, ich hab einen
Kunden, der macht Kassensysteme
für einen Einzelhandel.
und der hatte eine ganz große Kette Einzelhandel.
So 70.000 Bons pro Minute, da könnt ihr euch vorstellen,
Kassenbons pro Minute, da könnt ihr euch vorstellen, wie groß die Kette war.
Und 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 Wartung machen oder sonntags.
Die hatten tatsächlich nur noch einen Tag im Jahr, wo die Wartung machen konnten.
Ich glaube, das war Ostermontag oder so.
Und Pfingstenmontag oder irgendwie sowas.
Oder wenn Donnerstag 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,
in die Geschäfte viel mehr los, als wenn die Geschäfte
offen hatten und die ganzen Klassen 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 nochmal einen Tag blieb,
dass die dann zu hatten.
Deswegen, das ist
so was, man muss das vielleicht
dokumentieren als Admin, dass man
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 und da kommt man nicht drum rum.
Und so ohne Downtime,
ganz ohne Downtime, dieses Hot-Upgrade,
wie es so wunderschön bei Maria geht.
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
offen haben und switche dann halt
am Loadbalancer um, aber dann machen wir halt einen Loadbalancer an,
wenn man das switchen kann.
Das hat ja wahrscheinlich auch nicht jeder.
Naja, ich kann ja sozusagen
eine Postgres-Datenbank
oder ich möchte die upgraden ohne Downtime,
dann habe ich halt eine zweite.
Dann muss ich auf der, die ich upgraden möchte,
muss ich dann irgendwann sagen,
okay, jetzt darf nicht mehr geschrieben werden.
Dann muss die andere sozusagen so lange repliziert haben,
bis es wieder da ist.
Okay, ich habe eine kleine Downtime, stimmt.
Und dann switch ich den Block dann ganz da um.
Und du hast halt das Problem,
dass du echte hohe Verfügbarkeit fängst ja bei drei Maschinen an,
damit du, wenn eine ausfällt, immer noch zwei hast,
und nie einer alleine.
Du musst ja, wenn du jetzt
einen Master und 10 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 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 Standby setzte neu auf.
Weil das ist schneller, es ist ganz
häufig schneller.
Nicht immer, manchmal willst du sie auch einzeln
upgraden, aber ganz häufig
ist es schneller, sie neu aufzusetzen, weil
Aber kann man das nicht, ja,
gut. Siehst du das Problem?
So ein bisschen, ja, ja.
Ich meine, gut.
Also wie gesagt, du kannst mit einer, wenn du wirklich kein
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
Replikationsserver daneben stellen
da kannst du auch von der 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
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.
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
und Jochen unterhalten sich die Programmiersprache Python Manpower Ja das kann ich ja vorher machen Ich muss da leben dass der Republikations halt ein bisschen gr ist
Du ziehst das aus dem selben Backup, genau.
Genau.
Ja, du kannst auch einfach den Datamonks-Server neu aufsetzen und dann aus dem Backup das ziehen und dann die Standbys dahinter. Dann hast du aber auch eine Downtime.
Ja, so ein bisschen kommt immer vor.
Ohne Darmteilen kommst du da nicht aus.
und das ist halt...
Okay, Datenmarkup, alles in Cache, dann wird der Cache
dann...
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
und die Kunden ja plötzlich auch irgendwie was von Cluster und MySQL Cluster war sowieso schon Closed Source, glaube ich, aber 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, aber
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 teilweise
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 wohl jetzt in einer 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.
Meines Wissens, meine Info ist, dass Oracle
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,
MariaDB.
Okay.
zu setzen.
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
Du musst auch mal die nächste Mal Django einsetzen
oder Python.
Ich habe mich mal irgendwie
letztens wieder mit HTML rumgequält.
War auch spannend, hat ich auch ewig nicht
gemacht, aber nein.
war jetzt ein Beispiel.
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
in, 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
Maria die Idee.
Das war von Anfang an Postgres.
Nee, das 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.
und Ruby on Rails mit MariaDB benutzt.
Also es geht zwar wohl auch, bei Django geht es auch,
aber das machen halt wenige Leute.
Und ich glaube, ich habe gehört,
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 Ruby on 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.
und
und Jochen unterhalten sich über die Programmiersprache Python
anders, so wie ich denke.
Und teilweise
mache ich es dann noch dichter, also wenn dann
irgendein User gebraucht wird,
also ganz schlimm ist, wenn Superuser gebraucht wird,
grundsätzlich erstmal ohne Superuser,
weil Superuser sollte man ja
jetzt nicht unbedingt für so ein Tool nutzen.
Und
ja,
aber das sind so die ganz großen
Unterschiede, wo ich jetzt wirklich diese zwei
Unterschiede, also wenn ich wirklich in dem ganz tiefen
Hochverfügbarheitsbereich bin, würde ich
MariaDB nehmen, auch wenn ich im GIS-
und Jochen unterhalten sich über die Programmiersprache Python
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 Jahren
Tests gemacht. Nicht ich,
sondern viele große Firmen.
Die haben dieselbe
Hardware genommen
und haben dann geguckt, weil da kommt es immer
darauf an, wie viel in 5 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 5 Minuten Regel und
die haben dann also mit ganz ganz
vielen Tests festgestellt, bei Linux
war das im Schnitt damals bei
8 GB
und bei Windows 512 MB.
und 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 hast gesagt, du hast nur Apple-Hardware, darf ich das sagen?
Ja, nicht ausschließlich, aber irgendwie.
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.
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 denen dann wirklich mal so intensiv
ein LibreOffice gibst, erst danach merken sie,
und Jochen unterhalten sich über die Programmiersprache Python
schreiben Also zum Beispiel das ist ein Fall den ich immer beeindrucken finde da gibt es auch lange Artikel dar 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 in einem halben Rack Und das zentrale St 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.
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.
Das tut sich so, das echte Debian, das Ubuntu und dann CentOS.
Dann Reel vielleicht noch?
Was?
Rated Enterprise.
Selten.
Okay.
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 Rated Enterprise, da mussten wir was nachinstallieren.
Die CD lag 300 Kilometer entfernt.
Das war auch sehr lustig.
und so, weil eben
wir ziehen uns das von irgendeinem FDP, gab's
nicht.
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.
Du hast ja eher so Privatanbinder.
Was ich jetzt gehört habe, was wohl wieder im Kommen ist, ist
BSD.
Ich glaube, das war auch schon mal,
es gab immer Leute, die das lieber gemacht haben,
gerade für irgendwie wegen ZFS und so.
Ja, wobei das
ZFS 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 Weiser
hatte die Vase
Ja, der ist tatsächlich
im Gefängnis gelandet, weil er seine Frau umgebracht hat
Aber, ja
Das sagt jetzt ja noch nicht nur die Qualität
vom Verteilssystem
Nein, also tatsächlich ist meine
Ich weiß, es gibt
ganz viele Microsofts, aber
tatsächlich bin ich in der Linux-Welt unterwegs
und
mich buchen auch komisch, aber es sind meistens die Leute
die einen Linux-Server haben
auch Migration, da habe ich auch
mit Linux, natürlich musst du
das Betriebssystem auch noch ein bisschen tunen
das machen wir dann ja auch
bei Linux, ja, das ist auch
völlig egal, welches Betriebssystem, also ob du da
welche Distributionen du 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
und Jochen unterhalten sich über die Programmiersprache Python
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. Da 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 einstellen kannst.
Wenn du sowas machst
auf ganz kleiner Hardware, das
passiert so alle Jubiläare mal, dass ich
mal angefragt werde für
Postgref aus extrem kleiner Hardware
auf irgendwelchen Geräten,
die dann doch sehr klein sind, wo du dann
irgendwelche Variablen in C noch ändern muss.
Nichts, was er sich gerade ist,
ist Service MySQL in Abletrue, damit man
mir die ADB laufen lassen kann.
Interessant, ja.
Ja, Python
hat da so ein Problem. Python zu installieren ist
immer nach wie vor schwierig oder wüsste ich jetzt keinen
Standardweg, wie das geht. Auch wenn ich
Python installiere oder halt so produktiv,
also Desktop gibt es vielleicht noch
andere Möglichkeiten, aber wenn ich es irgendwo auf dem Server
kopiere, ist das tatsächlich momentan auch noch selber, weil
es gibt keine gute Alternative.
Ja.
Der ist ja noch total abhängig davon, was seine Umgebung hat.
Reicht es nicht,
was das Betriebssystem mitbringt?
Naja, Debian macht es kaputt.
Debian macht es leider völlig kaputt. Echt?
Ja.
Ja, 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.
Man will ja quasi immer nur sein eigenes nutzen und nicht das System Python.
Weil da sonst komische Sachen passieren
und dann muss man das eigentlich immer neu
irgendwo herbekommen.
Uff.
Ja, ja.
Auch bei Django und Co.?
Ja, ja, klar.
Genau.
Das ist dann aber aufwendig.
Ja, die tollen Story
ist da so ein bisschen ungelöst,
ein ungelöstes Problem. Das ist ein bisschen schwierig.
Ja, es gibt da so Tooltür,
wie PyEnv oder sowas, dann sagst du einfach, was du hast.
Aber du musst halt wieder ein extra Tool installieren, was dann halt
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 ja auswendig, aber
du kannst dann auch, in dem Weg,
was habe ich für ein Linux, kannst du auch
Red Hat Enterprise angucken oder
CenterOS oder so. Du kriegst das 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?
und Jochen unterhalten sich über die Programmiersprache Python
download.mariadb.org
So, genau da.
Und da hast du...
Wo ist denn das? Hier auf der Handy-Version.
Das 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.
Ich glaube, das können wir ja vielleicht so nachlesen.
Genau, das kann ich euch noch.
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, quasi produktiv sowieso nicht, aber zum Entwickeln geht beides ganz gut.
Ich habe nicht so viel Erfahrung mit MariaDB, aber
das mal probiert hat es schon funktioniert.
aber ja.
Du kannst es beides irgendwie hin,
das zu installieren.
Ich mache das dann tatsächlich,
dass ich das irgendwo auf dem Server packe.
Aber ich auch tatsächlich mit dem Mac nicht
entwickle. Also da habe 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, oder sagen wir mal, das war eine ganze Zeit lang
total kaputt.
Ich bin in dieses Problem auch reingelaufen, das war furchtbar.
Mit dieser schönen F-Bar, die dann irgendwie ausgeblendet zum Scrollen...
Ja, es gab diverse Probleme.
Die Touchbar hatte das Problem, es gab keine S-Tab-Taste mehr, das war hoher.
Und gerade als wir Ayguza, muss ich sagen, fand ich nicht so gut.
War eher so mittel.
Und eine andere Geschichte, die halt auch total nervig war,
ist halt, dass von 2016 bis 2021 oder 2020,
und das war halt, ja, um das zu lösen, muss das Mainboard getauscht werden, das heißt,
man muss damit irgendwie irgendwo hin, da muss das eingeschickt werden, lautet das eine
Woche und wer mal darauf angewiesen ist, dass Rechner funktionieren, ist das natürlich
eher auch ungut.
Aber wisst ihr was, ich glaube, über Mac-Hardware reden wir ja gleich bei einem Getränk weiter
und wir haben heute richtig viel
gelernt über Datenmachung. Danke für das.
Ja. Das war echt super.
War gut.
Ich würde sagen, wir haben alles besprochen.
Die Pics 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, zu sehen,
wo man eventuell Performance-Probleme hat.
Da gibt es für Postkisten ein schönes
kommerzielles Tool, pgMustard.
Kann sich mal angucken.
und sonst, ja, was ich nicht...
Also ja, ich hätte irgendwie noch, ich mache ja gerne dann
Modelle irgendwie mit Pydentic, der 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.
Wir bleiben uns bewogen, schaltet uns mal wieder ein und
alle Feedback, Kritik, Anregungen an
hallo.pythonpodcast.de
Tschüss, bis zum nächsten Mal.