Xóa 13000 nút


9

Tôi có khoảng 13000 nút để xóa trong một trang web Drupal 7. Tôi đã thử mô-đun Lượt xem hoạt động hàng loạt để xóa 500 nút cùng một lúc, nhưng nó hết thời gian. Tôi chỉ có thể xóa 50 nút tại một thời điểm.

Làm thế nào tôi có thể xóa hơn 50 nút cùng một lúc?


Đã từng có mô-đun "xóa hàng loạt", nhưng đã lỗi thời khi ủng hộ VBO anwyay. Nhưng VBO dường như hỗ trợ xử lý hàng loạt. Bạn đã thử sử dụng nó?
Mołot

1
VBO, như được chỉ ra trong các câu trả lời dưới đây, có lẽ là cách để đi. Những gì tôi đã làm vào những lúc cần xóa nhiều nút hơn trong trường hợp này, là mô-đun hack được gọi để bỏ qua rất nhiều lời mời mà tôi không cần. (Người phạm tội tồi tệ nhất của tôi là apache solr). Điều này có thể tăng tốc đáng kể công việc, nhưng rõ ràng phải được thực hiện với sự cẩn thận.
Letharion

Câu trả lời:


16

VBO là tiêu chuẩn thực tế cho các nút xóa hàng loạt, đơn giản là không có cách nào tốt hơn để làm điều đó.

Khi VBO xử lý theo đợt, nó chỉ thực hiện 1 (hoặc có thể một vài) nút tại một thời điểm. Vì vậy, nếu bạn nhận được lỗi timeout những có liên quan đến việc xóa một đơn nút, không phải toàn bộ hoạt động hàng loạt.

Độ phân giải tiêu chuẩn cho một cái gì đó như thế này là để tăng thời gian thực hiện tối đa PHP để bù lại.


2
Chỉ cần hoàn thành câu trả lời: Bạn có thể chọn số lượng thực thể nên được chọn cho hoạt động. Sử dụng 100 sẽ làm tốt trong ~ 1 phút từ kinh nghiệm của tôi.
AyeshK

6

Cài đặt Devel. Sau đó, đi đến admin / config / Development / created / content trong D7 và chọn tất cả các loại nội dung. Kiểm tra "Xóa tất cả nội dung". Nhập 0 vào "Bạn muốn tạo bao nhiêu nút?"

Nhấp vào Tạo.

Điều đó sẽ xóa tất cả các nút.


1
@ Mołot ' Kiểm tra "Xóa tất cả nội dung" ' ... 'Nhập 0 vào "Bạn muốn tạo bao nhiêu nút?"' ...;)
Clive

@Clive OK, lỗi của tôi, xin lỗi.
Mołot

1
Cụ thể, đó là mô-đun Devel Generate thực hiện điều này; nó được phát hành với Devel, nhưng bạn sẽ không nhận được chức năng này nếu bạn chỉ bật Devel. Bạn cũng có thể dễ dàng xóa tất cả các nút của một loại nội dung nhất định theo cách này, nếu bạn không muốn xóa mọi thứ. Nếu bạn vẫn đang hết thời gian chờ PHP và không sợ CLI, bạn cũng có thể sử dụng lệnh Drush generate-content( genc) đi kèm với Devel Generate; drush help gencđể biết thông tin sử dụng.
Garrett Albright

3

Sử dụng VBO và thực hiện nó từ Drush. Tôi đã sử dụng phương pháp sau để xóa hơn 1,5 triệu nút sau khi kiểm tra tỷ lệ.

  1. Tạo một chế độ xem mới với một trang. Đặt các bộ lọc phù hợp để chỉ hiển thị loại nút bạn muốn xóa.
  2. Thêm một trường mới: "Hoạt động hàng loạt: Nội dung"
  3. Chọn hộp bên cạnh "Xóa mục" trong 'Thao tác hàng loạt được chọn'.
  4. Lưu lại xem.
  5. Giả sử bạn biết cách sử dụng Drush, hãy chạy lệnh này: (Sử dụng 'màn hình' linux để chạy không bị gián đoạn cho các bộ dữ liệu lớn)

