Seite 1 von 1

Sprache löschen löscht auch Artikelinhalte?

Verfasst: Mi 8. Nov 2017, 16:23
von farina
Hallo,

ich habe da gerade mal ein Verständnisproblem und leider nichts dazu gefunden.

Werden alle dazugehörigen Datenbankinhalte gelöscht, wenn man eine Sprache löscht?
Ich möchte nämlich nicht, dass ungenutzte Restbestände in der Datenbank bleiben.
Sonst würde ich eher jeden Artikel und jeden Menüpunkt einzeln löschen. :(
Wenns aber zu vermeiden wäre, wäre das super.

Gruß Siggi

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Mi 8. Nov 2017, 19:30
von Oldperl
Servus,

grundsätzlich, und von der Logik her, sollten beim Löschen einer Sprache auch alle sprachbezogenen Inhalte in der DB gelöscht werden. Ob das zu 100% in 4.9.x auch so ist bzw. funktioniert entzieht sich meiner Kenntnis, da ich selbst beim Löschen noch nicht den Dump der DB entsprechend betrachtet habe. Es gab bereits in früheren Versionen (4.6.x, 4.8.x) immer mal wieder entsprechende Probleme, am bekanntesten sind da wohl die Geister-Kategorien mit den entsprechenden Auswirkungen. Auch bei Modulen und/oder Plugins kann es möglicherweise zu Karteileichen kommen, da es dafür zwar inzwischen einen Core-Mechanismus bzw. einen Hook/Chain gibt, dieser aber in der Regel nicht genutzt oder nicht bekannt ist.

Solltest Du ein es bei Dir einfach mal versuchen, so wäre ein DB-Dump davor und danach nicht schlecht, um entsprechende Überbleibsel zu suchen, bzw. um überhaupt mal zu schauen ob es entsprechend funktioniert.

Gruß aus Franken

Ortwin

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 09:38
von rethus
Soweit ich weiß, musst du den ganzen Weg zu Fuß gehen.
Das heißt Artikel löschen, Kategorien löschen, Sprache löschen (in dieser Reihenfolge).

Ein rekursives Löschen war zwar schon des öfteren gewünscht, ist aber noch nicht umgesetzt worden.

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 10:22
von farina
OK, danke für die Hilfe
Siggi

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 13:38
von homtata
Um das zu Verhalten zu testen, könnte man m.E. auch so vorgehen: Sprache löschen. Dann neue Sprache anlegen. Diese erhält in der DB eine höhere fortlaufende Nummer. Diese Nummer händisch auf die gerade gelöschte Sprach-ID zurückstellen. Wenn dann darunter Inhalte aufkreuzen, werden diese offensichtlich nicht gelöscht ;-)

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 14:14
von Oldperl
Servus,
rethus hat geschrieben: Do 9. Nov 2017, 09:38 Soweit ich weiß, musst du den ganzen Weg zu Fuß gehen.
Das heißt Artikel löschen, Kategorien löschen, Sprache löschen (in dieser Reihenfolge).

Ein rekursives Löschen war zwar schon des öfteren gewünscht, ist aber noch nicht umgesetzt worden.
Das ist definitiv falsch! CONTENIDO in Version 4.9 löscht, wenn es denn alles durchläuft, rekursiv alle zur Sprache gehörenden Elemente. Und das sowohl in der DB als auch im Code-Cache. Der Löschprozess ist recht umfangreich programmiert und bezieht sich auf etliche Core-DB-Tabellen.
Es gibt aber kein zurück, auch nicht falls etwas schief läuft oder abbricht. Hier kann man das Löschen nochmal anstoßen, solange der Eintrag in der Tabelle für die Sprachen noch vorhanden ist, und damit Abschnittsweise löschen. Je nachdem an welcher Stelle der Abbruch erfolgte können dabei aber Karteileichen übrig bleiben.
Was jedoch fehlt, so wie ich es gedacht habe, ist eine entsprechende Anbindung von Plugins oder Modulen, bzw. eine Chain, die man entsprechend vorher in eigene Programmteile einbinden könnte. Selbst die eigenen Core-Plugins sind nirgends angebunden. Hier fehlt bisher immer noch eine Art Plugin-Handler im Core, der entsprechende Funktionen anbietet.

