So verwenden Sie Caching mit Azure Cosmos DB

Aufgezeichnetes Webinar
Von Ron Hussain und Sam Awan

Azure Cosmos DB ist ein global verteiltes, cloudbasiertes Multimodell NoSQL database Service. Es ist ein sehr beliebtes NoSQL database Service für Anwendungen mit hoher Transaktionsdichte aufgrund seiner einfachen Bereitstellung und der starken SLAs von Microsoft.

Sie können CosmosDB mit weiter skalieren NCache. NCache In-Memory zu sein bedeutet, dass es superschnell ist. Und, NCache verteilt bedeutet, dass es linear skalieren kann. Ebenfalls, NCache sitzt viel näher an Ihrer Anwendung und ist daher viel schneller zugänglich. Erfahren Sie, wie Sie mithilfe von verteiltes Caching in Ihre Azure Cosmos DB-Anwendung integrieren NCache.

In diesem Webinar erfahren Sie, wie Sie Ihre Azure CosmosDB-Leistung verbessern können NCache.

Dieses Webinar umfasst:

  • Einführung in Azure Cosmos DB und seine allgemeinen Vorgänge
  • Zwischenspeichern von CRUD-Daten in Azure Cosmos DB-Anwendung mit NCache
  • Behandeln Sie das Caching von Sammlungen
  • Verwalten der Cachesynchronisierung mit Azure Cosmos DB
  • Praktische Beispiele und Demonstrationen durchgehend

Das heutige Thema wird die Beschleunigung von Microsoft Azure Cosmos DB mit Hilfe von sein NCache. NCache ist unser wichtigstes verteiltes Caching-Produkt bei Alachisoft. Sie können es innerhalb von .NET verwenden, .NET Core oder Java-Anwendungen oder andere allgemeine Anwendungen und Sie können die Leistung, Skalierbarkeit und Zuverlässigkeit Ihrer Anwendung verbessern. Heute sprechen wir über Caching-Optionen, die Sie zusammen mit Azure Cosmos DB nutzen können. Denn auch Cosmos DB wird immer beliebter. Es ist sehr wichtig NoSQL database. Daher habe ich einige praktische Beispiele zusammengestellt, um Ihnen den Einstieg in das Caching mit Cosmos DB und deren Verwendung zu erleichtern NCache als Beispielprodukt dafür. Also ich finde alles sieht gut aus. Also, fangen wir schnell an und wenn es irgendwelche Fragen gibt, während ich verschiedene Funktionen präsentiere, zögern Sie nicht, mich zu unterbrechen und so viele Fragen zu posten, wie Sie brauchen, und Sam wird diese Fragen im Auge behalten und wir werden diese Fragen beantworten auf der ganzen Linie.

Einführung in Azure Cosmos DB

Die ersten Folien sind ziemlich grundlegende Folien zur Einführung in Microsoft Azure Cosmos DB. Ich bin mir ziemlich sicher, dass jeder weiß, was Azure Cosmos DB ist? Aber nur der Vollständigkeit halber, es handelt sich um eine global verteilte Multi-Modell-Datenbank. Sie können es also überall verwenden. Es ist ein gehosteter, vollständig verwalteter gehosteter Datenbankdienst innerhalb von Microsoft Azure und eine Datenbank mit mehreren Modellen. Das bedeutet im Wesentlichen, dass Sie den Schlüsselwert verwenden können, Sie können die Tabellenfamilie verwenden, Sie können die SQL-API verwenden, es gibt einen MongoDB-Connector und dann gibt es auch eine Gremlin-API für Diagramme. Sie erhalten also viele verschiedene Möglichkeiten, wie Sie Cosmos DB in Ihrer Anwendung als Datenbank verwenden können.

Es ist also im Wesentlichen ein NoSQL database aber Microsoft behauptet, es sei eine Datenbank mit mehreren Modellen. Also etwas mehr als NoSQL database in dieser besonderen Hinsicht. Es handelt sich also gemäß der Definition um eine Datenbank mit mehreren Modellen, die sehr flexibel und einfach bereitzustellen ist, da es sich um einen vollständig verwalteten Datenbankdienst handelt. Sie müssen also nur die NuGet-Pakete in Ihrer Anwendung verwenden und auf Ihre Cosmos DB-Instance in Microsoft Azure verweisen. Wenn es sich um eine On-Prem-Anwendung handelt, können Sie immer noch eine Verbindung zu Microsoft Azure Cosmos DB herstellen, und es wird durch umfassende SLAs von Microsoft gesichert. Es ist also vollständig verwaltet, sodass Sie sich keine Gedanken über die Bereitstellung oder andere Probleme machen müssen. Es unterstützt ein sehr flexibles JSON-Format. Sie können also unstrukturierte Dokumentendaten verwenden. Sie können einfach ein Dokument im JSON-Format erstellen und es dann per Push an Cosmos DB übertragen, und das ist es, was Sie abrufen. Es ist also sehr flexibel, sehr einfach zu verwenden, es wird weniger Code benötigt, um damit anzufangen, und es ist sehr beliebt bei hochtransaktionalen Anwendungen. Sie können Ihre Web-Apps damit verwenden. Dies können Webservices, Microservices, Back-End-Serveranwendungen sein. Jede Art von Anwendung kann Microsoft Azure Cosmos DB nutzen, wenn es notwendig ist, viele Daten in Ihren Anwendungen zu verarbeiten und zu verarbeiten.

Hier ist ein Diagramm, das wieder über Tabelle, SQL, JavaScript, Gremlin, Spark spricht. Es gibt also verschiedene Konnektoren, die Sie verwenden können, und der häufigste ist der Schlüsselwert. Dann gibt es eine Spaltenfamilie, Dokumente mit verschachtelten Dokumenten und dann auch Gremlin für Diagramme. Sie können also Diagramme speichern.

msdn-Diagramm

Es ist also auch etwas, das global verteilt ist. In Microsoft Azure können Sie mehrere Rechenzentren haben. Sie können auch mehrere Partitionen haben. Also all die guten Dinge, die mit Microsoft Azure Cosmos DB einhergehen.

Häufige Anwendungsfälle von Cosmos DB

Einige der häufigsten Anwendungsfälle. Sie können es in IoT und Telematik verwenden, um viele Daten aufzunehmen, zu verarbeiten und zu speichern, und wenn Sie in dieser speziellen Branche mit hochtransaktionalen Anwendungen zu tun haben, können Sie Cosmos DB verwenden und müssen sich keine Gedanken über die Verwaltung machen diese Menge an Daten und auch die Verwaltung dieser Menge an Anfragen. Regionales Marketing für die Speicherung von Kataloginformationen, Event-Sourcing, Auftragsabwicklung, Spiele, bei denen die Datenbankebene eine entscheidende Komponente ist. Sie können also mehrere Gaming-Apps verwenden oder es können verschiedene Spieler miteinander interagieren. Turnierinformationen, Highscore-Bestenlisten und Social-Media-Integration für diese Angelegenheit.

Web- und mobile Anwendungen, das könnte ein weiterer Anwendungsfall dafür sein. Soziale Anwendungen könnten ein weiteres Beispiel für die Integration mit Diensten von Drittanbietern sein. Sie können es also in fast jeder Anwendung verwenden, die mit vielen Daten umgehen, verarbeiten und viele Daten für diese Angelegenheit speichern muss. Daher könnte Cosmos DB eine bevorzugte Wahl dafür sein. Nun, ich denke, das ist gut, detailliert in Bezug auf die Einführung. Bitte lassen Sie es mich wissen, wenn es irgendwelche Fragen gibt.

Der heutige Fokus liegt auf den Anforderungen für das Caching, richtig, und warum brauchen Sie Caching überhaupt? Und dafür gibt es zwei Probleme mit Microsoft Azure Cosmos DB, und dies basiert auf dem von uns durchgeführten Leistungstest und den von uns durchgeführten Kostenschätzungen für Anforderungseinheiten.

Probleme mit Azure Cosmos DB

Es gibt also hauptsächlich zwei Probleme mit Microsoft Azure Cosmos DB.

Leistungsengpass

Nummer 1 und der wichtigste ist der Leistungsengpass. Microsoft Azure behauptet, dass Cosmos DB Ihnen eine Antwortzeit von Millisekunden geben wird, richtig, und das stimmt auch ziemlich genau, basierend auf unseren Testergebnissen, aber was ist, wenn Sie Antworten unter einer Millisekunde benötigen? Denn mit NCache Bei unseren lokalen Tests sprechen wir nicht einmal von einem lokalen Cache, wir sprechen nicht von unterschiedlicher Partitionierung oder mehreren Servern, die die Cache-Daten hosten, selbst ein lokaler Cache, der auch über das Netzwerk hinweg sein könnte, kann Ihnen Antworten unter einer Millisekunde liefern und basiert auf unseren Vergleiche, mit denen wir Cosmos DB getestet haben NCache.

