SlideShare a Scribd company logo
1 of 27
Download to read offline
“Capas de acceso a datos .NET
escalables de verdad contra SQL
Server”
Enrique Catalá Bañuls
@enriquecatala
ecatala@solidq.com
enrique@enriquecatala.com
MAD · NOV 24-25 · 2017
Temario
MAD · NOV 24-25 · 2017
1. Propuesta de problema
2. Patrones de acceso a datos
3. Objetos
4. Concurrencia
5. Almacenamiento
Enrique Catalá Bañuls
▪ Ingeniero Informático
▪ Microsoft Data Platform MVP
▪ Mentor en SolidQ
▪ Tuning y alta disponibilidad
ecatala@solidq.com www.solidq.com
@enriquecatala www.enriquecatala.com
Enrique Catala - ecatala@solidq.com - @enriquecatala
Mínimo
coste
Datos IoT
masivos en
formato
propietario
Procesamiento
complejo
previo
historificado
Historificado
no
dependiente
del nº de
eventos
Explotación de
datos
simultanea
¿De qué va esta
sesión?
Enrique Catala - ecatala@solidq.com - @enriquecatala
Mínimo
coste
Datos IoT
masivos en
formato
propietario
Procesamiento
complejo previo
historificado
Historificado no
dependiente del
nº de eventos
Explotación de
datos
simultanea
Problema a solucionar: Planteamientos
•C# y SQL Server
¿Tecnología a utilizar?
•Elijamos
¿Patron de acceso a datos?
•Patrones
Concurrencia
•Elijamos
¿Modelo de almacenamiento?
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
Enrique Catala - ecatala@solidq.com - @enriquecatala
DEMO1
ADHOC
VS
PREPARED QUERIES
Enrique Catala - ecatala@solidq.com - @enriquecatala
DEMO2
ROW BY ROW
VS
BATCH
Generalmente es preferible hacer menos operaciones a la
BBDD con mas conjuntos de filas
Enrique Catala - ecatala@solidq.com - @enriquecatala
DEMO3
LIST
VS
DICTIONARY
List<T>
O(n)
Dictionary<T,U>
O(1)
System.Collections.Concurrent
Proteje acceso a variables
Utiliza patrones como
ReaderWriterLockSlim
Evita lock(this)
No dejes
hilos
huerfanos
Concurrency Visualizer
for VS
Consideraciones concurrencia
Enrique Catala - ecatala@solidq.com - @enriquecatala
public void MethodWithLock()
{
lock (syncLock)
{
// código monothread
}
}
ESTO NO SE HACE!
Consideraciones concurrencia
Enrique Catala - ecatala@solidq.com - @enriquecatala
Patrón multiples lectores, un escritor
Consideraciones concurrencia
public class MultipleReadsOneWriter
{
private volatile int value;
private ReaderWriterLockSlim rwls;
public MultipleReadsOneWriter()
{
rwls = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
}
Enrique Catala - ecatala@solidq.com - @enriquecatala
Bloqueo ligero para lectores
Consideraciones concurrencia
public int ReadValue()
{
int result = default(int);
rwls.EnterReadLock();
try
{
result = value;
}
finally
{
rwls.ExitReadLock();
}
return result;
}
Enrique Catala - ecatala@solidq.com - @enriquecatala
Bloqueo duro para escritores
Consideraciones concurrencia
public void WriteValue(int number)
{
rwls.EnterWriteLock();
try
{
value = number;
}
finally
{
rwls.ExitWriteLock();
}
}
Enrique Catala - ecatala@solidq.com - @enriquecatala
Tentativa de bloqueo y bloqueo posterior duro
Consideraciones concurrencia
public void WriteValueIfEqual(int compare, int number)
{
rwls.EnterUpgradeableReadLock();
try
{
int current = value;
if (current == compare)
{
rwls.EnterWriteLock();
try
{
value = number;
}
finally
{
rwls.ExitWriteLock();
}
}
}
finally
{
rwls.ExitUpgradeableReadLock();
}
}
Enrique Catala - ecatala@solidq.com - @enriquecatala
Lock free
Consideraciones concurrencia
•ConcurrentDictionary
Cargar diccionarios
•Modelo desconectado
•Secuencias
Reserva de IDs
•Lectura de datos IoT
•Inserción en
diccionario con ID
asignado en secuencia
Carga de eventos en
Diccionario vacío
•Código multihilo
lockfree
•Cada thread
independiente sobre el
mismo diccionario
Procesado multihilo
•BCP directo
Flush a BBDD
Enrique Catala - ecatala@solidq.com - @enriquecatala
Lock free
Consideraciones concurrencia
Cargar diccionarios
• ConcurrentDictionary
Reserva de IDs
• Modelo desconectado
• Secuencias
Carga de eventos
en Diccionario vacío
• Asignación de IDs
reservados
Procesado multihilo
Flush a BBDD
protected long GetDictionaryKey(String mykey)
{
try
{
long retorno = -1;
if (!MyDictionary.TryGetValue(mykey, out retorno))
{
GetNextSequenceValuesMyDictionary();
}
return (retorno);
}
catch (Exception)
{
throw;
}
}
EXEC sp_sequence_get_range @sequence_name = N'<sequence>' ,
@range_size = range_size ,
@range_first_value = range_first_value OUTPUT
Enrique Catala - ecatala@solidq.com - @enriquecatala
Lock free
Consideraciones concurrencia
Cargar diccionarios
• ConcurrentDictionary
Reserva de IDs
• Modelo desconectado
• Secuencias
Carga de eventos
en Diccionario vacío
• Asignación de IDs
reservados
Procesado multihilo
Flush a BBDD
Parallel.For(0,
numeroElementosAProcesar,
new ParallelOptions {
MaxDegreeOfParallelism = MAXDOP },
i =>
{
try
{
Event eventTmp;
if (DictionaryToFlush.TryGetValue(i,out eventTmp))
{
/// Your complex code goes here
///
... ... ... ... ... ... ... ... ... ...
DictionaryToFlush.TryUpdate(i, eventTmp);
}
}
catch (Exception e)
{
exceptions.Enqueue(e);
}
});
Enrique Catala - ecatala@solidq.com - @enriquecatala
Lock free
Consideraciones concurrencia
Cargar diccionarios
• ConcurrentDictionary
Reserva de IDs
• Modelo desconectado
• Secuencias
Carga de eventos
en Diccionario vacío
• Asignación de IDs
reservados
Procesado multihilo
Flush a BBDD
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(cn2))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.ColumnMappings.Add(“key", “key");
bulkCopy.ColumnMappings.Add(“Value", “value");
///Libreria FastMember (NuGet) para convertir al vuelo
///
using (var reader =
ObjectReader.Create(cdNew.Values, “key", “Value"))
{
bulkCopy.DestinationTableName = “YourTable";
bulkCopy.WriteToServer(reader);
}
}
Enrique Catala - ecatala@solidq.com - @enriquecatala
Almacenamiento columnar
Grandes volúmenes de datos
• Bloques mínimos de 1M filas
Elevada compression
Lectura minima de datos
Optimiza cache L2
Enrique Catala - ecatala@solidq.com - @enriquecatala
Almacenamiento in-memory
Otro motor relacional
Máximo
rendimiento
Compatibilidad
Lock free
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
Enrique Catala - ecatala@solidq.com - @enriquecatala
DEMO: TSQL Query Analytics
DW rendimiento queries
Alertas proactivas
PowerBI para análisis a cualquier nivel
PaaS
http://www.solidq.com/es/tsql-query-analytics/
• 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
• Un motor relacional no son solo tablas,
aprovecha la tecnología eficientemente.
Almacenamiento
ecatala@solidq.com
www.solidq.com
@enriquecatala
Gracias!!!

