我正在设计一个希望拥有大量用户的 Wordpress 应用程序,因此,虽然我接受重构是一项合理的未来活动,但我现在还需要至少意识到并根据性能和可扩展性考虑适当地采取行动。
我的担忧——我希望你们中的一些人会有意见——是关于自定义帖子类型 (CPT) 的性能特征,特别是附加到 CPT 的自定义字段 (CF)。在我的特定情况下,我正在考虑对内容和交易数据使用大量 CPT。对于高度结构化的事务数据,我使用了很多 CF。我并没有开始采取这种观点——无论对错——:
对于内容相关的实体和“参考数据”……博客条目、主题定义、文章、公司信息、用户资料、产品等。我认为 WP CPT/CF 数据模型足够,SQL 性能应该还可以,即使有些查询有点长。
对于事务数据——在我的例子中,这可能代表每个用户每天 5-10 个“事务”,这反过来可能会转化为数据库中的 50-100 个插入(每个 CF 是一个插入)——数据增长将很快使查询性能没有吸引力/不合适(这里更关心 SELECT 而不是 INSERT)。请记住,我的目标是成千上万的用户群,尽管我怀疑即使是 1,000 的用户群也会开始感到痛苦。
为了帮助说明这一点,让我以“胆固醇测试”为例。我稍微简化了数据要求,但假设您想要捕获总胆固醇、高密度脂蛋白、低密度脂蛋白和甘油三酯。然后你想向用户展示他们的测试历史。您的查询将类似于:
SELECT wp_posts.id, wp_posts.post_date
, MAX(CASE WHEN meta_key = 'wpcf-which-day' THEN meta_value END) AS which_day
, MAX(CASE WHEN meta_key = 'wpcf-biochem-lipids-total-cholestertol' THEN meta_value END) AS total_cholesterol
, MAX(CASE WHEN meta_key = 'wpcf-biochem-lipids-ldl' THEN meta_value END) AS LDL
, MAX(CASE WHEN meta_key = 'wpcf-biochem-lipids-hdl' THEN meta_value END) AS HDL
, MAX(CASE WHEN meta_key = 'wpcf-biochem-lipids-triglycerides' THEN meta_value END) AS Tri
FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND post_type = "measurements"
GROUP BY wp_posts.ID
HAVING MAX(CASE WHEN meta_key = 'wpcf-measurement-type' THEN meta_value END) = '4'
ORDER BY MAX(CASE WHEN meta_key = 'wpcf-which-day' THEN meta_value END) DESC
对于一个简单的要求来说相当混乱,对吧?无论如何,让我证明我不是 WP、mySQL 甚至数据库专家的事实,所以我不想不公平,而只是征求一些反馈意见。我公平吗?你会以不同的方式画线吗?任何帮助将不胜感激。