题
Sitecore 6 中的一般架构问题...
假设我们有 10,000 个项目实施“新闻稿”模板。这些项目存储在 Sitecore 中 /sitecore/content/home/press/*
. 。在我们的主页上,我们希望显示有关最近 3 篇新闻稿的一些信息。
我们正在寻求构建与 SQL 等效的东西:
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 级别解决, ,这确实会影响性能,有时可以为您带来优势。
快速查询 内置于 Sitecore 6 中,使所有查询都在 SQL 级别执行,从而显着提高了性能。目前它还不支持排序和 TOP,但我们正在考虑如何添加它。
其他提示
解决“10条最新新闻”问题的一种解决方案是使用Lucene。
这是 一种做法 它。
不隶属于 StackOverflow