More Related Content

What's hot

Continuidad del Negocio con Azure SQL Database
Continuidad del Negocio con Azure SQL DatabaseContinuidad del Negocio con Azure SQL Database
Continuidad del Negocio con Azure SQL DatabaseAdrian Miranda
 
Novedades SQL Azure v12
Novedades SQL Azure v12Novedades SQL Azure v12
Novedades SQL Azure v12SolidQ
 
Seminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasSeminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasMongoDB
 
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 2
MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 2MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 2
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 2MongoDB
 
Sql azure data warehouse gab jorge muchaypina
Sql azure data warehouse gab   jorge muchaypinaSql azure data warehouse gab   jorge muchaypina
Sql azure data warehouse gab jorge muchaypinaMUG Perú
 
Query store
Query storeQuery store
Query storeSolidQ
 
Arquitectura a escala
Arquitectura a escalaArquitectura a escala
Arquitectura a escalaElasticsearch
 
Arquitectura a escala
Arquitectura a escalaArquitectura a escala
Arquitectura a escalaElasticsearch
 
Sql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datosSql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datosSpanishPASSVC
 
SQL Server 2014 Mejoras del DB Engine
SQL Server 2014 Mejoras del DB EngineSQL Server 2014 Mejoras del DB Engine
SQL Server 2014 Mejoras del DB EngineEduardo Castro
 
CloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosCloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosJohn Bulla
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + AzureNacho Fanjul Corteguera
 
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014SolidQ
 
Novedades en SQL Server 2019
Novedades en SQL Server 2019Novedades en SQL Server 2019
Novedades en SQL Server 2019Eduardo Castro
 
Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014mszuchman
 
In memory
In memoryIn memory
In memorySolidQ
 

What's hot (20)

Continuidad del Negocio con Azure SQL Database
Continuidad del Negocio con Azure SQL DatabaseContinuidad del Negocio con Azure SQL Database
Continuidad del Negocio con Azure SQL Database
 
DynamoDB, análisis del paper.
DynamoDB, análisis del paper.DynamoDB, análisis del paper.
DynamoDB, análisis del paper.
 
Novedades SQL Azure v12
Novedades SQL Azure v12Novedades SQL Azure v12
Novedades SQL Azure v12
 
Seminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con AtlasSeminario web: Simplificando el uso de su base de datos con Atlas
Seminario web: Simplificando el uso de su base de datos con Atlas
 
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 2
MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 2MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 2
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 2
 
Sql azure data warehouse gab jorge muchaypina
Sql azure data warehouse gab   jorge muchaypinaSql azure data warehouse gab   jorge muchaypina
Sql azure data warehouse gab jorge muchaypina
 
Query store
Query storeQuery store
Query store
 
Arquitectura a escala
Arquitectura a escalaArquitectura a escala
Arquitectura a escala
 
Arquitectura a escala
Arquitectura a escalaArquitectura a escala
Arquitectura a escala
 
Sql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datosSql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datos
 
SQL Server 2014 Mejoras del DB Engine
SQL Server 2014 Mejoras del DB EngineSQL Server 2014 Mejoras del DB Engine
SQL Server 2014 Mejoras del DB Engine
 
CloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datosCloudCamp - Big Data – La revolución de los datos
CloudCamp - Big Data – La revolución de los datos
 
Big data, Hadoop, HDInsight
Big data, Hadoop, HDInsightBig data, Hadoop, HDInsight
Big data, Hadoop, HDInsight
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure
 
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014
Novedades deSQL Server 2014 en Motor Relacional | SolidQ Summit 2014
 
Novedades en SQL Server 2019
Novedades en SQL Server 2019Novedades en SQL Server 2019
Novedades en SQL Server 2019
 
Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014
 
Data Ingestion in AWS
Data Ingestion in AWSData Ingestion in AWS
Data Ingestion in AWS
 
In memory
In memoryIn memory
In memory
 
Big data2
Big data2Big data2
Big data2
 

Similar to Capas de acceso a datos .net escalables de verdad contra SQL Server

SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en AzureGermán Küber
 
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
 
Novedades SQL Server 2012 para desarrolladores
Novedades SQL Server 2012 para desarrolladoresNovedades SQL Server 2012 para desarrolladores
Novedades SQL Server 2012 para desarrolladoresEnrique Catala Bañuls
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAlberto Gimeno
 
Adaptive BI Framework
Adaptive BI Framework Adaptive BI Framework
Adaptive BI Framework SolidQ
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQLCycle-IT
 
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
 
NoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraNoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraWladimir Cabarcas
 
In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016Joseph Lopez
 
Database Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerDatabase Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerJulián Castiblanco
 
