meine Datenbank wird größer wenn ich Felder lösche

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Zu jeder erstellten Rechnung in meinem Rechentrainer wird ein Eintrag in der Protokoll Datenbank angelegt. Da steht jeweils der Text der Frage drin. Das Feld ist als TextField definiert und müsste ja eigentlich ziemlich viel Platz einnehmen. Auf euren Rat hin, habe ich jetzt für diese Texte eine eigene Datenbank angelegt, in der der Text der jeweiligen Aufgaben drin stehen (eigentlich nicht der komplette Text, sondern nur den Rahmen, der mit Variablen gefüllt wird). Bisher sind etwa 150 000 Fragen in der Protokoll Datenbank. Ich habe erst einige Fragen in die Fragendatenbank übertragen, das Feld "Text" aber schon mal (probeweise) aus "Protokoll" gelöscht. Ich dachte, damit wird meine Datenbank kleiner, sie ist aber (wohl durch das Log) viel größer geworden - macht das Ganze denn dann überhaupt irgendeinen Sinn? Das ist ja doch einige Arbeit bis ich das alles angepasst habe.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Datenbank werden normalerweise nie kleiner. Aber es gibt je nach Datenbanksystem einen Befehl, der Tabellen aufräumt. Bei dem Thema geht es auch gar nicht darum, kleinere Tabellen zu haben, sondern darum, dass Daten so gespeichert werden, dass man sie einfach weiterverarbeiten kann und formatierter Text ist da denkbar ungeeignet.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und man hat dir gesagt, das soll in eine extra _Datenbank_?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Sirius3 hat geschrieben: Freitag 26. Januar 2024, 19:33 Datenbank werden normalerweise nie kleiner. Aber es gibt je nach Datenbanksystem einen Befehl, der Tabellen aufräumt. Bei dem Thema geht es auch gar nicht darum, kleinere Tabellen zu haben, sondern darum, dass Daten so gespeichert werden, dass man sie einfach weiterverarbeiten kann und formatierter Text ist da denkbar ungeeignet.
Dann lasse ich das doch einfach so? Für mich wäre das nämlich sehr unübersichtlich. Ich bastele in meinem Code komplizierte Fragentexte mit zufälligen Werten und müsste den zugehörigen Textrahmen extra speichern.
sparrow hat geschrieben: Freitag 26. Januar 2024, 19:37 Und man hat dir gesagt, das soll in eine extra _Datenbank_?
Das war schon öfter Thema, hier hat z.B. @Sirius3 was dazu gesagt:
Sirius3 hat geschrieben: Mittwoch 10. Januar 2024, 21:00 Den Aufgabentext zu speichern ist doch quatsch, zumal es ja viele Aufgaben gibt, die gar nicht in einen Text fassbar sind. Hier sollten nur die Parameter zur Aufgabe gespeichert werden, denn mit Hilfe der Aufgabenkategorie kann man ja dann die gesamte Aufgabe rekonstruieren.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und wo steht da, dass du eine eigene _Datenbank_ verwenden sollst?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Dieses Zitat war das erste, das ich gefunden habe.
Nur wo packe ich den Aufgabentext hin, wenn ich ihn nicht im Protokoll speichere?
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

In die bestehende Datenbank?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Da habe ich möglicherweise ein Problem mit den Begriffen. Ich denke ich habe eine Datenbank für alles. Diese hat verschiedene Tabellen (?) - eine für "Kategorien", "eine für "Protokolle" und viele weitere .... und jetzt noch eine für "Fragen". Kläre mich bitte auf, wie man die Unterteilungen in einer Datenbank nennt.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Dann frage ich mal anders:
Welchen Einfluss hat den das Feld "models.TextField()", das ich zurzeit 150000 mal in meinem Protokoll gespeichert habe auf die Größe der Datenbank? Es steht ja meistens nicht viel drin - nehmen die Leerzeichen auch Platz weg?. Macht es Sinn, dieses Feld wenigstens für zukünftige Einträge zu entfernen und meine "Texte" extra zu speichern? Der Umbau wäre einige Arbeit.
Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

Was steht denn da drinnen in dem Feld? "models.TextField()" bezeichnet ja nur den Typ des Feldes. Wenn in verschiedenen Tabellenzeilen im Protokoll dieses Feld jeweils identischen Inhalt hat, dann macht es wahrscheinlich Sinn. Doppelungen von Daten will man ja meist vermeiden.