Gruß aus Franken

Ortwin

PS: Falls Jemand Unterstützung bei so etwas brauch, mich einfach per PN anschreiben oder mal anrufen. :)

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 16:36
von Faar
Oldperl hat geschrieben: Do 9. Nov 2017, 14:14 Das ist definitiv falsch! CONTENIDO in Version 4.9 löscht, wenn es denn alles durchläuft, rekursiv alle zur Sprache gehörenden Elemente. Und das sowohl in der DB als auch im Code-Cache. Der Löschprozess ist recht umfangreich programmiert und bezieht sich auf etliche Core-DB-Tabellen.
Es gibt aber kein zurück, auch nicht falls etwas schief läuft oder abbricht. Hier kann man das Löschen nochmal anstoßen, solange der Eintrag in der Tabelle für die Sprachen noch vorhanden ist, und damit Abschnittsweise löschen. Je nachdem an welcher Stelle der Abbruch erfolgte können dabei aber Karteileichen übrig bleiben.
Das kann sich durchaus bei manchen Hostern als Problem erweisen, die ganz gerne mal PHP-Prozesse abbrechen.
Seinerzeit, damals Leipzig-Einunleipzig, habe ich das mit einer Löschtabelle realisiert, denn zuletzt wird (sinnbildlich) der Index gelöscht, also die ID von Daten. Solange die ID in einer löschtabelle vorhanden ist, kann man immer wieder nachträglich löschen bis alles weg ist. Alles weg ist es dann, wenn in der Löschtabelle kein Eintrag mehr ist.
Bei großen Datenmengen lohnt es sich, die Löschtabelle über einen Cronjob laufen zu lassen.

Und Löschtabelle können zur Laufzeit erzeugt und gelöscht werden, die muss nicht bei der Installation schon vorliegen. Es ist ganz einfach, ist keine Löschtabelle bei Anforderung zum Löschen vorhanden, wird eine erzeugt. Ist eine vorhanden, wird unten angefügt und nach alten Einträgen geschaut. Sind Einträge vorhanden, werden die Daten hinter diesen IDs gelöscht. Sind keine Daten mehr vorhanden, wird bei Erfolg (!) der Eintrag aus der Löschtabelle gelöscht. Sind keine Einträge mehr in der Löschtabelle vorhanden, wird diese selbst gelöscht.

Bei wirklich großen Datenmengen habe ich das per Pseudocronjob laufen lassen, also einem PHP-Prozess, der sich selbst auf Existenz prüft.
Der läuft dann 24/7 und prüft ununterbrochen die Löschtabelle auf Einträge. Aber Contenido Projekte haben selten so großen Löschbedarf, dass sich das lohnen würde, da reicht der Hauseigene Cronjob aus.

Unbestreitbarer Vorteil der Löschtabelle ist, dass auch bei Serverausfall keine zu löschende Daten als Datenmüll in der DB zurück bleiben, weil die Tabelle so lange Einträge enthält, so lange es Daten gibt, die zu löschen sind.
Transaktionen mit innoDB sind eine eigene Sache, hierbei gibt es bei Transaktionssicherheit ein Rollbackverfahren. Aber das halte ich für komplexer als eine Löschtabelle, mit der man notfalls auch Daten manuell löschen könnte.

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 16:37
von rethus
Die Idee von homtata find ich gut.
Dann natürlich Feedback fürs Forum nicht vergessen :wink:

Re: Sprache löschen löscht auch Artikelinhalte?

Verfasst: Do 9. Nov 2017, 17:36
von farina
Klar, wenn ich das probiere, schreibe ich auch das Ergebnis ins Forum.
Knacke aber im Moment an einem anderen Problem mit der Site