---
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.\*?$")があります。Commerce Engineはこれらのプロパティ値を用いて、読み書きすべきデータベーステーブルを特定します。Commerceエンティティ(例:CatalogEntities)に対する操作の場合、対象となるIDエンティティは正規表現値のリストと照合されます。例えばCommerceリストに対する操作IFindEntitiesInListPipelineの場合、マッチングはリスト名に基づいて行われます。

以下はカタログエンティティおよびカタログリストのデフォルトのデータベースシャーディングポリシーの例です。

{
 "$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"
 },
 {
 "$type": "Sitecore.Commerce.Plugin.SQL.ListShardingPolicy, Sitecore.Commerce.Plugin.SQL",
 "Expressions": {
 "$type": "System.Collections.Generic.List\`1System.String, mscorlib, mscorlib",
 "$values": 
 "^List-CatalogItems.\*?$",
 "^List-Catalogs.\*?$",
 "^List-Categories.\*?$",
 "^List-SellableItems.\*?$",
 "^List-Categories.\*?$",
 "^List-SellableItems.\*?$",
 "^List-PurgeCatalogs.\*?$",
 "^List-PurgeCategories.\*?$",
 "Entity-Catalog.\*?$",
 "Entity-Category.\*?$",
 "Entity-SellableItem.\*?$"
 
 },
 "TableName": "CatalogLists"
 }

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

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

> !注カタログシステム内のすべての関係は、[新しい関係定義](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/sharding-policies.html#UUID-d845e51c-173e-5803-f534-b682c50e1f9f_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.\*?$"
           
  },
 "TableName": "RelationshipLists"
},

### 新しいカスタム関係の命名に関する考慮事項

Business Tools内の関係定義は、"TableName": "RelationshipLists" テーブルであらかじめ定義された関係に基づいています。ユーザーが[Business Toolsを使って新しい関係定義を作成する](https://doc.sitecore.com/xp/en/users/100/sitecore-experience-commerce/work-with-relationship-definitions.html)際は、既存の正則表現のいずれかに一致する命名規則に従うことを推奨します( List- 接頭辞を除く)。例えば、*RelationshipUpSell*、または*FeaturedCategoryToCategory*のような名前は、それぞれ正規表現 "^List-Relationship.\*?$" と "^List-.\*Category.\*?$"に基づいているため有効な関係名です。

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