私は大量のユーザーを持つという野心を持ったWordpressアプリケーションを設計しています.
私が懸念していることは、皆さんの意見を聞いてくれることを願っていますが、カスタム投稿タイプ (CPT)、特に CPT に添付されたカスタム フィールド (CF) のパフォーマンス特性に関するものです。私の特定のケースでは、コンテンツとトランザクション データの両方に多くの CPT を使用することを検討していました。高度に構造化されたトランザクション データについては、多くの CF を使用しています。私は、正しいか間違っているかにかかわらず、次のような見方をし始めていません。
コンテンツ関連のエンティティと「参照データ」については、ブログ エントリ、トピックの定義、記事、企業情報、ユーザー プロファイル、製品などです。WP CPT/CF データ モデルは適切であり、SQL パフォーマンスは多少あっても問題ないと思います。クエリは歯が少し長いです。
トランザクション データ (私の場合、ユーザーごとに 1 日あたり 5 ~ 10 の「トランザクション」を表す可能性があり、これは DB へのおそらく 50 ~ 100 の INSERTS に変換されます (各 CF は挿入です)。データの増加により、すぐにクエリのパフォーマンスが魅力的でない/不適切です (ここでは INSERT よりも SELECT に関心があります)。私は数十万のユーザーベースを目指していますが、1,000 のユーザーベースでさえ痛みを感じ始めると思います.
これを説明するために、例として「コレステロール検査」を使用しましょう。データ要件を少し単純化していますが、総コレステロール、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、またはDBの専門家でさえないという事実を認めさせてください. 私は公平ですか?違う線引きしてみませんか?どんな助けでも大歓迎です。