SlideShare une entreprise Scribd logo
1  sur  21
Entity Framework Core 2 VS
Micro ORM (performances)
Anthony Giretti
Tech Lead chez Nexus Innovations
http://anthonygiretti.com
Précédemment…
Licence /
Installation
Prise en
main
Communauté, documentation,
maturité, Fréquence Maj
Performances Support
différentes Bdd
Support
.Net Core
Transactions Async Testabilité
EF Package Nuget
Massive Télécharger 2
fichiers
Dapper Package Nuget
Ormlite Package Nuget
SimpleData Package Nuget
PetaPoco Package Nuget
NPoco Package Nuget
- Ils supportent tous l’éxécution des procédures stockées, vues, fonctions
- Ils sont tous protégés des injection SQL (paramétrisation des requêtes)
Précédemment, 3 Micro ORM représentaient une
réelle alternative à EF :
 Dapper pour ses performances exceptionnelles et sa communauté qui l’entoure
 NPoco pour la simplicité de sa syntaxe et ses performances
 OrmLite pour sa double syntaxe LINQ-like et SQL, et pour ses fonctionnalités
riches, et ses performances
Dapper
 Développé par l’équipe StackExchange
 Compatible avec plusieurs bases de données relationnelles:
 SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird
 API riche en fonctionnalités
 Communauté très active
 Performances très intéressantes (mapping le plus rapide)
 Supporte .Net Core, les transactions, et le requêtes asynchrones
 Relations non supportées, mapper facile à utiliser pour populer les relations
 Insert, Update, Delete uniquement en query texte : un peu plus fastidieux à
écrire
 Testable unitairement, grandement facilité avec « DapperWrapper » et
« DapperParameters » pour unit tester les procédures stockées
OrmLite
 Développé par l’équipe ServiceStack
 Compatible avec plusieurs bases de données relationnelles:
 SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird, VistaDB
 Double Syntaxe LINQ-Like (élégante) et SQL
 API riche en fonctionnalités
 Communauté active
 Performances intéressantes
 Supporte .Net Core, les transactions, et le requêtes asynchrones
 Testable unitairement
 Obligation de créer une query AdHoc pour populer un objet (relations non
supportées)
NPoco
 Fork de PetaPoco
 Même avantages de PetaPoco, avec des features additionnelles
 Mapping dans un objet existant possible
 Supporte les jeux de données multiples (comme EF, mais plus élégant)
 Async (mais pas toute les opérations)
 Et bien d’autres encore….
 Syntaxe quasiment identique, plus simple dans la plupart des cas
 Gestion des relations simplifiée
 Plus besoin d’attributs de mapping comme PetaPoco, les alias sont mieux pris en
charge
 Testable unitairement
 Moins populaire que PetaPoco, communauté moins active
Que s’est-il passé depuis ?
 Dapper n’a pas été mis à jour depuis 1 an
 Cependant une mise à jour est en préparation
Que s’est-il passé depuis ?
 NPoco a été mis à jour récemment
Que s’est-il passé depuis ?
 OrmLite a été mis à jour récemment
 Se prétend être le Micro Orm le plus rapide
Puis .NET Core 2.0 et EF 2.0 sont arrivés….
 .Net Core apporte jusque 25 % de performances supplémentaires par rapport à
.NET Core 1.1
 EF Core 2.0 apporte également son lot de nouveautés (prochain Meetup)
 Benchmark EF Core 2.0 (ce Meetup)
Scénario utilisé pour le nouveau benchmark
Requêtes utilisées pour le nouveau benchmark
 Une requête unique ramenant 500 enregistrements
SELECT TOP 500 [WorkOrderID] AS Id, P.Name AS ProductName, [OrderQty] AS Quantity, [DueDate]
AS Date
FROM [AdventureWorks2014].[Production].[WorkOrder] AS WO
INNER JOIN[Production].[Product] AS P ON P.ProductID = WO.ProductID
 Multiples itérations d’une requête ramenant 1 enregistrement
SELECT [WorkOrderID] AS Id, P.Name AS ProductName, [OrderQty] AS Quantity, [DueDate] AS Date
FROM [AdventureWorks2014].[Production].[WorkOrder] AS WO
INNER JOIN[Production].[Product] AS P ON P.ProductID = WO.ProductID
WHERE WorkOrderID = @Id
Comparaison des performances sous .NET 4.7
Comparaison des performances sous .NET Core 1.1
Comparaison des performances sous .NET Core 2.0
Conclusions de la comparaion par framework
 OrmLite est effectivement le micro Orm le plus rapide tout framework confondu
 Dapper n’est plus le micro Orm le plus rapide
 NPoco déçoit, ses performances ne sont plus aussi intéressantes.
 Entity Framework reste le moins performant tout framework confondu
