クエリアーキテクチャ

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

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

Sitecoreは可能な限り最速の技術でクエリ処理を行います。これは、データプロバイダーが要求されたクエリをサポートしている場合、SQLデータベースか、Sitecoreデータマネージャーのいずれかである場合があります。SQLデータベースはパフォーマンスが最も優れていますが、残念ながらすべてのクエリに対応しているわけではありません。

SQLデータベースは、"/sitecore/content/home"(パスでアイテムを解決)、"//home"(名前でアイテムの集合を探す)などのクエリをサポートしています。例えば、SQLデータベースを使用している大規模なサイトで、needleという名前のコンテンツ項目をすべて探そうとする場合、以下のAPIコードがこの結果セットを取得します。

Item content = Sitecore.Context.Database.GetItem("/sitecore/content"); Item[] needles = content.Axes.SelectItems("//needle");

SQL Serverのデータプロバイダーはこの種のクエリをサポートしているため、クエリはデータベース内で直接解決され、データベースに多数のコンテンツが含まれていても比較的高速で実行されます。

しかし、追加の検索条件を追加すると、Sitecoreの検索方法が変わる可能性があります。前の例を用いると、項目にIsHiddenというチェックボックス欄がある場合、隠されていない針を見つけるには以下のコードを使います。

Sitecore.Data.Items.Item content = Sitecore.Context.Database.Items["/sitecore/content"]; Sitecore.Data.Items.Item[] needles = content.Axes.SelectItems("//needle[@IsHidden != '1']");

SQL Serverデータプロバイダーは述語(四角括弧で囲まれた検索文字列の部分:@IsHidden != '1')をサポートしていません。したがって、SitecoreはクエリAPIを使ってデータマネージャーでこのクエリを解決します。これを行うために、クエリスコープ内のすべての項目(この例ではすべての /sitecore/content子孫)を読み込み、述語を各項目と一致する項目に対して評価できるようにします。残念ながら、これだけ多くのアイテムをロードするとパフォーマンスペナルティが大きくなり、大量のアイテムセットではかなり大きな影響を及ぼすことがあります。より最適な方法は、まず「needle」と名付けられたすべてのアイテムを見つけ、その後メモリの結果セットを検索して隠されていないアイテムを探すことです。

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