Comment utiliser la mise en cache avec Azure Cosmos DB

Webinaire enregistré
Par Ron Hussain et Sam Awan

Azure Cosmos DB est une solution cloud multimodèle distribuée à l'échelle mondiale. NoSQL database un service. c'est très populaire NoSQL database service pour les applications à transactions élevées en raison de sa simplicité de déploiement et des solides SLA de Microsoft.

Vous pouvez faire évoluer CosmosDB avec NCache. NCache être en mémoire signifie qu'il est super rapide. Et, NCache être distribué signifie qu'il peut évoluer de manière linéaire. Aussi, NCache se trouve beaucoup plus près de votre application et est donc beaucoup plus rapide d'accès. Découvrez comment intégrer la mise en cache distribuée dans votre application Azure Cosmos DB en utilisant NCache.

Dans ce webinaire, découvrez comment améliorer vos performances Azure CosmosDB avec NCache.

Ce webinaire couvre:

  • Présentation d'Azure Cosmos DB et de ses opérations courantes
  • Mise en cache des données CRUD dans l'application Azure Cosmos DB à l'aide NCache
  • Gérer la mise en cache des collections
  • Gestion de la synchronisation du cache avec Azure Cosmos DB
  • Exemples pratiques et démonstrations tout au long

Le sujet d'aujourd'hui va accélérer Microsoft Azure Cosmos DB avec l'aide de NCache. NCache est notre principal produit de mise en cache distribuée à Alachisoft. Vous pouvez l'utiliser dans .NET, .NET Core ou Java ou toute autre application générale et vous pouvez améliorer les performances, l'évolutivité et la fiabilité de votre application. Aujourd'hui, nous allons parler des options de mise en cache que vous pouvez utiliser avec Azure Cosmos DB. Parce que Cosmos DB devient également très populaire. C'est très important NoSQL database. Donc, j'ai aligné quelques exemples pratiques pour vous aider à démarrer avec la mise en cache avec Cosmos DB et à utiliser NCache comme exemple de produit pour cela. Donc, je crois que tout semble bon. Alors, commençons rapidement et s'il y a des questions pendant que je présente différentes fonctionnalités, n'hésitez pas à m'arrêter et à poster autant de questions que nécessaire et Sam gardera un œil sur ces questions et nous y répondrons sur toute la ligne.

Présentation d'Azure Cosmos DB

Les premières diapositives sont des diapositives assez basiques sur l'introduction à Microsoft Azure Cosmos DB. Je suis presque sûr que tout le monde sait ce qu'est Azure Cosmos DB ? Mais juste pour être complet, il s'agit d'une base de données multimodèle distribuée dans le monde entier. Ainsi, vous pouvez l'utiliser n'importe où. Il s'agit d'un service de base de données hébergé entièrement géré au sein de Microsoft Azure et d'une base de données multimodèle. Cela signifie essentiellement que vous pouvez utiliser la valeur de clé, vous pouvez utiliser la famille de tables, vous pouvez utiliser l'API SQL, il existe un connecteur MongoDB, puis une API Gremlin également pour les graphiques. Ainsi, cela vous offre de nombreuses façons différentes d'utiliser Cosmos DB dans votre application en tant que base de données.

Donc, c'est essentiellement un NoSQL database mais Microsoft prétend qu'il s'agit d'une base de données multi-modèle. C'est donc un peu plus que NoSQL database à cet égard particulier. C'est donc une base de données multi-modèle selon la définition et elle est très flexible, facile à déployer car c'est un service de base de données entièrement géré. Il vous suffit donc d'utiliser les packages NuGet dans votre application et de pointer vers votre instance Cosmos DB dans Microsoft Azure. S'il s'agit d'une application sur site, vous pouvez toujours vous connecter à Microsoft Azure Cosmos DB et elle est soutenue par des SLA complets de Microsoft. Il est donc entièrement géré, vous n'avez donc pas à vous soucier d'un déploiement ou de tout autre problème d'ailleurs. Il prend en charge un format JSON très flexible. Ainsi, vous pouvez utiliser des données de documents non structurées. Vous pouvez simplement créer un document au format JSON, puis le transmettre à Cosmos DB, puis c'est ce que vous récupérez. Donc, c'est très flexible, très facile à utiliser, moins de code est nécessaire pour commencer et c'est très populaire dans les applications hautement transactionnelles. Vous pouvez faire en sorte que vos applications Web l'utilisent. Il peut s'agir de services Web, de microservices, d'applications de serveur back-end. N'importe quel type d'application peut utiliser Microsoft Azure Cosmos DB, s'il est nécessaire d'ingérer un processus et de traiter un grand nombre de données dans vos applications.

Voici un schéma qui parle encore de table, SQL, JavaScript, Gremlin, Spark. Ainsi, différents connecteurs que vous pouvez utiliser et le plus courant est la valeur clé. Ensuite, il y a une famille de colonnes, des documents avec des documents imbriqués, puis Gremlin pour les graphiques également. Ainsi, vous pouvez stocker des graphiques.

diagramme msdn

Donc, c'est quelque chose qui est également distribué à l'échelle mondiale. Dans Microsfot Azure, vous pouvez avoir plusieurs centres de données. Vous pouvez également avoir plusieurs partitions. Donc, toutes les bonnes choses qui accompagnent Microsoft Azure Cosmos DB.

Cas d'utilisation courants de Cosmos DB

Certains des cas d'utilisation courants. Vous pouvez l'utiliser dans l'IoT et la télématique pour ingérer, traiter et stocker beaucoup de données et généralement, si vous avez affaire à des applications hautement transactionnelles dans ce secteur particulier, vous pouvez utiliser Cosmos DB et vous n'avez pas à vous soucier de la gestion cette quantité de données et la gestion de cette quantité de demandes également. Marketing régional pour le stockage des informations de catalogue, l'approvisionnement en événements, le traitement des commandes, les jeux où le niveau de la base de données est un élément crucial. Ainsi, vous pouvez utiliser plusieurs applications de jeu ou différents joueurs peuvent interagir les uns avec les autres. Les informations sur le tournoi, les classements des meilleurs scores et l'intégration des médias sociaux d'ailleurs.

Les applications Web et mobiles, cela pourrait être un autre cas d'utilisation. Les applications sociales pourraient être un autre exemple d'intégration avec des services tiers. Ainsi, vous pouvez l'utiliser dans presque toutes les applications qui doivent traiter beaucoup de données, ingérer des processus et stocker beaucoup de données d'ailleurs. Ainsi, Cosmos DB pourrait être un choix privilégié pour cela. Maintenant, je pense que c'est bien, détail en termes d'introduction. S'il vous plaît, faites-moi savoir s'il y a des questions.

Aujourd'hui, l'accent est mis sur les exigences de la mise en cache, n'est-ce pas et pourquoi avez-vous besoin de la mise en cache d'ailleurs ? Et pour cela, il y a deux problèmes avec Microsoft Azure Cosmos DB et cela est basé sur le test de performance que nous avons fait et sur la base des estimations de coût unitaire de demande que nous avons faites.

Problèmes avec Azure Cosmos DB

Il existe donc principalement deux problèmes avec Microsoft Azure Cosmos DB.

Goulot d'étranglement des performances

