9.1

複数インデックス(シャーディング)

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

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

インデックスシャーディングは、インデックス内の文書をより小さなパーティションに分割するプロセスです。これらの小さなパーティションはシャードと呼ばれます。その結果、すべてのドキュメントが1つの大きなインデックスにまとめられるのではなく、ドキュメントがシャード間で分散されます。シャーディングプロセスには、ドキュメントのシャード割り当て方法を決定するロジック(「シャーディング戦略」)があります。

1つのインデックスでほとんどのSitecoreソリューションのニーズを満たしますが、必要に応じて複数のインデックスでより良いスケーリングが可能です。

シャーディングとソル

Solrを使うと、Sitecoreはシャーディングを処理しません。代わりに、SolrアプリケーションのSolrCloud機能がシャーディングを処理します。

Solrは文書をシャードに自動割り当てでき、レプリケートシャードなどの追加機能も備えています。レプリケートシャードは故障やフェイルオーバーのシナリオを処理するのに役立ちます。

SitecoreのSolr実装は、シャード化されたエンドポイントを非シャードのエンドポイントと同じ方法で扱います。Solrのシャードインデックスを扱うために追加の設定は必要ありません。

!注Sitecoreはフェイルオーバーを完全にはサポートしていません。具体的には、Sitecore(Solrクライアントとして)は、現在のサーバー(リーダー)がダウンした場合、Solrサーバー間(Solrレプリカ)間を切り替えることができません。

SolrCloudの設定についての詳細はhttps://cwiki.apache.org/confluence/display/solr/SolrCloudをご覧ください。

シャーディングとルセネ

Luceneを使うと、3つのSitecoreデータベース(マスター、ウェブ、コア)のデータはデフォルトで単一の検索インデックスに保存されます。検索インデックスが増えるにつれて、各データベースのデータをそれぞれ独立した検索インデックスに格納するシャーディング戦略を実装できます。

他の方法でシャードすることもできます。例えば、メディアライブラリ用の別のインデックスを作ることができます。

バケットを使っていて何千、何百万ものアイテムがあるなら、Luceneを使い続けたいならシャーディングが有効な方法です。検索インデックスが増え続けてこの戦略には大きすぎるなら、Solrに切り替えるべきです。

!注シャーディングを使う場合は、他のLucene設定ファイルをオフにする必要があります。これらのファイルを有効にしておくと冗長なインデックスが発生します。

複数の検索インデックスを設定する

Sitecoreは、各データベースのインデックス作成に役立つ以下の例設定ファイルを提供しています:

Sitecore.ContentSearch.Lucene.Indexes.Sharded.Core.config.example

Sitecore.ContentSearch.Lucene.Indexes.Sharded.Master.config.example

Sitecore.ContentSearch.Lucene.Indexes.Sharded.Web.config.example

これらのファイルはwwwroot\\App_Config\Include\Examplesフォルダに保存されています。

これらの設定ファイルが十分にシャード化されていなければ、必要に応じて設定を変更することができます。

以下のコードサンプルと表を使って、追加すべき内容を確認してください:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
 <sitecore>
 <contentSearch>
 <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration,
 Sitecore.ContentSearch.LuceneProvider">
 <indexes hint="list:AddIndex">
 <index id="sitecore\_core\_index"
 type="Sitecore.ContentSearch.LuceneProvider.LuceneIndex,
 Sitecore.ContentSearch.LuceneProvider">
 <param desc="name">$(id)</param>
 <param desc="folder">$(id)</param>
 <!-- This initializes index property store. Id has to be set to the index id -->
 <param desc="propertyStore" ref="contentSearch/databasePropertyStore"
 param1="$(id)" />
 <strategies hint="list:AddStrategy">
 <!-- NOTE: order of these is controls the execution order -->
 <strategy ref="contentSearch/indexUpdateStrategies/intervalAsyncCore" />
 </strategies>
 <commitPolicy hint="raw:SetCommitPolicy">
 <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy,
 Sitecore.ContentSearch" />
 </commitPolicy>
 <commitPolicyExecutor hint="raw:SetCommitPolicyExecutor">
 <policyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor,
 Sitecore.ContentSearch" />
 </commitPolicyExecutor>
 <locations hint="list:AddCrawler">
 <crawler type="Sitecore.ContentSearch.LuceneProvider.Crawlers.DefaultCrawler,
 Sitecore.ContentSearch.LuceneProvider">
 <Database>core</Database>
 <Root>/sitecore</Root>
 </crawler>
 </locations>
 </index>
 </indexes>
 </configuration>
 </contentSearch>
 </sitecore>
