Ich habe eine kleine ASP.NET MVC 2-Site zusammengestellt, die einige sehr umfangreiche date mining / table-joins / etc ausführt.
Mit MVC habe ich einen Controller, der die Daten in vielen verschiedenen Formen (Tabellen, Bilder usw.) zurückgibt. Um das häufige Treffen der Datenbank zu sichern, habe ich einen doppelten Cache-Mechanismus:
OutputCacheAttribute
mit VaryByParam = "*"
. System.Runtime.Caching.ObjectCache
. Beispiel für die ObjectCache
innerhalb des Controllers:
Das gibt mir eine gute Leistungsverbesserung, aber wo es scheitert, ist die CacheItemPolicy
sehr einfach. Im Idealfall möchte ich, dass das Cache-Fenster größer ist, aber das zwischengespeicherte Element abläuft, wenn sich die Datenbank ändert.
Die CacheItemPolicy
scheint dies mit der ChangeMonitors
Sammlung zu unterstützen, zu der ich eine SqlChangeMonitor
hinzufügen könnte, aber wenn ich versuche, dies zu konstruieren, stehe ich still.
Ich verwende Entity Framework 4 für den Zugriff auf eine SQL-Datenbank, wie Wie konstruiere ich SqlChangeMonitor
, um die paar Datenbanktabellen zu überwachen, die wahrscheinlich einen Cache-Ablauf auslösen?
SqlChangeMonitor
wird mit einem SqlDependency
erstellt, das ein SqlCommand
benötigt - wie kann ich die Encapsulation von Entity Framework meiner Datenbank speichern?
Es ist möglich, eine beliebige LINQ-Abfrage in eine SqlDependency einzubetten, einschließlich EF Linq-Abfragen, siehe LinqToCache . Aber unglücklicherweise ist die Art und Weise, wie EF das SQL für die Abfragen formuliert, selbst das einfachste from t in context.table select t
, nicht mit der Einschränkung der Abfragebenachrichtigung kompatibel und die SqlDependency wird sofort als ungültige Anweisung ungültig gemacht. Ich habe darüber im SqlDependency-basierten Caching von LINQ-Abfragen gesprochen.
Sie können SqlChangeMonitor
mit einfachen SqlCommand
-Objekten verwenden, die in Ihren Tabellen, die sich wahrscheinlich ändern, als einfache SELECT ... FROM Table
konstruiert sind. Sie müssen wissen, dass zwischen den Kosten für die Einrichtung von Benachrichtigungen und den Kosten für die Abfrage ein Gleichgewicht besteht. Wenn sich Ihre Tabellen häufig ändern, kann die Überwachung auf Änderungen teurer sein als die Abfrage. Sehen Sie diesen Artikel The Mysterious Notification , um zu verstehen, wie QN funktioniert und welche Kosten für die Überwachung anfallen.
Tags und Links sql asp.net-mvc .net entity-framework caching