Transcript: PostgreSQL und MariaDB

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

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.

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

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.