存储自定义用户字段的位置

时间:2016-05-21 作者:Conor

我已经建立了一个企业Wordpress网站,目前我们正在设计一种将公司用户数据直接自动导入Wordpress数据库的方法,因此它不是手动的。此用户数据的数据点比默认的WP用户字段(user\\u login、first name、last name、email、url等)多can存储。所以我想知道,对于存储其他用户字段,推荐的体系结构是什么?

我的第一个想法是向自定义OpenID plugin 我用叉子叉。它的主要目的是使用OpenID框架来利用我们公司的OpenID标识符来认证员工。此插件创建一个简单的wp_openid_identities 激活时数据库中的表:

uurl_id | user_id | url                              | hash          | phone        | state | country  
------------------------------------------------------------------
 1      | 1       | http://idp.example.com/user/9999 | 1^f3d5g7e9W!2 | 555-555-5555 | WA    | USA 
或使用user_meta 表和自定义行:

umeta_id  | user_id | meta_key              | meta_value
1         | 1       | first_name            | Bill
2         | 1       | last_name             | Gates
3         | 1       | nickname              | bg000001
4         | 1       | rich_editing          | true
5         | 1       | comment_shortcuts     | false
6         | 1       | admin_color           | fresh
7         | 1       | use_ssl               | 0
8         | 1       | show_admin_bar_front  | true
9         | 1       | wp_capabilities       | a:1:{s:13:"administrator";b:1;}
10        | 1       | phone                 | 555-555-5555
11        | 1       | state                 | WA
12        | 1       | country               | USA
等等。。。

我猜user_meta 表是推荐的位置,但用户基数目前为25000多名用户,并且随着12个额外的自定义用户数据点的增加而增加。这是19个默认用户元键+12个以上(31)。25000*31=7,750,000 rows!

报告:加入wp_users, wp_usermeta, 和wp_custom_table (用户提交的表单数据)其中user_id 是常量。这需要以表格格式导出或回显一行所有用户信息和表单数据。

1 个回复
SO网友:Ben

我知道这个问题已经很老了,但我想分享一下我使用大型数据库和存储自定义用户数据的经验。

大体上wp_usermeta 是存储用户元的默认且最简单的选项,它对于较小的数据库非常有效,您可能需要为用户存储一些额外的字段。

但是,如果您有大量用户,并且需要存储许多字段,尤其是需要生成报告时,您可能希望避免wp_usermeta 并为数据创建自定义数据库表,其中每个字段存储在单独的列中。

wp_usermeta 读取大量记录会变得非常慢,尤其是当您需要在一个包含大量字段的查询中为大量用户生成报告时,在这种情况下,您必须为每个字段编写额外的联接。使用的另一个缺点wp_usermeta 所有值都存储为字符串,因此在读取/搜索/排序数据时,需要将它们转换为相应的数据类型。

使用每个字段存储在单独列中的自定义表具有以下优点:

提高了性能您可以定义每种列类型和约束,这样就不太可能存储错误数据。此外,在读取时不需要强制转换值。您可以添加自定义索引以进一步提高频繁查询的性能。还值得一提的是,使用自定义表的实现更加复杂-您需要有数据库方面的经验的人来设计表,而且您还必须手动编写所有读/写SQL查询(虽然$wpdb 提供了易于使用的方法)。

归根结底,没有一刀切的解决方案-帮助您决定哪种方法更适合您的项目的最佳方法是创建这两种方法的一些简单原型,并对您计划使用的查询进行基准测试。

相关推荐

set a user-meta key as avatar

我有一个名为“meta kay”的用户;阿凡达;;此值包含用户上载的图像的URL。如何将此元值设置为用户化身?我使用此代码,但不工作add_filter( \'get_avatar\', \'slug_get_avatar\', 10, 5 ); function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) { //If is email, try and find user ID