Frage
Eine allgemeine Architektur Frage in Sitecore 6 ...
Nehmen wir an, wir haben eine Situation, wo wir 10.000 Stück haben eine „Pressemitteilung“ Vorlage implementieren. Diese Elemente werden in Sitecores bei /sitecore/content/home/press/*
gespeichert. Auf unserer Homepage möchten wir einige Informationen angezeigt werden über die 3 neuesten Pressemitteilungen möchten.
Wir suchen etwas Gleichwertiges zu SQL ist zu erstellen:
SELECT TOP 3 * FROM PressReleases ORDER BY ReleaseDate
Beim Lesen der Sitecore Abfrage Dokumentation, es klingt wie die Mehrheit dieser Abfrage in unserer C # .NET-Anwendung behandelt werden muß. So 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 wäre, dass die Belastung 10.000 Sitecores Elemente aus der Datenbank in den Speicher scheint und sie dann jedes Mal auf unserer Homepage aus Sicht der Leistung nicht akzeptabel wäre getroffen zu sortieren.
Gibt es eine effizientere Möglichkeit, diese Abfrage auszudrücken? Oder soll ich auf der Ausgabezwischenspeicherung und / oder Pre-Rechen fokussiert werden?
Lösung
Sitecore Abfrage (oder eine schnelle Abfrage) nicht unterstützt Sortieren oder TOP-Konstrukte, so haben diese Dinge in Code ausgedrückt werden.
auf Caching Focusing ist eine gute Sache. Unter Verwendung von Standardsitecore-Rendering-Caching einen einfachste Ansatz ist, ich glaube nicht, dass Sie etwas brauchen komplexer als die in diesem Fall.
Es hilft zu verstehen, dass Sitecore Abfrage entweder aufgelöst werden kann an den SQL oder API-Ebenen , der die Performance nicht beeinträchtigt und kann manchmal zu Ihrem Vorteil verwendet werden.
Schnell Abfrage in Sitecores gebaut 6 und macht alle Abfragen auf SQL-Ebene ausführen maßgeblich die Leistung zu erhöhen. Es ist auch nicht unterstützt zur Zeit Sortier- und TOP, aber wir überlegen, wie diese hinzugefügt werden können.
Andere Tipps
Eine Lösung für das "10 neueste Nachrichten" Problem ist Lucene zu verwenden.
Dies ist eine Möglichkeit , es zu tun .