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项目加载到内存中,然后在每次主页被点击时对它们进行排序都是不可接受的。
是否有更有效的方式来表达此查询?或者我应该专注于输出缓存和/或预先计算?
答案 0 :(得分:6)
Sitecore查询(或快速查询)不支持排序或TOP结构,因此必须在代码中表达这些内容。
专注于缓存是一件好事。使用标准的Sitecore渲染缓存是一种最简单的方法,我认为你不需要比这种情况更复杂的东西。
有助于理解Sitecore query can be resolved either at the SQL or API levels,这会影响效果并且有时可以用于您的优势。
Fast query内置于Sitecore 6中,使所有查询都在SQL级别执行,从而大大提高了性能。它目前也不支持排序和TOP,但我们正在考虑如何添加它。
答案 1 :(得分:2)
“10最新消息”问题的一个解决方案是使用Lucene。
这是one way of doing它。