---
title: "シャーディングポリシー"
slug: "sharding-policies"
abstract: "データベースシャーディングの概要。これはデータの分離を提供し、データ成長の管理を促進し、パフォーマンス向上やデータ保守を容易にします。"
---
# シャーディングポリシー

データベースシャーディングはデータの分離を提供し、データの増加管理を促進し、パフォーマンス向上やデータ保守を可能にします。

## 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” プロパティがあります。正則表現(例えば "^Entity-Catalog.\*?$" )、またはワイルドカード(例えば "Entity-Catalog\*")を使ってパターンを定義できます。Commerce Engineはこれらのプロパティ値を用いて、読み書きするデータベーステーブルを特定します。

Commerceエンティティテーブルに対する操作(例: CatalogEntities )では、対象となる操作をパターン値のリストと照合IDします。例えば、IFindEntitiesInListPipelineリストに対する操作はリスト名に基づいてマッチングされます。

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

Commerce Engineはシャード名マッチングのための以下のパターンマッチングアルゴリズムをサポートしています:

-   ワイルドカードマッチング
-   正則表現(正則表現)マッチング

> !注構成の簡便さと最適なパフォーマンスのために、ワイルドカード式の使用を推奨します。

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

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

### ワイルドカード表現を用いた例の構成

以下はワイルドカード式を用いたカタログエンティティのデフォルトのシャーディングポリシーの例です。

{
    "$type": "Sitecore.Commerce.Plugin.SQL.EntityShardingPolicy, Sitecore.Commerce.Plugin.SQL",
    "Expressions": {
      "$type": "System.Collections.Generic.List\`1System.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\`1System.String, mscorlib, mscorlib",      
 "$values":            
 "^Entity-Catalog.\*?$",
 "^Catalog-.\*?$",
 "^Entity-Category.\*?$",          
 "^Category-.\*?$",      
 "^Entity-SellableItem.\*?$",      
 "^SellableItem-.\*?$"
       
     },   
 "TableName": "CatalogEntities"
  }

## シャーディングと関係性のメンバーシップ

シャーディングポリシーには、関係性のメンバーシップ情報をRelationshipListsテーブルにマッピングするための表現のリストが含まれています。

> !注カタログシステム内のすべての関係は、[新しい関係定義](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/sharding-policies.html#UUID-1879d6ba-cee1-4b01-f493-e35c7778ee84_section-idm4656990458080031604843677482 "Considerations for naming new custom relationships")を含めてこのテーブルにマッピングされなければなりません。

デフォルトのポリシーは以下の通り定義されています:

{
    "$type": "Sitecore.Commerce.Plugin.SQL.ListShardingPolicy, Sitecore.Commerce.Plugin.SQL",
     "Expressions": {
       "$type": "System.Collections.Generic.List\`1System.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を使って新しい関係定義を作成する](https://doc.sitecore.com/xp/en/users/102/sitecore-experience-commerce/work-with-relationship-definitions.html)際は、設定された表現のいずれかに一致する命名規則に従うことを推奨します( List- 接頭辞を除く)。例えば、*RelationshipUpSell*や*FeaturedCategoryToCategory*のような名前は、それぞれの式 "List-Relationship\*" と "List-\*Category\*"に基づいているため有効な関係名です。

ビジネスユーザーが"RelationshipLists"テーブルで定義された既存の式と一致しないカスタム関係定義を作成した場合、新しい関係定義名に一致するエントリをRelationshipListsリストに追加しなければなりません。そのエントリには"List-"プレフィックスと"\*"ポフィックスを含める必要があります。例えば、ビジネスユーザーが*「FeaturedProducts」*という新しい関係定義を作成する場合、"TableName": "RelationshipLists"リストにエントリ"List-FeaturedProducts\*"値を値として追加しなければなりません。