SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
“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!!!

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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 a 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 a 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
 

Más de 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
 

Más de 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
 

Último

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (19)

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

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