En esta sesión aprenderemos a detectar e implementar correctamente capas de acceso a datos . NET que escalen a las capacidades HW de nuestras máquinas. Saca provecho de todas las posibilidades de rendimiento que se ofrecen combinando SQL Sever y .NET.
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el rendimiento de tus BBDD - SolidQ Summit 2017
1. SOLIDQ SUMMIT MADRID 2017
#SQSummit17
Enrique Catalá | Mentor | ecatala@solidq.com | @enriquecatala
Guillermo Perez | DEV | gperez@solidq.com |
Capas de acceso a datos .NET escalables de
verdad: el batido perfecto para el rendimiento
de tus bases de datos
2. SOLIDQ SUMMIT MADRID 2017
Tipología de
acceso
Por conjuntos Por cursores
Patrones de
bajo nivel
Dinámico
Adhoc
Parametrizable
Estático
Stored
procedures
Arquitecturas
Modelo
conectividad
Conectada
Desconectada
Modelo de
desarrollo
Manual
ORM
3. SOLIDQ SUMMIT MADRID 2017
Fundamentos
• Tiempo de desarrollo
• Diferencia de roles
• Desarrollador vs. DBA
• Independencia de la
aplicación
• Uso de modelo de
datos
• Abstracción de servidor
de base de datos
Másmotivos
• Rechazo a T-SQL
• Manejo de cadenas
para acceso a datos
• Errores en tiempo de
ejecución vs.
Compilación
• Uso de lenguajes más
familiares
• Es más “cool”
11. SOLIDQ SUMMIT MADRID 2017
public class MyDbContext : DbContext
{
//...
public DbSet<Product> Products
{
get; set;
}
}
var product = _dbContext.Products
.Find(4);
var product2 =
_dbContext.Products
.AsNoTracking()
.Where(p => p.Id == 4)
.FirstOrDefault();
Implementación Dapper y EF Core
12. SOLIDQ SUMMIT MADRID 2017
using(var _dapper = new
SqlConnection(config.ConnectionString))
{
_dapper.Open();
var product =
_dapper.Query<Product>(@"
SELECT
Id,Name,Col1,Col2
FROM
[dbo].[Products]
WHERE
Id = @ProductId",
new
{
ProductId = 4
}).FirstOrDefault();
}
Implementación Dapper y EF Core
13.
14. SOLIDQ SUMMIT MADRID 2017
var order = _dbContext.Orders
.AsNoTracking()
.Include(o => o.Details)
.ThenInclude(d => d.Product)
.Include(o => o.Customer)
.Where(o => o.Id == 4);
Implementación Dapper y EF Core
Hierarchy Load
15. SOLIDQ SUMMIT MADRID 2017
var orders = _dapper.Query<Order,
Customer, Order>(
"/* Order join with customer */“
,(order, customer) => {
order.Customer = customer;
return order;
}
, queryParam
);
var details = _dapper.Query<OrderDetail,
Product,OrderDetail>(
"/* detail join with product */“
, (detail, product) => {
detail.Product = product;
return detail;
}
, queryParam
, splitOn: "OrderId,Id“
);
Implementación Dapper y EF Core
Hierarchy Load
16. SOLIDQ SUMMIT MADRID 2017
foreach (var order in orders)
{
order.Details = detailResult
.Where(d => d.OrderId == order.Id)
.ToList();
}
Implementación Dapper y EF Core
Hierarchy Load
17.
18. SOLIDQ SUMMIT MADRID 2017
Parallel.ForEach(orders, (order) =>
{
order.Details = detailResult
.Where(d => d.OrderId == order.Id)
.ToList();
});
Implementación Dapper y EF Core
Hierarchy Load
19.
20. SOLIDQ SUMMIT MADRID 2017
var ordersList =
_dapper.Query<Order, Customer, Order>(
/*
...
*/
);
var orders =
new ConcurrentDictionary<int, Order>(
ordersList
.ToDictionary(o =>o.Id, o => o)
);Implementación Dapper y EF Core
Hierarchy Load
21. SOLIDQ SUMMIT MADRID 2017
var detailsList =
_dapper.Query<OrderDetail,Product,OrderDetail>
(
/*
...
*/
);
var details = new ConcurrentDictionary
<int, IEnumerable<OrderDetail>> (
detailResult
.GroupBy(d => d.OrderId)
.ToDictionary(
d => d.FirstOrDefault().OrderId,
d => d.AsEnumerable()
)
);
Implementación Dapper y EF Core
Hierarchy Load
22. SOLIDQ SUMMIT MADRID 2017
Parallel.ForEach(orders, (o) =>
{
if (details.ContainsKey(o.Key))
o.Value.Details =
details[o.Key].ToList();
}
);
Implementación Dapper y EF Core
Hierarchy Load
27. SOLIDQ SUMMIT MADRID 2017
• Evita dependencia entre clases con el uso de
Interfaces
Arquitectura de
aplicación
• Evita procesados fila a fila
Capas de acceso a
datos
• La estructura de datos importa, no es todo BBDD
Complejidad
algorítmica
• Ya no estamos en los 90. Hasta tu móvil tiene 8
núcleos
Consideraciones de
concurrencia
• Elige con criterio y úsalo bienORMs
28. SOLIDQ SUMMIT MADRID 2017
• +500h de trabajo
• Clases 100% ONLINE en directo
• Proyecto fin de máster real para tu empresa
• Tutorías bajo demanda
• Laboratorios virtuales guiados paso a paso
• Invitación 1 día al SolidQ Summit Madrid
• Te ayudamos en tus proyectos de BI & Analytics
CONTENIDOS
• BI & Analytics Overview
• Data Warehousing y Modelo Dimensional
• Obtención de datos. ETL e Integración
• Soluciones Analíticas
• Análisis y Visualización de la información
• Proyecto Fin de Máster
“Con la evolución de los tiempos, es imprescindible estudiar todo lo que tiene que ver con real-time,
analytics y el mundo de los datos. Por lo que, consideré que tener formación en BI me podría ser muy
útil y me venía muy bien personalmente, porque nuestro sistema trata con muchísimas transacciones y
muchísima carga y ‘el relacional’ ya se nos estaba quedando pequeño.
El máster nos dio una visión bastante general de cómo implementar un proyecto y gestionarlo tú mismo
y cómo ver las soluciones de distintas maneras. Aunque tenía mis dudas de hacer una formación online,
la valoración es bastante positiva, las clases son muy interactivas y al final salió todo muy bien.”
Adolfo Gabriel
VP Software
Development, Payvision
Máster en BI & Analytics
Alumni
¡Plazas Limitadas!
Más información:
http://www.solidq.com/es/masterbi
CONTENIDOS
• BI & Analytics Overview
• Data Warehousing y Modelo Dimensional
• Obtención de datos. ETL e Integración
• Soluciones Analíticas
• Análisis y Visualización de la información
• Proyecto Fin de Máster