2008-10-18 10 views
8

Общая архитектура вопрос в Sitecore Sitecore 6 ...«Последние» Пункт

Допустим, мы имеем ситуацию, когда у нас есть 10000 пунктов, реализующего «Пресс-релиз» шаблон. Эти элементы хранятся в 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(); 
} 

Казалось бы, что нагрузка 10000 Sitecore элементы из базы данных в память, а затем сортировка их каждый раз, когда наша домашняя страница попала бы неприемлемо с точки зрения производительности.

Есть ли более эффективный способ выразить этот запрос? Или мне следует сосредоточиться на кэшировании и/или предварительном вычислении?

ответ

6

Запрос Sitecore (или быстрый запрос) не поддерживает сортировку или конструкцию TOP, поэтому эти вещи должны быть выражены в коде.

Ориентация на кеширование - это хорошо. Использование стандартного кэширования рендеринга Sitecore - это самый простой подход, я не думаю, что в этом случае вам нужно что-то более сложное.

Это помогает понять, что Sitecore query can be resolved either at the SQL or API levels, что влияет на производительность и может иногда использоваться в ваших интересах.

Fast query встроен в Sitecore 6 и выполняет все запросы на уровне SQL, что значительно увеличивает производительность. Он также не поддерживает сортировку и TOP на данный момент, но мы рассматриваем, как это можно добавить.

+0

Пожалуйста, обновите эти ссылки. – 2010-11-15 15:23:59

+0

@Alexy: ваша ссылка не работает. – 2010-12-09 21:54:18

2

Одним из решений проблемы «10 последних новостей» является использование Lucene.

Это one way of doing it.