Le numéro 1 et le plus crucial est le goulot d'étranglement des performances. Microsoft Azure affirme que Cosmos DB va vous donner un temps de réponse d'une milliseconde, n'est-ce pas, et c'est à peu près vrai d'après nos résultats de test également, mais que se passe-t-il si vous avez besoin de réponses inférieures à la milliseconde ? Parce qu'avec NCache dans nos tests locaux, même un cache local, nous ne parlons pas de partitionnement différent ou d'avoir plusieurs serveurs hébergeant les données du cache, même un cache local, il pourrait également être sur le réseau, est capable de vous obtenir des réponses inférieures à la milliseconde et basé sur notre comparaisons avec lesquelles nous avons testé Cosmos DB NCache.

Ainsi, la différence de performances est énorme lorsque vous comparez Microsoft Azure Cosmos DB avec NCache. Ainsi, des secondes aux millisecondes et des millisecondes aux temps de réponse inférieurs à la milliseconde, vous pouvez voir que Cosmos DB a besoin d'améliorations des performances. Principalement, une fois que nous l'analysons un peu plus, c'est principalement parce que dans votre application, lorsque vous allez de l'avant et que vous la déployez en production, votre Microsoft Azure Cosmos DB est un service hébergé. Ainsi, ce serait toujours sur VNET dans son propre abonnement. Cela pourrait autoriser une partie de votre abonnement et ils vous facturent en fonction de l'unité de demande, mais il est hébergé dans Microsoft Azure et votre application, s'il est déjà hébergé dans un réseau virtuel, s'il passe par VNET, c'est là qu'il doit avoir le coût du réseau ajouté à cela et cela augmente également la partie latence.

Donc, c'est un et deuxièmement, si vos applications sont sur site, vos applications seront également plus lentes. Donc, au départ, j'ai parlé de la comparaison de base entre Cosmos DB et NCache. NCache est déjà plus rapide car il est en mémoire et il vous donne des réponses inférieures à la milliseconde par rapport à la milliseconde, puis en plus, lorsque vous le déploierez réellement et que vos applications seront hébergées dans le cloud. Cosmos DB d'Azure va être sur VNET et de la communication VNET à VNET, il y a une latence importante qui pourrait entrer en jeu et si vous avez plusieurs partitionnements et que vous avez ensuite deux centres de données et que les données vont et viennent et si vous finissent par aller sur une autre partition ou un autre centre de données, les choses seraient encore plus lentes en comparaison, puis sur site. Ce n'est pas un cas d'utilisation très courant, où les applications sur site utilisent Microsoft Azure Cosmos DB, mais si tel est le cas, vous devez passer par le WAN pour accéder à Cosmos DB. Donc, ce n'est pas une option très rapide.

Donc, c'est le problème numéro un que Microsoft Azure Cosmos DB n'est pas très bien déployé en termes de performances. Ainsi, vos performances vont être dégradées spécifiquement en cas de transaction élevée. Lorsque vous recevez de nombreuses demandes et que vous devez traiter ces données rapidement et en temps opportun. Donc, cela peut vous donner une certaine dégradation des performances et la solution est très simple, que nous couvrirons dans la diapositive suivante que vous commencez à utiliser un système de mise en cache comme NCache.

Unité de demande coûteuse

Le problème numéro deux est l'unité de demande coûteuse et c'est quelque chose qui vous fait mal en dollars. Ainsi, chaque unité de requête a un coût. Chaque fois que vous accédez à Microsoft Azure Cosmos DB, même pour les données en lecture seule. Si ces données ne sont pas modifiées aussi fréquemment, il s'agit du même contenu, mais vous avez toujours la source principale provenant de Cosmos DB qui correspond aux données que vous recherchez. Pour ces données, vous devez continuer à aller et venir vers Microsoft Azure Cosmos DB et c'est là que vous payez en termes d'unité de demande et cela augmente votre coût. Ainsi, les coûts augmenteraient si la charge de votre demande augmentait. Il est donc très évolutif, en ce qui concerne la charge de demandes qu'il peut gérer, mais il ne sera pas très économique dans ce scénario. Donc, cela va également avoir un impact sur le facteur coût. Cela pourrait donc être un obstacle potentiel à la mise à l'échelle. Lorsque vous envisagez d'évoluer. Vous avez plusieurs partitions, votre charge de données augmente, mais le facteur coût augmente parallèlement.

Ainsi, vous devrez peut-être tenir compte de ces deux problèmes lorsque vous traitez avec Microsoft Azure Cosmos DB.

La solution: NCache Cache distribué

La solution à ces problèmes est très simple : vous utilisez un système de mise en cache distribué comme NCache. D'abord, NCache est en mémoire. Ainsi, tout ce que vous stockez dans NCache va être stocké en mémoire en comparaison. Donc, cela va vous donner immédiatement quelques améliorations de performances en millisecondes, puis nous avons fait une comparaison entre Cosmos DB exécuté sur localhost, sur la même machine et NCache fonctionnant sur la même machine, NCache était un facteur plus rapide. C'était beaucoup plus rapide en comparaison. C'était en moins de millisecondes par rapport aux réponses en millisecondes pour le même ensemble de données.

Deuxièmement, il peut également être hébergé dans votre application de réseau et vous pouvez l'utiliser en plus de Cosmos DB. Ce n'est pas un remplacement de Cosmos DB. Dans ce webinaire particulier, j'expliquerai différentes approches où vous pouvez utiliser Cosmos DB parallèlement NCache ainsi que NCache va être un produit d'aide, où il mettrait en cache la plupart de vos données et garantirait qu'il évite des déplacements coûteux vers Cosmos DB en termes de coût et de performances. Deuxièmement NCache est un cluster de cache distribué. Ainsi, il peut évoluer en conséquence. La haute disponibilité y est intégrée et elle est également très fiable car il existe un certain nombre de serveurs et chaque serveur dispose également d'une sauvegarde sur un autre serveur. Voici un diagramme de déploiement qui aide à le supporter.

arche de déploiement

Vous pouvez avoir n'importe quel type d'application ASP.NET ou ASP.NET Core applications Web .NET ou .NET Core services Web et, de la même manière, toute autre application serveur, même les applications Java. Auparavant, s'ils utilisaient Cosmos DB dans le cloud ou si vos applications étaient sur site ou tout était dans le cloud, vous pouvez introduire un niveau de mise en cache sur les mêmes lignes. Dans Microsoft Azure, vous pouvez simplement utiliser NCache dans Azure en utilisant .NET ou .NET Core installation. Il est disponible en Microsoft Azure marketplace ainsi, puis vous pouvez former un cluster de cache et une bonne chose à propos de NCache est-ce qui va s'asseoir dans votre propre VNET. Ainsi, la latence du réseau sera complètement atténuée. Donc, ce n'est plus un problème et en plus, NCache est en mémoire.

Alors, NCache est déjà très rapide en comparaison. Ainsi, les performances vont être améliorées immédiatement et pour vos applications sur site, vous pouvez conserver NCache sur site également et Cosmos DB peut toujours résider dans le cloud Microsoft Azure, ce qui changerait tout en termes de performances. En termes d'unités de coût, vous pouvez stocker toutes vos données. Comme vous pouvez le voir, 100 % du trafic peut être acheminé vers NCache et cela permettrait à son tour d'économiser des déplacements coûteux vers Microsoft Azure Cosmos DB et dès que vous économiseriez des déplacements vers Cosmos DB, cela vous aiderait en termes de réduction des coûts, car l'unité de demande diminuerait. Vous auriez moins d'encombrement d'unité de demande et vous auriez moins de coûts associés à l'accès et à l'utilisation de Microsoft Azure Cosmos DB en comparaison. Seulement 20 % ou même moins de trafic peuvent aller vers Microsoft Azure Cosmos DB et nous parlerons de ces options de mise en cache qui pourraient profiter à vos applications.