Wieviel Platz die Zeichen (inkl. Leerzeichen) einnehmen, hängt IMHO von der Datenbank ab. Aber Leerzeichen nehmen, wenn sie wirklich da sind, natürlich auch Platz ein. Nur weil man sie nicht sieht, sind sie ja nicht weg.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Meine Frage war schlecht formuliert (Mitten in der Nacht ist die Konzentration noch schlechter). Es geht eigentlich nicht um Leerzeichen. Die Frage ist, ob ein Text von 10 Zeichen den gleichen physischen Platz in der Datenbank benötigt wie ein, in TextField möglicher, Inhalt von mehreren Seiten.
Ich habe jetzt mal folgende Überlegung angestellt. Meine Datenbank besteht vermutlich hauptsächlich aus Einträgen in die "Protokoll"-Tabelle, es gibt zwar noch einige andere, die sind aber inhaltlich sicher sehr übersichtlich. Die Datenbank hat etwa 50 000kB - wenn ich die durch die Anzahl der Einträge in "Protokoll" teile (und die anderen Inhalte mal vernachlässige), dann komme ich auf gerade mal 500Byte (oder habe ich da was übersehen?) - das ist weniger als die Hälfte einer Normseite. Da sind diese 150000 TextFields wohl nicht so groß. Meistens stehen bei mir da auch nur etwa 10 Zeichen drin.
Wenn ich diese Texte "auslagere", sind das schätzungsweise 300 Einträge in einer eigenen Tabelle, die auch bei einer Million Einträge in der Protokolltabelle nicht mehr werden.
... macht das Sinn?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

warum machst du dir eigentlich Gedanken wegen der Größe? 50 MB ist ja echt nicht viel, sondern eher... wenig. Wenn du mal Richtung Gigabyte gehst kann man sich mal Gedanken machen.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Nun ja, wenn ich dann mal soweit bin, muss ich mir anhören, dass ich mich da von Anfang an drum hätte kümmern müssen. Ich hatte ja schon darauf hingewiesen, dass meine Datenbank nach dem Löschen der besagten 150000 TextFiles sich fast verdoppelt hat. Ich strebe ja an, dass möglichst alle Schülerinnen und Schüler in Deutschland mit meinem Rechentrainer arbeiten :) da kommt dann schon was zusammen. ... und daher möchte ich diese Umstellung möglichst frühzeitig in Angriff nehmen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ja, da haben wir (inkl. mir) in der Tat schon mal drauf hingewiesen. Aber: die Datenbankgröße ist da sekundär. Relevant ist dann zuerst wie effizient deine Queries sind (Stichwort: Datenbankdesign) und wie viel Queries die DB pro Sekunde so schafft. Das kann man in Teilen mit dickerer Hardware kompensieren. Aber DAS Augenmerk würde ich erstmal auf ein optimales Datenbankdesign legen.

Aber realistischer Weise wirst du vorher an diverse andere Grenzen stoßen. Lt. schneller Internetrecherche gab es 2022 ~4,3 Mio Schüler in der Sekundarstufe I in Deutschland. Wenn der größere Teil davon deinen Rechentrainer nutzt brauchst du eine ganze andere Serverinfrasturktur mit Load Balancern, mehreren Applikationsservern und mehreren DB-Servern. Zumal davon auszugehen ist, dass die Anzahl der Anfrage bei deiner Applikation stark asymmetrisch ist, spricht morgens wenig, nachmittags mega viel, abflachend zum Abend und nachts nichts.
Dann brauchst du dedizierte Server oder ein passendes Setup bei AWS, Azure oder so und bist sicherlich bei X hundert oder eher X tausend Euro Betriebskosten pro Monat.

Wenn das wirklich dein Ziel ist dann solltest du dir vielleicht eher über die Gründung eines Vereins oder einer Stiftung inkl. passender Sponsoren und weiterer freiwilliger Helfer (Admin, Applikationsentwickler) Gedanken machen als um 55 MB DB Größe.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Sonntag 28. Januar 2024, 09:48 Wenn das wirklich dein Ziel ist dann solltest du dir vielleicht eher über die Gründung eines Vereins oder einer Stiftung inkl. passender Sponsoren und weiterer freiwilliger Helfer (Admin, Applikationsentwickler) Gedanken machen
Na denn! Mein Programmcode ist sicher dilettantisch aber von den pädagogischen und methodischen Möglichkeiten meines Programms bin ich überzeugt. Ich habe nicht so hochfliegende Pläne, dass alle Schülerinnen und Schüler der SEK1 meine Rechentrainer.app benutzen werden. Ich werde mich aber jetzt verstärkt um Akquise kümmern. Ich habe auch schon eine Zusage für ein Treffen beim Kultusministerium in Wiesbaden bei dem ich meinen Rechentrainer vorstellen darf und meine Wünsche für Hosting vortragen soll. Gibt es da jemanden der mich beraten will?