Der Leistungsunterschied ist also enorm, wenn Sie Microsoft Azure Cosmos DB mit vergleichen NCache. Von Sekunden auf Millisekunden und von Millisekunden auf Sub-Millisekunden-Antwortzeiten können Sie also erkennen, dass Cosmos DB Leistungsverbesserungen benötigt. Wenn wir es ein wenig genauer analysieren, liegt es in erster Linie an der Tatsache, dass Microsoft Azure Cosmos DB in Ihrer Anwendung ein gehosteter Dienst ist, wenn Sie es in der Produktion bereitstellen würden. Es wäre also immer über VNET in einem eigenen Abonnement. Es könnte ein Teil Ihres Abonnements sein und Sie werden Ihnen auf der Grundlage der Anforderungseinheit in Rechnung gestellt, aber es wird in Microsoft Azure und Ihrer Anwendung gehostet, wenn es bereits in einem virtuellen Netzwerk gehostet wird, wenn es über VNET geht, muss es dort die Netzwerkkosten haben hinzugefügt und das erhöht auch den Latenzanteil.

Das ist also erstens und zweitens, wenn Ihre Anwendungen lokal sind, werden Ihre Anwendungen auch noch langsamer sein. Also habe ich zunächst über den grundlegenden Vergleich zwischen Cosmos DB und NCache. NCache ist bereits schneller, weil es sich im Speicher befindet, und es gibt Ihnen Antworten unter einer Millisekunde im Vergleich zu einer Millisekunde und dann noch dazu, wenn Sie es tatsächlich bereitstellen würden und Ihre Anwendungen in der Cloud gehostet werden. Cosmos DB von Azure wird über VNET und von VNET-zu-VNET-Kommunikation laufen, es gibt eine erhebliche Latenz, die ins Spiel kommen könnte, und wenn Sie mehrere Partitionen haben und dann zwei Rechenzentren haben und Daten hin und her gehen und wenn Sie Am Ende zu einer anderen Partition oder einem anderen Rechenzentrum wechseln, wären die Dinge im Vergleich dazu noch langsamer und dann vor Ort. Dies ist kein sehr häufiger Anwendungsfall, bei dem lokale Anwendungen Microsoft Azure Cosmos DB verwenden, aber wenn dies der Fall ist, müssen Sie über das WAN gehen, um auf Cosmos DB zuzugreifen. Das ist also keine sehr schnelle Option.

Das ist also das Hauptproblem, dass Microsoft Azure Cosmos DB in Bezug auf die Leistung nicht sehr gut bereitgestellt wird. Ihre Leistung wird also speziell bei hohen Transaktionen beeinträchtigt. Wenn viele Anfragen eingehen und Sie diese Daten schnell und zeitnah bearbeiten müssen. Es kann also zu Leistungseinbußen kommen, und die Lösung ist sehr einfach, was wir auf der nächsten Folie behandeln werden, wenn Sie mit der Verwendung eines Caching-Systems wie beginnen NCache.

Teure Anfrageeinheit

Problem Nummer zwei ist die kostenintensive Anforderungseinheit, und das ist etwas, das Ihnen in Dollar weh tut. Jede Anforderungseinheit hat also Kosten. Jedes Mal, wenn Sie auf Microsoft Azure Cosmos DB zugreifen, auch für die schreibgeschützten Daten. Wenn diese Daten nicht so häufig geändert werden, handelt es sich um denselben Inhalt, aber Sie haben immer noch die Master-Quelle aus Cosmos DB, in der Sie suchen. Für diese Daten müssen Sie immer wieder zu Microsoft Azure wechseln Cosmos DB und hier zahlen Sie in Bezug auf die Anforderungseinheit, und das erhöht Ihre Kosten. Die Kosten würden also steigen, wenn Ihre Anforderungslast zunimmt. Es ist also sehr skalierbar, was die Anforderungen angeht, die es verarbeiten kann, aber es wird in diesem Szenario nicht sehr kostenfreundlich sein. Das wirkt sich also auch auf den Kostenfaktor aus. Es könnte also eine potenzielle Hürde für die Skalierung sein. Wenn Sie eine horizontale Skalierung planen. Sie haben mehrere Partitionen, Sie haben eine steigende Datenlast, aber gleichzeitig steigt der Kostenfaktor.

Daher müssen Sie möglicherweise diese beiden Probleme berücksichtigen, wenn Sie mit Microsoft Azure Cosmos DB arbeiten.

Die Lösung: NCache Verteilter Cache

Die Lösung für diese Probleme ist sehr einfach, indem Sie ein verteiltes Caching-System wie verwenden NCache. Zuerst, NCache ist im Speicher. Also alles, was Sie speichern NCache wird im Vergleich dazu im Speicher gespeichert. Es wird Ihnen also sofort einige Millisekunden Leistungsverbesserungen bringen, und dann haben wir einen Vergleich zwischen Cosmos DB durchgeführt, das auf localhost, auf demselben Computer und ausgeführt wird NCache läuft auf der gleichen Maschine, NCache war ein Faktor schneller. Es war im Vergleich viel schneller. Es war in Sub-Millisekunden im Vergleich zu Millisekunden-Antworten für denselben Datensatz.

Zweitens kann es auch in Ihrer Netzwerkanwendung gehostet werden und Sie können es zusätzlich zu Cosmos DB verwenden. Es ist kein Ersatz für Cosmos DB. In diesem speziellen Webinar werde ich verschiedene Ansätze erläutern, bei denen Sie Cosmos DB parallel verwenden können NCache und NCache wird ein helfendes Produkt sein, wo es die meisten Ihrer Daten zwischenspeichern und sicherstellen würde, dass es teure Reisen in die Cosmos DB in Bezug auf Kosten und Leistung erspart. Zweitens NCache ist ein verteilter Cache-Cluster. Es kann also entsprechend skaliert werden. Hochverfügbarkeit ist integriert und auch sehr zuverlässig, da es eine Reihe von Servern gibt und jeder Server auch ein Backup auf einem anderen Server hat. Hier ist ein Bereitstellungsdiagramm, das dies unterstützt.

Bereitstellungsarch

Sie können jede Art von Anwendung ASP.NET oder ASP haben.NET Core Web-Apps .NET oder .NET Core Webdienste und dann ähnlich jede andere Serveranwendung, sogar Java-Anwendungen. Wenn sie bisher Cosmos DB in der Cloud verwendet haben oder Ihre Anwendungen vor Ort waren oder alles in der Cloud war, können Sie eine Caching-Ebene auf die gleiche Weise einführen. In Microsoft Azure können Sie einfach verwenden NCache in Azure mit .NET oder .NET Core Installation. Es ist erhältlich in Microsoft Azure marketplace auch und dann können Sie einen Cache-Cluster bilden und eine nette Sache machen NCache wird in Ihrem eigenen VNET sitzen. Die Netzwerklatenz wird also vollständig verringert. Das ist also kein Thema mehr und obendrein NCache ist im Speicher.

Damit NCache ist im Vergleich schon sehr schnell. Die Leistung wird also sofort verbessert, und für Ihre On-Prem-Anwendungen können Sie sie behalten NCache auch on-prem und Cosmos DB kann sich immer noch in der Microsoft Azure Cloud befinden und das würde nur alles in Bezug auf die Leistung ändern. Bezogen auf Kostenträger können Sie alle Ihre Daten hinterlegen. Wie Sie sehen, kann der Datenverkehr zu 100 % weitergeleitet werden NCache und das würde wiederum teure Reisen zu Microsoft Azure Cosmos DB einsparen, und sobald Sie Reisen zu Cosmos DB sparen würden, würde Ihnen das helfen, Kosten zu sparen, da die Anforderungseinheit sinken würde. Sie hätten im Vergleich dazu weniger Platzbedarf für Anforderungseinheiten und weniger Kosten für den Zugriff auf und die Verwendung von Microsoft Azure Cosmos DB. Nur 20 % oder noch weniger Datenverkehr können an Microsoft Azure Cosmos DB gehen, und wir sprechen über diese Caching-Optionen, von denen Ihre Anwendungen profitieren würden.

Also, lassen Sie es mich bitte wissen, wenn es irgendwelche Fragen gibt? Wir haben einige grundlegende Details darüber zusammengestellt, warum Sie die Verwendung von Produkten wie in Betracht ziehen sollten NCache um Ihre Bewerbung zu verbessern. Das nächste, worüber ich sprechen werde, wird ein häufiger Anwendungsfall sein NCache und dann haben wir einige Proben, die ich gerne demonstrieren möchte. Bitte lassen Sie es mich wissen, wenn Sie an dieser Stelle Fragen haben. Vorausgesetzt, es gibt an dieser Stelle keine Fragen. Also werde ich weitermachen.

Gemeinsame Verwendung von NCache