</configuration>

名称

概要

例

インデックスに含まれるコンテンツツリーのルートノードを指定します。

/sitecore/media library

検索インデックスの名前。

$(id)

データベース名。

core

運用すべきインデックス戦略の一覧。

<strategy

ref="contentSearch/indexUpdateStrategies/intervalAsyncCore" />

インデックスがメモリや一時ファイルに含まれているデータをディスクにコミットするタイミングを制御します。これは時間ベースでもドキュメントカウントベースでも構いません。

<commitPolicy

hint="raw

">

<policy

type="Sitecore.ContentSearch.TimeIntervalCommitPolicy,Sitecore.ContentSearch"/>

コミットを実行するクラスです。

インデックスコンテキストスイッチャー

シャーディングを使う場合、SitecoreContext.Itemに対する 要素を使ってどのインデックスを使うかを決定します。このインデックス切り替えは自動的に行われます。

!注 がより具体的であればあるほど、設定ファイル上で上位に記載する必要があります。インデックスコンテキストスイッチャーは、インデックスをリストの順番で使います。

例えば、/sitecore/content/Homeの要素インデックスがある場合、/sitecore/content/Home/Flightsの要素のインデックスの下に配置されるべきです:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
 <sitecore>
 <contentSearch>
 <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration,
 Sitecore.ContentSearch.LuceneProvider">
 <indexes hint="list:AddIndex">
 <index id="sitecore\_core\_index"
 type="Sitecore.ContentSearch.LuceneProvider.LuceneIndex,
 Sitecore.ContentSearch.LuceneProvider">
 <param desc="name">$(id)</param>
 <param desc="folder">$(id)</param>
 <!-- This initializes index property store. Id has to be set to the index id -->
 <param desc="propertyStore" ref="contentSearch/databasePropertyStore"
 param1="$(id)" />
 <strategies hint="list:AddStrategy">
 <!-- NOTE: order of these is controls the execution order -->
 <strategy ref="contentSearch/indexUpdateStrategies/intervalAsyncCore" />
 </strategies>
 <commitPolicy hint="raw:SetCommitPolicy">
 <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy,
 Sitecore.ContentSearch" />
 </commitPolicy>
 <commitPolicyExecutor hint="raw:SetCommitPolicyExecutor">
 <policyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor,
 Sitecore.ContentSearch" />
 </commitPolicyExecutor>
 <locations hint="list:AddCrawler">
 <crawler type="Sitecore.ContentSearch.LuceneProvider.Crawlers.DefaultCrawler,
 Sitecore.ContentSearch.LuceneProvider">
 <Database>core</Database>
 <Root>/sitecore</Root>
 </crawler>
 </locations>
 </index>
 </indexes>
 </configuration>
 </contentSearch>
 </sitecore>
</configuration>

デフォルトのシャーディング戦略

Sitecoreはデフォルトのシャーディング戦略であるLucenePartitionShardingStrategyを提供します。この戦略は文書を取り、IDのハッシュを計算してどのシャードに入れるかを決定します。このハッシュは非常に高速で、共有状態やID生成に依存しません。この方法は完全に均等な分布を得られるわけではありません(例えば、100件のドキュメントが50/50に分割されることはありません)が、パフォーマンスを大幅に向上させます。

この戦略には1つのオプションしかありません: shardDistributionパラメータです。このパラメータを2の倍数(2、4、8、16など)に設定し、インデックスを分割するシャードの数を指定します。

新しいシャーディング戦略を作成

デフォルトの戦略が必要でない場合は、自分で実装できます。これはSitecore.ContentSearch.Sharding.IShardingStrategyインターフェースを使い、実装をインデックスに渡すことで行います。

戦略を適用した後にインデックスを再構築すべきです。必須ではありませんが、インデックスにより均等なドキュメント分布をもたらします。

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