Übrigens: Das mit der zeitlichen Häufung ist nicht so. Das Programm ist eigentlich nicht dazu ausgelegt während der Unterrichtszeit genutzt zu werden. Ich habe festgestellt, dass die Kids teilweise schon morgens vor 7 Uhr und auch bis Mitternacht und später rechnen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Pitwheazle hat geschrieben: Samstag 27. Januar 2024, 15:44 ... Ich strebe ja an, dass möglichst alle Schülerinnen und Schüler in Deutschland mit meinem Rechentrainer arbeiten :) da kommt dann schon was zusammen. ... und daher möchte ich diese Umstellung möglichst frühzeitig in Angriff nehmen...
Pitwheazle hat geschrieben: Freitag 2. Februar 2024, 13:07 ... Ich habe nicht so hochfliegende Pläne, dass alle Schülerinnen und Schüler der SEK1 meine Rechentrainer.app benutzen werden. ...
Was denn jetzt? Du widersprichst dir selber...
und meine Wünsche für Hosting vortragen soll. Gibt es da jemanden der mich beraten will?
Zum Auslegen der Server müsstest du schon wissen, wie viele Zugriffe du erwartest... Oder du gehst zu AWS oder Azure oder so und wählst ein frei skalierendes Setup. Das ist dann aber das Gegenteil von Kostenkontrolle, weil es gerüchteweise extrem schwer bis unmöglich ist, die Kosten vorher abzuschätzen, wenn man ein frei skalierendes Setup fährt.

Die Didaktik deines Projekts stellt denke ich keiner in Frage. Bzgl. des Umsetzung ist meine Einschätzung eher, dass du mit dem Refratoring noch lange nicht fertig bist. Was aber nicht schlecht wäre, damit dir das ganze nicht später, wenn du vielleicht / hoffentlich später mal eine 6- oder 7-stellige Nutzerzahl hat, hart auf die Füße fällt.