Einige der häufigsten Anwendungsfälle. Wir sprachen zunächst über branchenweite Anwendungsfälle. Alle diese Anwendungen können also verwendet werden NCache auch. In der Tat, NCache hat eine größere Anzahl von Kunden, eine Vielzahl von Kunden, die es verwenden NCache. Es könnte also E-Commerce sein, es könnte Banken sein, es könnte Finanzen sein, es könnte Automatisierung sein, es könnte IoT oder der Telekommunikationssektor sein. Potenzial hat also jede Branche NCache weil du es nutzen kannst NCache in typischerweise allen Anwendungen, die mit Daten zu tun haben. Sie brauchen Leistung, sie brauchen Skalierbarkeit, sie brauchen hohe Verfügbarkeit und Zuverlässigkeit und sie müssen sich mit diesen Problemen auseinandersetzen. Sie sind also die besten Kandidaten für NCache. Aber was technische Anwendungsfälle betrifft, können Sie verwenden NCache für das Zwischenspeichern von Anwendungsdaten.

Zwischenspeichern von Anwendungsdaten

Der erste Anwendungsfall ist also das Caching von App-Daten. In Microsoft Azure Cosmos DB haben Sie Cosmos DB als primäre Quelle. Dort würden die meisten Ihrer Dokumente oder alle vorhanden sein, und dann können einige oder alle hineingebracht werden NCache für schnelleren Zugriff. Um also die Performer zu verbessern und den Request-Unit-Effekt auf Ihre Anwendung zu verringern, können Sie verschiedene Arten von Synchronisierungsansätzen haben, die ich auch in diesem Webinar behandeln werde. Das ist also unser häufigster Anwendungsfall in Bezug auf relationale Datenbanken sowie auch in Bezug auf Cosmos DB.

Ron, ich habe eine Frage an dich und die Frage ist, wie die gleiche Cosmos DB mit NCache, ändert sich mit NCache? Okay, ich habe gerade darüber gesprochen. Dafür haben wir ein Segment vorbereitet. Wir haben einen Mechanismus in Microsoft Azure Cosmos DB. Es verwendet Change-Feed. Es gibt ein Beobachtermuster. So können Sie Hinzufügungen und Aktualisierungen verwalten und diese Hinzufügungen und Aktualisierungen im Änderungsfeed verfolgen. Ich habe also zwei Ansätze, die in diesem Webinar aufeinander abgestimmt sind, in dem ich darüber sprechen werde, wie diese Änderungsfeed-Benachrichtigungen verwendet werden können, um diese Änderungen anzuwenden NCache auch. Sobald also eine Änderung vorgenommen wird, wird sie automatisch in die Cosmos DB-Datenbank übernommen NCache auch. Also, das ist etwas, was ich heute in einer der Demos aufgereiht habe.

Sitzungs-Caching und SignalR Backplane

Einige andere Anwendungsfälle auch. Wir haben ASP.NET und ASP.NET Core Web-Apps können ebenfalls verwendet werden NCache für Sitzungen, z SignalR, zum Zwischenspeichern von Antworten, zum Anzeigen des Status und zum Ausgabecache und dann NCache ist auch eine Messaging-Plattform. Sie können verwenden Pub/Sub-Nachrichten. SignalR wird durch Pub/Sub-Messaging gesichert. Wir haben datengesteuerte Ereignisse, wir haben Pub/Sub-Ereignisse und dann haben wir auch kontinuierliche Abfrageereignisse. So, NCache kann als Nachrichtenbus, als Nachrichtenplattform und Datenaustauschplattform verwendet werden.

Praktische Demo

In Ordnung, ich werde Ihnen schnell zeigen, wie Sie damit beginnen können NCache. Also, dass wir einfach einen Cache erstellen und dann über verschiedene Ansätze sprechen. Wie geht man beim Caching vor und wie fängt man damit an? Also, ein paar grundlegende Beispiele, dann werden wir tatsächlich darauf aufbauen und Ihnen zeigen, wie Sie die Synchronisierung verwenden und wie Sie Sammlungen und Aktualisierungen verwalten.

Also beginne ich zunächst mit meiner Demo-Umgebung. NCache kann sowohl lokal als auch in der Microsoft Azure Cloud gehostet werden. Die bevorzugte Bereitstellungsoption für NCache ist VM und wir haben ein webbasiertes Verwaltungstool, mit dem Sie sowohl Windows-Boxen als auch Linux-Boxen verwalten können. Also mit Hilfe von .NET Core Sie können installieren NCache auch unter Linux. Es liegt also ganz bei Ihnen. Ob Sie Ihren Cache auf der VM unter Windows oder auf der Linux-Seite behalten möchten. Ich verwende Windows-Boxen. Also, lass uns weitermachen und einen Cache erstellen. Also, zuerst werde ich erstellen.

erstellen

Ich werde diesen Assistenten gleich hier starten. Ich nenne meinen Cache Democache.

Democache

Ich werde alle Standardeinstellungen beibehalten und Details zu diesen Einstellungen finden Sie in unserer Dokumentation sowie in unseren anderen Webinaren, die sich stärker darauf konzentrieren NCache die Architektur. Also werde ich den partitionierten Replikat-Cache behalten. Das ist das bevorzugteste.

partitioniertes Replikat

Asynchrone Replikation zwischen der aktiven Partition und dem Backup dieser. Wenn es zwei Server gibt, hätte Server eins ein Backup auf zwei und Server zwei hätte ein Backup auf einem. Das Aufrechterhalten dieses Backups kann also basierend auf den eingehenden Anforderungen synchron oder asynchron erfolgen. Also wähle ich asynchron, weil es wiederum sehr schnell und auch bevorzugt ist. Also werde ich zwei Server angeben, die meinen Cache hosten werden.

Cache-partitioniert

NCache Ist bereits installiert. Dies sind Windows-Boxen. Ich behalte alles als Standard bis zu den TCP/IP-Einstellungen, NCache ist ein TCP/IP-basiertes Protokoll. Es braucht also eine IP-Adresse und einen Port, um miteinander zu kommunizieren, und es nimmt es von dort, und dann behalte ich auch alles auf dem Bildschirm als Standard und starte diesen Cache, wenn es fertig ist.

Fertig

Das wird also sofort konfiguriert und gestartet, und das wird einige Zeit dauern, und es würde automatisch den Cache erstellen, und ich habe meinen Azure Cosmos DB-Emulator genau hier. Ich verwende eine localhost-Bereitstellung davon. Ich habe hier zwei Dokumentenspeicher, Kunden und Mietverträge.

Unterlagen

Leases dient wiederum der Synchronisierung durch Change Feed. Ich werde darüber in Kürze oder zu einem späteren Zeitpunkt sprechen, wenn wir über Synchronisation sprechen werden. Also, Kunde, es ist ein einfacher Kundenspeicher-Dokumentenspeicher, in dem wir verschiedene Kunden haben. Wenn ich auf die Kunden klicke, sehen Sie, dass ich Kunden mit Name, ID, Adresse, Stadt und Land habe, und diese werde ich in dieser Demo manipulieren.

{
   "id": "Customer:CustomerID:TRAIH",
   "CustomerID": "TRAIH",
   "CompanyName": "Trail's Head Gourmet Provisioners",
   "ContactName": "Helvetius Nagy",
   "Address": "722 DaVinci Blvd.",
   "City": "Kirkland",
   "Country": "USA",
   "_rid": "Xpd7ANtwbZjSAAAAAAAAAA==",
   "_self":"dbs/Xpd7AA==/colls/Xpd7ANtwbZI=/docs/Xpd7ANtwbZjSAAAAAAAAAA==/",
   "_etag":"\"00000000-0000-0000-1649-a9a8daaa01d5"
   "_attachements": "attachements/"
   "_ts":1559153371
}

Also, wenn ich hierher zurückkomme, mein Cache ist vollständig gestartet. Ich kann dies überprüfen und Details anzeigen und meine Box als Client hinzufügen. Das ist ein optionaler Schritt. Wenn Sie das NuGet-Paket verwenden, können Sie diesen Schritt überspringen, aber ich werde es aus Gründen der Benutzerfreundlichkeit tun. Also würde ich einfach alles aus dem GUI-Manager hinzufügen, damit ich die Konfiguration auf meinem Client-Rechner aufgefüllt habe. Ich denke, wir sind gut. Ich werde noch etwas tun. Ich öffne das Statistikfenster und ich öffne auch die Überwachungstools, die mitinstalliert sind NCache. Diese geben mir also Leistungsindikatoren und diese Fenster sind NCache Überwachungstools finden Sie unter den Aspekten der Überwachung NCache und dann öffne ich ein PowerShell-Fenster und führe dann eine Belastungstest-Tool-Anwendung aus, die mit installiert wird NCache und gleich danach sprechen wir über die Beispielanwendung, die ich für Cosmos DB vorbereitet habe. Das ist das Tool, das eine Dummy-Last auf meinem Cache-Cluster simuliert, und sobald es eintrifft, sollte ich in der Lage sein, eine Aktivität zu sehen. Ein Client ist verbunden.

Cluster-Gesundheit