Alors, s'il vous plaît laissez-moi savoir, s'il y a des questions? Nous avons construit quelques détails de base sur les raisons pour lesquelles vous devriez envisager d'utiliser des produits comme NCache pour améliorer votre candidature. La prochaine chose dont je vais parler va être un cas d'utilisation courant de NCache et puis nous aurons quelques échantillons, que je voudrais démontrer. Alors, s'il vous plaît laissez-moi savoir s'il y a des questions à ce stade. En supposant qu'il n'y ait pas de questions à ce stade. Alors, je vais continuer.

Utilisations courantes de NCache

Certains des cas d'utilisation courants. Nous avons d'abord parlé de cas d'utilisation à l'échelle de l'industrie. Ainsi, toutes ces applications peuvent utiliser NCache aussi bien. À vrai dire, NCache a un plus grand ensemble de clients, une variété de clients, qui utilisent NCache. Donc, ça pourrait être le commerce électronique, ça pourrait être bancaire, ça pourrait être financier, ça pourrait être l'automatisation, ça pourrait être l'IoT, le secteur des télécommunications. Ainsi, chaque secteur a un potentiel de NCache parce que vous pouvez utiliser NCache dans généralement toutes les applications qui traitent des données. Ils ont besoin de performances, ils ont besoin d'évolutivité, ils ont besoin d'une disponibilité et d'une fiabilité élevées et ils doivent faire face à ces problèmes. Ce sont donc des candidats de choix pour NCache. Mais en ce qui concerne les cas d'utilisation technique, vous pouvez utiliser NCache pour la mise en cache des données d'application.

Mise en cache des données d'application

Ainsi, le premier cas d'utilisation est la mise en cache des données d'application. Dans Microsoft Azure Cosmos DB, vous avez Cosmos DB comme source principale. C'est là que la plupart de vos documents ou la totalité d'entre eux existeraient, puis certains ou tous pourraient être intégrés NCache pour un accès plus rapide. Ainsi, pour améliorer les performances et réduire l'effet d'unité de requête sur votre application, vous pouvez avoir différents types d'approches de synchronisation, que je couvrirai également dans ce webinaire. C'est donc notre cas d'utilisation le plus courant en ce qui concerne les bases de données relationnelles ainsi qu'en ce qui concerne Cosmos DB.

Ron, j'ai une question pour vous et la question est de savoir comment le même Cosmos DB avec NCache, change avec NCache? Bon, je viens d'en parler. Donc, nous avons un segment aligné pour cela. Nous avons un mécanisme au sein de Microsoft Azure Cosmos DB. Il utilise le flux de changement. Il y a un modèle d'observateur. Ainsi, il vous permet de gérer les ajouts et les mises à jour et il garde une trace de ces ajouts et mises à jour dans le flux de modifications. Donc, j'ai deux approches qui sont alignées sur ce webinaire, où je vais parler de la façon d'utiliser ces notifications de changement de flux pour aider à appliquer ces changements dans NCache aussi bien. Ainsi, dès qu'il y aurait un changement, la base de données Cosmos DB serait automatiquement appliquée dans NCache aussi bien. Donc, c'est quelque chose que j'ai aligné dans l'une des démos d'aujourd'hui.

Mise en cache des sessions et SignalR Backplane

Quelques autres cas d'utilisation également. Nous avons ASP.NET et ASP.NET Core les applications Web peuvent également utiliser NCache pour les séances, pour Signal R, pour la mise en cache des réponses, afficher l'état et le cache de sortie, puis NCache est également une plate-forme de messagerie. Vous pouvez utiliser Messages Pub/Sub. SignalR est sauvegardé par la messagerie Pub/Sub. Nous avons des événements basés sur les données, nous avons des événements Pub/Sub, puis nous avons également des événements de requête continus. Alors, NCache peut être utilisé comme bus de messages, comme plate-forme de messages et plate-forme de partage de données.

Démonstration pratique

Très bien, je vais vous montrer rapidement comment démarrer avec NCache. Donc, que nous créons juste un cache et ensuite nous parlerons de différentes approches. Comment s'y prendre pour la mise en cache et comment démarrer avec cela? Donc, quelques exemples de base, puis nous allons en fait, nous allons construire dessus et vous montrer comment utiliser la synchronisation et comment gérer les collections et les mises à jour.

Donc, tout d'abord, je vais commencer avec mon environnement de démonstration. NCache peut être hébergé sur site ainsi que dans Microsoft Azure Cloud. L'option de déploiement préférée pour NCache est VM et nous avons un outil de gestion basé sur le Web, qui vous permet de gérer les boîtiers Windows ainsi que les boîtiers Linux. Ainsi, avec l'aide de .NET Core tu peux installer NCache sous Linux aussi. Donc, c'est entièrement à vous. Que vous souhaitiez conserver votre cache sur VM sous Windows ou côté Linux. J'utilise des boîtes Windows. Alors, allons-y et créons un cache. Donc, je vais d'abord créer.

engendrent

Je vais démarrer cet assistant ici. Je nommerai ma cache Democache.

démocache

Je garderai tout par défaut et des détails sur ces paramètres sont disponibles dans notre documentation, ainsi que dans nos autres webinaires, qui sont plus axés sur NCache architecture. Donc, je garderai le cache de réplique partitionné. C'est le plus préféré.

réplique partitionnée

Réplication asynchrone entre la partition active et la sauvegarde de celle-ci. S'il y a deux serveurs, le serveur un aura une sauvegarde sur deux et le serveur deux aura une sauvegarde sur un. Ainsi, le maintien de cette sauvegarde peut être synchrone ou asynchrone en fonction des demandes qui arrivent. Donc, je choisirai asynchrone car c'est encore une fois très rapide et préféré également. Donc, je vais spécifier deux serveurs, qui vont héberger mon cache.

partitionné en cache

NCache est déjà installé. Ce sont des boîtes Windows. Je garderai tout par défaut en ce qui concerne les paramètres TCP/IP, NCache est un protocole basé sur TCP/IP. Donc, il a besoin d'une adresse IP et d'un port pour communiquer entre eux et il le prend à partir de là, puis je garderai tout par défaut sur l'écran également et je commencerai ce cache à la fin.

finition

Donc, cela est configuré et démarré immédiatement et cela prendra un certain temps et cela créera automatiquement le cache et j'ai mon émulateur Azure Cosmos DB ici. J'utilise un déploiement localhost de celui-ci. J'ai deux magasins de documents ici, clients et baux.

INSTITUTIONNELS

Les baux sont à nouveau destinés à la synchronisation via le flux de modifications. J'en parlerai sous peu ou plus tard lorsque nous parlerons de synchronisation. Donc, client, c'est le magasin de documents de base du magasin client où nous avons différents clients. Si je clique sur les clients, vous pouvez voir que j'ai des clients avec le nom, l'identifiant, l'adresse, la ville et le pays et ce sont ceux que je vais manipuler tout au long de cette démo.

{
   "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
}

Donc, en revenant ici, mon cache est entièrement démarré. Je peux vérifier cela et voir les détails et je peux ajouter ma boîte en tant que client. C'est une étape facultative. Si vous utilisez le package NuGet, vous pouvez ignorer cette étape, mais je le ferai pour des raisons de facilité d'utilisation. Donc, j'ajouterais simplement tout à partir du gestionnaire d'interface graphique, j'ai donc une configuration remplie sur ma machine cliente. Je pense que nous sommes bons. Je ferai une autre chose. J'ouvrirai la fenêtre des statistiques et j'ouvrirai également les outils de surveillance qui sont installés avec NCache. Donc, ceux-ci me donnent des compteurs de performance et ces fenêtres sont NCache outils de surveillance, voir le peu de surveillance des aspects de NCache ainsi, puis j'ouvrirai une fenêtre PowerShell, puis j'exécuterai une application d'outil de test de stress, qui est installée avec NCache et juste après cela, nous parlerons de l'exemple d'application, que j'ai préparé pour Cosmos DB. C'est l'outil qui simulera une charge fictive sur mon cluster de cache et dès qu'il atteindra, je devrais pouvoir voir une activité. Un client est connecté.