Und wenn du mit öffentlichen Stellen kooperieren willst musst du dich vielleicht / wahrscheinlich / leider auch mit DSVGO-Konformität deiner Applikation befassen. Du speicherst ja personenbezogene Daten.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Freitag 2. Februar 2024, 15:45
Pitwheazle hat geschrieben: Samstag 27. Januar 2024, 15:44 ... Ich strebe ja an, dass möglichst alle Schülerinnen und Schüler in Deutschland mit meinem Rechentrainer arbeiten :) da kommt dann schon was zusammen. ... und daher möchte ich diese Umstellung möglichst frühzeitig in Angriff nehmen...
Pitwheazle hat geschrieben: Freitag 2. Februar 2024, 13:07 ... Ich habe nicht so hochfliegende Pläne, dass alle Schülerinnen und Schüler der SEK1 meine Rechentrainer.app benutzen werden. ...
Was denn jetzt? Du widersprichst dir selber...
... bitte beachte die Grinsekatze im ersten Post.
noisefloor hat geschrieben: Freitag 2. Februar 2024, 15:45 Zum Auslegen der Server müsstest du schon wissen, wie viele Zugriffe du erwartest...
Bzgl. des Umsetzung ist meine Einschätzung eher, dass du mit dem Refratoring noch lange nicht fertig bist.
Und wenn du mit öffentlichen Stellen kooperieren willst musst du dich vielleicht / wahrscheinlich / leider auch mit DSVGO-Konformität deiner Applikation befassen. Du speicherst ja personenbezogene Daten.
... wie soll ich denn jetzt schon wissen, wieviele Zugriffe ich erwarte? Da muss es ja eine Möglichkeit geben, das auch bei Bedarf anzupassen.
... ich weiß nicht mal, was Refratoring ist.
... in Bezug auf DSVGO habe ich mein Bestes getan und ansonsten auch hier beim KUMI um Hilfe gebeten.
Ansonsten:
Pitwheazle hat geschrieben: Freitag 2. Februar 2024, 13:07 ... Gibt es da jemanden der mich beraten will?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
... wie soll ich denn jetzt schon wissen, wieviele Zugriffe ich erwarte?
Indem du die Logs deiner bestehend Applikation auswertest, dass mit der aktuellen Nutzerzahl korrelierst und das dann auf die erwartet / erhoffte Nutzerzahl hochrechnest. Klingt simpel - ist es aber nicht ;-)
Da muss es ja eine Möglichkeit geben, das auch bei Bedarf anzupassen.
Klar. Eine Möglichkeit wurde ja schon genannt. Wenn man konventionelle (aka: echte) Server hat skaliert das halt nur im Rahmen der Möglichkeiten des Servers - also z.B. RAM, bis zu einem gewissen Grad CPU, Festplattendurchsatz (sollte bei dir IMHO unkritisch sein), Netzwerkdurchsatz etc. Das gibt es alles "von bis" - zum Preis von "von bis". Wenn du wirklich irgendwann viele Nutzer hast, dann wirst du wahrscheinlich irgendwann um eine horizontale Skalierung (wie z.B. Load Balancer mit zwei oder mehr Applikationsservern und ggf. mehreren Datenbankservern nicht umhin kommen. Das setzt man aber nicht mal "einfach so" auf, da brauchst du eine Admin, der so was kann.

BTW: hast du ein Backupkonzept? Wäre ja doof, wenn irgendwas im Mai zum Ende des Schuljahres crasht und die Lernergebnisse von einem Schuljahr im Nirwana wären.

Ich hab's ja schon mal gesagt: maßgeblich in Sachen Performance ist bei deiner Anwendung die DB Performance, also effiziente Queries, wenig Roundtrips, alles was relevant ist indiziert. Basierend auf dem Code, den du bist jetzt gezeigt hast, ist das eben nicht der Fall -> Refactoring. Zitat dazu aus Wikipedia: "Refactoring bezeichnet in der Software-Entwicklung die manuelle oder automatisierte Strukturverbesserung von Quelltexten unter Beibehaltung des beobachtbaren Programmverhaltens.".
Das wurde in einem deiner Threads auch schon mal angesprochen. Refactring ist auch nichts schlimmes, sondern normal. Bei kleinen und großen Projekten.

Dein Projekt finde ich nach wie vor super und ich habe Hochachtung vor deiner Motivation, dass durchzuziehen. Aber das Ausrollen in die Breite siehst du z.Zt. IMHO ziemlich blauäugig. IMHO geht das auch auch in eine Richtung, wo man das a) nicht mehr alleine machen kann und b) nicht mehr wirklich als Hobby.

In meiner aktiven Zeit bei ubuntuusers.de gab es da mehrere Leute, die sich um die Server gekümmert haben und das Setup waren ein Load Balancer mit zwei Applikations- und zwei relativ dicken Datenbankservern. Und das "nur" für die deutschsprachige Ubuntu-Community und deutlich mehr Lese- als Schreibzugriffen auf die DB. Und es gibt sicherlich viiiiel mehr Schüler in der SK1 in Deutschland als Nutzer, die bei ubuntuusers.de angemeldet sind bzw. auf die Plattform zugreifen.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Freitag 2. Februar 2024, 17:07 ... das dann auf die erwartet / erhoffte Nutzerzahl hochrechnest.
... tja, das wenn man wüsste ...
noisefloor hat geschrieben: Freitag 2. Februar 2024, 17:07 BTW: hast du ein Backupkonzept? Wäre ja doof, wenn irgendwas im Mai zum Ende des Schuljahres crasht und die Lernergebnisse von einem Schuljahr im Nirwana wären.
da hoffe ich, dass sich mein Hoster drum kümmert :)
noisefloor hat geschrieben: Freitag 2. Februar 2024, 17:07 Das setzt man aber nicht mal "einfach so" auf, da brauchst du eine Admin, der so was kann.
... ja, genau, ich bräuchte einen Berater. Leider hilft mir das nicht, wenn ihr mich darauf hinweist, was alles schief gehen kann oder was ich alles berücksichten müsste - das geht größtenteils über meine dilettantischen Fähigkeiten.
noisefloor hat geschrieben: Freitag 2. Februar 2024, 17:07 Das gibt es alles "von bis" - zum Preis von "von bis".
Da mein Programm weiterhin kostenlos bleiben soll, muss ich da mal sehen was das KUMI sagt :D
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Freitag 2. Februar 2024, 17:07 -> Refactoring. Zitat dazu aus Wikipedia: "Refactoring bezeichnet in der Software-Entwicklung die manuelle oder automatisierte Strukturverbesserung von Quelltexten unter Beibehaltung des beobachtbaren Programmverhaltens.".
... und wie geht das? Mein Programm scheint zu machen was es soll.
Antworten