Und Sie sollten Anfragen pro Sekunde auftauchen sehen, die auch einige Aktivitäten anzeigen, und tatsächlich kann ich mich einfach hier in diese Box einloggen, Ihnen dies von einem anderen Computer zeigen, damit wir einen schnelleren Überblick darüber bekommen. In Ordnung, Sie können hier Aktivitäten sehen. Ich denke, das GUI-Tool kann nicht aktualisiert werden. Ich denke, es gibt einige Berechtigungsprobleme. Aber nichtsdestotrotz können Sie sehen, wie die Anzahl aktualisiert wird, und dann können Sie Anfragen pro Sekunde sehen, und das ist alles, was wir für diese spezielle Demo brauchen.

Statistiken

Zwischenspeichern von App-Daten mit Azure Cosmos DB

Also, ich bin gut, mit der Beispielanwendung zu gehen. Ich werde schnell über den Anwendungsfall des App-Daten-Caching sprechen und als Teil davon werde ich auch erklären, wie meine Beispielanwendung funktioniert, und dann werden wir die Beispielanwendung Schritt für Schritt debuggen und ich werde Ihnen die Befehle zeigen, die ich integriert habe, um mit dem Caching zu beginnen. Es ist ein sehr einfaches, grundlegendes Programm. Es ist zunächst eine Hallo Welt und dann geht es weiter.

Wir haben also App-Daten-Caching. Als erstes müssen Sie sich mit Referenzdaten befassen. Daten, die sich nicht so häufig ändern, und es könnten auch Transaktionsdaten sein, die sich ändern, und dafür habe ich ein separates Segment erstellt, aber für Referenzdaten werden Sie sich hauptsächlich mit Lesevorgängen befassen, richtig. Sie müssen sich also zuerst mit der Cosmos DB verbinden und dann eine Verbindung herstellen NCache. Sie müssen Get-Operationen durchführen und dann müssen Sie auch Update-Operationen durchführen. Innerhalb von get-Operationen können Sie ein einzelnes Dokument oder eine Dokumentensammlung zwischenspeichern und dann innerhalb von update Dokumente hinzufügen, aktualisieren und löschen. Das sind also die Codeschnipsel und diese werden hier hervorgehoben.

//Add NCache Nuget and Include Namespaces  	
using Alachisoft.NCache.Client;
using Alachisoft.NCache.Runtime.Caching;