cluster-santé

Et vous devriez voir des demandes par seconde apparaître, montrant également une certaine activité et en fait, je peux simplement me connecter à cette boîte ici, vous montrer cela à partir d'une machine différente afin que nous ayons une vue plus rapide de cela. Très bien, vous pouvez voir l'activité ici. Je pense que l'outil GUI n'est pas capable de se rafraîchir. Je pense qu'il y a des problèmes d'autorisation. Mais néanmoins, vous pouvez voir le nombre de mises à jour et ensuite vous pouvez voir les demandes par seconde et c'est tout ce dont nous avons besoin pour cette démo particulière.

statistiques

Mise en cache des données d'application avec Azure Cosmos DB

Donc, je suis prêt à utiliser l'exemple d'application. Je parlerai rapidement du cas d'utilisation de la mise en cache des données d'application et dans le cadre de cela, j'expliquerai également comment fonctionne mon exemple d'application, puis nous déboguerons étape par étape l'exemple d'application et je vous montrerai les commandes, que j'ai intégré pour commencer avec la mise en cache. C'est un programme de base très simple. C'est un bonjour le monde au début, puis ça progresse à partir de là.

Nous avons donc la mise en cache des données d'application. La première chose que vous devez faire est de traiter les données de référence. Des données qui ne changent pas aussi fréquemment et qui pourraient également être des données transactionnelles, qui changent et pour cela j'ai un segment séparé aligné, mais pour les données de référence, vous aurez principalement affaire à des lectures, n'est-ce pas. Donc, vous devez d'abord vous connecter à Cosmos DB, puis vous connecter à NCache. Vous devez effectuer des opérations d'obtention, puis vous devez également effectuer des opérations de mise à jour. Dans les opérations d'obtention, vous pouvez mettre en cache un seul document ou une collection de documents, puis pour la mise à jour, vous pouvez ajouter, mettre à jour et supprimer des documents. Donc, ce sont les extraits de code et ceux-ci vont être mis en évidence ici.

//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==");
}...

Donc, dans mon CRUD NCache Exemple d'application Cosmos DB, j'ai différents cas, différents cas de test. Donc, tout d'abord, je voudrais juste aller de l'avant et fournir le nom du cache qui est DemoCache. Ce n'est pas sensible à la casse, puis j'ai des paramètres de connexion Cosmos DB. J'utilise le client SQL comme exemple car c'est le plus pertinent du point de vue des exemples que j'ai choisis. Mais vous pouvez créer n'importe quel client de Cosmos DB et toujours pouvoir utiliser NCache parce que le NCache L'API est assez simple. Il peut obtenir la réponse, qui peut être un objet JSON et vous pouvez le mettre en cache, en utilisant NCache API et dans NCache nous avons également différentes façons d'interagir avec le cache. Vous pouvez donc choisir parmi ceux-ci, mais l'idée de la mise en cache reste exactement la même.

Très bien. Donc, dans mon Cosmos DB si vous venez ici, vous pouvez voir l'URL, la clé primaire, les chaînes de connexion. Ce sont donc les paramètres que vous devez spécifier ici, puis vous pouvez ouvrir une connexion. Donc, c'est ainsi que vous obtenez un handle de cache "_cache", interface ICache, à droite. Si je vous montre cela, cela vous donne également certaines des API de gestion, à droite. Laissez-moi juste, d'accord et la classe CacheManager aussi, cela vous donne une collection de cache. Il a ICache, CacheHealth et quelques autres méthodes StartCache et StopCache d'ailleurs. Une fois que vous êtes connecté à cela, la première chose que vous devez faire est de récupérer simplement un élément de cache, à droite, de récupérer certains documents de Cosmos DB, puis de le mettre également en cache. Mais puisque nous utilisons NCache au milieu, donc, notre application devrait être conçue de telle manière que vous devriez toujours vérifier d'abord dans le cache et c'est ainsi que vous économiseriez également des voyages coûteux vers Cosmos DB et c'est exactement ce qui se passe dans notre cas un droit ici.

Ce que nous faisons vraiment, c'est que nous obtenons un identifiant client, que nous prévoyons d'obtenir. Il peut s'agir d'un identifiant client, d'une récupération basée sur l'identifiant client et tout d'abord, je vais appeler "_cache.Get" et fournir une clé. La clé est quelque chose que vous définissez dans NCache. NCache stocke tout dans une paire clé-valeur. Ainsi, la clé peut être le client, l'ID client peut être au paramètre d'exécution correspondant, puis si vous trouvez des données dans le cache, vous n'avez pas besoin d'accéder à Cosmo DB. Vous pouvez revenir à partir de ce point. Si vous ne le faites pas, vous exécutez toujours l'API Cosmos DB. Par exemple, dans ce cas, il obtient une réponse à l'aide de Cosmos DB "_client.ReadDocumentAysnc" et en fournissant tous les détails, par exemple, CollectionID et la clé, et sur cette base, il récupère les enregistrements de Cosmos DB, puis les met également en cache. C'est pour s'assurer que la prochaine fois, vous avez déjà les données dans le cache.

Donc, je vais exécuter l'exemple sans débogage pour la première fois. Montrez-vous tous les cas de test, puis nous passerons en revue ces cas de test un par un et je démontrerai que c'est ainsi que cela va fonctionner. S'il vous plaît laissez-moi savoir, s'il y a des questions?

Je vais donc ajouter un client. Disons que je vais simplement fournir Ross123, appuyer sur Entrée, puis ensuite vous passez en revue un client, encore une fois, je peux simplement donner Ross123 et vous pouvez voir qu'il a créé un client fictif Ross123 avec le nom du contact, il a ajouté la date et l'heure à cela .

cmd

Je peux simplement rechercher d'autres clients, qui sont également déjà dans Cosmo DB. Donc, il a compris cela et sur cette base, pendant que nous faisons cela, vous devriez pouvoir voir deux éléments dans le cache Ross et ALFKI déjà ajoutés dans le cache.

compter

Donc, je peux continuer à faire ça. Je peux mettre à jour ce client. Par exemple, Ross123. Il ne prend aucun paramètre. Il s'agit simplement de mettre à jour la valeur date/heure. Donc, si je frappe à nouveau, vous pouvez maintenant voir 14:27:13 par rapport à 14:26:37. Donc, il a mis à jour ceci dans le cache ainsi que dans Cosmos DB également et si je vous montre ceci ici, je peux rapidement vous montrer le client mis à jour dans le volet Explorer et il a la valeur mise à jour. Donc, il s'agit de ces deux sources côte à côte. Je peux également supprimer ce client. Je peux voir le client en fonction de la réalité, laissez-moi simplement me débarrasser de ces points de rupture. D'accord, ça va me rapporter tous les clients, si j'atteins 5 et ensuite si j'atteins 6, ça va avoir des clients basés sur un pays.

Donc, la première chose que je voulais souligner est d'obtenir un client à partir du cache à l'aide de Cosmos DB et NCache, mettant en cache un seul document. Alors, passons rapidement en revue cela.

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;

