首页 > 解决方案 > 将我的所有用户及其属性写入文件(100K+ 用户)EAV 表和自动化

问题描述

所以我有一个 100K+ 用户的大型 WordPress 网站。

我需要遍历每个用户并写入存储在他们的 WP_Users 行中的一些数据以及 WP_Usermeta 表中包含的一些元数据。

这样做的问题是,对于 100K+ 的用户,这很快就会耗尽内存并为每个用户生成 3 个查询。您可以看到我有批量大小和分页设置来分页,但我想知道的是如何递归运行它,直到它完成对每个用户的迭代。批量大小为 500,需要 195 个页面,我不能坐在那里通过每次点击网页来运行每个批次。此外,它只会增长并且会变得更糟。我怎样才能自动化这个过程?像rabbitMQ这样的消息队列是不是有一个快速的工具来解决这个问题,还是我只是个白痴?我编写了一些 javascript 来反复访问网页 195 次,并且每次都增加 paged 变量,但速度非常慢,需要我将机器留在特定网页上。

<?php
$users = get_users(array('fields' => array('ID'), 'number' => $batch_size, 'paged' => $i));
  $filetowrite = fopen($filename, 'a');

 foreach ($users as $user) {
$userdata = get_userdata( $user );

$phone_number = get_user_meta($user, 'billing_phone', true);

if (isset($userdata->first_name)) {
  $first_name = $userdata->first_name;
} else {
  $first_name = '';
}

if (empty($first_name)) {
  $first_name = get_user_meta($user, 'billing_first_name', true);
}

if (isset($userdata->last_name)) {
  $last_name = $userdata->last_name;
} else {
  $last_name = '';
}

if (empty($last_name)) {
  $last_name = get_user_meta($user, 'billing_last_name', true);
}
fwrite($filetowrite, $phone_number.','.$userdata->user_email.','.$first_name.','.$last_name.','."\n");
}

fclose($filetowrite);

标签: phpsqlwordpressbatch-processing

解决方案


推荐阅读