1

我正在设计一个希望拥有大量用户的 Wordpress 应用程序,因此,虽然我接受重构是一项合理的未来活动,但我现在还需要至少意识到并根据性能和可扩展性考虑适当地采取行动。

我的担忧——我希望你们中的一些人会有意见——是关于自定义帖子类型 (CPT) 的性能特征,特别是附加到 CPT 的自定义字段 (CF)。在我的特定情况下,我正在考虑对内容和交易数据使用大量 CPT。对于高度结构化的事务数据,我使用了很多 CF。我并没有开始采取这种观点——无论对错——:

  1. 对于内容相关的实体和“参考数据”……博客条目、主题定义、文章、公司信息、用户资料、产品等。我认为 WP CPT/CF 数据模型足够,SQL 性能应该还可以,即使有些查询有点长。

  2. 对于事务数据——在我的例子中,这可能代表每个用户每天 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 甚至数据库专家的事实,所以我不想不公平,而只是征求一些反馈意见。我公平吗?你会以不同的方式画线吗?任何帮助将不胜感激。

4

1 回答 1

1

我没有从社区得到答案,所以让我发布我的快速答案(我仍然很高兴听到其他意见)。

  • 自定义字段是 Wordpress 的一个很好的补充
  • 它们提供了一种简单的方法来扩展数据模型以满足大多数实际需求,并使人们从数据模型中抽象出来并需要 SQL
  • 它们不允许在 CF 数据的数据库中存储 VarChar 数据以外的任何内容,这并不理想
  • 在某些时候,高事务数据集可能需要超出此模型

在性能和灵活性之间的整体战斗中,我认为 CF 选择了一个适当的平衡点,但是一个有利于灵活性的平衡点,这意味着拥有大量数据的应用程序区域在某些时候可能会超过它的实用性。对于应该在哪里画线,我仍然没有任何经验法则。

于 2012-05-06T10:32:46.380 回答