Je ne vais pas montrer d'ajout à ce stade car c'est déjà très simple. Donc, je vais appuyer sur play, j'ai atteint ce point de rupture et avant de faire cela, apportez des modifications. Je vais continuer et effacer le contenu. Alors, que je reparte à neuf. D'accord. Ainsi, le contenu est nul sur les deux serveurs. C'est ce qui est attendu. Alors, allons-y. C'est dans le point de rupture, à droite. Donc, vous remarquerez rapidement qu'il s'attend à ce que je récupère un client ALFAKI et sur cette base, si je continue à appuyer dessus pour la première fois, il construira une clé client. C'est la clé avec laquelle nous traitons et j'essaierais de la récupérer dans le cache et évidemment, elle trouverait null parce que c'est un nouveau départ.

Sur un null, il le récupèrerait à partir de Cosmos DB, puis l'ajouterait également au cache et vous pouvez voir un élément ajouté et la prochaine chose est qu'il récupérerait et afficherait également la valeur à l'écran et si Je lance ceci une fois de plus, il attend le même client du cache cette fois car maintenant il est mis en cache et chaque fois que vous continuerez et vous pouvez également spécifier toutes sortes de TTL, toutes sortes de propriétés que vous avez dans Cosmo DB comme bien et vous obtenez également le client du cache. Exactement le même client et cette fois, il n'irait pas à Cosmos DB et il vous le montrerait également à l'écran.

Donc, c'est un simple programme hello world, obtenant les mêmes valeurs du cache parce que maintenant, il est mis en cache et c'est comme ça que vous le feriez et c'est beaucoup plus rapide. Vous pouvez exécuter un test de comparaison côte à côte entre Cosmos DB et NCache et tu peux voir NCache est beaucoup plus rapide et vous pouvez également économiser des voyages vers Cosmos DB, ce qui aurait également un impact sur le facteur coût. Cela ne ferait que le réduire. Donc, c'est le premier cas d'utilisation.

Le deuxième cas d'utilisation est de savoir comment gérer les collections et il y a deux options ici. Vous avez une collection entière en un seul élément ou vous pouvez également mettre en cache chaque élément de collection séparément. Donc, pour cela, vous pouvez tout d'abord en parcourir cinq et si je vous montre le code ici, vous pouvez simplement stocker une liste en un seul élément. Donc, je voudrais juste atteindre un point d'arrêt ici. Cela n'attend rien, je vous montrerais simplement l'obtenir à partir du cache, puis appuyer immédiatement sur le bouton de lecture.

Ron, j'ai une question pour toi. Existe-t-il une option de recherche de type SQL disponible ou tout autre type de fonctionnalités spéciales ? Oui, c'est une très bonne question. C'est une API de base que je montre. NCache a également un mécanisme d'utilisation de balises. Vous pouvez également utiliser la recherche SQL, vous pouvez utiliser LINQ, nous proposons également une recherche en texte intégral. Donc, c'est très comparable. Si vous connaissez SQL, vous pouvez utiliser l'API SQL de NCache. C'est appelé Langage de requête d'objet. Si vous connaissez LINQ et que c'est ce que vous préférez, vous pouvez récupérer des éléments basés sur LINQ, puis la recherche en texte intégral est une autre fonctionnalité. Nous montrons une paire clé-valeur par souci de simplicité. Mais comme je l'ai dit, ce sont toutes les options que vous pouvez également utiliser dans le cadre de cela.

Donc, la première fois, il obtient à nouveau une valeur nulle, puis si je clique sur lecture, je devrais charger ce client en tant qu'élément unique dans le cache. Un seul élément est chargé. Si je lance ceci une fois de plus, sans rien arrêter, cela m'amène cette fois-ci dans cette collection de clients du cache. Nous avons donc 98 éléments de liste, mais il s'agit d'une liste de clients en tant que magasin à un seul article. Donc, c'est une option. Si vous êtes intéressé par la mise en cache de l'ensemble de résultats, vous pouvez mettre en cache toute la collection en un seul élément et vous savez avec certitude qu'il s'agit de la collection, dont vous avez besoin tout le temps et que vous n'avez besoin d'aucun autre membre de la liste ou de l'ensemble de résultats qui vous êtes intéressé à les stocker car un seul article ne fait pas de mal. Mais il est surtout recommandé pour les petites collections et également pour la mise en cache de l'ensemble de résultats.

La deuxième approche, la plus préférée, serait également de mettre en cache chaque élément de collection séparément. Ainsi, vous obtenez une requête exécutée, une API exécutée sur Cosmos DB, obtenez un tas de documents, parcourez ces documents et stockez-les individuellement, puis regroupez-les logiquement à l'aide d'une balise. Ainsi, par exemple, nous faisons cela ici.

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();

Si je vous montre le code, par exemple, c'est le cas de test ici. Entrez le nom du pays, quelques vérifications basées sur cela, il construirait la liste et il construit également une balise par pays avec le pays de paramètre d'exécution, puis il appelle "_cache.SearchService" et dans le cadre du service de recherche, nous avons également OQL. Nous avons également requête continue, nous avons également LINQ et nous avons un autre mécanisme de recherche que vous pouvez utiliser. Mais j'utilise get by tag.

Donc, il s'attend à ce qu'il soit déjà mis en cache individuellement et tous ces éléments individuels ne sont pas une liste, mais vous pouvez les mettre dans une collection à l'aide d'une balise. Ainsi, en utilisant cette balise, vous pouvez récupérer toute la collection. Pour la première fois, il vérifierait dans le cache, s'il le trouve, s'il ne le fait pas, il irait dans la base de données Cosmo, exécuterait la requête, puis itérerait sur les éléments client individuels pour chaque client. Construisez l'élément de cache et attachez également une étiquette à des éléments individuels et sur cette base, il les stockerait dans NCache également en utilisant cache.InsertBulk et si j'apporte ici, le cas numéro six ici. Il appelle collection, crée une liste d'éléments de cache et cache.InsertBulk.

Alors, exécutons ceci une fois de plus. Si je vous propose le choix numéro six, dans ce cas, permettez-moi de vous montrer également le nombre de caches et cette fois, cela irait de l'avant et s'attendrait à un nom de pays, disons Royaume-Uni, basé sur cette première fois, ce serait juste construire la liste. La liste serait vide car sa première itération, puis elle exécuterait Cosmos DB, puis construirait un élément de cache, parcourrait tous ceux-ci. Voyons combien. Je pense que huit à dix et il a également été inséré dans le cache et vous pouvez voir six et plus trois. Donc, environ six éléments, je pense que sept éléments sont ajoutés individuellement mais avec un groupe appelé tag par pays, avec cette balise qui est étiquetée par pays, qui est un pays de paramètre d'exécution, qui est un runtime et qui a ce format d'ailleurs et si je lance ceci une fois de plus, ce qui signifie que je suis entré dans ce bloc central une fois de plus. Je devrais pouvoir les obtenir tous en utilisant la balise dont je viens de parler. Très bien. Et cette fois, je m'attends à obtenir tous ces éléments individuels, bien que stockés individuellement mais classés avec une étiquette, décorés avec l'étiquette. Donc, cette étiquette devrait me ramener tous ces sept éléments en tant que collection, n'est-ce pas. Ainsi, il renvoie une liste de clients dans le cadre de cela. Donc, c'est IDictionnaire des clients et ensuite vous pouvez les parcourir et si j'appuie sur lecture, j'obtiens exactement la même réponse du cache aussi et encore, NCache va être, c'est une énorme amélioration en termes de performances, en termes d'empreinte, même pour sept unités de requête. Pour cet exemple d'application, pensez-y avec des millions de documents, avec des millions de demandes entrantes et sortantes. C'est ainsi que vous géreriez les collections et les stockeriez en tant qu'élément unique en tant que collection, ensemble ou chaque élément de collection séparément dans le cache.

