Datenzugriffs- und Persistenz- / Speicherschichten sind unwiderstehlich natürliche Orte für das Caching. Sie erledigen die I / Os und machen sie so zum praktischen Ort für das Einfügen von Caching. Ich gehe davon aus, dass fast jede DAL- oder Persistenzschicht im Laufe der Zeit eine Caching-Funktion erhält - wenn sie nicht von Anfang an so konzipiert ist.
Das Problem ist die Absicht . DAL- und Persistenz-Layer befassen sich mit Konstrukten auf relativ niedriger Ebene, z. B. Datensätzen, Tabellen, Zeilen und Blöcken. Sie sehen die "Business" - oder Application-Layer-Objekte nicht oder wissen nicht genau, wie sie auf höheren Ebenen verwendet werden. Wenn sie eine Handvoll Zeilen oder ein Dutzend Blöcke lesen oder schreiben sehen, ist es nicht klar, dass sie repräsentieren. "Das derzeit analysierte Jones-Konto unterscheidet sich nicht wesentlich von" einigen grundlegenden Steuersatzreferenzdaten, die die App nur einmal benötigt und auf die sie sich nicht erneut bezieht ". In dieser Schicht sind Daten Daten sind Daten.
Beim Zwischenspeichern auf der DAL- / Persistenz-Ebene besteht die Gefahr, dass die "kalten" Steuerbezugsdaten dort gespeichert werden, unnötigerweise 12,2 MB Cache belegt werden und einige Kontoinformationen verschoben werden, die tatsächlich in nur einer Minute intensiv genutzt werden. Selbst die besten Cache-Manager haben nur wenig Wissen über die übergeordneten Datenstrukturen und -verbindungen und wissen nicht , welche Vorgänge in Kürze durchgeführt werden . Daher greifen sie auf Schätzalgorithmen zurück .
Im Gegensatz dazu ist das Caching auf Anwendungs- oder Business-Ebene bei weitem nicht so einfach. Hierfür müssen Cache-Verwaltungsvorgänge oder Hinweise in die Mitte einer anderen Geschäftslogik eingefügt werden, wodurch der Geschäftscode komplexer wird. Der Kompromiss lautet jedoch: Wenn Sie mehr über die Struktur von Daten auf Makroebene und die bevorstehenden Vorgänge wissen, haben Sie eine viel bessere Möglichkeit, die optimale Caching-Effizienz ("Hellseher" oder "Bélády Min") zu approximieren.
Ob das Einfügen der Cache-Verwaltungsverantwortung in den Geschäfts- / Anwendungscode sinnvoll ist, ist ein entscheidender Punkt und wird von Anwendung zu Anwendung unterschiedlich sein. In vielen Fällen ist es zwar bekannt, dass DAL / Persistenz-Schichten nicht "vollkommen richtig" sind, der Kompromiss besteht jedoch darin, dass sie einen ziemlich guten Job machen können, dass sie dies auf architektonisch "saubere" und viel intensiver überprüfbare Weise tun , und dass Low-Level-Catching die Komplexität von Business- / App-Code vermeidet.
Eine geringere Komplexität fördert eine höhere Korrektheit und Zuverlässigkeit sowie eine schnellere Markteinführung. Dies wird oft als großer Kompromiss angesehen - weniger perfektes Caching, aber qualitativ besserer, zeitgerechterer Geschäftscode.