Sitecore's & # 8220; Latest & # 8221; Вещь
Вопрос
Общий вопрос архитектуры в Sitecore 6 ...
Допустим, у нас есть ситуация, когда у нас есть 10000 объектов, реализующих & # 8220; Пресс-релиз & # 8221; шаблон. Эти элементы хранятся в Sitecore по адресу / sitecore / content / home / press / *
. На нашей домашней странице мы хотели бы разместить некоторую информацию о 3 самых последних пресс-релизах.
Мы пытаемся создать что-то эквивалентное SQL & # 8217; 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();
}
Казалось бы, загрузка 10000 элементов Sitecore из базы данных в память и последующая сортировка их при каждом обращении к нашей домашней странице была бы неприемлемой с точки зрения производительности.
Есть ли более эффективный способ выразить этот запрос? Или мне следует сосредоточиться на кэшировании и / или предварительном расчете вывода?
Решение
Sitecore Query (или быстрый запрос) не поддерживает сортировку или конструкции TOP, поэтому эти вещи должны быть выражены в коде. Р>
Сосредоточиться на кэшировании - это хорошо. Использование стандартного кэширования рендеринга Sitecore - самый простой подход, я не думаю, что вам нужно что-то более сложное, чем это в этом случае.
Это помогает понять, что запрос Sitecore может быть решен либо на уровнях SQL или API , что влияет на производительность и иногда может быть использовано в ваших интересах.
быстро query встроен в Sitecore 6 и заставляет все запросы выполняться на уровне SQL, что значительно повышает производительность. Он также не поддерживает сортировку и TOP в данный момент, но мы рассматриваем, как это можно добавить.
Другие советы
Одно решение для " 10 последних новостей " проблема заключается в использовании Lucene.
Это один из способов сделать это . р>