Chaque fois que nous parlons de faciliter l'accès et la manipulation des objets, le sujet de Mappeurs relationnels d'objets (ORM) est inévitable. Les ORM tels que Entity Framework Core et NHibernate aident à gérer un mappage efficace des Objet CLR ordinaire ancien (POCO) instances aux informations de la base de données, gestion des associations, des contraintes, etc.
Cependant, l'utilisation de la fonctionnalité code-to-SQL peut entraîner un décalage des performances et même une dégradation, la cause la plus fréquente étant le problème N+1. Les gens de StackExchange n'étaient pas satisfaits des performances des ORM pour leurs besoins d'infrastructure et ont proposé Pimpant, un wrapper micro-ORM léger autour d'ADO.NET qui est extrêmement rapide et rend le mappage d'objets vers des modèles de base de données très simple et intuitif.
NCache Détails Mappage relationnel-objet Pimpant
Intégration Dapper avec NCache
Dapper est principalement un ensemble de méthodes d'extension sur le IDbConnexion classe et fournit une façade sur les opérations ADO.NET souvent compliquées. C'est l'une des principales raisons de sa légèreté et de sa grande vitesse. Cependant, si vous souhaitez vous assurer que les données restent en mémoire pour éviter les allers-retours vers la base de données, utilisez NCache. Avec un cache distribué comme NCache, vous pouvez encore optimiser les performances à l'aide de fournisseurs de sources de données, comme illustré dans la figure ci-dessous :
NCache Détails Fournisseurs de sources de données Source de données avec Dapper
Dapper tiers avec des fournisseurs de sources de données
Les fournisseurs de sources de données sont la meilleure solution chaque fois que la source de données principale principale doit être accessible à des fins de lecture et d'écriture. Ces fournisseurs déchargent les opérations Dapper du côté serveur.
Voyons comment mon application approvisionne les bibliothèques Dapper avec les fournisseurs de sources de données.
Mettre en œuvre ce simple Lire à travers fournisseur avec les bibliothèques Dapper pour lire les données directement à partir de la source de données en utilisant NCache et la mise en cache des résultats améliore les performances de votre application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public ProviderCacheItem LoadFromSource(string key) { var customerId = key.Replace("Customer:CustomerID:", "").Trim(); var commandDefinition = new CommandDefinition($@" SELECT * FROM dbo.Customers WHERE CustomerID = @cId", new { cid = customerId }, flags: CommandFlags.NoCache); var customer = Connection.Query<Customer>(commandDefinition).FirstOrDefault(); var providerCacheItem = new ProviderCacheItem(customer) { Dependency = GetCustomerSqlDependency(customerId), ResyncOptions = new ResyncOptions(true) }; return providerCacheItem; } |
NCache Détails Fournisseurs de sources de données Source de données avec Dapper
De même, pour écrire les données directement dans le magasin de données, NCache fournit une Réécriture fournisseur qui prend les données de votre part et les écrit dans le magasin de données tout en conservant une copie en cache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public OperationResult WriteToDataSource(WriteOperation operation) { Customer customer = null; if (operation.OperationType == WriteOperationType.Add || operation.OperationType == WriteOperationType.Update) { customer = operation.ProviderItem.GetValue<Customer>(); } if (operation.OperationType == WriteOperationType.Add) { var commandDefinition = new CommandDefinition(// INSERT sql command for customer data with customer id , customer, flags: CommandFlags.NoCache); Connection.Execute(commandDefinition); } else if (operation.OperationType == WriteOperationType.Update) { var commandDefinition = new CommandDefinition(// UPDATE sql command for customer data with customer id, customer, flags: CommandFlags.NoCache); Connection.Execute(commandDefinition); } else if (operation.OperationType == WriteOperationType.Delete) { var customerId = operation.Key.Replace("Customer:CustomerID:", "").Trim(); var commandDefinition = new CommandDefinition(// delete sql script for given customer id , new { cId = customerId }, flags: CommandFlags.NoCache); Connection.Execute(commandDefinition); } } |
NCache Détails Fournisseurs de sources de données Source de données avec Dapper
Vous pouvez trouver cette solution détaillée où NCache utilise les bibliothèques Dapper pour remplir et lire un magasin de données sur GitHub.
Je vais énumérer les avantages que j'ai remarqués avec le NCache-Une collaboration élégante.
Avantage n° 1 : Fournisseurs de sources de données pour la synchronisation
Pour éviter de conserver des données obsolètes dans le cache, les fournisseurs de sources de données ainsi que fonctionnalités de dépendance de la base de données assurer la synchronisation des données en cache et des données dans la base de données. Toutes les opérations de resynchronisation du cache sont effectuées côté serveur sans aucune implication du client.
Avantage # 2 : Fournisseurs de sources de données pour épargner l'application client
Supposons que vous souhaitiez apporter des modifications à votre magasin de données : toutes les mises à jour de schéma, les variations de table, même si vous modifiez complètement l'ensemble du magasin de données, voici comment NCache simplifie le processus pour vous. Avec NCache Fournisseurs de sources de données, vous n'avez pas besoin de modifier votre application cliente, la mise à jour de l'implémentation de la source de données suffirait.
Avantage #3 : Évolutif NCache pour stocker les résultats de la requête
Si votre application s'exécute dans un environnement où plusieurs instances de l'application s'exécutent derrière un équilibreur de charge (par exemple, des batteries de serveurs, des clusters Kubernetes) qui partagent le cache, alors c'est ce que NCache fait : si l'une des instances interroge la source de données, le résultat est stocké dans le cache distribué. Ainsi, lorsque d'autres instances interrogent le même résultat, elles l'obtiennent directement du cache sans avoir à faire un aller-retour vers la source de données.
Cela réduit les accès à votre base de données et, étant évolutif, NCache peut répondre à une augmentation de la charge des demandes en faisant simplement évoluer le cluster en temps réel sans avoir à arrêter le cluster.
NCache Détails Fournisseurs de sources de données Source de données avec Dapper
Résumer
Là où les ORM vous facilitent la tâche, ils peuvent également être lourds pour votre application et entraîner une dégradation inattendue des performances. Dapper, cependant, est extrêmement léger et donne plus de contrôle au développeur qui doit avoir ces connaissances à l'esprit lors de la conception de requêtes et de commandes efficaces.
Maintenant que vous avez quelque chose d'aussi compétent, pourquoi n'essayez-vous pas d'utiliser un cache distribué comme NCache avec ça? NCache, avec ses fonctionnalités en mémoire et faciles à mettre à l'échelle, complète les bibliothèques Dapper avec une telle précision que les résultats sont à couper le souffle. Alors, va chercher NCache dès maintenant ! Réservez votre place aujourd'hui!