可伸缩用户元查询的内存使用情况

时间:2013-02-28 作者:Sunyatasattva

一段时间前,我发布了一个关于scalability of wp_usermeta architecture: 随着我客户的用户数据库快速增长,我担心的是memory usage 查询的wp_usermeta 桌子

在我的情况下,我管理着一个拥有数千名用户的CRM,每个用户都有大约15个元字段。随着我从数据库中获取这些信息,内存使用量呈指数级增长,现在96M 我设定的限制是不够的。

我收集的数据(测试、分析)

我尝试过profilingrefactoring 我的代码,通过缩小我必须做的事情的范围,我确实尽可能优化了我的查询,这取决于具体情况:

在大多数情况下,我必须只获取与一个用户关联的元数据。在这种情况下,两者都在运行get_user_metaget_userdata 工作正常get_userdata 在2000个用户之后耗尽我的记忆;使用get_user_meta 没有$key (因此获得所有与用户相关的元数据)在大约3500个用户之后耗尽我的内存;仅获取$keys 我需要在大约3000个用户之后耗尽内存我尝试了几种选择:使用Wordpress APIs 正如我上面指出的那样,在这种情况下显然效率很低。检查已保存的查询$wpdb->queries 也给了我大量不必要的查询(我想这就是为什么获取上面所有的元比获取几个元更有效的原因)。

必须指出的是,我还必须进行初步get_users 获取运行上述函数的ID。

因为所有这些APIcache 结果,我认为运行自己的DB查询可能是一个好主意,事实上,我节省了大量内存,总共使用了大约40M 大约6000名用户(我现在的总数)使用此查询:

$wpdb->get_results( 
    "SELECT user_id, meta_value
     FROM $wpdb->usermeta
     WHERE meta_key=\'a\' OR meta_key=\'b\' OR meta_key=\'c\' OR meta_key=\'d\'"
);
问题我在做什么something wrong 在方法中what is the memory usage I should expect 对于这种情况?(为了了解我的托管需求)我是否最好new database table? (这是我唯一想到的,但我还没有尝试)

1 个回复
SO网友:Mark Kaplun

这里是在讨论聊天要求后提出的建议。

由于所需用户筛选/搜索的复杂性,wordpress用户数据表不是存储用户属性的好地方。相反,有一个CPT和相关分类法来存储GUI所需的用户属性将更有意义,同时在wordpress用户表中维护基本信息以用于登录/身份验证。

结束

相关推荐

我可以将两个角色传递给GET_USERS函数吗?

我想获得角色学术和学生的用户。我已经尝试使用下面的代码(传递了一系列角色,但显示了所有用户,因此显然不起作用。$roles=array(\'academic\',\'student\'); $args =array(\'role\'=>$roles); $users=get_users( $args ); foreach ($users as $user) { echo \'<li>\' . $user->user_email .