在我的情况下,我管理着一个拥有数千名用户的CRM,每个用户都有大约15个元字段。随着我从数据库中获取这些信息,内存使用量呈指数级增长,现在96M
我设定的限制是不够的。
我收集的数据(测试、分析)
我尝试过
profiling 和
refactoring 我的代码,通过缩小我必须做的事情的范围,我确实尽可能优化了我的查询,这取决于具体情况:
在大多数情况下,我必须只获取与一个用户关联的元数据。在这种情况下,两者都在运行get_user_meta
和get_userdata
工作正常在某些情况下,我必须获取与某些用户关联的元数据(~ 5个字段):使用get_userdata
在2000个用户之后耗尽我的记忆;使用get_user_meta
没有$key
(因此获得所有与用户相关的元数据)在大约3500个用户之后耗尽我的内存;仅获取$keys
我需要在大约3000个用户之后耗尽内存在一些情况下,我必须获取一些与所有用户相关的元数据(大约5个字段):很明显,这就是我感觉问题最严重的地方我尝试了几种选择:使用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? (这是我唯一想到的,但我还没有尝试)如果自定义DB查询是一种可行的方法,我应该如何将该查询收集的数据组织到一些类似WP\\U用户的对象结构中