Hi,
ich habe mal ne Frage wie man es realisieren kann wenn ich dauerhauft in eine SQLiteDB schreibe und meine DB irgendwann so groß ist das kein Speicherplatz vorhanden ist das ich dann die ältesten Daten lösche.
Ich müsste wissen ob ich über SQLite den Speicherplatz abfragen kann oder ob ich ne eigene Funktion zu überwachung schreiben müsste.
Gruß ScooB
SQLite Überlauf des Speichers verhindern
@ScooB: So etwas ist üblicherweise jenseits der Abstraktionsschicht die ein DBMS bietet. Das wirst Du mit den ganz normalen Bertriebssystem-Mitteln lösen müssen. Also schauen ob auf dem Dateisystem auf dem die DB-Datei liegt der Platz knapp wird, oder deren Grösse überwachen. Und dann ist es mit dem löschen von Daten nicht getan, denn dadurch wird die Datei nicht kleiner, sondern Du musst das DBMS auch noch anweisen die Daten neu zu organisieren. Dafür gibt es keine Anweisung im SQL-Standard, aber SQLite kennt eine eigene Anweisung: VACUUM. Aber Achtung: Dafür kann bis zu zweimal der Speicherplatz den die DB bereits belegt benötigt werden, und die gesamte DB wird kopiert und neu angeordnet geschrieben. Das kann also bei grossen DBs relativ lange dauern.
Alternativ könntest Du Dir den `auto_vacuum` Modus von SQLite anschauen.
Alternativ könntest Du Dir den `auto_vacuum` Modus von SQLite anschauen.
Also eine SQLite DB kann bis zu 14 TByte groß werden. Was hast du vor? oOScooB hat geschrieben:Hi,
ich habe mal ne Frage wie man es realisieren kann wenn ich dauerhauft in eine SQLiteDB schreibe und meine DB irgendwann so groß ist das kein Speicherplatz vorhanden ist das ich dann die ältesten Daten lösche.
Ich müsste wissen ob ich über SQLite den Speicherplatz abfragen kann oder ob ich ne eigene Funktion zu überwachung schreiben müsste.
Gruß ScooB
Ansonsten kannst du dir ein Script in Python schreiben, ausserhalb der db, dass den Speicherplatz auf der Platte verwaltet.
@Gregorrr: Die DB mag 14 TiB gross werden, aber die darunter liegende Platte wächst ja nicht auf magische Weise.
Oder hast Du nur noch 14+ TiB-Platten im Einsatz‽ 


Also so groß soll es schon net werden
Sagen wir mal ich würde es auf einem USB Stick speicher oder SD Karte und ich hätte 1GB Speicherplatz
also so habe ich mir das auch schon gedacht mit ner Überwachung die dann das ganze verwaltet