Mise en cache des opérations de mise à jour avec Azure Cosmos DB

Ensuite, nous avons des opérations de mise à jour avec Azure Cosmos DB. Celles-ci sont très simples, chaque fois que vous avez besoin d'ajouter des documents, vous pouvez appeler cache.add sur les mêmes lignes. Je vais juste vous les montrer pour gagner du temps. Ainsi, vous créez un document, "CreateDocumentAsync" dans Cosmo DB, puis appelez cache.Insert. Ainsi, vous ajoutez dans la base de données, ajoutez également dans le cache et pour la mise à jour, vous pouvez toujours mettre à jour dans le cache, dans Cosmos DB, puis également dans le cache et la suppression est également très simple. Vous supprimez de Cosmos DB à l'aide de "DeleteDocumentAsync", puis vous appelez également "cache.remove". Donc, cela devrait se terminer et nous avons aligné ces exemples. Donc, s'il y a d'autres questions, je vais passer à notre segment suivant qui est la synchronisation et cela prendra également du temps. Alors, s'il vous plaît faites le moi savoir, s'il y a des questions, sinon je vais couvrir la synchronisation NCache avec Azure Cosmos DB. Ron, nous nous débrouillons bien pour les questions. Je pense que vous avez fait un excellent travail de présentation du produit. Si des questions viennent, je vais certainement jeter à vous.

Sync NCache avec Azure Cosmos DB

D'ACCORD. La synchronisation est un aspect important. Lorsque vous avez des données existant à deux endroits différents, dans le cache et dans la base de données et c'est ce que nous avons également préconisé, vous devez utiliser le cache en combinaison avec Cosmos DB. Chaque fois qu'il y a un changement dans le cache, vous appliquez également ce changement dans la base de données. Il y a une mise à jour, appliquez cette mise à jour. Supprimez, appliquez cette suppression. Mais que se passe-t-il si les données changent directement dans Cosmos DB et que ce sera le scénario le plus naturel où Cosmos DB peut être mis à jour par une autre application, un autre connecteur et les données sont ingérées par une autre source et votre application lit uniquement ces données et bien que les données mises à jour par votre application sont également mises à jour dans Cosmos DB, mais pour d'autres applications, il s'agit d'une modification de données directement dans Cosmos DB.

Alors, que se passe-t-il si j'ai mis quelque chose en cache. Supposons cela et j'apporte une modification à Cosmos DB et cette modification est apportée à Cosmos DB ici. Mais ce changement ne sera pas reflété dans le cache car les données existent à deux endroits différents et ces deux sources ne sont pas synchronisées. Vous devez donc disposer d'une sorte de synchronisation entre Azure Cosmos DB et NCache et le concept que nous utilisions ici est basé sur le traitement des flux de modifications Microsoft Azure. Donc, nous avons un mécanisme de flux de changement et sur cette base, nous avons deux options différentes que vous pouvez essayer.

L'une est une fonction Azure avec un déclencheur Cosmos DB. Il s'agit donc d'un traitement de flux de changement implicite. Donc, it0 fait beaucoup de travail pour vous et il gère les ajouts et les mises à jour pour commencer et vous pouvez trouver une solution de contournement pour la suppression. Microsoft prétend qu'il s'agit d'une suppression logicielle. Ainsi, vous pouvez utiliser une approche de suppression douce, c'est essentiellement une mise à jour, mais avec le temps de vie qui s'y rattache, avec un mot-clé qui lui est attaché, vous pouvez utiliser dans votre application un mot-clé et vous pouvez être averti que cet élément n'est plus va être dans Cosmos DB.

La deuxième option est la mise en œuvre explicite de processeurs de flux de modifications. Vous implémentez cette interface vous-même au lieu d'utiliser un déclencheur Cosmos DB dans la fonction Azure. J'ai les deux exemples alignés. Alors, concentrons-nous d'abord sur la fonction Azure.

Déclencheur de base de données de fonction Azure

Ainsi, avec le déclencheur Azure Function DB, il s'agit d'un schéma très simple.

Encore une fois, votre base de données Cosmos est ici, NCache est juste ici. Votre application utilise NCache et Cosmos DB ou quelque part ici. Que se passe-t-il si un document est ajouté, mis à jour ou supprimé ? Ainsi, Microsoft Azure le ferait, vous pouvez implémenter un flux de modifications et vous pouvez baser un processeur dessus. Ainsi, ce flux de modification gère les événements d'ajout et de mise à jour. La suppression n'est pas encore prise en charge par Microsoft Azure Cosmos DB et vous pouvez implémenter la fonction Azure avec le déclencheur DB. Cela peut ajouter et mettre à jour ces modifications dans n'importe quelle source comme NCache et j'ai une implémentation, où je fais NCache commande d'ajout, de mise à jour et de suppression. Suppression douce, que nous couvrirons tout de suite.

Donc, c'est la mise en œuvre globale. Ce qui se passera après cette démo, c'est que chaque fois que vous ajouterez un document dans Cosmos DB qui se reflétera automatiquement dans NCache. S'il existe une mise à jour dans Cosmos DB qui se refléterait automatiquement dans NCache et de même, s'il y a une suppression, nous avons également une gestion pour la suppression. Ainsi, vous auriez ces deux sources synchronisées à 100% l'une avec l'autre et cela garantirait qu'il n'y a pas de problèmes d'incohérence des données et cela pourrait être un gros problème pour les applications, qui ont besoin que les données soient sous une forme cohérente qui doivent être mises à jour des données et ce sont des données critiques et des données très sensibles également. C'est donc la solution que nous proposons pour cela.

Alors, tout d'abord, laissez-moi vous montrer la fonction Azure ici avec le déclencheur DB.

[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")
		};

Donc, il reprend le nom du cache et c'est une implémentation. Il a un déclencheur Cosmos DB. Laissez-moi juste vous emmener ici. Ainsi, vous pouvez voir qu'il contient des informations sur les baux et que j'ai un magasin de documents avec le nom de baux. Vous pouvez lui donner n'importe quel nom et cela vous permet d'avoir un pointeur par exemple 158 est le dernier pointeur. Donc, il a un tas de paramètres. Donc, le robot culinaire en chaîne est autre chose, mais j'ai 158 comme dernier pointeur. Ainsi, il garde une trace de toutes les mises à jour en mémoire depuis la dernière fois qu'il a fonctionné. Donc, il y a une collection de tous les documents et qui sont ajoutés et mis à jour depuis la dernière fois qui surveillait ces changements. Ainsi, il est basé sur le modèle d'observateur de flux de changement, auquel Cosmo DB envoie constamment des informations et ces informations sont conservées en mémoire et il y a également une référence à cela dans Cosmos DB.

Donc, voici l'exemple d'implémentation pour cela. Si je ramène la fonction Azure. Il a donc besoin de ce déclencheur Cosmos DB. Il a besoin du nom de la base de données, bien sûr. Collection que vous essayez de surveiller via le flux de modifications. La chaîne de connexion ainsi que le préfixe de collection de baux c'est quelque chose, que vous mettez dans le document de baux, puis la collection de baux nommée baux. Et puis j'ai besoin de mon nom de cache ici aussi. Par exemple, c'est le nom, j'utilise democache, puis ce qu'il fait, c'est que chaque client de cette collection va construire cet objet client, puis appeler cache.InsertAsync. C'est une tâche d'invocation asynchrone. Donc, vous pouvez l'utiliser et pour supprimer, j'en parlerai un peu plus tard. Mais revoyons tout d'abord la partie insert.

