Custom Fields解决方案的可扩展性

时间:2012-04-21 23:52:07

标签: mysql wordpress

我正在设计一个拥有大量用户的野心的Wordpress应用程序,因此,当我接受重构作为一个合理的未来活动时,我还需要至少根据性能和可扩展性考虑因素来理解和行为。

我担心 - 我希望你们其中一些人会有意见 - 是关于自定义帖子类型(CPT)的性能特征,特别是附加到CPT的自定义字段(CF)。在我的特殊情况下,我考虑使用大量的CPT来处理内容和交易数据。对于交易数据 - 这是高度结构化的 - 我使用了很多CF.我没有开始认为 - 无论是对还是错 - :

  1. 对于内容相关实体和“参考数据”...博客条目,主题定义,文章,公司信息,用户档案,产品等。我认为WP CPT / CF数据模型足够且SQL性能好即使有些问题有点长,也应该没问题。

  2. 对于交易数据 - 在我的情况下,每个用户每天可能代表5-10个“交易”,这反过来会转化为DB中的50-100个INSERTS(每个CF是一个插入) - 数据增长会很快使查询性能变得不具吸引力/不合适(这里的SELECT比INSERT更关注)。请记住,我的目标是成千上万的用户群虽然我怀疑即使是1000的用户群也会开始感受到痛苦。

  3. 为了帮助说明这一点,让我以“胆固醇测试”为例。我正在简化数据要求,但我们假设您想要捕获总胆固醇,HDL,LDL和甘油三酯。然后,您想要向用户呈现他们的测试历史。您的查询看起来像:

    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甚至数据库专家的事实,所以我不想不公平,而只是征求一些反馈。我是公平的吗?你会画出不同的线条吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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

在性能和灵活性之间的整体斗争中,我认为CF已经选择了适当的平衡,但是有利于灵活性,这意味着具有大量数据的应用领域可能会在某些时候超过它的实用性。我仍然没有任何关于应该绘制该线的经验法则。