//Add Cosmos DB Nuget and Include Namespaces
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
...
{	
	//NCache Connection call 	
	static ICache _NCacheClient = CacheManager.GetCache("DemoCache");

	//Cosmos DB Connection call
	static DocumentClient _CosmosDbClient = new DocumentClient(
		serviceEndpoint: new Uri("https://localhost:8081"),
		authKeyOrResourceToken:@"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
}...

Also in meinem CRUD NCache Cosmos DB-Beispielanwendung, ich habe verschiedene Fälle, verschiedene Testfälle. Also, zuerst würde ich einfach weitermachen und den Cache-Namen angeben, der DemoCache ist. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden, und dann habe ich einige Cosmos DB-Verbindungseinstellungen. Ich verwende den SQL-Client als Beispiel dafür, da dies aus Sicht der von mir ausgewählten Beispiele am relevantesten ist. Aber man kann sich jeden beliebigen Client von Cosmos DB einfallen lassen und trotzdem nutzen NCache weil das NCache API ist ziemlich einfach. Es kann die Antwort erhalten, die ein JSON-Objekt sein könnte, und Sie können es mit zwischenspeichern NCache APIs und innerhalb NCache Wir haben auch verschiedene Möglichkeiten, mit dem Cache zu interagieren. Sie können also aus diesen wählen, aber die Idee für das Caching bleibt genau dieselbe.

Gut. Wenn Sie also in meiner Cosmos DB hierher kommen, können Sie URL, Primärschlüssel und Verbindungszeichenfolgen sehen. Das sind also die Einstellungen, die Sie hier angeben müssen, und dann können Sie eine Verbindung öffnen. So erhalten Sie also einen Cache-Handle „_cache“, ICache-Schnittstelle, richtig. Wenn ich Ihnen das zeige, erhalten Sie auch einige der Verwaltungs-APIs, richtig. Lassen Sie mich nur, in Ordnung, und die CacheManager-Klasse gibt Ihnen auch eine Cache-Sammlung. Es hat ICache, CacheHealth und einige andere StartCache- und StopCache-Methoden für diese Angelegenheit. Sobald Sie damit verbunden sind, müssen Sie als Erstes einfach ein Cache-Element abrufen, richtig, einige Dokumente aus der Cosmos DB abrufen und es dann auch zwischenspeichern. Aber da benutzen wir NCache in der mitte, also unsere anwendung sollte so gestaltet sein, dass man immer zuerst im cache nachschauen sollte und sich so auch teure fahrten in die Cosmos DB ersparen würde und genau darum geht es in unserem case XNUMX richtig hier.

Was wir wirklich tun, ist, dass wir eine Kunden-ID bekommen, die wir zu bekommen planen. Es könnte eine Kunden-ID sein, ein Abruf basierend auf der Kunden-ID und zuallererst werde ich einen Aufruf „_cache.Get“ tätigen und einen Schlüssel bereitstellen. Schlüssel ist etwas, das Sie in definieren NCache. NCache speichert alles in einem Schlüssel-Wert-Paar. Der Schlüssel könnte also Kunde sein, die Kunden-ID könnte der Laufzeitparameter dafür sein, und wenn Sie dann Daten aus dem Cache finden, müssen Sie nicht zur Cosmo DB gehen. Von diesem Punkt aus können Sie zurückkehren. Andernfalls führen Sie immer die Cosmos DB-API aus. In diesem Fall erhält er beispielsweise eine Antwort mit Cosmos DB „_client.ReadDocumentAysnc“ und stellt alle Details bereit, z. B. CollectionID und den Schlüssel, und basierend darauf würde er Datensätze aus Cosmos DB abrufen und sie dann auch zwischenspeichern. Dies soll sicherstellen, dass Sie beim nächsten Mal die Daten bereits im Cache haben.

Daher führe ich das Beispiel zum ersten Mal ohne Debuggen aus. Zeigen Sie Ihnen alle Testfälle und dann gehen wir diese Testfälle einen nach dem anderen durch und ich werde demonstrieren, dass es so funktionieren wird. Bitte lassen Sie es mich wissen, wenn es irgendwelche Fragen gibt?

Also füge ich einen Kunden hinzu. Nehmen wir an, ich gebe nur Ross123 an, drücke die Eingabetaste und als nächstes überprüfen Sie einen Kunden. Ich kann wieder nur Ross123 geben und Sie können sehen, dass es einen Dummy-Kunden Ross123 mit dem Kontaktnamen erstellt hat, an den das Datum und die Uhrzeit angehängt wurden .

cmd

Ich kann einfach nach anderen Kunden suchen, die auch schon in der Cosmo DB sind. Also, das hat es und basierend darauf, während wir dies tun, sollten Sie in der Lage sein, zwei Elemente im Cache zu sehen, die Ross und ALFKI bereits im Cache hinzugefügt haben.

zählen

So kann ich das weiter machen. Ich kann diesen Kunden aktualisieren. Zum Beispiel Ross123. Es werden keine Parameter übernommen. Es aktualisiert einfach den Datums-/Uhrzeitwert. Also, wenn ich hier nochmal drücke, sieht man jetzt 14:27:13 im Vergleich zu 14:26:37. Es hat also sowohl im Cache als auch in Cosmos DB aktualisiert, und wenn ich Ihnen das hier zeige, kann ich Ihnen schnell den aktualisierten Kunden im Explorer-Bereich zeigen und er hat den aktualisierten Wert. Es handelt sich also um diese beiden Quellen nebeneinander. Ich kann diesen Kunden auch löschen. Ich kann Kunden basierend auf eigentlich anzeigen, lassen Sie mich diese Haltepunkte einfach loswerden. Okay, es wird mir alle Kunden bringen, wenn ich 5 treffe und wenn ich dann 6 treffe, wird es Kunden basierend auf einem Land bekommen.

Als Erstes wollte ich hervorheben, dass mit Cosmos DB und NCache, Zwischenspeichern eines einzelnen Dokuments. Lassen Sie uns das also schnell überprüfen.

Customer GetCustomer (Customer customer) 
{	
	string key = $"Customer:CustomerID:{customer.customerID}"; 
	//Check data in NCache first
	Customer customer = _NCacheClient.Get<Customer>(key);

	if (customer != null) 
	{
		return customer;
	}
	//If data is not in NCache then get from Cosmos DB and Cache it
	else
	{
		ResourceResponse<Document> response =
		_CosmosDbClient.ReadDocumentAsync(UriFactory.CreateDocumentUri (DatabaseId,CollectionId,key)).Result;
		customer = (Customer)(dynamic)response.Resource;
		_NCacheClient.Insert(key, customer);
		return customer;

Ich werde add an dieser Stelle nicht zeigen, weil das schon sehr einfach ist. Also, ich drücke auf Play, ich drücke diesen Haltepunkt und bevor ich das tue, nehme ich Änderungen vor. Ich werde weitermachen und den Inhalt löschen. Damit ich neu starte. Okay. Der Inhalt ist also auf beiden Servern Null. Das wird erwartet. Schlagen wir also zu. Es ist am Haltepunkt, richtig. Sie würden also schnell bemerken, dass es erwartet, dass ich einen Kunden ALFAKI hole, und darauf basierend, wenn ich dies zum ersten Mal drücke, wird es einen Kundenschlüssel erstellen. Das ist der Schlüssel, mit dem wir es zu tun haben, und ich würde versuchen, ihn aus dem Cache zu holen, und natürlich würde er null finden, weil es ein Neuanfang ist.

Bei einer Null würde es aus der Cosmos DB abgerufen und dann auch in den Cache eingefügt, und Sie können sehen, dass ein Element hinzugefügt wurde, und als Nächstes würde es einfach den Wert abrufen und auch auf dem Bildschirm anzeigen, und wenn Ich führe dies noch einmal aus, es erwartet dieses Mal denselben Kunden aus dem Cache, weil es jetzt zwischengespeichert ist und Sie jedes Mal fortfahren würden und Sie auch alle Arten von TTL und alle Arten von Eigenschaften angeben können, die Sie in der Cosmo DB haben als Nun, und Sie erhalten den Kunden auch aus dem Cache. Genau derselbe Kunde, und dieses Mal würde er nicht zur Cosmos DB gehen und Ihnen dies nur auch auf dem Bildschirm anzeigen.

Es ist also ein einfaches Hallo-Welt-Programm, das die gleichen Werte aus dem Cache erhält, weil es jetzt zwischengespeichert wird und so ist, wie Sie es tun würden, und es viel schneller ist. Sie können einen direkten Vergleichstest zwischen Cosmos DB und ausführen NCache und du kannst sehen NCache ist viel schneller und man kann sich auch Fahrten zur Cosmos DB sparen und das würde sich auch auf den Kostenfaktor auswirken. Es würde es nur reduzieren. Das ist also der erste Anwendungsfall.

Der zweite Anwendungsfall ist die Verwaltung von Sammlungen, und hier gibt es zwei Optionen. Sie haben die gesamte Sammlung als ein Element oder Sie können jedes Sammlungselement auch separat zwischenspeichern. Dazu können Sie also zunächst fünf durchgehen und wenn ich Ihnen den Code hier zeige, können Sie eine Liste einfach als einzelnes Element speichern. Also würde ich hier nur einen Haltepunkt treffen. Das erwartet nichts, ich würde Ihnen nur zeigen, wie Sie es aus dem Cache holen und dann sofort auf die Wiedergabetaste drücken.

Ron, ich habe eine Frage an dich. Gibt es eine SQL-Typ-Suchoption oder andere spezielle Funktionen? Ja, das ist eine sehr gute Frage. Dies ist eine grundlegende API, die ich zeige. NCache hat auch einen Mechanismus zur Verwendung von Tags. Sie können auch die SQL-Suche verwenden, die Sie verwenden können LINQ, wir haben auch eine Volltextsuche zur Verfügung. Also sehr vergleichbar. Wenn Sie mit SQL vertraut sind, können Sie die SQL-API von verwenden NCache. Es heißt Objektabfragesprache. Wenn Sie mit LINQ vertraut sind und das bevorzugen, können Sie Elemente basierend auf LINQ abrufen, und dann ist die Volltextsuche eine weitere Funktion. Der Einfachheit halber zeigen wir ein Schlüssel-Wert-Paar. Aber wie gesagt, das sind alle Optionen, die Sie auch als Teil davon nutzen können.

Das erste Mal erhält es also wieder einen Nullwert und wenn ich dann auf Play drücke, sollte dieser Kunde als einzelnes Element in den Cache geladen werden. Es wird nur ein Artikel geladen. Wenn ich dies noch einmal ausführe, ohne irgendetwas anzuhalten, bringt es mich dieses Mal in diese Kundensammlung aus dem Cache. Wir haben also 98 Listenelemente, aber dies ist eine Kundenliste von Kunden als Einzelartikelspeicher. Dies ist also eine Option. Wenn Sie am Zwischenspeichern von Ergebnismengen interessiert sind, können Sie die gesamte Sammlung als ein Element zwischenspeichern, und Sie wissen sicher, dass dies die Sammlung ist, die Sie ständig benötigen, und Sie brauchen keine anderen Listenmitglieder oder die Ergebnismenge Sie möchten sie aufbewahren, da ein Element nicht weh tut. Es wird jedoch hauptsächlich für kleinere Sammlungen und auch für das Zwischenspeichern von Ergebnismengen empfohlen.

Der zweite und am meisten bevorzugte Ansatz wäre, jedes Sammlungselement ebenfalls separat zwischenzuspeichern. Sie lassen also eine Abfrage ausführen, eine API für Cosmos DB ausführen, erhalten eine Reihe von Dokumenten, durchlaufen diese Dokumente und speichern sie einzeln und gruppieren sie dann mit Hilfe eines Tags logisch. Also zum Beispiel machen wir das genau hier.

void GetCustomersByCity (string country) 
{
    //Retrieve all customers from NCache first
    List<Customer> customers = new List<Customer>();
    var tagByCountry = new Tag($"Customer:Country:{country}");
    IDictionary<string, Customer> items = _NCacheClient.SearchService.GetByTags<Customer>(new[]{tagByCountry},
    TagSearchOptions.ByAnyTag);
    
    //If data is not in NCache then get from Cosmos DB and Cache it
    if (items != null && items.Count > 0)
    {
    IDocumentQuery<Customer> query = _CosmosDbClient.CreateDocumentQuery<Customer>(
    UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), new FeedOptions { MaxItemCount = -1,
    EnableCrossPartitionQuery=true }).Where(c => c.Country == country
    ).AsDocumentQuery();

Wenn ich Ihnen zum Beispiel den Code zeige, ist das hier der Testfall. Geben Sie den Namen des Landes ein, einige Überprüfungen basieren darauf, dass es die Liste erstellen würde, und es erstellt auch ein Tag nach Land mit dem Laufzeitparameter country und ruft dann „_cache.SearchService“ auf, und als Teil des Suchdienstes haben wir auch OQL. Wir haben auch kontinuierliche Abfrage, wir haben auch LINQ und wir haben einige andere Suchmechanismen, die Sie verwenden können. Aber ich benutze get by tag.

Es wird also erwartet, dass es bereits einzeln zwischengespeichert wurde und all diese einzelnen Elemente keine Liste sind, aber Sie können sie mithilfe eines Tags in eine Sammlung einfügen. Mit diesem Tag können Sie also die gesamte Sammlung zurückerhalten. Zum ersten Mal würde es den Cache einchecken, wenn es eine Rückgabe findet, wenn nicht, würde es zur Cosmo DB gehen, die Abfrage ausführen und dann die einzelnen Kundenelemente für jeden Kunden durchlaufen. Konstruieren Sie das Cache-Element und fügen Sie Tags an einzelne Elemente an, und basierend darauf würde es sie speichern NCache auch mit cache.InsertBulk und wenn ich hier gleich den Fall Nummer sechs bringe hier. Es ruft die Sammlung auf, erstellt eine Cache-Elementliste und cache.InsertBulk.

Lassen Sie uns das also noch einmal ausführen. Wenn ich Ihnen Auswahl Nummer sechs gebe, lassen Sie mich Ihnen in diesem Fall auch die Cache-Anzahl zeigen, und dieses Mal würde es einfach weitermachen und einen Ländernamen erwarten, sagen wir, Großbritannien, basierend auf diesem ersten Mal, würde es einfach die Liste aufbauen. Die Liste wäre leer, da die erste Iteration und dann die Cosmos DB ausgeführt und dann ein Cache-Element erstellt und all diese durchlaufen würden. Mal sehen, wie viele. Ich denke acht vor zehn und es wurde auch in den Cache eingefügt und Sie können sechs und plus drei sehen. Also, ungefähr sechs Elemente, ich glaube, sieben Elemente werden einzeln hinzugefügt, aber mit einer Gruppe namens Tag by Country, mit diesem Tag, das nach Land getaggt ist, was ein Laufzeitparameter Land ist, das eine Laufzeit ist, und es hat dieses Format für diese Angelegenheit und wenn ich das noch einmal ausführe, bedeutet das, dass ich diesen Kernblock noch einmal betreten habe. Ich sollte in der Lage sein, sie alle mit dem Tag zu bekommen, über das ich gerade gesprochen habe. Gut. Und dieses Mal erwarte ich all diese Einzelstücke, zwar einzeln gelagert, aber mit einem Etikett kategorisiert, mit dem Etikett verziert zu bekommen. Also, dieses Tag sollte mir all diese sieben Gegenstände als Sammlung zurückbringen, richtig. Als Teil davon gibt es eine Liste von Kunden zurück. Es ist also das IDictionary der Kunden und dann können Sie sie durchlaufen, und wenn ich auf „Play“ drücke, erhalte ich genau die gleiche Antwort auch aus dem Cache und wieder, NCache wird, ist dies eine enorme Verbesserung in Bezug auf die Leistung und den Platzbedarf, selbst für sieben Anforderungseinheiten. Denken Sie bei dieser Beispielanwendung an Millionen von Dokumenten und Millionen eingehender und ausgehender Anfragen. So würden Sie also Sammlungen verwalten und sie als einzelnes Element als Sammlung, als Ganzes oder als einzelne Sammlungselemente separat im Cache speichern.

Zwischenspeichern von Updatevorgängen mit Azure Cosmos DB

Als Nächstes haben wir Aktualisierungsvorgänge mit Azure Cosmos DB. Diese sind sehr einfach, jedes Mal, wenn Sie einige Dokumente hinzufügen müssen, können Sie cache.add in denselben Zeilen aufrufen. Ich werde Ihnen diese nur zeigen, um etwas Zeit zu sparen. Sie erstellen also ein Dokument „CreateDocumentAsync“ in Cosmo DB und rufen dann cache.Insert auf. Also, Sie fügen in der Datenbank hinzu, fügen auch den Cache hinzu und zum Aktualisieren können Sie immer im Cache aktualisieren, in der Cosmos DB und dann auch im Cache und löschen ist auch sehr einfach. Sie entfernen aus der Cosmos DB mit „DeleteDocumentAsync“ und rufen dann auch „cache.remove“ auf. Das sollte also abgeschlossen sein und wir haben diese Beispiele in einer Reihe. Also, falls es sonst irgendwelche Fragen gibt, werde ich zu unserem nächsten Segment übergehen, das Synchronisation ist, und das wird auch einige Zeit dauern. Bitte lassen Sie es mich wissen, wenn Sie Fragen haben, ansonsten werde ich die Synchronisierung behandeln NCache mit Azure Cosmos DB. Ron, wir machen gute Fragen. Ich finde, die Produktpräsentation ist Ihnen sehr gut gelungen. Wenn Fragen kommen, werde ich auf jeden Fall auf Sie werfen.

Synchronisierung NCache mit Azure Cosmos DB

OK. Synchronisation ist ein großer Aspekt. Wenn Sie Daten an zwei verschiedenen Orten haben, im Cache und in der Datenbank, und das haben wir auch empfohlen, sollten Sie den Cache in Kombination mit Cosmos DB verwenden. Jedes Mal, wenn es eine Änderung im Cache gibt, wenden Sie diese Änderung auch in der Datenbank an. Es gibt ein Update, wenden Sie dieses Update an. Löschen, wenden Sie das Löschen an. Aber was passiert, wenn sich Daten direkt in Cosmos DB ändern, und das ist das natürlichste Szenario, in dem Cosmos DB möglicherweise von einer anderen Anwendung aktualisiert wird, ein anderer Connector und Daten von einer anderen Quelle aufgenommen werden und Ihre Anwendung diese Daten nur liest und zwar Daten, die von Ihrer Anwendung aktualisiert werden, werden auch in Cosmos DB aktualisiert, aber für andere Anwendungen ist dies eine Datenänderung direkt in Cosmos DB.

Also, was ist, wenn ich etwas zwischengespeichert habe. Nehmen wir an, ich nehme eine Änderung in Cosmos DB vor und diese Änderung wird genau hier in Cosmos DB vorgenommen. Diese Änderung wird sich jedoch nicht im Cache widerspiegeln, da Daten an zwei verschiedenen Orten vorhanden sind und diese beiden Quellen nicht mehr synchron sind. Sie benötigen also eine Art Synchronisierung zwischen Azure Cosmos DB und NCache und das Konzept, das wir hier verwendet haben, basiert auf der Verarbeitung von Microsoft Azure-Änderungsfeeds. Wir haben also einen Change-Feed-Mechanismus und basierend darauf haben wir zwei verschiedene Optionen, die Sie ausprobieren können.

Eine davon ist eine Azure-Funktion mit Cosmos DB-Trigger. Es handelt sich also um eine implizite Change-Feed-Verarbeitung. it0 erledigt also viel Nacharbeit für Sie und verwaltet das Hinzufügen und Aktualisieren, um zu beginnen, und Sie können eine Problemumgehung für das Löschen finden. Microsoft behauptet, es sei vorläufiges Löschen. Sie können also einen Soft-Delete-Ansatz verwenden, das ist im Wesentlichen ein Update, aber mit der Time to Live-Anhängung, mit einem Schlüsselwort, können Sie in Ihrer Anwendung ein Schlüsselwort verwenden und werden benachrichtigt, dass dieses Element nicht mehr vorhanden ist wird in Cosmos DB sein.

Die zweite Option ist die explizite Implementierung von Change-Feed-Prozessoren. Sie implementieren diese Schnittstelle selbst, anstatt einen Cosmos DB-Trigger in der Azure-Funktion zu verwenden. Ich habe beide Beispiele aufgereiht. Konzentrieren wir uns also zunächst auf die Azure-Funktion.

Azure Function DB-Trigger

Mit Azure-Funktions-DB-Trigger ist dies also ein sehr einfaches Diagramm.

Geschäftstätigkeit

Auch hier ist Ihre Cosmos DB genau richtig, NCache ist gleich hier. Ihre Anwendung verwendet NCache und Cosmos DB oder irgendwo hier. Was ist, wenn ein Dokument hinzugefügt, aktualisiert oder gelöscht wird? Microsoft Azure würde also, Sie können einen Änderungsfeed implementieren und darauf einen Prozessor aufbauen. Dieser Änderungsfeed verwaltet also Hinzufügen- und Aktualisieren-Ereignisse. Löschen wird noch nicht von Microsoft Azure Cosmos DB unterstützt und Sie können die Azure-Funktion mit DB-Trigger implementieren. Das kann diese Änderungen in jeder Quelle wie hinzufügen und aktualisieren NCache und ich habe eine Implementierung, wo ich mache NCache Befehl zum Hinzufügen, Aktualisieren und Löschen. Vorläufiges Löschen, das wir gleich behandeln werden.

Das ist also die Gesamtimplementierung. Was nach dieser Demo passieren wird, ist, dass jedes Mal, wenn Sie ein Dokument in Cosmos DB hinzufügen, das automatisch widergespiegelt wird NCache. Wenn es ein Update in Cosmos DB gibt, das sich automatisch widerspiegeln würde NCache und ähnlich, wenn es eine Löschung gibt, haben wir auch eine Verwaltung für die Löschung. Sie hätten also diese beiden Quellen zu 100 % miteinander synchronisiert und dies würde sicherstellen, dass es keine Dateninkonsistenzprobleme gibt, und das könnte ein großes Problem für Anwendungen sein, die Daten in konsistenter Form benötigen, die auf dem neuesten Stand sein müssen Daten, und das sind geschäftskritische Daten und auch sehr sensible Daten. Das ist also die Lösung, die wir dafür präsentieren.

Lassen Sie mich Ihnen also zunächst die Azure-Funktion hier mit DB-Trigger zeigen.

[FunctionName("AzureFunction1")]
	public static void Run([CosmosDBTrigger(
	databaseName: "CosmosDbNCacheDemo",collectionName: "Customers",
	ConnectionStringSetting = "CosmosDbConnection",
	LeaseCollectionPrefix ="NCache-CosmosDbTrigger-",
	LeaseCollectionName = "leases")]IReadOnlyList<Document> documents,
	ILogger log)
{
	using (var cache = CacheManager.GetCache("myCache"))
	{	
		Customer customer = null;
		foreach (var document in documents)
		{
			customer = new Customer{Address =
			document.GetPropertyValue<string>("Address"),
			City = document.GetPropertyValue<string>("City"),
			CompanyName =document.GetPropertyValue<string>("CompanyName"),
			ContactName =document.GetPropertyValue<string>("ContactName"),
			Country = document.GetPropertyValue<string>("Country"),
			CustomerID = document.GetPropertyValue<string>("CustomerID")
		};

Es nimmt also wieder den Cache-Namen und dies ist eine Implementierung. Es hat einen Cosmos DB-Trigger. Lassen Sie mich Sie einfach hierher bringen. Sie können also sehen, dass es Leasinginformationen und Leasing gibt. Ich habe einen Dokumentenspeicher mit dem Namen leases. Sie können es beliebig benennen und das ermöglicht Ihnen, einen Zeiger zu haben, zum Beispiel ist 158 ​​der letzte Zeiger. Es hat also eine Reihe von Parametern. Kettenküchenmaschine ist also etwas anderes, aber ich habe 158 als letzten Zeiger. So verfolgt es alle Aktualisierungen im Speicher seit dem letzten Mal, als es betrieben wurde. Es gibt also eine Sammlung aller Dokumente, die seit der letzten Überwachung dieser Änderungen hinzugefügt und aktualisiert wurden. Es basiert also auf dem Change-Feed-Observer-Muster, an das Cosmo DB ständig Informationen weiterleitet, und diese Informationen werden im Arbeitsspeicher gehalten, und es gibt auch in Cosmos DB einen Verweis darauf.

Hier ist also die Beispielimplementierung dafür. Wenn ich die Azure-Funktion zurückbringe. Also braucht es diesen Cosmos DB-Trigger. Es braucht natürlich den Datenbanknamen. Sammlung, die Sie über den Änderungsfeed überwachen möchten. Verbindungszeichenfolge auch Leases-Sammlungspräfix, das ist etwas, das Sie in das Leases-Dokument einfügen und dann die Lease-Sammlung mit dem Namen Leases leasen. Und dann brauche ich auch hier meinen Cache-Namen. Das ist beispielsweise der Name, ich verwende Democache, und dann lassen Sie uns für jeden Kunden in dieser Sammlung dieses Kundenobjekt erstellen und dann cache.InsertAsync aufrufen. Das ist eine Aufgabe des asynchronen Aufrufs. Sie können das also verwenden und zum Löschen werde ich gleich darüber sprechen. Aber lassen Sie uns zuerst den Einsatzteil überprüfen.

Wenn ich also diese App ausführe, wird sie auf die Änderungen warten. Unter Verwendung dieses Änderungszufuhrmechanismus und innerhalb dieser Leases würde es auf alle Dokumente warten, die seit dem letzten Mal hinzugefügt und aktualisiert wurden, und basierend auf dieser Hinzufügung und Aktualisierung würde es eine erstellen NCache API-Aufruf ebenfalls. Also, lassen Sie mich das einfach ausführen. Das Debuggen würde einige Zeit in Anspruch nehmen. Ich werde umgebaut und danach sollte ich in der Lage sein, diese anzuwenden. Ich habe dafür keinen Logger implementiert. Daher können Sie basierend auf meiner Beispielimplementierung einige Protokollierungsfehler erhalten. Sie können aber auch einige Protokollierungsdetails daneben implementieren. Es ist ein vollständiger Code, den ich für meinen Zweck verwendet habe. Also kann ich es auch gegen Ende der Demo teilen. Das ist also meine Azure-Funktion. Einige der Parameter fehlen und deshalb erhalten Sie Nullwerte, aber insgesamt wird die Arbeit für die Synchronisierung von erledigt NCache falls Änderungen in der Cosmos DB auftreten.

Und in der Zwischenzeit bereite ich einfach mein Dokument vor, das ich ändern werde. Lassen Sie uns Ross123 verwenden, weil wir das ursprünglich erstellt hatten. Nehmen wir an, ich würde einige Werte anhängen. Mal sehen, ob es jetzt läuft. Ja, es läuft und ist im Standby-Modus. Also Host initialisiert und Anwendung gestartet. Seine Ausführungsfunktion vom letzten Mal, als ich gespielt habe, habe auch einige Änderungen vorgenommen. Also lass es fertig. Los geht's. Es kümmert sich um Ross123, das ich aktualisiert habe. Das Mietvertragsdokument wurde also aktualisiert.

Lassen Sie mich also einfach den Inhalt des Caches noch einmal löschen und dann von vorne beginnen. Wir haben also null Elemente im Cache und dieser befindet sich im laufenden Zustand. Also, ich werde es hier behalten und dieses Mal werde ich die Cosmos DB öffnen und einige Zeichen am Ende des Landes anhängen. Nehmen wir mehrmals UK an, und dann füge ich auch Ross123 hinzu, einige zufällige Zeichenfolgen zur Stadt, und wenn ich hier auf Update drücke, sollte dies auch Cosmos DB auslösen, und Sie können sehen, dass Sie Ross123 UK UK und gehen Ross123 44. Also, es nutzt diese Lease-Sammlung und dann wird es tatsächlich diese Funktion ausgeführt und was das getan hat, es hat diesen Kunden genau hier hinzugefügt und wenn ich gehe und auf meine drücke, wurde diese Anwendung weiter ausgeführt . Also, wenn ich Ross123 anschaue, muss ich hier auf Play drücken, weil es einen Debug gibt. Das ist der Logger, den ich nicht implementiert habe. Dies sollte Ross123 444 und Ross123 mit einigen zufälligen Zeichen hinzugefügt haben. So einfach ist es also, Azure-Funktionen für Cosmos DB zu implementieren.

Ron, wir haben eine Frage zur Azure-Funktion und die Frage lautet: Ist die Verwendung als Azure-Funktion ein Muss und welche Kosten sind damit verbunden? Azure-Funktion ist wieder, es ist kein Muss, Sie können auch den anderen Ansatz verwenden, den ich als nächstes demonstrieren werde. Sie können selbst einen Observer of Change Field Observer implementieren. Das ist eine Schnittstelle. Implementieren Sie alle Methoden, und verwenden Sie keinen Azure Cosmos DB-Trigger in der Azure-Funktion. Das ist also eine weitere Option. Es ist also kein Muss. Es ist nicht die einzige Option. Die Azure-Funktion wird in Microsoft Azure gehostet. Es sind also auch Kosten damit verbunden. Aber es ist minimal für diese Angelegenheit. Es ist einfach in Bezug auf seine Verwendung, aber es ist nicht die einzige Option.

Beim Löschen umfasst dies Hinzufügen und Aktualisieren. Wenn ich ein neues Dokument hinzufüge, sollte das automatisch hierher gebracht werden. Ich muss dies am Laufen halten, weil ich Hinzufügen und Aktualisieren verwende, die Lease-Sammlung auf den gleichen Zeilen aktualisiert wird, aber gelöscht ist ein Fall, in dem Microsoft empfiehlt, dass Sie ein vorläufiges Löschen verwenden, und dafür empfehlen sie, dass Sie Update als Alternative verwenden sollten und verwenden Sie ein Schlüsselwort, ein beliebiges Schlüsselwort, z. B. dies ist ein gelöschter innerhalb des Dokuments, und anstatt in Microsoft Azure Cosmos DB zu löschen, verwenden Sie dieses Attribut. Alle zufällig gelöscht, verworfen und dann eine TTL verwenden und dann aktualisieren. Und basierend darauf, wenn ich das noch einmal ausführe und Ihnen den Code übrigens auch zeige. Was dies getan wird, wenn es feststellt, dass ein Dokument mit der gelöschten Eigenschaft vorhanden ist, wird es den Cache aufrufen oder daraus entfernen und basierend auf dieser TTL wird es trotzdem aus der Datenbank entfernt, aber es wird aus dem Cache entfernt sofort.

Also, ich werde das ausführen, ich denke, es läuft bereits, ja, das ist es. Es gibt zwar einen Fehlercode, aber darum geht es beim Logger. Wenn ich hier eine Änderung vornehme und dieses Dokument aktualisiere, wird es auch im Cache angewendet. Der Funktionskunde Ross123 wurde ebenfalls aus dem Cache gelöscht. Wenn ich hierher komme, können Sie sehen, dass es nicht im Cache ist. Und jetzt ist das nächste, da wir eine TTL haben. Also sollte Ross10 nach 123 Sekunden von hier entfernt werden. So empfiehlt Microsoft Azure also, dass Sie das Löschen verwalten. Hinzufügen und aktualisieren ist derzeit die einzige Option für Change Feed Observer. Das Löschen muss also ein vorläufiges Löschen sein, und das ist die Problemumgehung, die ich auch empfehlen würde, basierend auf den Empfehlungen von Microsoft.

Feed-Prozessor ändern

Das nächste Segment ist die Synchronisierung des Caches mit Cosmos DB über den Änderungsfeedprozessor. Es gab also eine Frage, Azure-Funktion ist nicht die einzige Option. Sie können den Änderungsfeedprozessor auch explizit selbst verwenden, und das ist die IChangeFeedObserver-Schnittstelle, die Sie implementieren. Lassen Sie mich Ihnen den Code dafür zeigen.

namespace Microsoft.Azure.Documents.ChangeFeedProcessor.FeedProcessing
{
	public interface IChangeFeedObserver
	{
		Task CloseAsync(IChangeFeedObserverContext context,
		ChangeFeedObserverCloseReason reason);
		
		Task OpenAsync(IChangeFeedObserverContext context);
		
		Task ProcessChangesAsync(IChangeFeedObserverContext context,
		IReadOnlyList<Document> docs);
	}
}

Es gibt Ihnen im Vergleich viel mehr Kontrolle. Das hier ist zum Beispiel meine Fabrik. Also habe ich IChangeFeedObserverFactory implementiert. Lassen Sie mich Ihnen das von hier aus zeigen. OK, es hat also eine Reihe von Methoden. Ich habe diesen IChangeFeedObserver implementiert. Es hat eine Methode, die die Verbindungen schließt. Es hat eine Methode, die die Sammlung öffnet, und indem ich den Cache initialisiere und beim Schließen rufe ich tatsächlich cached.Dispose auf, um die Ressourcen zu entsorgen, und dann ist die Hauptmethode ProcessChangesAsync. Es hat also IChangeFeedObserver Context, eine Liste, ein Abbruchtoken und einige grundlegende Dinge. Also, was ich hier wirklich tue, ist, dass ich das innerhalb der Dokumente dieser Sammlung, Liste von Dokumenten, erhalte. Das ist derjenige, der mit mir geteilt wird. Ich habe dies also so implementiert, dass ChangeFeedObserverFactory mir alle relevanten Ressourcen liefert und ich dann basierend auf allen Leases-Informationen und Dokumentinformationen, die ich bereitgestellt habe, gelöschte, hinzugefügte und aktualisierte Dateien schnell verarbeiten kann. Lassen Sie mich Ihnen dieses Mal also das Update zeigen, Anwendungsfall hinzufügen, dann aktualisieren und dann löschen und danach werden wir die Demo abschließen.

Dies ist also eine explizite Implementierung von IChangeFeedObserver. Das ist es, was von der Microsoft Azure-Funktion mit Hilfe des Cosmos DB-Triggers verwendet wird. Der Cosmos DB-Trigger implementiert dies also automatisch, was einfacher ist, aber Sie müssen über eine Azure-Funktion verfügen. Aber was ist, wenn Ihre Anwendung sich darum kümmern muss, dann können Sie dies selbst implementieren. Der Cache wurde also gestartet. Lassen Sie mich sehen, ob es tatsächlich so ist, dass ich einen anderen Cache verwendet habe. Lassen Sie mich suchen, ja, und nebenbei gebe ich hier alle Details, die Cosmo DB-Demo, das Leasingdokument und das Kundendokument, die ich überwachen möchte, und ich stelle alle diese Parameter genau hier ein, democache, speichere und Führen Sie es aus und dieses Mal werde ich ein Dokument hinzufügen, es aktualisieren und löschen und Ihnen zeigen, dass diese entsprechend im Cache angewendet werden.

Lass mich laufen CRUD-Betrieb auch, so, dass wir haben. Ich fahre die Azure-Funktion herunter und dann bin ich es. Dies ist bereits hinzugefügt. OK, also, mein Cache hier, da er eine Referenz enthält, ist ein Dokument bereits vorhanden. Ich möchte es loswerden, damit wir noch einmal neu anfangen und dieses Mal würde ich etwas in Cosmo DB hinzufügen und Sie sollten es sofort aus dem Cache bekommen können und Sie können es von hier aus sehen, ich würde es einfach kopieren diese. Neues Dokument. Fügen wir es gleich hier ein. Anstelle von Ross123 sage ich einfach Ron1122 und gebe auch hier die gleichen Felder an. Nur einige Werte aktualisieren, weil dieses Dokument bereits gelöscht wurde, also spielt es keine Rolle. Und ich denke, wir sind gut. Okay, speichern. Also, dieses Dokument ist genau hier, Ron1122, und wenn ich Ihnen den Change Feed Observer zeige, hat er sich automatisch darum gekümmert. Alles, was ich jetzt tun muss, ist, dies aus dem Cache anzuzeigen. Zunächst einmal war es im Cache. Wenn es sich also im Cache befindet, wird es sowieso aus dem Cache geladen. Also, ich werde Ron1122 sagen und Sie können sehen, ich glaube, ich habe die ID vermasselt. Es ist Ron1122. Los geht's. Es hat also die gleichen Artikel.

Ich werde es jetzt aktualisieren, damit wir auch den aktualisierten Anwendungsfall sehen. Auch hier werde ich einige Charaktere in der Stadt aktualisieren. Sagen wir, NYK NYK und dieses Mal würde ich statt UK einfach USA USA USA sagen. Das würde also ein Update anwenden und das würde zu Leases gehen und basierend darauf sollte das automatisch angewendet werden. Sehen Sie, wie augenblicklich es damit umgeht. Wenn ich dies also noch einmal ausführe und die Kunden-ID Ron1122 gebe, können Sie den aktualisierten Wert hier sehen, der bei NYK NYK USA und USA liegt.

Für das Löschen muss ich wieder das gelöschte verwenden, was ein vorläufiges Löschen ist, und dafür muss ich nur ein zufälliges Attribut hinzufügen. Es wird übrigens ein beliebiges Attribut sein und ihm auch etwas TTL geben. Zum Beispiel gelöscht mit TTL 10, das es aktualisieren sollte, aber ich würde es wiederum entfernen, weil mein Code eine Behandlung für gelöschte Schlüsselwörter hat und die Lebensdauer sich um die Löschung aus Cosmo DB und das gelöschte Schlüsselwort kümmert, sobald ich es finde Erstens weiß ich, dass meine Anwendung so konzipiert ist, dass Cosmo DB dieses Dokument loswerden wird. Also muss ich aus dem Cache loswerden. Es ist also ein vorläufiges Löschen für Cosmos DB, und wenn Sie es hier bemerken, los geht's. Folgende Schlüssel wurden gelöscht, was bedeutet, dass diese nicht mehr im Cache vorhanden sind. Wenn ich Artikel mit der angegebenen ID eingeben müsste, existiert er nicht. Es gibt Ihnen also keine veralteten Daten, wenn Sie es verwenden NCache mit diesen beiden Ansätzen.

Also, lassen Sie es mich schnell zusammenfassen. Sam, ich würde nur noch zwei Minuten brauchen. Also sprachen wir anfangs über Daten-Caching, Get-Operationen. Sie können mit einfachen APIs beginnen. Rufen Sie zum Abrufen eines Dokuments cache.Get auf. Überprüfen Sie zuerst den Cache, finden Sie ihn nicht, holen Sie ihn aus der Cosmos DB und fügen Sie ihn auch dem Cache hinzu. Damit schließt sich der Kreislauf. Sammlungen, die gesamte Sammlung ist ein Element zwischenspeichern oder jedes Sammlungselement einzeln zwischenspeichern, und wir haben über die Vorzüge dieser beiden Ansätze gesprochen, und dann ist der wichtigste Aspekt das Hinzufügen, Aktualisierungen über dieselben APIs. Synchronisierung von NCache ist mit Cosmos DB möglich. Es ist ziemlich geradlinig. Wir haben zwei Optionen, Azure-Funktion mit DB-Trigger oder explizit implementierte IChangeFeedObserver-Schnittstelle. Es wurden also beide Ansätze diskutiert und Sie können zwischen diesen wählen.

Gegen Ende, NCache ist ein hochverfügbarer, linear skalierbarer, sehr zuverlässiger verteilter .NET-Cache. Wir haben eine Reihe von Caching-Topologien. Client-Cache, WAN-Replikationsbrücke. Sie können es also für Microsoft Azure Cosmos DB lokal, in der Cloud und auch lokal verwenden. Als Teil davon stehen verschiedene Optionen zur Verfügung. Bei Fragen bitte melden, sonst würde ich es an Sam weitergeben.

Ron, es gibt eine Frage, die wir irgendwie angesprochen haben, aber die Frage ist, würden Sie eher empfehlen, was wäre die empfehlenswertere Option? IChangeFeed oder eine Azure-Funktion? Sie haben darüber gesprochen, aber wenn Sie etwas Licht ins Dunkel bringen wollen. Klar, das ist übrigens eine Debatte. Wenn Sie Benutzerfreundlichkeit wünschen, fühlen Sie sich mit der Azure-Funktion wohler, entscheiden Sie sich dafür, und wenn Sie ein Entwickler sind, der Komponenten verwenden und die Kontrolle behalten möchte, weil Sie über die IChangeFeedObserver-Schnittstelle die volle Kontrolle über das Öffnen der Verbindungen erhalten , die Verbindung schließen und anwenden. Wenn Sie also mehr Kontrolle wünschen, verwenden Sie den IChangeFeedObserver und verwenden Sie die benutzerdefinierte Implementierung. Wenn Sie Benutzerfreundlichkeit wünschen, verwenden Sie die Azure-Funktion mit DB-Trigger.

OK, wir haben noch eine Frage, gibt es ein Webinar, um mehr darüber zu erklären? NCache Architektur und Arbeiten? Ja da ist. In unserem aufgezeichneten Webinar haben wir eine Reihe von Webinaren verfügbar und eines der Webinare ist tatsächlich benannt NCache Architektur. Das kann man sich also mal anschauen. Und all diese sind auf unserer Website verfügbar, richtig Ron? Ja, tatsächlich wird diese Aufnahme in den nächsten Tagen veröffentlicht. OK perfekt. Wir haben also nur eine Minute. Also, Jungs, vielen Dank, dass ihr euch allen angeschlossen habt. Ich hoffe, das war hilfreich. Wir versuchen, so viele Fragen wie möglich zu beantworten. Wenn Sie weitere Fragen haben, wenden Sie sich bitte an support@alachisoft.com. Wenn Sie möchten Vereinbaren Sie eine personalisierte Demo, auch das übernehmen wir gerne für Sie. Wenn Sie Fragen zum Verkauf haben, können Sie sich jederzeit an unser Verkaufsteam unter wenden sales@alachisoft.com. In diesem Sinne möchte ich mich noch einmal bei allen für die Teilnahme bedanken. Wenden Sie sich an uns, wenn Sie Fragen haben und Ihre Zeit schätzen. Vielen Dank und einen schönen Tag.

Was macht man als nächstes?

 
© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.