Was ist der schnellste Weg, Zeichenfolgen mit mehreren Regexes in 1 Million Beiträgen zu ersetzen?

Nach einem vBulletin-Import muss ich viele Dinge in den importierten Nachrichten korrigieren.

Ich muss viele alte BBcode-Tags ändern, ersetzen oder löschen.

Ich habe mir das hier angesehen: Replace a string in all posts

Ich möchte auf keinen Fall Fehler machen, da ich 1,6 Millionen Beiträge habe.

  1. Gibt es eine Möglichkeit, nur einen bestimmten Beitrag auszuwählen, um vor dem Ersetzen der Zeichenfolgen in allen Beiträgen Tests durchzuführen?
    Ich habe einen „Test“-Beitrag in meinem Forum mit einer Reihe von BB-Tags in verschiedenen Kontexten erstellt.

  2. Wie lange würde das Ersetzen von Zeichenfolgen in über 1 Million Beiträgen dauern?
    Wenn es sehr lange dauert, gibt es dann einen schnelleren Weg? Vielleicht durch direktes Bearbeiten der Texte in der Datenbank?

  3. Gibt es eine Möglichkeit, mehrere Ersetzungen gleichzeitig vorzunehmen (z. B. das Hinzufügen von Zeilenumbrüchen vor und nach [quote]-Tags, das Ersetzen von [b] und [i] durch ** und *, das Entfernen von [color] und [indent] usw.)?

Edit: Würde es funktionieren, diese Änderungen über Rails auf den rohen Beitragstexten vorzunehmen und anschließend alle Beiträge neu zu berechnen?

1 „Gefällt mir“

Suche ebenfalls nach derselben Lösung.

Hallo @Canapin,

als Info zu unserer Migration von vB3 auf Discourse vor etwa sechs Monaten mit über 1 Million Beiträgen:

Bei unserer Migration von vB haben wir umfangreiche Datenbereinigungen und eine Refaktorisierung der BBCode-Tags mit viel eigenem Ruby-Code im Migrationsskript durchgeführt.

Wir haben festgestellt, dass dies für uns am besten funktioniert hat: Alles zu bereinigen, indem wir vor dem Einfügen der vB-Beiträge in die Discourse-Datenbank viele Ruby-gsub-REGEX-Ausdrücke auf die Beiträge angewendet haben.

Andernfalls müssten Sie viele PostgreSQL-Abfragen gegen die rohen Discourse-Beiträge ausführen und die Beiträge erneut verarbeiten.

Nach umfangreichen Tests haben wir uns entschieden, die gesamte Vorverarbeitung während der Migration durchzuführen (und nicht danach). Wir haben festgestellt, dass dies der „schnellere

1 „Gefällt mir“

Wissen Sie, ob es eine Möglichkeit gibt, nur die Beiträge erneut zu importieren, ohne bereits importierte Discourse-Daten zu beeinträchtigen, insbesondere Daten, die mit Beitrags-IDs verknüpft sind (Benutzer, Themen, Anhänge, Permalinks usw.)?

Der Import ist so langwierig, dass es Tage dauern würde, alles erneut zu importieren, falls ich etwas vergessen habe und den gesamten Prozess wiederholen muss.

Als das Skript die Beiträge importierte, wurden etwa 50.000 Discourse-Beiträge pro Stunde erstellt. Warum dauert ein Neuberechnen (Rebake) so viel länger?

Hallo @Canapin,

ich kenne Ihren Schmerz. Nach unserer ursprünglichen Migration haben wir viel benutzerdefinierten Ruby-Code geschrieben, um über ein Jahrzehnt an Code-Bausteinen zu bereinigen, die von überall auf der Welt kopiert und eingefügt wurden; ganz zu schweigen von allen Zeichenkodierungsfehlern und seltsamen Zeichensätzen; und nicht zu vergessen die verschiedenen BB-Codes, die verschachtelt waren und während der Migration viel Ruby-Logik benötigten, um ordentlich bereinigt zu werden.

Das war nicht trivial und hat lange gedauert (sowie unzählige Migrationsversuche); aber wir sind / waren primär ein Code-Forum, daher sollte es einfacher sein, wenn Ihr Forum hauptsächlich nur Text (und keinen Code) enthält.

Unser Team musste auch viele „etwas komplexe Escape-Regeln für dies und das

1 „Gefällt mir“

Das weiß ich, aber wenn ich das Migrations-Skript einfach starte, werden bestehende Beiträge übersprungen.

Wenn ich alle meine aus Discourse importierten Beiträge lösche, bevor ich die Migration neu starte, vermute ich, dass ein erneuter Import ihnen eine andere ID (Discourse-Beitrags-ID) zuweist als bei der vorherigen Migration und alle Referenzen auf diese Beiträge wahrscheinlich kaputtgehen werden.

1 „Gefällt mir“

Ja, es gibt viele Möglichkeiten, „die Katze zu schinden“, wie man so sagt.

Ich bin sehr froh, dass wir das nur einmal in unserem Leben machen mussten und es nun erledigt ist!

:slight_smile:

1 „Gefällt mir“

Wenn es irgendwie möglich ist, ist es viel, viel einfacher, den Importeur zu bitten, diese Dinge zu beheben. Wenn Sie bereits live gegangen sind, wird es nur langwierig und schmerzhaft. Sie könnten zwar ein Import-Skript entwerfen, das bereits importierte Beiträge ändert, aber mir sind keine Modelle bekannt, wie man das umsetzt.

1 „Gefällt mir“

Also werde ich den Importeur wohl so anpassen, dass er meine Regex-Ausdrücke bereits vor dem Import verarbeitet, und dann so geduldig wie möglich sein!

Danke für eure Antworten.

2 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.