php - 将我的所有用户及其属性写入文件(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);
解决方案
推荐阅读
- android - 如何从 admob 添加 NATIVE 广告?
- push-notification - 使用 PHP 发送推送通知
- ios - 隐藏视图及其全部内部视图
- mapkit - 在地图中包裹纬度和经度时崩溃
- java - 通过点击 CardView 中的不同卡片打开不同的活动,Android studio 中的 Recyclerview Fragment
- python - apscheduler:任务完成后如何结束调度程序
- excel - 删除行直到定义列的宏代码
- c# - 将对象列表转换为类型数组并删除空值
- python - 如何将每个数组数据保存到数据库?一个数据作为一行
- python - 在将数据传递到循环神经网络之前缩放数据(MinMaxScaler 和 StandardScaler)及其对输出的影响