Nuevos escenarios BI con SQL Server 2014
Nuevos escenarios BI con SQL Server 2014Nuevos escenarios BI con SQL Server 2014
Nuevos escenarios BI con SQL Server 2014Ruben Pertusa Lopez
 
No SQL MSATS MongoDB | SolidQ Summit 2014
No SQL MSATS MongoDB | SolidQ Summit 2014No SQL MSATS MongoDB | SolidQ Summit 2014
No SQL MSATS MongoDB | SolidQ Summit 2014SolidQ
 
Aplicaciones de linea de negocio con silverlight y share point
Aplicaciones de linea de negocio con silverlight y share pointAplicaciones de linea de negocio con silverlight y share point
Aplicaciones de linea de negocio con silverlight y share pointRoberto Carlos
 

Similar to Capas de acceso a datos .net escalables de verdad contra SQL Server (20)

SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration ServicesSolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
SolidQ Summit 2018 - Qué necesita saber un DBA de Integration Services
 
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
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en Azure
 
Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)Datawarehouse como servicio en Azure (sqldw)
Datawarehouse como servicio en Azure (sqldw)
 
Novedades SQL Server 2012 para desarrolladores
Novedades SQL Server 2012 para desarrolladoresNovedades SQL Server 2012 para desarrolladores
Novedades SQL Server 2012 para desarrolladores
 
avanttic - webinar: Oracle Seguridad-Regulación (02-07-2015)
avanttic - webinar: Oracle Seguridad-Regulación (02-07-2015)avanttic - webinar: Oracle Seguridad-Regulación (02-07-2015)
avanttic - webinar: Oracle Seguridad-Regulación (02-07-2015)
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Adaptive BI Framework
Adaptive BI Framework Adaptive BI Framework
Adaptive BI Framework
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
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...
 
NoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraNoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache Cassandra
 
In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016
 
Database Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL ServerDatabase Fundamentals - Sesión 1 - SQL Server
Database Fundamentals - Sesión 1 - SQL Server
 
Nuevos escenarios BI con SQL Server 2014
Nuevos escenarios BI con SQL Server 2014Nuevos escenarios BI con SQL Server 2014
Nuevos escenarios BI con SQL Server 2014
 
No SQL MSATS MongoDB | SolidQ Summit 2014
No SQL MSATS MongoDB | SolidQ Summit 2014No SQL MSATS MongoDB | SolidQ Summit 2014
No SQL MSATS MongoDB | SolidQ Summit 2014
 
SGNext Elasticsearch
SGNext ElasticsearchSGNext Elasticsearch
SGNext Elasticsearch
 
Query store
Query storeQuery store
Query store
 
Aplicaciones de linea de negocio con silverlight y share point
Aplicaciones de linea de negocio con silverlight y share pointAplicaciones de linea de negocio con silverlight y share point
Aplicaciones de linea de negocio con silverlight y share point
 
Tecnologíahtml5
Tecnologíahtml5Tecnologíahtml5
Tecnologíahtml5
 
No-SQL, Azure Table Storage y MongoDB
No-SQL, Azure Table Storage y MongoDBNo-SQL, Azure Table Storage y MongoDB
No-SQL, Azure Table Storage y MongoDB
 

More from Enrique Catala Bañuls

Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverEnrique Catala Bañuls
 
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...Enrique Catala Bañuls
 
Planes de ejecución 3.0 sql 2016 y v next
Planes de ejecución 3.0 sql 2016 y v nextPlanes de ejecución 3.0 sql 2016 y v next
Planes de ejecución 3.0 sql 2016 y v nextEnrique 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
 
Sql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresSql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresEnrique 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
 
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
 
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
 
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
 
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
 

More from Enrique Catala Bañuls (20)

Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql server
 
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...
 
Planes de ejecución 3.0 sql 2016 y v next
Planes de ejecución 3.0 sql 2016 y v nextPlanes de ejecución 3.0 sql 2016 y v next
Planes de ejecución 3.0 sql 2016 y v next
 
Paralelismo en sql server
Paralelismo en sql serverParalelismo en sql server
Paralelismo en 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
 