Sagen wir mal ich würde es auf einem USB Stick speicher oder SD Karte und ich hätte 1GB Speicherplatz
also so habe ich mir das auch schon gedacht mit ner Überwachung die dann das ganze verwaltet
Seh ich das richtig
wenn ich 1000 Einträge in der DB habe ist sie sagen wir mal 1MB groß jetzt lösch ich 500 Einträge bleibt sie 1MB groß,
wenn ich jetzt wieder 500 Einträge hinzufüge ist sie immer noch 1 MB groß oder?
Gruß
wenn ich 1000 Einträge in der DB habe ist sie sagen wir mal 1MB groß jetzt lösch ich 500 Einträge bleibt sie 1MB groß,
wenn ich jetzt wieder 500 Einträge hinzufüge ist sie immer noch 1 MB groß oder?
Gruß
@ScooB: Das könnte so sein. Muss aber nicht. Man kann vielleicht davon ausgehen, dass die Datei nicht kontinuierlich wächst wenn man immer wieder Datensätze löscht, oder zumindest nur wenig, aber sicher sein kannst Du da nur wenn das irgendwo explizit in der Dokumentation steht.
@jens: Ja, die VACUUM-Anweisung die ich schon erwähnte. Man sollte aber aufpassen das dafür bis zu doppelt so viel Platz der aktuellen Grösse *zusätzlich* benötigt werden kann.
OK, bei sehr beschränktem Platz z.B. auf einem Stick macht es Sinn.
Die Standardeinstellungen sind bei SQLite, dass die Datenbank-Datei beim Löschen nicht schrumpft. D.h. nach dem Löschen bleibt die Größe der Datei enthalten.
Es gibt noch ein PRAGMA auto_vacuum, dass es ermöglicht, dass die Datenbank-Datei nach dem Löschen schrumpft automatisch. Diese PRAGMA ist standardmäßig ausgeschaltet. Man muss dieses einschalten, bevor man jegliche Tabelle erstellt.
Das Problem mit auto_vacuum ist, dass es bei einer 50 MB db-Datei bis zu > 1 Minute Aufräumarbeit dauern kann. [http://liferea.blogspot.de/2008/08/why- ... -good.html]
Wenn das kein Problem für dich darstellt, dass es ab und zu laggy sein kein. Schalt das PRAGMA ein.
Die Standardeinstellungen sind bei SQLite, dass die Datenbank-Datei beim Löschen nicht schrumpft. D.h. nach dem Löschen bleibt die Größe der Datei enthalten.
Es gibt noch ein PRAGMA auto_vacuum, dass es ermöglicht, dass die Datenbank-Datei nach dem Löschen schrumpft automatisch. Diese PRAGMA ist standardmäßig ausgeschaltet. Man muss dieses einschalten, bevor man jegliche Tabelle erstellt.
Das Problem mit auto_vacuum ist, dass es bei einer 50 MB db-Datei bis zu > 1 Minute Aufräumarbeit dauern kann. [http://liferea.blogspot.de/2008/08/why- ... -good.html]
Wenn das kein Problem für dich darstellt, dass es ab und zu laggy sein kein. Schalt das PRAGMA ein.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist ja egal wie groß die Platte ist, mit LVM & Co. sind 14+ TiB jetzt auch nicht so teuer. Vor nem Jahr 6 oder 8 TB mit RAID zusammengesetzt, die Festplattenpreise waren ja durchaus bezahlbar.BlackJack hat geschrieben:@Gregorrr: Die DB mag 14 TiB gross werden, aber die darunter liegende Platte wächst ja nicht auf magische Weise.Oder hast Du nur noch 14+ TiB-Platten im Einsatz‽
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Vor über 10 Jahren mehrere TB aus massenhaft 9GB SCSI-Platten zusammengebaut. Das ging auch - bis im Serverraum die Klimaanlage ausfiel ...Leonidas hat geschrieben:Vor nem Jahr 6 oder 8 TB mit RAID zusammengesetzt, die Festplattenpreise waren ja durchaus bezahlbar.
@Leonidas: Finde ich schon. Vielleicht bin ich auch einfach zu arm und mag mir nicht einen neuen Rechner kaufen wo die dann auch reinpassen würden.
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wie viel Daten schreibst du denn? Ein DB mit 500 MB "nur Textdaten" (also keine großen Binärdateien) ist schon ziemlich viel. Zumindest, wenn du nicht gerade von Entreprise-Anwendungen redest.
Gruß, noisefloor
wie viel Daten schreibst du denn? Ein DB mit 500 MB "nur Textdaten" (also keine großen Binärdateien) ist schon ziemlich viel. Zumindest, wenn du nicht gerade von Entreprise-Anwendungen redest.
Gruß, noisefloor
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Der Eintrag ist zwar schon sehr alt ... mich würde das aber auch interessieren. Die Frage wurde nicht wirklich beantwortet. Ich habe einen Freund gefragt, der für Datenbanken von SAP zuständig war, der wusste es auch nicht. Die Datenbank wird ja, soweit ich das sehe immer wieder vergrößert, wenn eine bestimmet Menge an Daten dazukommen ist, sie wird aber nicht verkleinert. Die Frage ist also, wird der, durch Löschen eigentlich freigewordene Platz "wiederverwendet" bevor die Datenbank vergrößert wird - oder bleibt er leer - oder bleiben die Daten da, sind aber nicht mehr aufrufbar?
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pitwheazle: Geh einfach vom ”schlimmsten” aus, dann bist Du auf der sicheren Seite. 
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
in der SQLite Doku ist erklärt, warum eine SQLite DB Datei beim Löschen von Daten nicht kleiner wird, siehe https://www.sqlite.org/fileformat.html . Das Stichwort ist Freelist Page.
Wie andere / größere Datenbanken das handhaben sollte bei der jeweiligen DB dokumentiert sein, wenn die DB Open Source Software ist. Ist am Ende aber eigentlich auch gleich, sofern man kein akutes Platzproblem hat. In der o.g. SQLite Doku ist auch erklärt, wie groß eine SQLite DB Datei sein kann und welche Limits man wahrscheinlich vorher trifft.
Gruß, noisefloor
in der SQLite Doku ist erklärt, warum eine SQLite DB Datei beim Löschen von Daten nicht kleiner wird, siehe https://www.sqlite.org/fileformat.html . Das Stichwort ist Freelist Page.
Wie andere / größere Datenbanken das handhaben sollte bei der jeweiligen DB dokumentiert sein, wenn die DB Open Source Software ist. Ist am Ende aber eigentlich auch gleich, sofern man kein akutes Platzproblem hat. In der o.g. SQLite Doku ist auch erklärt, wie groß eine SQLite DB Datei sein kann und welche Limits man wahrscheinlich vorher trifft.
Gruß, noisefloor