SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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
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
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”
SOLIDQ SUMMIT MADRID 2017
SOLIDQ SUMMIT MADRID 2017
Librería Método ¿Qué hace?
Query.PlanCompiler
.PlanCompiler
Compile(cqt.DbCommandTree ctree,
…….)
Compila query hacia SQL Server. Coste
de compilación. Aquí generalmente es
donde debemos poner esfuerzos en
optimizar linq
Objects.Elinq.Compi
ledELinqQueryState
GetExecutionPlan(MergeOption?
forMergeOption)
Obtener plan de ejecución ya
compilado previamente
Objects.Elinq.ELinq
QueryState
GetExecutionPlan(MergeOption?
forMergeOption)
Obtener plan de ejecución todavía no
compilado
Objects.ObjectQuer
y<T>
GetResults(MergeOption?
forMergeOption)
Obtiene datos. Incluye datos
GetExecutionPlan, Compile y el coste de
materializar incluido. Es el coste total
SOLIDQ SUMMIT MADRID 2017
List<T>
O(n)
Dictionary<T,U>
O(1)
SOLIDQ SUMMIT MADRID 2017
Generalmente es preferible hacer menos operaciones a la
BBDD con mas conjuntos de filas
SOLIDQ SUMMIT MADRID 2017
SOLIDQ SUMMIT MADRID 2017
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
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
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
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“
);
foreach (var order in orders)
{
order.Details = detailResult
.Where(d => d.OrderId == order.Id)
.ToList();
}
Implementación Dapper y EF Core
Hierarchy Load
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“
);
//Potencialmente peligroso sin un "lock“. Si ponemos un lock, lo
hacemos monothread
Parallel.ForEach(orders, (order) =>
{
order.Details = detailResult
.Where(d => d.OrderId == order.Id)
.ToList();
});
Implementación Dapper y EF Core
Hierarchy Load
SOLIDQ SUMMIT MADRID 2017
var ordersList = _dapper.Query<Order, Customer, Order>(
/*
...
*/
);
var orders = new ConcurrentDictionary<int, Order>(
ordersList.ToDictionary(o => o.Id, o => o)
);
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()
)
);
Parallel.ForEach(orders, (o) => {
if (details.ContainsKey(o.Key))
o.Value.Details = details[o.Key].ToList();
}
);
Implementación Dapper y EF Core
Hierarchy Load
SOLIDQ SUMMIT MADRID 2017
SOLIDQ SUMMIT MADRID 2017
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
SOLIDQ SUMMIT
MADRID 2017
GRACIAS!

Más contenido relacionado

La actualidad más candente

Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)
Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)
Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)Enrique Catala Bañuls
 
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...SolidQ
 
Aplicando R al análisis de rendimiento de un servidor - SolidQ Summit 2017
Aplicando R al análisis de rendimiento de un servidor -  SolidQ Summit 2017Aplicando R al análisis de rendimiento de un servidor -  SolidQ Summit 2017
Aplicando R al análisis de rendimiento de un servidor - SolidQ Summit 2017SolidQ
 
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017SolidQ
 
Implementar BI y no parar...¡todo es empezar!
Implementar BI y no parar...¡todo es empezar!Implementar BI y no parar...¡todo es empezar!
Implementar BI y no parar...¡todo es empezar!SolidQ
 
Posadev 2018 - Distributing shirts data (ES)
Posadev 2018 - Distributing shirts data (ES)Posadev 2018 - Distributing shirts data (ES)
Posadev 2018 - Distributing shirts data (ES)Alejandro Escobedo
 
Sql server ha muerto, larga vida a sql server
Sql server ha muerto, larga vida a sql serverSql server ha muerto, larga vida a sql server
Sql server ha muerto, larga vida a sql serverEnrique Catala Bañuls
 
Introducción R - Primeros pasos
Introducción R - Primeros pasosIntroducción R - Primeros pasos
Introducción R - Primeros pasosSolidQ
 
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...Afinando la Administración de SQL Server y Novedades de Administración 2016 -...
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...SolidQ
 
Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)SolidQ
 
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...SolidQ
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesEnrique Catala Bañuls
 

La actualidad más candente (14)

Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)
Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)
Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)
 
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
A todo gas: inyectando nitrógeno para incrementar la velocidad de las queries...
 
Tecnologíahtml5
Tecnologíahtml5Tecnologíahtml5
Tecnologíahtml5
 
