2008-10-18 10 views
8

Eine allgemeine Architektur Frage in Sitecore 6 ...Sitecores „Latest“ Item

Lassen Sie uns sagen, dass wir eine Situation, wo wir 10.000 Stück haben eine „Pressemitteilung“ Vorlage implementieren. Diese Artikel sind in Sitecore unter /sitecore/content/home/press/* gespeichert. Auf unserer Homepage möchten wir einige Informationen zu den 3 letzten Pressemitteilungen anzeigen.

Wir suchen etwas Gleichwertiges zu SQL ist zu konstruieren:

SELECT TOP 3 * FROM PressReleases ORDER BY ReleaseDate 

Lesen durch die Sitecores Abfrage Dokumentation, es klingt wie die Mehrheit dieser Abfrage muss in unserer C# Anwendung behandelt werden. Etwas wie:

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(); 
} 

es, dass Laden 10.000 Sitecores Elemente aus der Datenbank in dem Speicher scheinen würde und sie dann jedes Mal, Sortierung unsere Homepage getroffen wird aus Sicht der Leistung nicht akzeptabel wäre.

Gibt es eine effizientere Möglichkeit, diese Abfrage auszudrücken? Oder sollte ich mich auf Output-Caching und/oder Pre-Calculation konzentrieren?

Antwort

6

Sitecore Query (oder eine schnelle Abfrage) unterstützt keine Sortierung oder TOP-Konstrukte, daher müssen diese Dinge in Code ausgedrückt werden.

Konzentration auf Caching ist eine gute Sache. Die Verwendung von Standard-Sitecore-Rendering-Caching ist ein einfacher Ansatz. Ich glaube nicht, dass Sie in diesem Fall etwas Komplexeres benötigen.

Es hilft zu verstehen, dass Sitecore query can be resolved either at the SQL or API levels, die die Leistung beeinflusst und kann manchmal zu Ihrem Vorteil verwendet werden.

Fast query ist in Sitecore 6 integriert und sorgt dafür, dass alle Abfragen auf SQL-Ebene ausgeführt werden, was die Leistung drastisch erhöht. Es unterstützt momentan auch nicht die Sortierung und TOP, aber wir überlegen, wie das hinzugefügt werden kann.

+0

Bitte aktualisieren Sie diese Links. –

+0

@Alexy: Ihr Link ist kaputt. –

2

Eine Lösung für das Problem "10 neuste Nachrichten" ist die Verwendung von Lucene.

Dies ist one way of doing es.

+0

Definitiv ein Job für Lucene Indizierung. –