Answers:
VBO是批量删除节点的事实上的标准,根本没有更好的方法。
由于VBO是成批处理的,因此一次只能处理1个(或几个)节点。因此,如果您收到超时错误,则这些错误与删除单个节点有关,而不与整个批处理操作有关。
像这样的标准解决方案是增加PHP的最大执行时间来进行补偿。
安装Devel。然后转到D7中的admin / config / development / generate / content并选择所有内容类型。选中“删除所有内容”。在“您要生成多少个节点?”中输入0。
单击生成。
这将删除所有节点。
generate-content
(genc
)命令。drush help genc
有关使用信息。
使用VBO并从Drush执行。规模测试后,我使用以下方法删除了超过150万个节点。
drush vbo-执行my_view action :: views_bulk_operations_delete_item
其中,my_view是视图的计算机名称
您也可以使用drush vbo-list显示所有可用的视图及其批量操作。
现在,VBO应该在外壳中运行,从而为您提供反馈。
那里有一个“ 全部删除”模块。它将删除站点中的所有节点和/或用户。
它还具有Drush支持:
例子:
drush delete-all article Delect all article nodes.
drush delete-all all Delete nodes of all types.
drush delete-all --reset Delete nodes of all types, and reset node, revision and comment counters.
drush delete-all users Delete users.
node_delete()
(它甚至不需要使用node_delete_multiple()
)。更令人担忧的是,它具有一个选项,可直接从数据库表中删除数据,而无需使用字段API,也无需使用挂钩。根本没有批处理作业,它一直运行到脚本死亡为止。非常危险的模块恕我直言。
drush delete-all article
需要删除文章,可以使用drush支持,我将寻求该解决方案。
您还可以使用BATCH API为它创建批处理,在该批处理中
foreach($nodes as $node){ node_delete($node[nid]);}
而已。您已经完成了。如果要为其创建drush命令,也可以创建它。供参考,请看这个。
如果您确实处于紧要关头,可以采纳Bobik的建议并将其作为'drush php-eval'的参数,但是我希望它的性能与VBO相似,但速度稍快一些。如果性能确实很慢,您可能希望通过将代码库中的_node_delete()复制为g_,然后确定是否可以禁用某些正在使用该挂钩的模块来查看哪些模块正在调用hook_node_delete。