Aplicando R al análisis de rendimiento de un servidor - SolidQ Summit 2017
Aplicando R al análisis de rendimiento de un servidor -  SolidQ Summit 2017Aplicando R al análisis de rendimiento de un servidor -  SolidQ Summit 2017
Aplicando R al análisis de rendimiento de un servidor - SolidQ Summit 2017
 
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017
¿Cómo sería AdventureWorks si lo diseñara SolidQ? - SolidQ Summit 2017
 
Implementar BI y no parar...¡todo es empezar!
Implementar BI y no parar...¡todo es empezar!Implementar BI y no parar...¡todo es empezar!
Implementar BI y no parar...¡todo es empezar!
 
Posadev 2018 - Distributing shirts data (ES)
Posadev 2018 - Distributing shirts data (ES)Posadev 2018 - Distributing shirts data (ES)
Posadev 2018 - Distributing shirts data (ES)
 
Big data, Hadoop, HDInsight
Big data, Hadoop, HDInsightBig data, Hadoop, HDInsight
Big data, Hadoop, HDInsight
 
Sql server ha muerto, larga vida a sql server
Sql server ha muerto, larga vida a sql serverSql server ha muerto, larga vida a sql server
Sql server ha muerto, larga vida a sql server
 
Introducción R - Primeros pasos
Introducción R - Primeros pasosIntroducción R - Primeros pasos
Introducción R - Primeros pasos
 
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...Afinando la Administración de SQL Server y Novedades de Administración 2016 -...
Afinando la Administración de SQL Server y Novedades de Administración 2016 -...
 
Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)
 
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
Operational Analytics, ¿amigo o enemigo de los ETLs y DQ clásicos? - SolidQ S...
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdades
 

Similar a Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el rendimiento de tus bases de datos

Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...SolidQ
 
ASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsPlain Concepts
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Airespeterpunk
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Azurer Data Factory en la práctica - SolidQ Summit 2017
Azurer Data Factory en la práctica - SolidQ Summit 2017Azurer Data Factory en la práctica - SolidQ Summit 2017
Azurer Data Factory en la práctica - SolidQ Summit 2017SolidQ
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005oswchavez
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidRicardo Monagas Medina
 
Drupal 7 a través Drupal Commerce
Drupal 7 a través Drupal CommerceDrupal 7 a través Drupal Commerce
Drupal 7 a través Drupal CommercePedro Cambra
 
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...SolidQ
 
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataCuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataRuben Pertusa Lopez
 
Entorno de datos Microsoft Cloud
Entorno de datos Microsoft CloudEntorno de datos Microsoft Cloud
Entorno de datos Microsoft CloudJoseph Lopez
 
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...SolidQ
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoDeivinson Tejeda
 
Open platform - Conferencia Esri 2016
Open platform  - Conferencia Esri 2016Open platform  - Conferencia Esri 2016
Open platform - Conferencia Esri 2016Esri España
 
De symfony 2013 dr. jenkins y mr. hyde - slides
De symfony 2013   dr. jenkins y mr. hyde - slidesDe symfony 2013   dr. jenkins y mr. hyde - slides
De symfony 2013 dr. jenkins y mr. hyde - slidesQuique Torras
 
De symfony 2013 dr. jenkins y mr. hyde - slides-842359017
De symfony 2013   dr. jenkins y mr. hyde - slides-842359017De symfony 2013   dr. jenkins y mr. hyde - slides-842359017
De symfony 2013 dr. jenkins y mr. hyde - slides-842359017Eduardo Gulias Davis
 
Migrando Qlik a Power BI - SolidQ Summit 2017
Migrando Qlik a Power BI - SolidQ Summit 2017Migrando Qlik a Power BI - SolidQ Summit 2017
Migrando Qlik a Power BI - SolidQ Summit 2017SolidQ
 

Similar a Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el rendimiento de tus bases de datos (20)

Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
 
Todomir
TodomirTodomir
Todomir
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
ASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard Tomàs
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Azurer Data Factory en la práctica - SolidQ Summit 2017
Azurer Data Factory en la práctica - SolidQ Summit 2017Azurer Data Factory en la práctica - SolidQ Summit 2017
Azurer Data Factory en la práctica - SolidQ Summit 2017
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
 
