• floarleft

    (@floarleft)


    WordPressを使い、学問に関するウェブサイトを作成しています。
    投稿タイプを分けるメリットについて質問させて頂きます。
    宜しくお願い致します。

    ユーザーが記事を検索するときに、フィルターをかける機能を実装いたしました。

    つまり記事の “種類” に “arithmetic”, “science”, “ethics” とあり、ユーザーが「わたしは “science” は見たくない」というときそれにフィルターをかけて、検索対象が “arithmetic”, “ethics” だけになるという機能です。

    お伺いしたいのは、この “種類” の設定を

    “カスタム投稿タイプ” にすべきか?
    “カテゴリ” にすべきか?

    ということです。

    (1つの記事が持つ “種類” は1つだけです。タグのように複数持つことはありません。)

    記事の検索はWP_Queryを使います。「投稿タイプが分かれていた方が、フィルターをかけたときの検索対象が狭められて、速度は速くなるメリットがあるのではないか」と思っているのですが、

    このメリットは正しいでしょうか?

    そしてもし正しいとすれば、カテゴリを使うケースでは常に投稿タイプを使った方が速さという点では良いということになるかと思うのですが、それでもカテゴリを使うメリットとはなんでしょうか?

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • munyagu

    (@munyagu)

    こんにちは

    カテゴリが数件〜数十件しかない場合、結合のパフォーマンスは気にしなければいけないほどは変わらないと思います。

    カテゴリで分けるのか、カスタム投稿にするのかの判断はケースバイケースです。
    役割が違いますので、普遍的にどちらが正解というものは無いと思います。

    カスタム投稿は階層にできませんし、年別アーカイブも一つの投稿タイプをカテゴリ横断で表示するのは簡単ですが、カスタム投稿タイプ横断でとなると、簡単ではありません。
    また、カスタム投稿タイプをまたがって同じタグ付けをして、タグの一覧表示をするのも大変です。

    などの機能面以外にも、投稿する人の利便性なども考慮しないといけないケースもあると思います。
    カスタム投稿タイプがメニューに10個も並ぶのは避けたいですね・・・

    トピック投稿者 floarleft

    (@floarleft)

    いくつものご指摘に頷くばかりで、大変勉強になります。
    仰るとおりですね。どうもありがとうございました。

    ちなみに興味からですが、カテゴリは10件で、記事が100万件あったらいかがでしょうか?

    ご指摘いただいたような、階層、年月アーカイブ、タグ一覧表示、メニューに並ぶ醜さ、などは考慮せず、ただ記事を取得する速度についてだけお尋ねします。

    速度についてだけいえば、カテゴリで分けることと、カスタム投稿タイプで分けることでは、どちらが早いのでしょうか?

    munyagu

    (@munyagu)

    厳密に速度だけで比較すると、カスタム投稿タイプの方がテーブルを結合しなくて良いので速いでしょう。

    しかし、結合するカテゴリ側の件数が非常に少ないことが想定されるので、記事数が100万件を超えていても、それほどの差は無いかもしれません。
    が、もちろんサーバースペックが低い場合には少しの差が大きな差になるんじゃないかと思います。

    トピック投稿者 floarleft

    (@floarleft)

    >しかし、結合するカテゴリ側の件数が非常に少ないことが想定されるので、記事数が100万件を超えていても、それほどの差は無いかもしれません。

    この部分が少しわかりませんでした。
    すみませんがもう少し教えて頂けませんでしょうか。

    先の例はこうでした。

    記事が100万件で、カテゴリが10種類
    記事が100万件で、投稿タイプが10種類

    それぞれの例について、 “science” にフィルターをかけて、9種類が検索対象となったとします。表示記事数は5件です。すると、

    前者は100万件を対象に、90万件を抽出し、5件を抽出する
    後者は90万件を対象に、5件を抽出する

    というように後者の方が10万件分も処理が少ないことになります。にも関わらず、

    >カテゴリ側の件数が非常に少ないこと
    (つまりカテゴリが10件であること、ですよね?)

    という点から、なぜ「>それほど差はない」が帰結されるのでしょうか?

    munyagu

    (@munyagu)

    前者は100万件を対象に、90万件を抽出し、5件を抽出する
    後者は90万件を対象に、5件を抽出する

    という箇所が理解できませんが・・・
    後者も最初は100万件ですよね。
    投稿タイプで絞り込む処理が必要無いわけではありません。

    両方の表で結合キーにインデックスがあり、駆動表になると思われるカテゴリの件数が少ないので、結合してもパフォーマンスはそれほど悪くならないと思います。
    また、どちらでも5件の抽出のために必要な90万件の並び替え処理があり、これも負荷の高い処理です。
    単純計算で1割速いですが、上記の並び替え処理や他にもネットワークなどのオーバーヘッドを考えると、その差はとても小さいと思います。

    ところで、SQL のパフォーマンスについては WordPress と直接関係がありませんので、他で質問されるか、ご自身で調べられたら良いと思います。

    トピック投稿者 floarleft

    (@floarleft)

    >という箇所が理解できませんが・・・
    >後者も最初は100万件ですよね。

    あぁ、失礼致しました。その例示は、後者は「>テーブルの結合」という処理がなく、「>単純計算で1割早い」ことになるという点を強調したつもりでの例示でした。

    >また、どちらでも5件の抽出のために必要な90万件の並び替え処理があり、これも負荷の高い処理です。

    こういった処理の重さを知らないのでご教示頂けますと大変助かります。ありがとうございます。

    ただ、「 “science” にフィルターをかける」なら1割の差ですが「 “science” 以外にフィルターをかける」なら9割の差になります。

    この場合でも「>ネットワークなどのオーバーヘッド」と比べれば小さな差だと言えそうでしょうか?
    (このことが質問の本旨になります。)

    >SQL のパフォーマンスについては WordPress と直接関係がありません

    これは失礼致しました。自身の質問内容はWP_Queryという関数によるものにまつわるものだという認識でおりましたゆえ、ご容赦くださいませ。

    oisit

    (@oisit)

    コーデックスに目を通されてはいかがでしょうか。
    データベース構造

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「投稿タイプを分けるメリット」には新たに返信することはできません。