Wann immer wir über die Bereitstellung eines einfachen Zugriffs und einer einfachen Handhabung von Objekten sprechen, geht es um das Thema Objektrelationale Mapper (ORMs) wird zwangsläufig auftauchen. ORMs wie Entity Framework Core und NHibernate helfen bei der Verwaltung einer effizienten Zuordnung von Einfaches altes CLR-Objekt (POCO) Instanzen zu Datenbankinformationen, Verwaltung von Zuordnungen, Einschränkungen usw.
Allerdings kann die Verwendung von Code-to-SQL-Funktionalität zu Leistungsverzögerungen und sogar zu Leistungseinbußen führen, wobei die häufigste Ursache das N+1-Problem ist. Die Leute bei StackExchange waren mit der Leistung von ORMs für ihre Infrastrukturanforderungen nicht zufrieden und haben sich etwas ausgedacht Elegant, ein leichter Micro-ORM-Wrapper für ADO.NET, der extrem schnell ist und die Objektzuordnung zu Datenbankmodellen sehr einfach und intuitiv macht.
NCache Details Objektrelationale Zuordnung Elegant
Dapper-Integration mit NCache
Bei Dapper handelt es sich hauptsächlich um eine Reihe von Erweiterungsmethoden IDbConnection Klasse und bietet eine Fassade über die oft komplizierten ADO.NET-Vorgänge. Das ist ein Hauptgrund für sein geringes Gewicht und seine hohe Geschwindigkeit. Wenn Sie jedoch sicherstellen möchten, dass die Daten im Speicher bleiben, um Roundtrips zur Datenbank zu vermeiden, verwenden Sie NCache. Mit einem verteilten Cache wie NCache, können Sie die Leistung mithilfe von Datenquellenanbietern noch weiter optimieren, wie in der folgenden Abbildung dargestellt:
NCache Details Datenquellenanbieter Datenquelle mit Dapper
Dapper von Drittanbietern mit Datenquellenanbietern
Datenquellenanbieter sind die beste Lösung, wenn für Lese- und Schreibzwecke auf die Back-End-Stammdatenquelle zugegriffen werden muss. Diese Anbieter verlagern Dapper-Vorgänge auf die Serverseite.
Sehen wir uns an, wie meine Anwendung Dapper-Bibliotheken mit Datenquellenanbietern versorgt.
Die Umsetzung ist einfach Durchlesen Anbieter mit Dapper-Bibliotheken, um Daten direkt aus der Datenquelle zu lesen NCache und das Zwischenspeichern der Ergebnisse verbessert die Leistung Ihrer Anwendung.
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 Details Datenquellenanbieter Datenquelle mit Dapper
Ebenso können Sie die Daten direkt in den Datenspeicher schreiben: NCache stellt ein Durchschreiben Anbieter, der die Daten von Ihnen entgegennimmt und in den Datenspeicher schreibt und dabei eine zwischengespeicherte Kopie behält.
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 Details Datenquellenanbieter Datenquelle mit Dapper
Diese detaillierte Lösung finden Sie wo NCache verwendet Dapper-Bibliotheken, um einen Datenspeicher zu füllen und zu lesen GitHub.
Ich werde die Vorteile auflisten, die mir dabei aufgefallen sind NCache-Gepflegte Zusammenarbeit.
Vorteil Nr. 1: Datenquellenanbieter für die Synchronisierung
Um zu vermeiden, dass veraltete Daten im Cache verbleiben, verwenden Datenquellenanbieter zusammen mit Datenbankabhängigkeitsfunktionen Stellen Sie die Synchronisierung der zwischengespeicherten Daten und der Daten in der Datenbank sicher. Alle Vorgänge zur Neusynchronisierung des Caches werden auf der Serverseite ohne jegliche Beteiligung des Clients durchgeführt.
Vorteil Nr. 2: Datenquellenanbieter können Clientanwendungen einsparen
Nehmen wir an, Sie möchten Änderungen an Ihrem Datenspeicher vornehmen: Schemaaktualisierungen, Tabellenvariationen, selbst wenn Sie den gesamten Datenspeicher insgesamt ändern. Hier erfahren Sie, wie Sie vorgehen NCache vereinfacht den Prozess für Sie. Mit NCache Als Datenquellenanbieter müssen Sie Ihre Clientanwendung nicht ändern. Eine Aktualisierung der Datenquellenimplementierung würde ausreichen.
Vorteil Nr. 3: Skalierbar NCache zum Speichern von Abfrageergebnissen
Wenn Ihre Anwendung in einer Umgebung ausgeführt wird, in der mehrere Instanzen der Anwendung hinter einem Load Balancer (z. B. Serverfarmen, Kubernetes-Cluster) ausgeführt werden, die den Cache gemeinsam nutzen, dann ist dies der Fall NCache Funktioniert: Wenn eine der Instanzen die Datenquelle abfragt, wird das Ergebnis im verteilten Cache gespeichert. Wenn andere Instanzen also dasselbe Ergebnis abfragen, erhalten sie es direkt aus dem Cache, ohne einen Roundtrip zur Datenquelle durchführen zu müssen.
Dies reduziert die Zugriffe auf Ihre Datenbank und da es skalierbar ist, NCache kann einer Erhöhung der Anforderungslast gerecht werden, indem der Cluster einfach in Echtzeit skaliert wird, ohne dass der Cluster heruntergefahren werden muss.
NCache Details Datenquellenanbieter Datenquelle mit Dapper
Etwas zusammenfassen
Obwohl ORMs Ihnen Erleichterung verschaffen, können sie Ihre Anwendung auch stark belasten und zu unerwarteten Leistungseinbußen führen. Dapper ist jedoch extrem leichtgewichtig und gibt dem Entwickler mehr Kontrolle, der dieses Wissen beim Entwerfen effizienter Abfragen und Befehle berücksichtigen muss.
Da Sie nun über etwas verfügen, das sich so gut auskennt, warum versuchen Sie es nicht mit einem verteilten Cache wie NCache damit? NCacheMit seinen In-Memory- und einfach zu skalierenden Funktionalitäten ergänzt es die Dapper-Bibliotheken mit einer solchen Präzision, dass die Ergebnisse einfach umwerfend sind. Also los, holen NCache jetzt!