シャーディング ポリシー

概要

データベース シャーディングの概要。データの分離が提供され、データ増加の管理が容易になるため、パフォーマンスとデータの保守が改善されます。

データベース シャーディングによりデータの分離が提供され、データ増加の管理が容易になるため、パフォーマンスとデータの保守が改善されます。

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

注記

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

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 ポリシーには、値の正規表現 (たとえば、"^Entity-Catalog.*?$") のリストを取る “Expressions” プロパティがあります。Commerce Engine は、これらのプロパティ値を使用して、読み取りまたは書き込みを行うデータベース テーブルを識別します。Commerce エンティティ (たとえば、CatalogEntities) に対する操作では、操作の対象となるエンティティ ID が正規表現値のリストと照合されます。たとえば、Commerce リスト (IFindEntitiesInListPipeline など) に対する操作の場合、一致はリスト名に基づいています。

以下に、Catalog エンティティと Catalog リストのデフォルトのデータベース シャーディング ポリシーの例を示します。

  {
        "$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"
      },
      {
        "$type": "Sitecore.Commerce.Plugin.SQL.ListShardingPolicy, Sitecore.Commerce.Plugin.SQL",
        "Expressions": {
          "$type": "System.Collections.Generic.List`1[[System.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 テーブルにマップするために使用される正規表現のリストが含まれています。

注記

新しいリレーションシップの定義を含め、カタログ システム内のすべてのリレーションシップは、このテーブルにマップする必要があります。

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

{       
 "$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.*?$"
                ]
  },
   "TableName": "RelationshipLists"
},

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

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

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