Jump to content
Communities.Management

Recommended Posts

Posted

Hallo Daniel,

innerhalb der letzten 20 Jahre haben sich bei uns im Forum eine Menge privater Nachrichten angesammelt. Davon sind ein großer Teil von Mitgliedern, die nicht mehr aktiv sind.

Im Zuge dessen habe ich mir Gedanken gemacht, wie man hier aufräumen könnte. Im Backend kann man ja nur Nachrichten löschen, die keine Antwort erhalten haben. Das ist aber super ungenügend.

Mir ist nun folgender Punkt in der DB aufgefallen. Es gibt drei Tabellen (topics, posts, topic_user_map), die für PNs verwendet werden. In der User Map sind die Zuweisungen der einzelnen Gesprächpartner gespeichert.

Ich habe nun festgestellt, dass Nachrichten nicht mehr aufrufbar sind, wenn in der User Map Tabelle das Feld map_user_active eine 0 besitzt. Komisch ist nur, dass dies bei einer sehr großen Anzahl von Nachrichten der Fall ist, OBWOHL alle Parteien noch ganz normal im Forum aktiv bzw. registriert sind.

Weiteres evtl. damit verbundenes Phänomen. Bei den 4.500 Nachrichten, die alleine ich im Forum gespeichert habe, habe ich mir mal die Arbeit gemacht und ganz nach unten gescrollt, da ja eine Sortierung leider nicht möglich ist. Dabei ist mir aufgefallen, dass nach 7 Jahren (Anfang 2016) plötzlich Schluß war, obwohl ich viel ältere Nachrichten besitze.

Kann es evtl. sein, dass bei einem Upgrade damals in 2016, als v4 noch neu war, evtl. nicht alles rund gelaufen ist und viele private Nachrichten als unsichtbar (evtl. über die User Map) markiert wurden?

Posted

1. Zum map_user_active Feld

map_user_active wird auf 0 gesetzt, wenn jemand aus der PM gebannt wird, oder diese verlässt.

Die Referenz in der DB samt Nachricht bleibt aber weiterhin so lange in der DB bis der letzte User die PM verlässt!

Das heißt wenn du mir eine PM schreibst und diese dann nach einer Weile löscht/verlässt wird sie nicht automatisch gelöscht!

Sie bleibt so lange im System, bis auch ich sie verlasse. Erst sobald ALLE User die PM verlassen, wird sie gelöscht.Ich vermute mal dass das der Fall bei dir ist!

2. Genau, im Backend kann man nur Nachrichten löschen, die keine Antwort seit X Tagen bekommen habenCleanShot 2023-06-01 at 09.01.18@2x.png

 

Hast du dir auch schon Mal angeschaut, ob es verwaiste Einträge in der posts Tabelle, ohne dazugehörige Einträge in der topics Tabelle gibt?

Eigentlich sollte der Converter diese nicht mit übernehmen, aber joa.. soweit ich mich erinnere bist du ja relativ früh umgestiegen, wodurch der ein oder andere Bug noch nicht gefixt war.

Versuch Mal folgenden Query:

select * from core_message_posts where msg_topic_id NOT IN (select mt_id from core_message_topics)

Das wird alle Antworten ohne dazugehörige PM liefern.

Posted

Hallo Daniel,

danke für deine Query. In der Tat liefert diese 0 Resultate. Somit sind alle Einträge wohl doch alle korrekt.

Frage wäre trotzdem, wie man die drei PN Tabellen einiger gesäubert bekommt, vor allem für Personen, die schon seit mehr als 5-10 Jahren nicht mehr aktiv sind.

Meine Challenge ist aktuell, dass ich die DB-Größe reduzieren muss, da sie für meinen Hoster zu groß wird. Da greift man natürlich nach jedem Strohhalm. 🙂

Posted

Interessante Entdeckung.

Wir haben eben zum Testen (auf dem Testserver) mal die Funktionalität aktiviert, dass alle PNs gelöscht werden sollen, die seit einem Jahr keinerlei Antwort hatten.

Komischweise hat das System jetzt plötzlich 90% aller PNs gelöscht, auch ganz viele, die Antworten hatten. Es sieht so aus, dass als Löschkriterium die Zeit verwendet wird, wann der letzte Teilnehmer einer Kommunikation die Nachricht gelesen hat.

Somit sind alle Nachrichten weg, deren letztes Lesedatum länger als ein Jahr her war. Ist das ein Bug? Ich vermute ja. Wie gesagt, 90% aller Nachrichten wurden vom Cron gelöscht.

Posted

Nein, das löscht definitiv nur Nachrichten die keine neuen Antworten in den letzen X Tagen hatten.

Alle Queries beziehen sich auf mt_last_post_time und nicht das Lesedatum.

Posted (edited)

Tja Daniel, dann läuft aber etwas falsch, denn 90% aller PNs wurden gelöscht. Ich hatte dann auch mit der Liveversion verglichen. Bei mir im Postfach sind alle Nachrichten weg, die älter als ein Jahr waren.

Apropos, das mit dem mt_last_post_time könnte schon auch hinhauen, allerdings wurde dann aber auch PNs gelöscht, die Antworten hatten.

Edited by Milchschnitte
Posted (edited)

Ergänzung: Ah, jetzt glaube ich die Prune Conversations Lösung richtig zu verstehen. Es heisst also, dass alle PNs gelöscht werden, die in einem bestimmten Zeitraum keine WEITEREN Antworten mehr erhalten haben, also dass die Konversation verebbt ist, oder? Ursprünglich hatte ich es so verstanden, dass PNs gelöscht werden, die insgesamt KEINE Antworten haben, sprich jemand hat eine PN geschickt, aber der Empfänger nie geantwortet.

Somit würde sich auch das obige Löschproblem erledigen. Sehe ich das richtig? Wenn das so ist, wäre aber anstatt "Prune conversations with no reply" die bessere Variante "Prune conversations with no more replies".

Edited by Milchschnitte
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.