Siempre que hablamos de proporcionar facilidad de acceso y manipulación de objetos, el tema de Mapeadores relacionales de objetos (ORM) está obligado a aparecer. Los ORM como Entity Framework Core y NHibernate ayudan a administrar el mapeo eficiente de Objeto CLR antiguo simple (POCO) instancias a la información de la base de datos, gestión de asociaciones, restricciones, etc.
Sin embargo, el uso de la funcionalidad de código a SQL puede provocar un retraso en el rendimiento e incluso una degradación, siendo la causa más común el problema N+1. La gente de StackExchange no estaba contenta con el rendimiento de los ORM para sus necesidades de infraestructura y se les ocurrió Dapper, un contenedor ligero de micro-ORM alrededor de ADO.NET que es extremadamente rápido y hace que el mapeo de objetos a modelos de base de datos sea muy fácil e intuitivo.
NCache Detalles Mapeo relacional de objetos Dapper
Integración elegante con NCache
Dapper es principalmente un conjunto de métodos de extensión en el IDbConexión clase y proporciona una fachada sobre las operaciones ADO.NET a menudo complicadas. Esa es una de las principales razones de su naturaleza ligera y alta velocidad. Sin embargo, cuando desee asegurarse de que los datos permanezcan en la memoria para evitar viajes de ida y vuelta a la base de datos, use NCache. Con un caché distribuido como NCache, puede optimizar aún más el rendimiento utilizando proveedores de fuentes de datos como se muestra en la siguiente figura:
NCache Detalles Proveedores de fuentes de datos Fuente de datos con Dapper
Dapper de terceros con proveedores de fuentes de datos
Los proveedores de fuentes de datos son la mejor solución cuando se necesita acceder a la fuente de datos maestra de back-end para fines de lectura y escritura. Estos proveedores descargan las operaciones de Dapper en el lado del servidor.
Veamos cómo mi aplicación atiende bibliotecas Dapper con proveedores de fuentes de datos.
Implementando este sencillo Leer de parte a parte proveedor con bibliotecas Dapper para leer datos directamente desde la fuente de datos usando NCache y el almacenamiento en caché de los resultados mejora el rendimiento de su aplicación.
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 Detalles Proveedores de fuentes de datos Fuente de datos con Dapper
Del mismo modo, para escribir los datos directamente en el almacén de datos, NCache proporciona una Escriba por medio de proveedor que toma los datos de usted y los escribe en el almacén de datos mientras mantiene una copia en caché.
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 Detalles Proveedores de fuentes de datos Fuente de datos con Dapper
Puede encontrar esta solución detallada donde NCache usa bibliotecas Dapper para llenar y leer un almacén de datos en GitHub.
Voy a enumerar los beneficios que noté con el NCache-Colaboración elegante.
Beneficio # 1: proveedores de fuentes de datos para sincronización
Para evitar mantener datos obsoletos en la memoria caché, los proveedores de fuentes de datos junto con características de dependencia de la base de datos garantizar la sincronización de los datos en caché y los datos en la base de datos. Todas las operaciones para resincronizar la memoria caché se realizan en el lado del servidor sin la participación del cliente.
Beneficio n.º 2: proveedores de fuentes de datos para la aplicación de cliente de repuesto
Supongamos que desea realizar cambios en su almacén de datos: cualquier actualización de esquema, variaciones de tabla, incluso si cambia todo el almacén de datos, así es como NCache simplifica el proceso para usted. Con NCache Proveedores de fuentes de datos no necesita cambiar su aplicación cliente, bastaría con actualizar la implementación de la fuente de datos.
Beneficio # 3: Escalable NCache para almacenar los resultados de la consulta
Si su aplicación se ejecuta en un entorno donde varias instancias de la aplicación se ejecutan detrás de un balanceador de carga (por ejemplo, granjas de servidores, clústeres de Kubernetes) que comparten el caché, entonces esto es lo que NCache hace: si una de las instancias consulta la fuente de datos, el resultado se almacena en la memoria caché distribuida, de modo que cuando otras instancias consultan el mismo resultado, lo obtienen directamente de la memoria caché sin tener que hacer un viaje de ida y vuelta a la fuente de datos.
Esto reduce las visitas a su base de datos y, al ser escalable, NCache puede atender un aumento en la carga de solicitudes simplemente ampliando el clúster en tiempo real sin tener que desconectarlo.
NCache Detalles Proveedores de fuentes de datos Fuente de datos con Dapper
Para resumirlo
Donde los ORM le brindan facilidad, también pueden ser pesados para su aplicación y causar una degradación inesperada del rendimiento. Dapper, sin embargo, es extremadamente ligero y le da más control al desarrollador que necesita tener este conocimiento en mente al diseñar consultas y comandos eficientes.
Ahora que tiene algo tan competente, ¿por qué no intenta usar un caché distribuido como NCache ¿con eso? NCache, con sus funcionalidades en memoria y fáciles de escalar, complementa las bibliotecas de Dapper con tal precisión que los resultados son asombrosos. Entonces, ve a buscar NCache ¡ahora!