Planes de ejecucion 2016
Planes de ejecucion 2016Planes de ejecucion 2016
Planes de ejecucion 2016
 
Sql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladoresSql server 2016 novedades para desarrolladores
Sql server 2016 novedades para desarrolladores
 
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 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
 
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)
 
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...
 
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
 
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
 
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
 

Recently uploaded

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPO
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPOLA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPO
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPOv16959670
 
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCEL
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCELJUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCEL
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCELSebastinOrdez4
 
Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalEmanuelCastro64
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskbydaniela5
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024anasofiarodriguezcru
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6SaraMineiropalacio
 
tecnologia11-6 Juan Sebastián Gonzalez liceo
tecnologia11-6 Juan Sebastián Gonzalez liceotecnologia11-6 Juan Sebastián Gonzalez liceo
tecnologia11-6 Juan Sebastián Gonzalez liceoSebastinOrdez4
 
Materiales didácticos de Arelis y maria.
Materiales didácticos de Arelis y maria.Materiales didácticos de Arelis y maria.
Materiales didácticos de Arelis y maria.cabreraarelis37
 
tecnologia116.docx TRABAJO COLABORTIVO PRIMNER
tecnologia116.docx TRABAJO COLABORTIVO PRIMNERtecnologia116.docx TRABAJO COLABORTIVO PRIMNER
tecnologia116.docx TRABAJO COLABORTIVO PRIMNERedepmariaordonez
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdflauralizcano0319
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxhellendiaz12
 
.Informe electricidad y electronica.docx
.Informe electricidad y electronica.docx.Informe electricidad y electronica.docx
.Informe electricidad y electronica.docxCamila Ortiz
 
Taller de tecnología año 2024 11-2 sofia nava
Taller de tecnología año 2024  11-2 sofia navaTaller de tecnología año 2024  11-2 sofia nava
Taller de tecnología año 2024 11-2 sofia navaSofaNava1
 
tecnologia trabajo sobre excel avanzado método estadístico
tecnologia trabajo sobre excel avanzado método estadísticotecnologia trabajo sobre excel avanzado método estadístico
tecnologia trabajo sobre excel avanzado método estadísticojuliana280780
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
Análisis de Artefactos Tecnologicos .docx
Análisis de Artefactos Tecnologicos .docxAnálisis de Artefactos Tecnologicos .docx
Análisis de Artefactos Tecnologicos .docxmajovaru19
 
base de datos para tecnología de sara Garzón
base de datos para tecnología de sara Garzónbase de datos para tecnología de sara Garzón
base de datos para tecnología de sara GarzónSaraGarzon13
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAA
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAATRABAJO TECNOLOGÍA E INFORMATICA TABLAAA
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAASebastinOrdez4
 

Recently uploaded (20)

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPO
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPOLA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPO
LA ELECTRICIDAD Y LA ELECTRÓNICA TRABAJO EN GRUPO
 
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCEL
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCELJUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCEL
JUANITA Y SEBASTIAN TRABAJO TEGNOLOGIA TABLA EXCEL
 
Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamental
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6
 
tecnologia11-6 Juan Sebastián Gonzalez liceo
tecnologia11-6 Juan Sebastián Gonzalez liceotecnologia11-6 Juan Sebastián Gonzalez liceo
tecnologia11-6 Juan Sebastián Gonzalez liceo
 
Materiales didácticos de Arelis y maria.
Materiales didácticos de Arelis y maria.Materiales didácticos de Arelis y maria.
Materiales didácticos de Arelis y maria.
 
tecnologia116.docx TRABAJO COLABORTIVO PRIMNER
tecnologia116.docx TRABAJO COLABORTIVO PRIMNERtecnologia116.docx TRABAJO COLABORTIVO PRIMNER
tecnologia116.docx TRABAJO COLABORTIVO PRIMNER
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
 
.Informe electricidad y electronica.docx
.Informe electricidad y electronica.docx.Informe electricidad y electronica.docx
.Informe electricidad y electronica.docx
 
Taller de tecnología año 2024 11-2 sofia nava
Taller de tecnología año 2024  11-2 sofia navaTaller de tecnología año 2024  11-2 sofia nava
Taller de tecnología año 2024 11-2 sofia nava
 