Comparaison des performances par le nombre
d’itérations (charge moyenne)
Comparaison des performances par le nombre
d’itérations (charge élevée)
Conclusions de la comparaison par itérations
 OrmLite reste stable voir légèrement plus performant peu importe le framework
utilisé et la charge encaissée
 Dapper reste stable voir légèrement moins performant peu importe le
framework utilisé et la charge encaissée
 NPoco déçoit encore, ses performances avoisinent celles d’Entity Framework
 A forte charge Entity Framework n’est plus le plus lent sous .NET Core 2.0
 La plupart du temps à forte charge .NET Core 2.0 reste moins performant que
.NET Core 1.1, c’est l’inverse à charge moyenne (résultats similaires à charge
légère)
Enfin
 Entity Framework Core a fait d’énormes progrès en terme de performance, il est
parfois même plus performant que certains micro Orm.
 On espère que .NET Core va continuer à s’améliorer.
 Bel avenir pour OrmLite et Dapper
Code source des benchmarks
 .NET Core 1.1 et 2.0 : https://github.com/AnthonyGiretti/MicroOrmDemo.Core
 .NET 4.7 : https://github.com/AnthonyGiretti/MicroOrmDemo.net

Contenu connexe

Similaire à Entity framework core 2 vs micro orm performances

Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
Loïc Descotte
 

Similaire à Entity framework core 2 vs micro orm performances (20)

Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en ODataDe A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData
 
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
 
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
Du hard et des réseaux: Les outils pour construire l'internet des objets chez...
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
Les 10 bonnes raisons de choisir NetApp pour le DevOps
Les 10 bonnes raisons de choisir NetApp pour le DevOps Les 10 bonnes raisons de choisir NetApp pour le DevOps
Les 10 bonnes raisons de choisir NetApp pour le DevOps
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?
 
Démo puppet et état du projet
Démo puppet et état du projetDémo puppet et état du projet
Démo puppet et état du projet
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
CV Saddam ZEMMALI Professionel Fr
CV Saddam ZEMMALI Professionel FrCV Saddam ZEMMALI Professionel Fr
CV Saddam ZEMMALI Professionel Fr
 
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
Annexe1   éTude Comparative Sur Les Moteurs De RechercheAnnexe1   éTude Comparative Sur Les Moteurs De Recherche
Annexe1 éTude Comparative Sur Les Moteurs De Recherche
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
Dev ops@kelkoo
Dev ops@kelkoo Dev ops@kelkoo
Dev ops@kelkoo
 
OpenStack - open source au service du Cloud
OpenStack - open source au service du CloudOpenStack - open source au service du Cloud
OpenStack - open source au service du Cloud
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mv
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 

Plus de MSDEVMTL

Plus de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 
Dan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BIDan Edwards : Data visualization best practices with Power BI
Dan Edwards : Data visualization best practices with Power BI
 

