2017-06-27 3 views
1

Also habe ich eine Drupal 7 Datenbank mit 2 Millionen Benutzern, die mit minimaler Ausfallzeit zu Drupal 8 wechseln müssen (Ziel ist eine Stunde). Das Modul Drupal migrieren scheint dieses Problem zu lösen, aber es schreibt neue Zeilen ein Element nach dem anderen, und in meinen Tests dauerte eine viertausend Benutzer + bezogene Daten 20 Minuten auf augenscheinlich brutalen AWS-Instanzen. Wenn ich auf das vollständige Dataset hochrechnen würde, würde ich 7 Tage für die Migration benötigen, und diese Menge an Ausfallzeit ist nicht sinnvoll.Drupal 7 -> 8 Migration einer großen Datenbank dauert ewig

Ich habe eine feature request gegen Drupal Core gemacht, aber ich wollte auch sehen, ob die Gemeinde irgendwelche Ideen hat, die ich verpasst habe. Außerdem möchte ich eine Diskussion über dieses Thema anstoßen.

+0

Müssen Sie die gesamte Datenbank oder nur die Benutzer verschieben? Andernfalls können Sie die erforderlichen Tabellen (oder die gesamte db, aber für einen Speicherauszug von mehreren Gigabyte vorbereitet werden). Erstellen Sie eine neue Datenbank, importieren Sie den Speicherauszug in Ihre neue Datenbank, und ändern Sie anschließend die Anmeldeinformationen für die Site, um die neue Datenbank zu verwenden. Ziemlich neu bei Drupal btw, also könnte das alles Mist sein: p – Loek

+0

Die Art und Weise, wie die Benutzer gespeichert sind, hat sich zwischen Drupal 7 und Drupal 8 geändert. Jeder Benutzer muss etwas Logik haben, bevor sie in die neue DB eingefügt werden können :) –

+0

Ah, das ist ein Mist. Vielleicht können Sie Ihr eigenes Migrationsskript schreiben? Werfen Sie einen Blick in das Migrationsmodul und schreiben Sie Ihr eigenes Skript. Sie können immer noch meinem ersten Kommentar folgen, aber anstatt zu dumpen und zu importieren, würden Sie über Ihr Skript lesen und ausgeben. – Loek

Antwort

0

Wenn sich jemand noch darum kümmert, habe ich dieses Problem gelöst. Weitere Untersuchungen haben gezeigt, dass das Drupal-Migrationsmodul nicht nur einzeln neue Zeilen schreibt, sondern auch Zeilen nacheinander aus der Quelle liest. Darüber hinaus schreibt Drupal für jede Zeile in eine Mapping-Tabelle für die Quelltabelle, so dass es Rollback und Update unterstützen kann.

Da die Daten eines Benutzers in einer separaten Tabelle pro benutzerdefiniertem Feld gespeichert werden, ergeben sich für jeden Benutzer 8 Lesevorgänge und 16 Schreibvorgänge.

Ich habe Drupal's Migration Executable für die Ausführung des Prozesses erweitert. Dann überschreibe ich sowohl den Teil, der die Daten liest, als auch den Teil, der sie schreibt, um ihre Arbeit in Stapeln zu erledigen und nicht in die Mappingtabellen zu schreiben. Ich glaube, dass meine voraussichtliche Zeit jetzt weniger als eine Stunde beträgt (eine Beschleunigung von 168 Mal!).

Trotzdem war der Versuch, die Drupal-Infrastruktur zu verwenden, mehr Ärger als es wert war. Wenn Sie dies selbst tun, schreiben Sie einfach eine Befehlszeilenanwendung und führen Sie die SQL-Abfragen manuell aus.

Verwandte Themen