Read-Through, Write-Through, Write-Behind in NCache

NCache ist ein extrem schneller und skalierbarer In-Memory Distributed Cache für .NET, der Anwendungsdaten zwischenspeichert, um teure Datenbankfahrten zu reduzieren. Sie können verwenden NCache um Leistungsengpässe im Zusammenhang mit der Datenspeicherung und der Skalierbarkeit Ihrer Datenbank zu beseitigen.

Die häufigste Art, einen solchen Cache zu verwenden, besteht darin, Ihre Anwendung Daten aus Ihrer Datenbank/Datenquelle lesen zu lassen und sie dann zwischenzuspeichern. Wenn Ihre Anwendung anschließend diese Daten in Ihrer Datenbank aktualisiert, aktualisiert sie auch den Cache, um sicherzustellen, dass der Cache mit der Datenbank synchronisiert ist.

Außerdem, NCache Bietet einen weiteren sehr leistungsstarken Mechanismus zum Lesen und Schreiben von Daten namens Data Source Providers (Read-through/Write-through/Write-behind). NCache Daten aus Ihrer Datenbank lesen und schreiben.

Es gibt drei Möglichkeiten, die Sie verwenden können NCache in diesem Kontext:

  1. Durchlesen: Sie entwickeln einen Read-through-Handler, der auf allen Cache-Servern im Cluster vorhanden ist und ausgeführt wird. Wenn Ihre Anwendung dann Daten aus dem Cache abruft, NCache ruft den Read-through-Handler auf, um diese Daten aus Ihrer Datenquelle zu lesen, wenn diese Daten nicht bereits im Cache vorhanden sind.
  2. Durchschreiben (synchronisieren): Sie entwickeln einen Write-Through-Handler, der sich auch auf allen Cache-Servern im Cluster befindet und dort ausgeführt wird. Und wenn Ihre Anwendung Daten im Cache aktualisiert, NCache aktualisiert zunächst den Cache und ruft dann den Write-Through-Handler auf, um sofort auch Ihre Datenbank damit zu aktualisieren. Und Ihre Anwendung wartet, bis die Daten auch in der Datenbank aktualisiert werden.
  3. Write-Behind (asynchron): Wenn Sie nicht möchten, dass Ihre Anwendung wartet, bis der Write-through-Handler die Aktualisierung der Daten in der Datenbank abgeschlossen hat, können Sie die Option „Write-behind“ auswählen NCache aktualisiert Ihre Datenbank asynchron und Ihre Anwendung muss nicht auf die Datenbankaktualisierung warten. Dies beschleunigt Ihre Anwendung, da Datenbankaktualisierungen normalerweise viel langsamer sind als Cache-Aktualisierungen.
Abbildung 1: Serverseitiger Code (.NET Edition)
Abbildung 1: Serverseitiger Code (.NET Edition)
Abbildung 1: Serverseitiger Code (Java Edition)
Abbildung 2: Serverseitiger Code (Java Edition)

Vorteile von Read-Through/Write-Through/Write-Behind

Hier sind einige Vorteile der Verwendung von Read-through, Write-through und Write-behind in NCache.

  1. Bessere Schreibleistung mit Write-behind: Das Aktualisieren Ihrer Datenbank ist normalerweise viel langsamer als das Aktualisieren des Caches. Wenn Sie Write-behind verwenden, aktualisiert Ihre Anwendung nur den Cache und läuft währenddessen weiter NCache Aktualisiert Ihre Datenbank asynchron. Dies verbessert die Leistung Ihrer Anwendung erheblich.
  2. Mehr Datenbankskalierbarkeit mit Write-behind-Drosselung: Wenn Ihre Anwendung die Datenbank sehr häufig aktualisiert, ist es wahrscheinlich, dass sie abstürzt. Wenn Sie jedoch die Drosselung mit Write-behind aktivieren, dann NCache Hält Ihre Daten im Cache durch Replikation auf dem neuesten Stand und aktualisiert Ihre Datenbank langsam. Dadurch wird Ihre Datenbank erheblich entlastet.
  3. Cache nach Ablauf automatisch aktualisieren: Wenn Sie einen Read-through-Handler entwickelt haben, können Sie die automatische Aktualisierung bei Ablauf mit aktivieren NCache. Wenn ein zwischengespeichertes Element abläuft, anstatt es aus dem Cache zu entfernen, NCache ruft den Read-through-Handler auf, um eine neue Kopie aus Ihrer Datenquelle neu zu laden.
  4. Cache bei Datenbankänderungen automatisch aktualisieren: Wenn Sie einen Read-through-Handler entwickelt haben, können Sie die automatische Aktualisierung für SQL-Abhängigkeit/Oracle-Abhängigkeit mit aktivieren NCache. Auf diese Weise werden immer dann, wenn sich die entsprechenden Daten in der Datenbank ändern, anstatt das zwischengespeicherte Element aus dem Cache zu entfernen, NCache ruft den Read-through-Handler auf, um eine neue Kopie aus Ihrer Datenbank neu zu laden.

