製品同期性能の理解

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

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

Commerce Connectは独自の 製品データモデル と、1つ以上の外部コマースシステムと製品データを交換するための 製品同期サービスレイヤー を持っています。製品同期は非常に時間がかかる可能性がありますが、外部コマースシステムとSitecore間の同期時間を短縮するためにシステムの一部の要素を設定することは可能です。

アイテムバケット

アイテムバケットに新しいアイテムが作成されると、自動的にルートフォルダに置かれます。正しい位置に移動させるためには、バケットの同期が必要です。

アイテムバケット同期と製品同期

アイテムバケットは、バケットの範囲内のローカルでアイテムに同期処理されます。製品同期はSitecoreと外部システムの境界を越えて行われ、アイテムではなく製品ドメインモデルで動作します。

!注プロダクト同期の利用可能性については、dev.sitecore.netを参照してください。

アイテムバケット同期戦略

製品同期プロセスでは、バケットが同期されるタイミングについて2つの異なる戦略があります。あなたの状況に最適な戦略は、カタログの規模や特に同期時に追加される商品数によって異なります。追加される商品数は、カタログに季節限定商品が含まれているかどうかや販売される商品の種類によって決まることが多いです。その2つの戦略は以下の通りです:

  • インスタントバケット同期 – これがデフォルトの戦略です。バケット内では、 BucketManager.MoveItemIntoBucket(entityItem, root) メソッドを呼び出すことで、サブアイテムを含む単一のアイテムを同期させることが可能です。単一の製品が同期される場合、この戦略は常に使われます。バルク製品同期では、製品リストを分割し、製品を個別に処理しますが、場合によっては並列で処理する場合もあります。バケットに追加されるアイテムの数によっては、この戦略は実現不可能になることもあります。
  • 遅延バケット同期 –。この戦略では、新しい製品項目には一時的なバケットを使用し、すべての製品が処理され、新しい製品項目がバケットのルートに作成されたまで同期を遅延させます。同期後、バケットの内容はメインバケットに移動されます。これにより、新しい製品項目が既存かどうかを確認するためにバケット同期時にすべての既存バケットアイテムにアクセスする時間が省けます。特に大規模なカタログでは、この時間短縮はかなり効果的です。遅延バケット同期やパイプライン内で一時的なバケットの使用を設定できます。設定ファイルをご覧ください: /App_Config/Include/Sitecore.Commerce.Products.Delayed-SyncProductRepository.config.disabled.

マルチスレッディング

マルチスレッドは製品同期に組み込まれています。デフォルトでは、製品、メーカー、タイプ、リソース、部門、仕様を同期するプロセッサから単一のスレッドが作成されます。スレッドは同期される各リポジトリごとに作成されます。スレッド数はSitecore.Commerce.Products.configファイル内で、ProductSynchronization.NumberOfThreads設定を追加し、同時スレッド数を指定することで設定できます。

!警告Sitecore CMSの問題により、複数のスレッドを使うとSQLサーバーのデッドロックが発生することがあります。このため、デフォルト設定では1スレッドが指定されています。

遅延項目イベントとインデックス作成

Commerce Connectは、同期時にアイテムイベントのトリガーやインデックス作成を無効にし、同期前のイベントの発射やインデックスの維持にリソースを無駄にするのを防ぎます。同期終了後にインデックス作成がオンになります。以下のコンテキストおよび無効化は同期時にインスタンス化されます:

  • Sitecore.SecurityModel.SecurityDisabler()
  • Sitecore.Data.Proxies.EventDisabler()

システム間の通話制限

Commerce Connectのすべての製品エンティティはCommerce Connectパイプラインを使って同期されており、外部システムから各パイプラインからデータを読み取っています。

使用するサーバーの技術的特性に応じて、以下を選択できます:

  • 製品データを一度読み込み、複数のパイプラインで処理することで、Sitecoreと外部システム間の通話回数を減らしCPU使用率を削減します。しかし、このオプションはメモリ使用量を増加させます。
  • 単一の製品を同期させることで、システム間で多くの呼び出しが発生することがあります。各呼び出しには時間がかかり、CPUリソースにも影響が出ます。しかし、この方法はメモリ使用量を削減します。

外部リソース

リソースは外部に配置可能です。Sitecore内のリソースはメディアライブラリ内のメディアアイテムとして格納されます。メディアアイテムはバイナリの塊であり、Sitecoreへのインポートには大きく時間がかかることがあります。したがって、リソースはSitecoreメディアライブラリにインポートするか、単に外部から参照することができます。リソースがインポートされた場合、それらはMedia Libraryの下にあるバケット化されたProductsフォルダに格納されます。インポートしない場合は、リソース参照項目に保存されたURIで参照できます。

プロダクトID

外部製品リポジトリは常にメインリポジトリとみなされ、デフォルトで製品の所有権を持ちます。これにより、外部システム内の製品およびアーティファクトのIDがプライマリキーとなります。Sitecoreでは、製品やアーティファクトに対応するアイテムのIDは、新しいGUIDを自動的に生成するデフォルトのSitecore実装に依存するのではなく、Commerce Connectによって生成されます。デフォルトの実装はMD5ハッシュアルゴリズムに基づいており、以下の形式です:

Item.ID = MD5.ComputeHash(Prefix + ExternalID);

ハッシュアルゴリズムを用いることで、外部システムからのIDとSitecore内のアイテムIDとの間に直接的なマッピングが生成されます。これには以下のような利点があります。

  • マッピングテーブルは不要で、管理やクエリに時間がかかります。
  • アイテムIDの入手は非常に速いです。
  • Sitecoreでアイテムを検索する必要はありません。外部IDをハッシュアルゴリズムの入力として使うことで、SitecoreのアイテムIDが瞬時に計算されます。
この記事を改善するための提案がある場合は、 お知らせください!