Sitecoreの“最新”項目
質問
Sitecore 6の一般的なアーキテクチャの質問...
“プレスリリース”を実装する10,000のアイテムがある状況があるとしましょう。テンプレート。これらのアイテムは、Sitecoreの / sitecore / content / home / press / *
に保存されます。ホームページでは、最新の3つのプレスリリースに関する情報を表示したいと思います。
SQL’ sに相当するものを構築しようとしています:
SELECT TOP 3 * FROM PressReleases ORDER BY ReleaseDate
Sitecoreクエリドキュメントを読むと、このクエリの大部分はC#アプリケーションで処理する必要があるようです。次のようなもの:
public Item[] GetRecentPressReleases()
{
string query = "/sitecore/content/home/press/*";
Item[] items = Sitecore.Context.Database.SelectItems(query);
Array.Sort(items, new PressReleaseDateComparer());
return items.Take(3).ToArray();
}
10,000個のSitecoreアイテムをデータベースからメモリにロードし、ホームページにアクセスするたびにソートすることは、パフォーマンスの観点から受け入れられないようです。
このクエリをより効率的に表現する方法はありますか?または、出力キャッシュおよび/または事前計算に集中する必要がありますか?
解決
Sitecoreクエリ(または高速クエリ)はソートまたはTOP構造をサポートしていないため、これらのことはコードで表現する必要があります。
キャッシュに焦点を当てることは良いことです。標準のSitecoreレンダリングキャッシュの使用は最も簡単なアプローチです。この場合よりも複雑なものは必要ないと思います。
Sitecoreクエリはどちらでも解決できることを理解するのに役立ちますSQLまたはAPIレベルで、これはパフォーマンスに影響し、場合によっては有利に使用できます。
高速query はSitecore 6に組み込まれており、すべてのクエリをSQLレベルで実行し、パフォーマンスを劇的に向上させます。現時点ではソートとTOPもサポートしていませんが、これをどのように追加できるかを検討しています。
他のヒント
「10個の最新ニュース」に対する1つのソリューション問題はLuceneを使用することです。
これは 1つの方法です。