tecnologia trabajo sobre excel avanzado método estadístico
tecnologia trabajo sobre excel avanzado método estadísticotecnologia trabajo sobre excel avanzado método estadístico
tecnologia trabajo sobre excel avanzado método estadístico
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
Análisis de Artefactos Tecnologicos .docx
Análisis de Artefactos Tecnologicos .docxAnálisis de Artefactos Tecnologicos .docx
Análisis de Artefactos Tecnologicos .docx
 
base de datos para tecnología de sara Garzón
base de datos para tecnología de sara Garzónbase de datos para tecnología de sara Garzón
base de datos para tecnología de sara Garzón
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAA
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAATRABAJO TECNOLOGÍA E INFORMATICA TABLAAA
TRABAJO TECNOLOGÍA E INFORMATICA TABLAAA
 

Capas de acceso a datos .net escalables de verdad contra SQL Server

  • 1. “Capas de acceso a datos .NET escalables de verdad contra SQL Server” Enrique Catalá Bañuls @enriquecatala ecatala@solidq.com enrique@enriquecatala.com MAD · NOV 24-25 · 2017
  • 2. Temario MAD · NOV 24-25 · 2017 1. Propuesta de problema 2. Patrones de acceso a datos 3. Objetos 4. Concurrencia 5. Almacenamiento
  • 3. Enrique Catalá Bañuls ▪ Ingeniero Informático ▪ Microsoft Data Platform MVP ▪ Mentor en SolidQ ▪ Tuning y alta disponibilidad ecatala@solidq.com www.solidq.com @enriquecatala www.enriquecatala.com
  • 4. Enrique Catala - ecatala@solidq.com - @enriquecatala Mínimo coste Datos IoT masivos en formato propietario Procesamiento complejo previo historificado Historificado no dependiente del nº de eventos Explotación de datos simultanea ¿De qué va esta sesión?
  • 5. Enrique Catala - ecatala@solidq.com - @enriquecatala Mínimo coste Datos IoT masivos en formato propietario Procesamiento complejo previo historificado Historificado no dependiente del nº de eventos Explotación de datos simultanea Problema a solucionar: Planteamientos •C# y SQL Server ¿Tecnología a utilizar? •Elijamos ¿Patron de acceso a datos? •Patrones Concurrencia •Elijamos ¿Modelo de almacenamiento?
  • 6. 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
  • 7. Enrique Catala - ecatala@solidq.com - @enriquecatala DEMO1 ADHOC VS PREPARED QUERIES
  • 8. Enrique Catala - ecatala@solidq.com - @enriquecatala DEMO2 ROW BY ROW VS BATCH
  • 9. Generalmente es preferible hacer menos operaciones a la BBDD con mas conjuntos de filas
  • 10. Enrique Catala - ecatala@solidq.com - @enriquecatala DEMO3 LIST VS DICTIONARY
  • 12. System.Collections.Concurrent Proteje acceso a variables Utiliza patrones como ReaderWriterLockSlim Evita lock(this) No dejes hilos huerfanos Concurrency Visualizer for VS Consideraciones concurrencia
  • 13. Enrique Catala - ecatala@solidq.com - @enriquecatala public void MethodWithLock() { lock (syncLock) { // código monothread } } ESTO NO SE HACE! Consideraciones concurrencia
  • 14. Enrique Catala - ecatala@solidq.com - @enriquecatala Patrón multiples lectores, un escritor Consideraciones concurrencia public class MultipleReadsOneWriter { private volatile int value; private ReaderWriterLockSlim rwls; public MultipleReadsOneWriter() { rwls = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); }
  • 15. Enrique Catala - ecatala@solidq.com - @enriquecatala Bloqueo ligero para lectores Consideraciones concurrencia public int ReadValue() { int result = default(int); rwls.EnterReadLock(); try { result = value; } finally { rwls.ExitReadLock(); } return result; }
  • 16. Enrique Catala - ecatala@solidq.com - @enriquecatala Bloqueo duro para escritores Consideraciones concurrencia public void WriteValue(int number) { rwls.EnterWriteLock(); try { value = number; } finally { rwls.ExitWriteLock(); } }
  • 17. Enrique Catala - ecatala@solidq.com - @enriquecatala Tentativa de bloqueo y bloqueo posterior duro Consideraciones concurrencia public void WriteValueIfEqual(int compare, int number) { rwls.EnterUpgradeableReadLock(); try { int current = value; if (current == compare) { rwls.EnterWriteLock(); try { value = number; } finally { rwls.ExitWriteLock(); } } } finally { rwls.ExitUpgradeableReadLock(); } }
  • 18. Enrique Catala - ecatala@solidq.com - @enriquecatala Lock free Consideraciones concurrencia •ConcurrentDictionary Cargar diccionarios •Modelo desconectado •Secuencias Reserva de IDs •Lectura de datos IoT •Inserción en diccionario con ID asignado en secuencia Carga de eventos en Diccionario vacío •Código multihilo lockfree •Cada thread independiente sobre el mismo diccionario Procesado multihilo •BCP directo Flush a BBDD
  • 19. Enrique Catala - ecatala@solidq.com - @enriquecatala Lock free Consideraciones concurrencia Cargar diccionarios • ConcurrentDictionary Reserva de IDs • Modelo desconectado • Secuencias Carga de eventos en Diccionario vacío • Asignación de IDs reservados Procesado multihilo Flush a BBDD protected long GetDictionaryKey(String mykey) { try { long retorno = -1; if (!MyDictionary.TryGetValue(mykey, out retorno)) { GetNextSequenceValuesMyDictionary(); } return (retorno); } catch (Exception) { throw; } } EXEC sp_sequence_get_range @sequence_name = N'<sequence>' , @range_size = range_size , @range_first_value = range_first_value OUTPUT
  • 20. Enrique Catala - ecatala@solidq.com - @enriquecatala Lock free Consideraciones concurrencia Cargar diccionarios • ConcurrentDictionary Reserva de IDs • Modelo desconectado • Secuencias Carga de eventos en Diccionario vacío • Asignación de IDs reservados Procesado multihilo Flush a BBDD Parallel.For(0, numeroElementosAProcesar, new ParallelOptions { MaxDegreeOfParallelism = MAXDOP }, i => { try { Event eventTmp; if (DictionaryToFlush.TryGetValue(i,out eventTmp)) { /// Your complex code goes here /// ... ... ... ... ... ... ... ... ... ... DictionaryToFlush.TryUpdate(i, eventTmp); } } catch (Exception e) { exceptions.Enqueue(e); } });
  • 21. Enrique Catala - ecatala@solidq.com - @enriquecatala Lock free Consideraciones concurrencia Cargar diccionarios • ConcurrentDictionary Reserva de IDs • Modelo desconectado • Secuencias Carga de eventos en Diccionario vacío • Asignación de IDs reservados Procesado multihilo Flush a BBDD using (SqlBulkCopy bulkCopy = new SqlBulkCopy(cn2)) { bulkCopy.BulkCopyTimeout = 0; bulkCopy.ColumnMappings.Add(“key", “key"); bulkCopy.ColumnMappings.Add(“Value", “value"); ///Libreria FastMember (NuGet) para convertir al vuelo /// using (var reader = ObjectReader.Create(cdNew.Values, “key", “Value")) { bulkCopy.DestinationTableName = “YourTable"; bulkCopy.WriteToServer(reader); } }
  • 22. Enrique Catala - ecatala@solidq.com - @enriquecatala Almacenamiento columnar Grandes volúmenes de datos • Bloques mínimos de 1M filas Elevada compression Lectura minima de datos Optimiza cache L2
  • 23. Enrique Catala - ecatala@solidq.com - @enriquecatala Almacenamiento in-memory Otro motor relacional Máximo rendimiento Compatibilidad Lock free
  • 24. 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
  • 25. Enrique Catala - ecatala@solidq.com - @enriquecatala DEMO: TSQL Query Analytics DW rendimiento queries Alertas proactivas PowerBI para análisis a cualquier nivel PaaS http://www.solidq.com/es/tsql-query-analytics/
  • 26. • 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 • Un motor relacional no son solo tablas, aprovecha la tecnología eficientemente. Almacenamiento