Ich habe ungefähr 13000 Knoten, die auf einer Drupal 7-Site gelöscht werden müssen. Ich habe versucht, mit dem Modul " Views Bulk Operations" 500 Knoten gleichzeitig zu löschen, aber es tritt eine Zeitüberschreitung auf. Ich kann nur 50 Knoten gleichzeitig löschen.
Wie kann ich mehr als 50 Knoten gleichzeitig löschen?
Antworten:
VBO ist der De-facto-Standard für das Löschen von Massenknoten. Es gibt einfach keinen besseren Weg, dies zu tun.
Da VBO stapelweise verarbeitet, werden jeweils nur 1 (oder möglicherweise einige) Knoten gleichzeitig ausgeführt. Wenn Sie also Timeout-Fehler erhalten, beziehen sich diese auf das Löschen eines einzelnen Knotens und nicht auf den gesamten Stapelvorgang.
Die Standardauflösung für so etwas besteht darin , die maximale Ausführungszeit von PHP zu erhöhen , um dies zu kompensieren.
quelle
Installieren Sie Devel. Gehen Sie dann in D7 zu admin / config / development / generate / content und wählen Sie alle Inhaltstypen aus. Aktivieren Sie "Alle Inhalte löschen". Geben Sie 0 in "Wie viele Knoten möchten Sie generieren?"
Klicken Sie auf Generieren.
Dadurch werden alle Knoten gelöscht.
quelle
generate-content
(genc
) verwenden, der mit Devel Generate geliefert wird.drush help genc
für Nutzungsinformationen.Verwenden Sie ein VBO und führen Sie es von Drush aus. Ich habe die folgende Methode verwendet, um nach dem Skalentest über 1,5 Millionen Knoten zu löschen.
drush vbo- execute my_view action :: views_bulk_operations_delete_item
Wobei my_view der Computername Ihrer Ansicht ist
Sie können auch drush vbo-list verwenden , um alle verfügbaren Ansichten und ihre Massenoperationen anzuzeigen .
Der VBO sollte jetzt in der Shell ausgeführt werden und Ihnen dabei Feedback geben.
quelle
Es gibt da draußen ein Modul zum Löschen aller . Es werden alle Knoten und / oder Benutzer von der Site gelöscht.
Es hat auch Drush-Unterstützung:
Beispiele:
quelle
node_delete()
(es macht sich nicht einmal die Mühe, es zu verwendennode_delete_multiple()
). Noch besorgniserregender ist, dass es eine Option gibt, mit der Daten direkt aus den Datenbanktabellen gelöscht werden können, ohne die Feld-API zu verwenden und ohne Hooks. Überhaupt keine Batch-Jobs, es wird nur ausgeführt, bis das Skript stirbt. Sehr gefährliches Modul IMHO.drush delete-all article
für diese Lösung entscheiden, wenn ich Artikel löschen möchte.Verwenden Sie Views Bulk Operations - das war eine gute Idee. Verwenden Sie jedoch die Batch-API, anstatt die Operation direkt aufzurufen. Hier können Sie einen kurzen Artikel darüber lesen . Das Fehlen einer Dokumentation zu diesem Teil war ein bekanntes Problem .
quelle
Zum Löschen von Knoten in großer Anzahl (dh in großen Mengen) wie in Ihrem Fall können Sie hierfür auch das Massenlöschmodul verwenden .
Dadurch wird die Stapel-API zum Löschen der Knoten verwendet, um Zeitüberschreitungen oder Speicherprobleme beim Löschen von Tausenden von Knoten mit einem einzigen Aufruf von node_delete_multiple () zu vermeiden.
Abgesehen davon können Sie sogar versuchen, alle Module zu löschen, um alle Knoten eines Inhaltstyps zu löschen.
Hoffe das hilft.
quelle
Sie können auch einen Stapelprozess dafür mit der BATCH-API erstellen und dies in diesem Stapelprozess einfach tun
Das ist es. Sie sind hier fertig. Wenn Sie einen Drush-Befehl dafür erstellen möchten, können Sie ihn auch erstellen. Als Referenz sehen Sie sich dies bitte an .
quelle
Wenn Sie Grund haben, dies per Code zu tun:
Sie haben auch viele andere verfügbare Methoden , um zu löschende Knoten auszuwählen.
quelle
Sie können Bobiks Rat befolgen und dies als Argument für eine "drush php-eval" verwenden, wenn Sie wirklich in Not sind, aber ich würde erwarten, dass die Leistung der von VBO ähnlich sein wird, während sie etwas schneller ist. Wenn die Leistung sehr langsam ist, können Sie sich ansehen, welche Module hook_node_delete aufrufen, indem Sie die Codebasis nach '_node_delete (' durchsuchen und dann bestimmen, ob Sie einige der Module deaktivieren können, die diesen Hook verwenden.
quelle