Donc, si je lance cette application, cela va attendre les changements. En utilisant ce mécanisme d'alimentation de changement et dans ces baux, il attendrait tous les documents qui sont ajoutés et mis à jour depuis la dernière fois et sur la base de cet ajout et de cette mise à jour, il ferait un NCache Appel API également. Alors, laissez-moi juste exécuter ça. Il faudrait un certain temps pour déboguer. Je serai reconstruit et ensuite je devrais pouvoir les appliquer. Je n'ai implémenté aucun enregistreur pour cela. Ainsi, vous pouvez obtenir des erreurs d'enregistreur basées sur mon exemple d'implémentation. Mais vous pouvez également implémenter certains détails de journalisation à côté de cela. C'est un code complet que j'ai utilisé pour mon but. Donc, je peux également le partager vers la fin de la démo. Donc, c'est ma fonction Azure. Certains des paramètres sont manquants et c'est pourquoi vous obtenez des valeurs nulles, mais dans l'ensemble, le travail est fait pour la synchronisation de NCache au cas où des modifications seraient apportées à Cosmos DB.

Et en attendant, laissez-moi préparer mon document que je vais modifier. Utilisons Ross123 parce que c'est celui que nous avions initialement créé. Disons que j'ajouterais quelques valeurs. Laissez-moi voir si ça marche maintenant. Oui, il fonctionne et il est en mode veille. Ainsi, l'hôte a été initialisé et l'application a démarré. Sa fonction d'exécution depuis la dernière fois parce que je jouais, apportant également quelques modifications. Alors, laissez-le terminer. Voilà. Il s'occupe de Ross123 que j'ai mis à jour. Donc, ce document de baux a été mis à jour.

Alors, permettez-moi d'aller de l'avant et d'effacer le contenu du cache une fois de plus, puis de recommencer. Donc, nous n'avons aucun élément dans le cache et celui-ci est en cours d'exécution. Donc, je vais le garder ici et cette fois, je vais ouvrir la base de données Cosmos et je vais ajouter quelques caractères à la fin du pays. Disons que le Royaume-Uni plusieurs fois, puis je vais également ajouter Ross123, quelques chaînes aléatoires à la ville également et si je clique sur la mise à jour ici, cela devrait également déclencher Cosmos DB et vous pouvez voir là que vous allez Ross123 UK UK et Ross123 44. Donc, il utilise cette collection de baux et ensuite il va, il a en fait exécuté cette fonction et ce que cela a fait, il a ajouté ce client ici et si je vais frapper mon, cette application a été maintenue en cours d'exécution . Donc, si je regarde Ross123, je dois appuyer sur play car il y a un débogage. C'est le logger que je n'ai pas implémenté. Cela devrait avoir Ross123 444 et Ross123 avec quelques caractères aléatoires ajoutés. C'est donc aussi simple que cela d'implémenter la fonction Azure pour Cosmos DB.

Ron, nous avons une question sur la fonction Azure et la question est la suivante : est-il indispensable de l'utiliser en tant que fonction Azure et quel est le coût qui y est associé ? La fonction Azure est encore une fois, ce n'est pas un must, vous pouvez également utiliser l'autre approche, que je vais démontrer ensuite. Vous pouvez implémenter vous-même un observateur de champ de changement. C'est une interface. Implémentez toutes les méthodes et n'utilisez pas le déclencheur Azure Cosmos DB dans la fonction Azure. Donc, c'est une autre option. Donc, ce n'est pas un must. Ce n'est pas la seule option. La fonction Azure est hébergée dans Microsoft Azure. Donc, il y a aussi un coût qui y est associé. Mais c'est minime d'ailleurs. C'est simpliste en termes d'utilisation mais ce n'est pas la seule option.

Pour la suppression, cela couvre l'ajout et la mise à jour. Si j'ajoute un nouveau document et qu'il devrait automatiquement être amené ici. Je dois continuer à fonctionner car j'utilise l'ajout et la mise à jour, la collection de baux est mise à jour sur les mêmes lignes, mais la suppression est un cas où Microsoft vous recommande d'utiliser une suppression réversible et pour cela, ils vous recommandent d'utiliser la mise à jour comme alternative et utilisez un mot clé, un mot clé aléatoire, par exemple, il s'agit d'une suppression à l'intérieur du document et au lieu de supprimer dans Microsoft Azure Cosmos DB, vous utilisez cet attribut. Tout aléatoire supprimé, rejeté, puis utilise un TTL, puis le met à jour. Et sur cette base, si je lance ceci une fois de plus et que je vous montre également le code au fait. Ce que cela est fait, s'il trouve qu'il y a un document avec la propriété supprimée, il va appeler le cache ou le supprimer et sur la base de ce TTL, il va quand même être supprimé de la base de données mais il va être supprimé du cache tout de suite.

Donc, je vais lancer ça, je pense que ça marche déjà, oui, ça l'est. Bien qu'il y ait un code d'erreur, mais c'est ce que l'enregistreur. Si j'apporte une modification ici et que je mets à jour ce document, il sera également appliqué dans le cache. La fonction client Ross123 a également été supprimée du cache. Si je viens ici, vous pouvez voir que ce n'est pas dans la cache. Et maintenant, la prochaine chose est que puisque nous avons un TTL. Donc, après 10 secondes, Ross123 devrait être retiré d'ici. C'est ainsi que Microsoft Azure vous recommande de gérer la suppression. Ajouter et mettre à jour est la seule option pour l'observateur de flux de changement pour le moment. Donc, la suppression doit être une suppression réversible et c'est la solution de contournement que je recommanderais également, sur la base des recommandations de Microsoft.

Modifier le processeur de flux

Le segment suivant est la synchronisation du cache avec Cosmos DB via le processeur de flux de modification. Donc, il y avait une question, la fonction Azure n'est pas la seule option. Vous pouvez également utiliser explicitement le processeur de flux de changement et c'est l'interface IChangeFeedObserver que vous implémentez. Laissez-moi vous montrer le code pour cela.

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);
	}
}

Cela vous donne beaucoup plus de contrôle en comparaison. Par exemple, c'est mon usine, juste ici. J'ai donc implémenté IChangeFeedObserverFactory. Laissez-moi vous montrer ça d'ici. OK, donc, il a un tas de méthodes. J'ai implémenté ce IChangeFeedObserver. Il a une méthode qui ferme les connexions. Il a une méthode qui ouvre la collection et en ce que j'initialise le cache et en ferme, j'appelle en fait cached.Dispose pour disposer des ressources, puis la méthode principale est ProcessChangesAsync. Ainsi, il a le contexte IChangeFeedObserver, une liste, un jeton d'annulation et quelques éléments de base. Donc, ce que je fais vraiment ici, c'est que je m'empare de cela dans les documents de cette collection, liste de documents. C'est celui qui va être partagé avec moi. Donc, j'ai implémenté cela de manière à ce que ChangeFeedObserverFactory me procure toutes les ressources pertinentes, puis sur cette base, sur la base de toutes les informations sur les baux et les informations sur les documents que j'ai fournies, je peux rapidement traiter les suppressions, les ajouts et les mises à jour. Alors, cette fois, laissez-moi vous montrer la mise à jour, ajoutez également un cas d'utilisation, puis mettez à jour, puis supprimez et après cela, nous conclurons la démo.