Drupal 7 a través Drupal Commerce
Drupal 7 a través Drupal CommerceDrupal 7 a través Drupal Commerce
Drupal 7 a través Drupal Commerce
 
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...
SSIS a fondo: monitorización y ajustes del servicio en producción - SolidQ Su...
 
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big DataCuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
Cuando los desarrolladores conocieron SSAS, Business Intelligence y Big Data
 
Entorno de datos Microsoft Cloud
Entorno de datos Microsoft CloudEntorno de datos Microsoft Cloud
Entorno de datos Microsoft Cloud
 
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
 
Open platform - Conferencia Esri 2016
Open platform  - Conferencia Esri 2016Open platform  - Conferencia Esri 2016
Open platform - Conferencia Esri 2016
 
De symfony 2013 dr. jenkins y mr. hyde - slides
De symfony 2013   dr. jenkins y mr. hyde - slidesDe symfony 2013   dr. jenkins y mr. hyde - slides
De symfony 2013 dr. jenkins y mr. hyde - slides
 
De symfony 2013 dr. jenkins y mr. hyde - slides-842359017
De symfony 2013   dr. jenkins y mr. hyde - slides-842359017De symfony 2013   dr. jenkins y mr. hyde - slides-842359017
De symfony 2013 dr. jenkins y mr. hyde - slides-842359017
 
Migrando Qlik a Power BI - SolidQ Summit 2017
Migrando Qlik a Power BI - SolidQ Summit 2017Migrando Qlik a Power BI - SolidQ Summit 2017
Migrando Qlik a Power BI - SolidQ Summit 2017
 

Más de Enrique Catala Bañuls

Capas de acceso a datos .net escalables de verdad contra SQL Server
Capas de acceso a datos .net escalables de verdad contra SQL ServerCapas de acceso a datos .net escalables de verdad contra SQL Server
Capas de acceso a datos .net escalables de verdad contra SQL ServerEnrique Catala Bañuls
 
Aplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorAplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorEnrique Catala Bañuls
 
Dawarehouse como servicio en azure (sqldw)
Dawarehouse como servicio en azure (sqldw)Dawarehouse como servicio en azure (sqldw)
Dawarehouse como servicio en azure (sqldw)Enrique Catala Bañuls
 
Datawarehouse como servicio en azure (sqldw)
Datawarehouse como servicio en azure (sqldw)Datawarehouse como servicio en azure (sqldw)
Datawarehouse como servicio en azure (sqldw)Enrique Catala Bañuls
 
Como leer planes de ejecución - edición 2015
Como leer planes de ejecución - edición 2015Como leer planes de ejecución - edición 2015
Como leer planes de ejecución - edición 2015Enrique Catala Bañuls
 
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...Enrique Catala Bañuls
 
Escenarios híbridos con sql server 2014
Escenarios híbridos con sql server 2014Escenarios híbridos con sql server 2014
Escenarios híbridos con sql server 2014Enrique Catala Bañuls
 
Planes de ejecución en sql server 2014
Planes de ejecución en sql server 2014Planes de ejecución en sql server 2014
Planes de ejecución en sql server 2014Enrique Catala Bañuls
 
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azure
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azureEscalabilidad horizontal y arquitecturas elásticas en Microsoft azure
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azureEnrique Catala Bañuls
 
Novedades de SQL Server 2014 en motor relacional
Novedades de SQL Server 2014 en motor relacionalNovedades de SQL Server 2014 en motor relacional
Novedades de SQL Server 2014 en motor relacionalEnrique Catala Bañuls
 
Experiencias de migraciones a sql server 2012-2014
Experiencias de migraciones a sql server 2012-2014 Experiencias de migraciones a sql server 2012-2014
Experiencias de migraciones a sql server 2012-2014 Enrique Catala Bañuls
 
Guias y recomendaciones para instalar y configurar clusters de sql server
Guias y recomendaciones para instalar y configurar clusters de sql serverGuias y recomendaciones para instalar y configurar clusters de sql server
Guias y recomendaciones para instalar y configurar clusters de sql serverEnrique Catala Bañuls
 

Más de Enrique Catala Bañuls (20)

Capas de acceso a datos .net escalables de verdad contra SQL Server
Capas de acceso a datos .net escalables de verdad contra SQL ServerCapas de acceso a datos .net escalables de verdad contra SQL Server
Capas de acceso a datos .net escalables de verdad contra SQL Server
 
Aplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorAplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidor
 
Query store
Query storeQuery store
Query store
 