Entity framework core 2 vs micro orm performances

  • 1. Entity Framework Core 2 VS Micro ORM (performances) Anthony Giretti Tech Lead chez Nexus Innovations http://anthonygiretti.com
  • 2. Précédemment… Licence / Installation Prise en main Communauté, documentation, maturité, Fréquence Maj Performances Support différentes Bdd Support .Net Core Transactions Async Testabilité EF Package Nuget Massive Télécharger 2 fichiers Dapper Package Nuget Ormlite Package Nuget SimpleData Package Nuget PetaPoco Package Nuget NPoco Package Nuget - Ils supportent tous l’éxécution des procédures stockées, vues, fonctions - Ils sont tous protégés des injection SQL (paramétrisation des requêtes)
  • 3. Précédemment, 3 Micro ORM représentaient une réelle alternative à EF :  Dapper pour ses performances exceptionnelles et sa communauté qui l’entoure  NPoco pour la simplicité de sa syntaxe et ses performances  OrmLite pour sa double syntaxe LINQ-like et SQL, et pour ses fonctionnalités riches, et ses performances
  • 4. Dapper  Développé par l’équipe StackExchange  Compatible avec plusieurs bases de données relationnelles:  SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird  API riche en fonctionnalités  Communauté très active  Performances très intéressantes (mapping le plus rapide)  Supporte .Net Core, les transactions, et le requêtes asynchrones  Relations non supportées, mapper facile à utiliser pour populer les relations  Insert, Update, Delete uniquement en query texte : un peu plus fastidieux à écrire  Testable unitairement, grandement facilité avec « DapperWrapper » et « DapperParameters » pour unit tester les procédures stockées
  • 5. OrmLite  Développé par l’équipe ServiceStack  Compatible avec plusieurs bases de données relationnelles:  SQL Server, Oracle, Mysql, SqlLite, PostgreSql, FireBird, VistaDB  Double Syntaxe LINQ-Like (élégante) et SQL  API riche en fonctionnalités  Communauté active  Performances intéressantes  Supporte .Net Core, les transactions, et le requêtes asynchrones  Testable unitairement  Obligation de créer une query AdHoc pour populer un objet (relations non supportées)
  • 6. NPoco  Fork de PetaPoco  Même avantages de PetaPoco, avec des features additionnelles  Mapping dans un objet existant possible  Supporte les jeux de données multiples (comme EF, mais plus élégant)  Async (mais pas toute les opérations)  Et bien d’autres encore….  Syntaxe quasiment identique, plus simple dans la plupart des cas  Gestion des relations simplifiée  Plus besoin d’attributs de mapping comme PetaPoco, les alias sont mieux pris en charge  Testable unitairement  Moins populaire que PetaPoco, communauté moins active
  • 7. Que s’est-il passé depuis ?  Dapper n’a pas été mis à jour depuis 1 an  Cependant une mise à jour est en préparation
  • 8. Que s’est-il passé depuis ?  NPoco a été mis à jour récemment
  • 9. Que s’est-il passé depuis ?  OrmLite a été mis à jour récemment  Se prétend être le Micro Orm le plus rapide
  • 10. Puis .NET Core 2.0 et EF 2.0 sont arrivés….  .Net Core apporte jusque 25 % de performances supplémentaires par rapport à .NET Core 1.1  EF Core 2.0 apporte également son lot de nouveautés (prochain Meetup)  Benchmark EF Core 2.0 (ce Meetup)
  • 11. Scénario utilisé pour le nouveau benchmark
  • 12. Requêtes utilisées pour le nouveau benchmark  Une requête unique ramenant 500 enregistrements SELECT TOP 500 [WorkOrderID] AS Id, P.Name AS ProductName, [OrderQty] AS Quantity, [DueDate] AS Date FROM [AdventureWorks2014].[Production].[WorkOrder] AS WO INNER JOIN[Production].[Product] AS P ON P.ProductID = WO.ProductID  Multiples itérations d’une requête ramenant 1 enregistrement SELECT [WorkOrderID] AS Id, P.Name AS ProductName, [OrderQty] AS Quantity, [DueDate] AS Date FROM [AdventureWorks2014].[Production].[WorkOrder] AS WO INNER JOIN[Production].[Product] AS P ON P.ProductID = WO.ProductID WHERE WorkOrderID = @Id
  • 14. Comparaison des performances sous .NET Core 1.1
  • 15. Comparaison des performances sous .NET Core 2.0
  • 16. Conclusions de la comparaion par framework  OrmLite est effectivement le micro Orm le plus rapide tout framework confondu  Dapper n’est plus le micro Orm le plus rapide  NPoco déçoit, ses performances ne sont plus aussi intéressantes.  Entity Framework reste le moins performant tout framework confondu
  • 17. Comparaison des performances par le nombre d’itérations (charge moyenne)
  • 18. Comparaison des performances par le nombre d’itérations (charge élevée)
  • 19. Conclusions de la comparaison par itérations  OrmLite reste stable voir légèrement plus performant peu importe le framework utilisé et la charge encaissée  Dapper reste stable voir légèrement moins performant peu importe le framework utilisé et la charge encaissée  NPoco déçoit encore, ses performances avoisinent celles d’Entity Framework  A forte charge Entity Framework n’est plus le plus lent sous .NET Core 2.0  La plupart du temps à forte charge .NET Core 2.0 reste moins performant que .NET Core 1.1, c’est l’inverse à charge moyenne (résultats similaires à charge légère)
  • 20. Enfin  Entity Framework Core a fait d’énormes progrès en terme de performance, il est parfois même plus performant que certains micro Orm.  On espère que .NET Core va continuer à s’améliorer.  Bel avenir pour OrmLite et Dapper
  • 21. Code source des benchmarks  .NET Core 1.1 et 2.0 : https://github.com/AnthonyGiretti/MicroOrmDemo.Core  .NET 4.7 : https://github.com/AnthonyGiretti/MicroOrmDemo.net