Feature-Highlights

Hier sind einige Highlights von Read-through, Write-through und Write-behind in NCache.

  1. Serverseitiger Code (.NET oder Java): Sie können Ihre Read-Through-/Write-Through-Handler entweder mit .NET oder Java entwickeln. Für jeden Handler gibt es eine Schnittstelle, über die Sie Ihren Code entwickeln und auf allen Cache-Servern im Cluster bereitstellen. NCache kann sie bei Bedarf zur Laufzeit aufrufen. Alle in .NET entwickelten Handler werden nativ von aufgerufen NCache da es auch in .NET entwickelt wurde. Allerdings werden in Java entwickelte Handler von aufgerufen NCache über das Java Native Interface (JNI).
  2. Mehrere Read-Through-/Write-Through-Handler: Sie können mehrere Read-through- und Write-through-Handler entwickeln und diese bei registrieren NCache. In diesem Fall werden sie alle namentlich genannt und Ihre Bewerbung kann nach jedem von ihnen fragen, indem Sie ihren Namen angeben.
  3. Standard-Read-Through-/Write-Through-Handler: Wenn Sie mehrere Handler als benannte Handler registriert haben, dann NCache ermöglicht Ihnen, eine davon als Standardoptionen auszuwählen. Dieser Standardhandler wird verwendet, wenn Ihre Anwendung keinen Handlernamen angibt.
  4. Highlights zum Durchlesen
    1. Erzwungenes Durchlesen: NCache bietet eine Option, mit der Sie es anweisen können, Read-through zu verwenden, auch wenn das Element im Cache vorhanden ist (normalerweise wird Read-through nur aufgerufen, wenn ein Element nicht im Cache gefunden wird). Dadurch können Sie dieses Element aus Ihrer Datenbank aktualisieren, wenn Sie der Meinung sind, dass sich die Daten dort geändert haben könnten.
    2. Massendurchlesung erhalten: NCache stellt eine Bulk Get-API bereit, die es Ihrer Anwendung ermöglicht, eine Liste von Schlüsseln bereitzustellen, anhand derer Sie Daten aus dem Cache abrufen können.
    3. Durchlesen von Datenstrukturen (Zähler, Wörterbuch, Liste, Warteschlange, Satz): NCache Bietet Ihrer Anwendung die Möglichkeit, jede Datenstruktur abzurufen und NCache ruft einen Read-through-Handler auf, um diese Daten aus Ihrer Datenbank abzurufen.
  5. Durchschreib-Highlights
    1. Durchschreibendes Element entfernen: NCache stellt Ihrer Anwendung außerdem die Remove-API zur Verfügung, mit der Sie mithilfe eines Schlüssels ein Element aus dem Cache und dann aus der Datenquelle entfernen können.
    2. Durchschreiben von Massenentfernungselementen: NCache stellt außerdem eine Massenentfernungs-API bereit, mit der Ihre Anwendung eine Liste von Schlüsseln bereitstellen kann, die in großen Mengen aus dem Cache und der Datenquelle entfernt werden sollen.
    3. Bulk-Add/Update-Write-Through: NCache stellt eine Bulk-Add/Update-API bereit, mit der Ihre Anwendung eine Liste von Schlüsseln und deren Werten bereitstellen kann, um den Cache in großen Mengen hinzuzufügen/zu aktualisieren. Durchschreiben funktioniert auch in dieser Situation und fügt/aktualisiert Ihre Datenbank/Datenquelle mit diesen Elementen in großen Mengen.
    4. Durchschreiben von Datenstrukturen (Zähler, Wörterbuch, Liste, Warteschlange und Satz): NCache bietet Ihrer Anwendung die Möglichkeit, jede Datenstruktur zu aktualisieren und NCache ruft einen Write-through-Handler auf, um Ihre Datenbank mit den Änderungen zu aktualisieren.
    5. Asynchrones Hinzufügen/Aktualisieren/Entfernen Write-Through: NCache Die API bietet asynchrones Hinzufügen/Einfügen/Entfernen. Write-through unterstützt diese API und wird immer dann aufgerufen, wenn Ihre Anwendung diesen API-Aufruf durchführt. Hier. Beim Durchschreiben wird davon ausgegangen, dass Ihre Anwendung auf den Abschluss des Vorgangs wartet und die Tatsache, dass der Vorgang asynchron ist, nur auf der Client-API-Ebene erkannt wird.
  6. Write-behind-Highlights
    1. Warteschlange für asynchrone Vorgänge repliziert (Hochverfügbarkeit): Write-Behind akzeptiert die Anfrage des Clients, den Cache zu aktualisieren, und aktualisiert den Cache sofort, stellt die Datenbankaktualisierung jedoch für eine spätere asynchrone Ausführung in die Warteschlange. Diese Warteschlange wird je nach Caching-Topologie immer auf mehr als einen Cache-Server repliziert, um sicherzustellen, dass diese Vorgänge niemals verloren gehen, wenn ein Cache-Server jemals plötzlich ausfällt.
    2. Drosselung: Sie können eine Drosselungsstufe für asynchrone Write-behind-Vorgänge angeben. Dadurch können Sie sie verteilen. Die Standarddrosselungsstufe beträgt 500 Vorgänge/Sek.
    3. Write-behind-Modi (Nicht-Batch oder Batch): Der Nicht-Batch-Modus bedeutet, dass jeder Vorgang in der Write-Behind-Warteschlange separat ausgeführt wird, während Sie im Batch-Modus mehrere Vorgänge zusammenfassen und gemeinsam ausführen.
    4. Batch-Betriebsverzögerung: Sie können eine Verzögerung zwischen zwei Batch-Modus-Vorgängen angeben. Dadurch können Sie Ihre Datenbankaktualisierungen bei Bedarf verlangsamen.
    5. Warteschlange für fehlgeschlagene Operationen: Da Write-behind alle Vorgänge asynchron ausführt, wenn ein Vorgang fehlschlägt, NCache kann es in die Warteschlange für fehlgeschlagene Vorgänge stellen, sodass es erneut ausgeführt werden kann, ohne neue Vorgänge zu beeinträchtigen, die nicht fehlgeschlagen sind. Sie können eine maximale Größe und Entfernung angeben.
  7. Überwachen Sie Write-Through/Write-Behind durch Zähler: NCache bietet einen umfangreichen Satz von Zählern, mit denen Sie überwachen können, was im Write-through/Write-behind geschieht. Diese Zähler sind im erhältlich NCache Monitor, Windows PerfMon Tool, SNMP-Zähler, Prometheus und Grafana.