Planes de ejecucion 2016
Planes de ejecucion 2016Planes de ejecucion 2016
Planes de ejecucion 2016
 
Dawarehouse como servicio en azure (sqldw)
Dawarehouse como servicio en azure (sqldw)Dawarehouse como servicio en azure (sqldw)
Dawarehouse como servicio en azure (sqldw)
 
Query store
Query storeQuery store
Query store
 
Planes de ejecucion 2
Planes de ejecucion 2Planes de ejecucion 2
Planes de ejecucion 2
 
Planes de ejecucion 1
Planes de ejecucion 1Planes de ejecucion 1
Planes de ejecucion 1
 
Migración a sql server 2016
Migración a sql server 2016Migración a sql server 2016
Migración a sql server 2016
 
Datawarehouse como servicio en azure (sqldw)
Datawarehouse como servicio en azure (sqldw)Datawarehouse como servicio en azure (sqldw)
Datawarehouse como servicio en azure (sqldw)
 
Como leer planes de ejecución - edición 2015
Como leer planes de ejecución - edición 2015Como leer planes de ejecución - edición 2015
Como leer planes de ejecución - edición 2015
 
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...
 
SQLCLR: .NET en el core de sql server
SQLCLR: .NET en el core de sql serverSQLCLR: .NET en el core de sql server
SQLCLR: .NET en el core de sql server
 
Escenarios híbridos con sql server 2014
Escenarios híbridos con sql server 2014Escenarios híbridos con sql server 2014
Escenarios híbridos con sql server 2014
 
Planes de ejecución en sql server 2014
Planes de ejecución en sql server 2014Planes de ejecución en sql server 2014
Planes de ejecución en sql server 2014
 
Transacciones diferidas
Transacciones diferidasTransacciones diferidas
Transacciones diferidas
 
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azure
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azureEscalabilidad horizontal y arquitecturas elásticas en Microsoft azure
Escalabilidad horizontal y arquitecturas elásticas en Microsoft azure
 
Novedades de SQL Server 2014 en motor relacional
Novedades de SQL Server 2014 en motor relacionalNovedades de SQL Server 2014 en motor relacional
Novedades de SQL Server 2014 en motor relacional
 
Experiencias de migraciones a sql server 2012-2014
Experiencias de migraciones a sql server 2012-2014 Experiencias de migraciones a sql server 2012-2014
Experiencias de migraciones a sql server 2012-2014
 
Guias y recomendaciones para instalar y configurar clusters de sql server
Guias y recomendaciones para instalar y configurar clusters de sql serverGuias y recomendaciones para instalar y configurar clusters de sql server
Guias y recomendaciones para instalar y configurar clusters de sql server
 

Último

Análisis estructural del restaurante submarino de Valencia oceanographic
Análisis estructural del restaurante submarino de Valencia oceanographicAnálisis estructural del restaurante submarino de Valencia oceanographic
Análisis estructural del restaurante submarino de Valencia oceanographicalejandrosagre14
 
Seguridad y privacidad (1).pptx OdayYoah
Seguridad y privacidad (1).pptx OdayYoahSeguridad y privacidad (1).pptx OdayYoah
Seguridad y privacidad (1).pptx OdayYoahodalisnicoles
 
Estudio Índice de Igualdad 2024 de Ipsos
Estudio Índice de Igualdad 2024 de IpsosEstudio Índice de Igualdad 2024 de Ipsos
Estudio Índice de Igualdad 2024 de IpsosEmisor Digital
 
Países con mayores líneas de trenes de alta velocidad (2021).pdf
Países con  mayores líneas de trenes de alta velocidad  (2021).pdfPaíses con  mayores líneas de trenes de alta velocidad  (2021).pdf
Países con mayores líneas de trenes de alta velocidad (2021).pdfJC Díaz Herrera
 
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptx
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptxCODEX ALIMENTARIUS Y OCTOGONOS euks.pptx
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptxfabriciosernaquechir
 
¿Qué es el texto científico? Presentación para la clase de comunicación escri...
¿Qué es el texto científico? Presentación para la clase de comunicación escri...¿Qué es el texto científico? Presentación para la clase de comunicación escri...
¿Qué es el texto científico? Presentación para la clase de comunicación escri...Daniela Márquez Sena
 
Presentación Navegadores de Internet.pptx
Presentación Navegadores de Internet.pptxPresentación Navegadores de Internet.pptx
Presentación Navegadores de Internet.pptxUniversidad de Sonora
 
