シャーディング ポリシー

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

データベース・シャーディングは、データの分離を提供し、データの増加の管理を容易にすることで、パフォーマンスとデータ・メンテナンスを向上させることができます。

CommerceエンティティとCommerceリスト テーブルのシャーディング

Commerce Engineは、Commerceエンティティまたはリストと対話するときに読み取りおよび書き込み操作に使用するグローバル データベース テーブルを決定するシャーディング ポリシーを定義します。

メモ

シャーディングに使用されるストアド プロシージャは、カスタム テーブルとリストをサポートしていません。

Commerce Engineは、Commerceエンティティ テーブルとリスト テーブルのデータベース シャーディングを実装し、2種類のシャーディング ポリシーを提供します。1つのタイプはCommerceエンティティに対する操作 ( "TableName": "CatalogEntities" など) に使用され、もう1つのタイプはリストに対する読み取りおよび書き込み操作 ( "TableName": "CatalogLists"など) に使用されます。

C:\inetpub\wwwroot\<CommerceEngineInstance>/wwwroot\data\Environments\ フォルダにあるPlugIn.SQL.Sharding.PolicySet-1.0.0.jsonファイルには、Commerce Engineシャーディング ポリシーが含まれています。

CommerceEntitiesポリシーとCommerceListsポリシーには、一致するパターンのリストを値として受け取る “Expressions” プロパティがあります。パターンは、正規表現 (regex) ("^Entity-Catalog.*?$" ) など、またはワイルドカード ("Entity-Catalog*") を使用して定義できます。Commerce Engineは、これらのプロパティ値を使用して、読み取りまたは書き込みを行うデータベース テーブルを識別します。

Commerceエンティティ テーブル ( CatalogEntitiesなど) に対する操作の場合、操作の対象となるエンティティIDはパターン値のリストと照合されます。Commerceリスト ( IFindEntitiesInListPipelineリストなど) に対する操作の場合、一致はリスト名に基づきます。

リストとエンティティテーブルの名前のマッチングパターンアルゴリズム

Commerce Engineは、シャード名のマッチングに次のパターンマッチングアルゴリズムをサポートしています。

  • ワイルドカードのマッチング

  • 正規表現 (regex) マッチング

手記

構成を簡略化し、最適なパフォーマンスを実現するために、ワイルドカード式を使用することをお勧めします。

PlugIn.SQL.Sharding.PolicySet-1.0.0.jsonファイルでは、"TableName" プロパティを含む各セクションに、パターン マッチング アルゴリズムを指定するオプションの “UseWildcardExpressions” プロパティを含めることができます。新しいSitecore XC 10.2デプロイメントでは、ワイルドカード式の一致がデフォルトで有効になっています ( “UseWildcardExpressions": "true" )。

"UseWildcardExpressions" プロパティがポリシー・セット・.json・ファイルにない場合、またはプロパティ値が "false"に設定されている場合、パターン・マッチングでは正規表現が使用されます。

ワイルドカード式を使用した設定例

次に、ワイルドカード式を使用したカタログエンティティのデフォルトのシャーディングポリシーの例を示します。

{
    "$type": "Sitecore.Commerce.Plugin.SQL.EntityShardingPolicy, Sitecore.Commerce.Plugin.SQL",
    "Expressions": {
      "$type": "System.Collections.Generic.List`1[[System.String, mscorlib]], mscorlib",
      "$values": [
        "Entity-Catalog*",
        "Catalog-*",
        "Entity-Category*",
        "Category-*",
        "Entity-SellableItem*",
        "SellableItem-*"
      ]
    },
    "UseWildcardExpressions": true,
    "TableName": "CatalogEntities"
 },

正規表現を使用した設定例

次に、カタログエンティティの正規表現を使用するシャーディングポリシーの例を示します。

手記

"UseWildcardExpressions" プロパティが構成に存在しない場合、正規表現の一致は暗黙的に有効になります。

{  
    "$type": "Sitecore.Commerce.Plugin.SQL.EntityShardingPolicy, Sitecore.Commerce.Plugin.SQL",
    "Expressions": {  
      "$type": "System.Collections.Generic.List`1[[System.String, mscorlib]], mscorlib",      
      "$values": [           
        "^Entity-Catalog.*?$",
        "^Catalog-.*?$",
        "^Entity-Category.*?$",          
        "^Category-.*?$",      
        "^Entity-SellableItem.*?$",      
        "^SellableItem-.*?$"
       ]
     },   
     "TableName": "CatalogEntities"
  }

シャーディングとリレーションシップ メンバーシップ

シャーディング ポリシーには、リレーションシップ メンバーシップ情報をRelationshipListsテーブルにマップするために使用される式の一覧が含まれています。

手記

カタログ・システム内のすべての関係 ( 新しい関係定義を含む) をこのテーブルにマップする必要があります。

デフォルト・ポリシーは次のように定義されます。

 {
    "$type": "Sitecore.Commerce.Plugin.SQL.ListShardingPolicy, Sitecore.Commerce.Plugin.SQL",
     "Expressions": {
       "$type": "System.Collections.Generic.List`1[[System.String, mscorlib]], mscorlib",
       "$values": [
         "List-*Catalog*",
         "List-*Category*",
         "List-Catalog*",
         "List-*SellableItem*",
         "List-*SellableItem-*",
         "List-PriceBookToCatalog*",
         "List-PromotionBookToCatalog*",
         "List-InventorySetToCatalog*",
         "List-Relationship*"
       ]
    },
     "UseWildcardExpressions": true,
     "TableName": "RelationshipLists"
  },

新しいカスタムリレーションシップの名前付けに関する考慮事項

Business Toolsのリレーションシップ定義は、"TableName": "RelationshipLists" テーブルで事前に定義されたリレーションシップに基づいています。ユーザーがBusiness Toolsを使用して新しいリレーションシップ定義を作成する場合は、構成された式 ( List- プレフィックスを除く) のいずれかに一致する命名規則に従うことをお勧めします。たとえば、RelationshipUpSellFeaturedCategoryToCategoryなどの名前は、それぞれ "List-Relationship*" 式と "List-*Category*"式に基づいているため、有効なリレーションシップ名です。

ビジネス・ユーザーが作成したカスタム・リレーションシップ定義が、"RelationshipLists"・テーブルで定義されている既存の式と一致しない場合は、新しいリレーションシップ定義名と一致するように、RelationshipLists・リストにエントリを追加する必要があります。エントリには、"List-"プレフィックスと"*"接尾辞を含める必要があります。 たとえば、ビジネス・ユーザーが "FeaturedProducts"という名前の新しいリレーションシップ定義を作成する場合は、"TableName": "RelationshipLists" リストに値としてエントリ "List-FeaturedProducts*" を追加する必要があります。

この記事を改善するための提案がある場合は、 お知らせください!