drush vbo-thực hiện my_view hành động :: lượt xem_bulk_operations_delete_item

Ở đâu, my_view là tên máy của chế độ xem của bạn

Bạn cũng có thể sử dụng danh sách vbo drush để hiển thị tất cả các chế độ xem có sẵn và các hoạt động hàng loạt của chúng.

VBO bây giờ sẽ chạy trong vỏ, cung cấp cho bạn thông tin phản hồi khi nó đi.


2

Có một mô-đun Xóa tất cả ra khỏi đó. Nó sẽ xóa tất cả các nút và / hoặc người dùng khỏi trang web.

Nó cũng có hỗ trợ Drush:

Ví dụ:

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.

7
Tôi thực sự khuyên bạn không nên sử dụng mô-đun này - nó đặt giới hạn thời gian là 30 giây cho tập lệnh và chạy qua từng nút riêng lẻ , gọi node_delete()(thậm chí không cần sử dụng node_delete_multiple()). Đáng lo ngại hơn nữa, nó có một tùy chọn xóa dữ liệu trực tiếp khỏi các bảng cơ sở dữ liệu mà không cần sử dụng API trường và không sử dụng hook. Không có công việc hàng loạt nào cả, nó chỉ chạy cho đến khi script chết. Mô-đun IMHO rất nguy hiểm.
Clive

2
Vẫn có thể hữu ích nếu bạn biết bạn đang làm gì và sao lưu. Xóa hàng ngàn nút trong khi gọi tất cả các hook và apis có thể rất chậm. :(
Letharion

@Letharion Không đau, không tăng;) Tất nhiên bạn đúng, tôi mặc dù tốt hơn là tôi nên từ chối trách nhiệm này vì mô-đun này có thể khiến mọi thứ trở nên lộn xộn nếu ở trong tay kẻ xấu!
Clive

@Clive Với sự hỗ trợ của drush nếu tôi phải làm gì drush delete-all articleđể xóa bài viết tôi sẽ tìm giải pháp này.
AjitS

@develkar Đối với một vài trăm nút có thể ổn, nhưng tiện ích mở rộng drush sử dụng chính xác các chức năng tương tự như phiên bản tại chỗ, vì vậy nó vẫn dễ bị lỗi thời gian
Clive


0

Để xóa các nút với số lượng lớn (nghĩa là hàng loạt) như trong trường hợp của bạn, bạn cũng có thể sử dụng mô-đun xóa hàng loạt cho việc này.

Điều đó sẽ sử dụng API Batch để xóa các nút để tránh thời gian chờ hoặc các vấn đề về bộ nhớ khi xóa hàng ngàn nút với một lệnh gọi đến node_delete_mult Môn ().

Ngoài ra, bạn thậm chí có thể thử Xóa tất cả mô-đun để xóa tất cả các nút của một loại nội dung.

Hi vọng điêu nay co ich.


0

Bạn cũng có thể tạo quy trình hàng loạt cho nó bằng API BATCH và trong quy trình hàng loạt đó chỉ cần làm

foreach($nodes as $node){ node_delete($node[nid]);}

Đó là nó. Bạn đã làm xong ở đây. Nếu bạn muốn tạo một lệnh drush cho nó, bạn cũng có thể tạo nó. Để tham khảo xin vui lòng nhìn vào này .


0

Nếu bạn có lý do để làm điều đó bằng mã:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->propertyOrderBy('nid', 'DESC')
  ->range(1000, 1000);

$result = $query->execute();
node_delete_multiple(array_keys($result['node']));

Bạn cũng có nhiều phương thức có sẵn khác để chọn các nút cần xóa.


0

Bạn có thể lấy lời khuyên của Bobik và cho rằng đó là đối số của một 'php-eval drush' nếu bạn thực sự gặp khó khăn, nhưng tôi hy vọng rằng hiệu suất sẽ tương tự như của VBO, trong khi nhanh hơn một chút. Nếu hiệu suất thực sự chậm, bạn có thể muốn xem mô-đun nào đang gọi hook_node_delete bằng cách lấy mã cơ sở cho '_node_delete (' và sau đó xác định xem bạn có thể vô hiệu hóa một số mô-đun đang sử dụng hook đó hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.