Il s'agit donc d'une implémentation explicite de IChangeFeedObserver. C'est ce qu'utilise la fonction Microsoft Azure à l'aide du déclencheur Cosmos DB. Ainsi, le déclencheur Cosmos DB implémente automatiquement cela, ce qui est plus simple mais vous devez disposer d'une fonction Azure. Mais que se passe-t-il si, si votre application doit s'en occuper, vous pouvez l'implémenter vous-même. Donc, le cache a été démarré. Laissez-moi voir si c'est le cas, en fait j'utilisais un autre cache. Permettez-moi de le rechercher, oui et au fait je donne tous les détails ici, la démo Cosmo DB, le document des baux et le document des clients que je veux surveiller et je règle tous ces paramètres ici, démocache, sauvegarde et exécutez-le et cette fois, je vais ajouter un document, le mettre à jour et le supprimer et vous montrer que ceux-ci seront appliqués dans le cache en conséquence.

Laisse-moi courir le Opération CRUD ainsi, donc, que nous avons. J'arrête la fonction Azure, puis je le suis. Ceci est déjà ajouté. OK, donc, mon cache ici, puisqu'il garde une référence donc, un document est déjà là. Je veux m'en débarrasser, pour que nous recommencions à zéro, encore une fois et cette fois j'ajouterais quelque chose dans Cosmo DB et vous devriez pouvoir l'obtenir immédiatement à partir du cache et vous pouvez voir d'ici, je copierais simplement cette. Nouveau document. Collons-le ici. Au lieu de Ross123, permettez-moi de dire Ron1122 et de donner les mêmes champs ici également. Il suffit de mettre à jour certaines valeurs car ce document est déjà supprimé, donc cela n'a pas d'importance. Et, je pense que nous sommes bons. OK, enregistrez-le. Donc, ce document est ici Ron1122 et si je vous montre l'observateur de changement de flux, il s'en est automatiquement occupé. Maintenant, tout ce que j'ai à faire est de voir ça depuis le cache. Tout d'abord, il a été dans le cache. Donc, s'il est dans le cache, il va de toute façon se charger à partir du cache. Donc, je vais dire Ron1122 et vous pouvez voir, je pense que j'ai foiré l'ID. C'est Ron1122. Voilà. Donc, il a les mêmes éléments.

Je vais maintenant le mettre à jour, afin que nous voyions également le cas d'utilisation mis à jour. Encore une fois, je vais mettre à jour certains personnages dans la ville. Disons, NYK NYK et cette fois au lieu de UK, je dirais simplement USA USA USA. Donc, cela appliquerait une mise à jour et cela irait aux baux et sur cette base, cela devrait être automatiquement appliqué. Voyez, à quel point il traite cela instantanément. Donc, si je l'exécute une fois de plus et que je donne l'ID client Ron1122, vous pouvez voir la valeur mise à jour ici, qui est avec NYK NYK USA et USA.

Pour la suppression, je dois à nouveau utiliser le supprimé, qui est une suppression douce et pour cela, tout ce que j'ai à faire est d'ajouter un attribut aléatoire. Soit dit en passant, ce sera n'importe quel attribut et lui donnera également un TTL. Par exemple, supprimé avec TTL 10 qui devrait le mettre à jour mais à son tour, je le supprimerais car mon code a une gestion des mots clés supprimés et la durée de vie se chargera de la suppression de Cosmo DB et du mot clé supprimé dès que je trouverai un, je sais que mon application est conçue de telle manière que Cosmo DB va se débarrasser de ce document. Donc, je dois me débarrasser du cache. Donc, c'est une suppression douce pour Cosmos DB et si vous remarquez ici, c'est parti. Les clés suivantes ont été supprimées, ce qui signifie qu'elles n'existeront plus dans le cache. Si je devais entrer l'élément avec l'ID donné n'existe pas. Ainsi, il ne vous donne aucune donnée obsolète, si vous utilisez NCache avec ces deux approches.

Alors, laissez-moi résumer rapidement. Sam, je prendrais juste deux minutes de plus. Donc, nous avons d'abord parlé de la mise en cache des données, des opérations get. Vous pouvez commencer avec des API simples. En ce qui concerne l'obtention d'un document, appelez cache.Get. Commencez par vérifier à partir du cache, ne le trouvez pas, récupérez-le à partir de Cosmos DB et ajoutez-le également dans le cache. Donc, cela complète le cycle. Collections, la collection entière du cache est un élément ou cache chaque élément de collection séparément et nous avons parlé des mérites de ces deux approches, puis l'aspect le plus important est l'ajout, les mises à jour via ces mêmes API. Synchronisation de NCache est possible avec Cosmos DB. C'est assez simple. Nous avons deux options, la fonction Azure avec déclencheur DB ou l'interface IChangeFeedObserver implémentée explicitement. Ainsi, les deux approches ont été discutées et vous pouvez choisir entre celles-ci.

Vers la fin, NCache est un cache distribué .NET hautement disponible, linéairement évolutif et très fiable. Nous avons un tas de topologies de mise en cache. Cache client, pont de réplication WAN. Ainsi, vous pouvez l'utiliser pour Microsoft Azure Cosmos DB sur site, dans le cloud et également sur site. Ainsi, différentes options sont disponibles dans le cadre de cela. S'il vous plaît, faites-moi savoir s'il y a des questions, en ce qui concerne les détails techniques, sinon, je les confierais à Sam.

Ron, il y a une question que nous avons en quelque sorte abordée, mais la question est, recommanderiez-vous davantage, quelle serait l'option la plus recommandée ? IChangeFeed ou une fonction Azure ? Vous en avez parlé, mais si vous voulez faire la lumière là-dessus. Bien sûr, c'est un débat d'ailleurs. Si vous voulez la facilité d'utilisation, vous êtes plus à l'aise avec la fonction Azure, allez-y et si vous êtes un développeur qui veut utiliser des composants et garder le contrôle car l'interface IChangeFeedObserver est quelque chose que vous obtenez un contrôle total sur l'ouverture des connexions , en fermant la connexion et en appliquant. Donc, si vous voulez plus de contrôle, utilisez IChangeFeedObserver et utilisez l'implémentation personnalisée. Si vous voulez avoir une facilité d'utilisation, utilisez la fonction Azure avec le déclencheur DB.

OK, nous avons une autre question, y a-t-il un webinaire pour expliquer plus en ce qui concerne NCache architecture et travail? Oui il y a. Sur notre webinaire enregistré, nous avons une série de webinaires disponibles et l'un des webinaires est en fait nommé NCache Architecture. Donc, vous pouvez jeter un œil à cela. Et tout cela est disponible sur notre site Web, n'est-ce pas Ron ? Oui, en fait, cet enregistrement va être publié dans les prochains jours. OK parfait. Nous n'avons donc qu'une minute. Donc, les gars, merci beaucoup d'avoir rejoint tout le monde. J'espère que cela a été utile. Nous essayons de répondre à autant de questions que possible. Si vous avez des questions supplémentaires, veuillez contacter support@alachisoft.com. Si vous voulez que nous planifier une démo personnalisée, nous serons plus qu'heureux de le faire pour vous aussi. Si vous avez des questions relatives aux ventes, vous pouvez toujours contacter notre équipe de vente à sales@alachisoft.com. Cela étant dit, je voudrais encore une fois remercier tout le monde pour sa participation. Contactez-nous, si vous avez des questions et appréciez votre temps. Merci et passez une bonne journée.

Que faire ensuite?

 
© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.