Read-Through/Write-Through-Code-Schnittstelle

Die Entwicklung von Code für Read-through- und Write-through-Handler ist ein unkomplizierter Prozess. Nachfolgend finden Sie Beispiele für Schnittstellen für beide.

public interface IReadThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	ProviderCacheItem LoadFromSource(string key);
	IDictionary<string, ProviderCacheItem> LoadFromSource(ICollection<string> keys);
	ProviderDataTypeItem<IEnumerable> LoadDataTypeFromSource(string key, DistributedDataType dataType);
	void Dispose();
}
public interface ReadThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	ProviderCacheItem loadFromSource(java.lang.String key) throws java.lang.Exception;
	java.util.Map<java.lang.String,ProviderCacheItem> loadFromSource(java.util.Collection<java.lang.String> keys) throws java.lang.Exception;
	ProviderDataStructureItem loadDataStructureFromSource(java.lang.String key, DistributedDataStructureType distributedDataStructureType) throws java.lang.Exception;
}
public interface IWriteThruProvider
{
	void Init(IDictionary parameters, string cacheId);
	OperationResult WriteToDataSource(WriteOperation operation);
	ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations);
	ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> dataTypeWriteOperations);
	void Dispose();
}
public interface WriteThruProvider extends java.lang.AutoCloseable
{
	void init(java.util.Map<java.lang.String,java.lang.String> parameters, java.lang.String cacheId) throws java.lang.Exception;
	OperationResult writeToDataSource(WriteOperation operation) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeToDataSource(java.util.Collection<WriteOperation> operations) throws java.lang.Exception;
	java.util.Collection<OperationResult> writeDataStructureToDataSource(java.util.Collection<DataStructureWriteOperation< dataStructureWriteOperations) throws java.lang.Exception;
}
© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.