web-dev-qa-db-ja.com

コンテンツについて、ノードと用語の違いは何ですか

Drupalに大量のコンテンツを格納するためにノードと用語のどちらを使用するかについては、私が議論しています。

Drupal 8/9のノードと用語の間には多くの類似点があります:

  • どちらも任意のタイプのフィールドを追加できます。
  • どちらも Pathauto によって自動的に設定されるURLエイリアスを持つことができます。
  • どちらも Metatag でカスタマイズされたメタタグを持つことができます。
  • 両方にコメントを付けることができます。
  • どちらもLayout Builderを使用して表示をカスタマイズでき、Twigテンプレートを使用して同じようにテーマを設定できます。
  • どちらにもコンテンツタイプがあります(ノードには「コンテンツタイプ」があり、用語には「語彙」があります)。

彼らはとても似ているようです。では、用語とノードの違いは何ですか?

1
Patrick Kenny

1ノードVS taxonomy_terms

nodetaxonomy_terms(用語)はコンテンツエンティティタイプなので、どちらもコンテンツの保存に使用されますが、セマンティックな視点を形成します。

  1. node(Content)base fieldsおよび関連するエンティティはその目的のために意図されているため、コンテンツを格納するために使用されますex:

    • created:コンテンツがいつ作成されたか?
    • changed:コンテンツが変更されたとき?
    • sticky:このノードを他のノードの上に固定しますか?
    • 作成者:誰がこのコンテンツを書いていますか?
    • 作成者:コンテンツが作成されたとき?
  2. taxonomy_terms(Classification):を格納するために使用されますclassifications(同じグループ内で同じプロパティを共有するコンテンツのグループ化)base fieldsその目的のために意図されていますex:

    • name:ノードまたは他のエンティティのセットをグループ化するために使用されるカテゴリグループ名。
    • URLエイリアス:このカテゴリに属する​​すべてのノードを含むページへのリンク。

    • また、ネストされた分類に分類法の階層(ツリー)構造を使用することもできます enter image description here

そのため、ノードを使用して、コンテンツと分類法の条件を保存し、証拠を保存する必要があります。


2-ノードのパフォーマンスの問題

大量のコンテンツをノードとして保存する場合、大きなパフォーマンスの問題が発生します。たとえば、何千ものツイートを消費し、それらをノードとして保存するWebサービスがあると、次の理由により大きなパフォーマンスの問題が発生します。

ノードを取得したい場合は、長いデータベースクエリの旅が行われます。

  1. エンティティタイプのベーステーブルからノードの基本情報(nid、vid ..)を取得します:node table
  2. node_field_dataからノードの基本フィールド(タイトル、作成...)を取得します
  3. node__field_ $ fieldNameから各フィールドを取得します。各フィールドに10個のフィールドが別々のテーブル(10個のテーブル)にあるとしましょう

また、サイトに複数のノードバンドル(記事、ページ、ニュース)が存在するため、別のパフォーマンスの問題があります。データを読み取るためにDBに対して実行されるex(ツイート)各SQLクエリは、これらすべてのバンドルインスタンスをループします。 (記事、ページ、ニュース)ツイートを取得する前に。


3-カスタムエンティティタイプ

大量のコンテンツがある場合の最適なソリューション:

バンドルのないエンティティタイプを作成すると、このプロパティを維持できるため、ノードの編集能力を失わずにデータを高速で取得できます。

  • コンテンツは翻訳可能になります。
  • コンテンツは変更可能です。
  • コンテンツはビューと統合できます。
  • ノードと同じようにBOから管理できます。

    注:Drupal console、using:generate:entity:content then with you do want this(content )バンドルを持つエンティティ?(はい/いいえ)[いいえ]:>いいえ

4
Marwen Amri

ノードはコンテンツです。用語はコンテンツの分類のためのものであり、それ自体がコンテンツではありません。

用語は分類法の一部です。分類法は分類の科学です。

ノードと分類用語の関係は、ノードを分類するためにノードに分類用語を添付することです。したがって、ブログノードがある場合、トピックまたはタグがあり、それらはブログノードにアタッチされます。これを使用して、特定のカテゴリのすべてのブログを検索したり、特定の用語でタグ付けしたりできます。一般的なSNSサイトのハッシュタグは、分類用語のようなものと考えることができます。ハッシュタグをクリックすると、そのハッシュタグが付いたすべての投稿を表示できます。ハッシュタグは基本的に投稿を分類します。

ノードと用語が技術的な実装を共有するいくつかの方法をリストアップしました(改訂があるなど)。ただし、使用方法はまったく異なります。

4
Jaypan

これまでに用語とノードの間で識別した違いは次のとおりです。

階層(ツリー)構造

  • 分類用語は、デフォルトでは語彙内で階層的です。これを使用して、メニューに自動的に Taxonomy Men または Hierarchical Taxonomy Men のようなモジュールを提供できます。
  • ノードにはメニューで階層構造を与えることができます(メニューには階層が含まれます)が、エンティティ参照に依存するある種のカスタムシステムなしでは、ノード自体を階層で順序付けることはできません。

改訂

  • ノードにはリビジョンUIがあり、以前のバージョンに簡単にロールバックできます。
  • 分類用語では、デフォルトでリビジョン追跡が有効になっていますが、まだ利用可能なUIはありません。 これはいつか変わるでしょう。

編集ページでのメニューのサポート

  • ノードは、編集ページのメニューに簡単に追加できます。
  • メニューに用語を追加するには、まず用語を作成してから、リンクを追加するメニューにリンクを手動で作成する必要があります。

オーサリング情報+プロモーションオプション

  • ノードは、ノードの作成者や公開日を変更するための「作成情報」を提供します。分類用語は、このためのUIを提供しません。
  • ノードには、コンテンツをフロントページにプロモートし、リストの一番上に貼り付けておくためのUIオプションがあります。タクソノミー用語は、これをすぐに使用できるわけではありませんが、表示はビューでカスタマイズでき、階層の組み込みサポートがあるため、上部にスティッキーは必要ありませんリストの
1
Patrick Kenny