Diapositivas de recolección de datos tema en especifico
Diapositivas de recolección de datos tema en especificoDiapositivas de recolección de datos tema en especifico
Diapositivas de recolección de datos tema en especificojuancarlos63884
 
China y sus transacciones comerciales-financieras con el exterior (2024).pdf
China y sus transacciones comerciales-financieras con el exterior (2024).pdfChina y sus transacciones comerciales-financieras con el exterior (2024).pdf
China y sus transacciones comerciales-financieras con el exterior (2024).pdfJC Díaz Herrera
 
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023Estudio sobre tenencia de animales domésticos en Madrid 2019-2023
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023mmolina546
 
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERAL
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERALCUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERAL
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERALCarlosDelgadoMiranda
 
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdf
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdfREPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdf
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdfIrapuatoCmovamos
 
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdf
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdfGRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdf
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdfelielarmandoeche2
 
Los países de AL con mayor población blanca europea (2024).pdf
Los países de AL con mayor población blanca europea (2024).pdfLos países de AL con mayor población blanca europea (2024).pdf
Los países de AL con mayor población blanca europea (2024).pdfJC Díaz Herrera
 
trabajo aplicativo conflictos sociales ong y ccss
trabajo aplicativo conflictos sociales ong y ccsstrabajo aplicativo conflictos sociales ong y ccss
trabajo aplicativo conflictos sociales ong y ccsslaurenteguevaraluise
 
01 SIMULACRO 2024.pdf unijjajajajjaaaajj
01 SIMULACRO 2024.pdf unijjajajajjaaaajj01 SIMULACRO 2024.pdf unijjajajajjaaaajj
01 SIMULACRO 2024.pdf unijjajajajjaaaajjmatiasccoyllomarca
 
2287-Texto del artículo-1259innova9-1-10-20230909.pdf
2287-Texto del artículo-1259innova9-1-10-20230909.pdf2287-Texto del artículo-1259innova9-1-10-20230909.pdf
2287-Texto del artículo-1259innova9-1-10-20230909.pdfCamiloVasconez
 
METODOLOGIA DE INVESTIGACION DE MARIO BUNGE
METODOLOGIA DE INVESTIGACION DE MARIO BUNGEMETODOLOGIA DE INVESTIGACION DE MARIO BUNGE
METODOLOGIA DE INVESTIGACION DE MARIO BUNGEBrusRimasccaHuarancc
 
Ideas liberales en Chile.pptx2019historiadechile
Ideas liberales en Chile.pptx2019historiadechileIdeas liberales en Chile.pptx2019historiadechile
Ideas liberales en Chile.pptx2019historiadechilealcachofa6
 
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssjOrlandoBardales3
 

Último (20)

Análisis estructural del restaurante submarino de Valencia oceanographic
Análisis estructural del restaurante submarino de Valencia oceanographicAnálisis estructural del restaurante submarino de Valencia oceanographic
Análisis estructural del restaurante submarino de Valencia oceanographic
 
Seguridad y privacidad (1).pptx OdayYoah
Seguridad y privacidad (1).pptx OdayYoahSeguridad y privacidad (1).pptx OdayYoah
Seguridad y privacidad (1).pptx OdayYoah
 
Estudio Índice de Igualdad 2024 de Ipsos
Estudio Índice de Igualdad 2024 de IpsosEstudio Índice de Igualdad 2024 de Ipsos
Estudio Índice de Igualdad 2024 de Ipsos
 
Países con mayores líneas de trenes de alta velocidad (2021).pdf
Países con  mayores líneas de trenes de alta velocidad  (2021).pdfPaíses con  mayores líneas de trenes de alta velocidad  (2021).pdf
Países con mayores líneas de trenes de alta velocidad (2021).pdf
 
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptx
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptxCODEX ALIMENTARIUS Y OCTOGONOS euks.pptx
CODEX ALIMENTARIUS Y OCTOGONOS euks.pptx
 
¿Qué es el texto científico? Presentación para la clase de comunicación escri...
¿Qué es el texto científico? Presentación para la clase de comunicación escri...¿Qué es el texto científico? Presentación para la clase de comunicación escri...
¿Qué es el texto científico? Presentación para la clase de comunicación escri...
 
Presentación Navegadores de Internet.pptx
Presentación Navegadores de Internet.pptxPresentación Navegadores de Internet.pptx
Presentación Navegadores de Internet.pptx
 
Diapositivas de recolección de datos tema en especifico
Diapositivas de recolección de datos tema en especificoDiapositivas de recolección de datos tema en especifico
Diapositivas de recolección de datos tema en especifico
 
China y sus transacciones comerciales-financieras con el exterior (2024).pdf
China y sus transacciones comerciales-financieras con el exterior (2024).pdfChina y sus transacciones comerciales-financieras con el exterior (2024).pdf
China y sus transacciones comerciales-financieras con el exterior (2024).pdf
 
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023Estudio sobre tenencia de animales domésticos en Madrid 2019-2023
Estudio sobre tenencia de animales domésticos en Madrid 2019-2023
 
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERAL
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERALCUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERAL
CUENCA MADRE DE DIOS-BOLIVIA INFORMACIÓN GENERAL
 
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdf
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdfREPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdf
REPORTE DE HOMICIDIO DOLOSO-ABRIL-2024.pdf
 
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdf
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdfGRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdf
GRUPO 3 ACTIVIDADES Integradoras Universidad cesar vallejo.pdf
 
Los países de AL con mayor población blanca europea (2024).pdf
Los países de AL con mayor población blanca europea (2024).pdfLos países de AL con mayor población blanca europea (2024).pdf
Los países de AL con mayor población blanca europea (2024).pdf
 
trabajo aplicativo conflictos sociales ong y ccss
trabajo aplicativo conflictos sociales ong y ccsstrabajo aplicativo conflictos sociales ong y ccss
trabajo aplicativo conflictos sociales ong y ccss
 
01 SIMULACRO 2024.pdf unijjajajajjaaaajj
01 SIMULACRO 2024.pdf unijjajajajjaaaajj01 SIMULACRO 2024.pdf unijjajajajjaaaajj
01 SIMULACRO 2024.pdf unijjajajajjaaaajj
 
2287-Texto del artículo-1259innova9-1-10-20230909.pdf
2287-Texto del artículo-1259innova9-1-10-20230909.pdf2287-Texto del artículo-1259innova9-1-10-20230909.pdf
2287-Texto del artículo-1259innova9-1-10-20230909.pdf
 
METODOLOGIA DE INVESTIGACION DE MARIO BUNGE
METODOLOGIA DE INVESTIGACION DE MARIO BUNGEMETODOLOGIA DE INVESTIGACION DE MARIO BUNGE
METODOLOGIA DE INVESTIGACION DE MARIO BUNGE
 
Ideas liberales en Chile.pptx2019historiadechile
Ideas liberales en Chile.pptx2019historiadechileIdeas liberales en Chile.pptx2019historiadechile
Ideas liberales en Chile.pptx2019historiadechile
 
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj
486462981-Defectos-Fruta-Banano-1.pdfaksjsjssj
 

Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el rendimiento de tus bases de datos

  • 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”
  • 5. SOLIDQ SUMMIT MADRID 2017 Librería Método ¿Qué hace? Query.PlanCompiler .PlanCompiler Compile(cqt.DbCommandTree ctree, …….) Compila query hacia SQL Server. Coste de compilación. Aquí generalmente es donde debemos poner esfuerzos en optimizar linq Objects.Elinq.Compi ledELinqQueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado previamente Objects.Elinq.ELinq QueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado Objects.ObjectQuer y<T> GetResults(MergeOption? forMergeOption) Obtiene datos. Incluye datos GetExecutionPlan, Compile y el coste de materializar incluido. Es el coste total
  • 6. SOLIDQ SUMMIT MADRID 2017 List<T> O(n) Dictionary<T,U> O(1)
  • 7. SOLIDQ SUMMIT MADRID 2017 Generalmente es preferible hacer menos operaciones a la BBDD con mas conjuntos de filas
  • 8.
  • 11.
  • 12. 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
  • 13. 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
  • 14.
  • 15. 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
  • 16. 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“ ); 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 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“ ); //Potencialmente peligroso sin un "lock“. Si ponemos un lock, lo hacemos monothread 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) ); 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() ) ); Parallel.ForEach(orders, (o) => { if (details.ContainsKey(o.Key)) o.Value.Details = details[o.Key].ToList(); } ); Implementación Dapper y EF Core Hierarchy Load
  • 21.
  • 24.
  • 25. 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