Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

WCF Data Services vs WAQS – Comparatif de performance

La raison initiale pour laquelle j’ai fait WAQS était la limitation de WCF Data Services et de WCF RIA Services en terme de requêtage.

Depuis WAQS a beaucoup évolué et son périmètre est devenu beaucoup plus important.

A ce propos, je vous invite à me contacter ou à passer me voir sur le stand Infinite Square aux TechDays si vous voulez en savoir plus.

Ayant récemment procédé à quelques optimisations sur WAQS, j’ai voulu faire le test vs WCF Data Services pour voir si le gain de fonctionalités ne se faisait pas au détriment de la performance.

J’ai donc effectué des requêtes simples sur la base Contoso qui a l’avantage d’être plus fournie que Northwind.

A noter, que, dans le cas de WAQS comme dans le cas de WCF Data Services, je suis resté sur le mode par défaut.

 

Voici les résultats obtenus avec WCF Data Services

  • Récupération des 18 869 clients de la base : 6 693 ms
    var query = _context.DimCustomers;
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar))).ToList();
  • Récupération des CompanyName des clients : 2 652 ms
    var query = (DataServiceQuery<DimCustomer>)_context.DimCustomers
        .Select(c => new DimCustomer { CustomerKey = c.CustomerKey, CompanyName = c.CompanyName });
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar)))
        .Select(c => c.CompanyName).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne : 9 672 ms
    var query = (DataServiceQuery<DimCustomer>)_context.DimCustomers
        .Expand("FactOnlineSales")
        .Take(100);
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar))).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne et les produits de celles-ci : 27 021 ms
    var query = (DataServiceQuery<DimCustomer>)_context.DimCustomers
        .Expand("FactOnlineSales/DimProduct")
        .Take(100);
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar))).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne, les produits de celles-ci et les catégories de ceux-ci : 42 604 ms
    var query = (DataServiceQuery<DimCustomer>)_context.DimCustomers
        .Expand("FactOnlineSales/DimProduct/DimProductSubcategory/DimProductCategory")
        .Take(100);
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar))).ToList();
  • Récupération de 200 clients avec leurs ventes en ligne, les produits de celles-ci et les catégories de ceux-ci : Exception !
    var query = (DataServiceQuery<DimCustomer>)_context.DimCustomers
        .Expand("FactOnlineSales/DimProduct/DimProductSubcategory/DimProductCategory")
        .Take(200);
    var customers = (await Task.Factory.FromAsync(query.BeginExecute(null, null),
        ar => query.EndExecute(ar))).ToList();

Maintenant faisons la même chose avec WAQS :

  • Récupération des 18 869 clients de la base : 3 307 ms (au lieu de 6 693 ms)
    var customers = (await _context.DimCustomers.AsAsyncQueryable().Execute()).ToList();
  • Récupération des CompanyName des clients : 187 ms (au lieu de 2 652 ms)
    var customers = (await _context.DimCustomers.AsAsyncQueryable()
        .Select(c => c.CompanyName)
        .Execute()).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne : 3 260 ms (au lieu de 9 672 ms)
    var customers = (await _context.DimCustomers.AsAsyncQueryable()
        .OrderBy(c => c.CustomerKey)
        .Take(100)
        .IncludeFactOnlineSales()
        .Execute()).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne et les produits de celles-ci : 4 336 ms (au lieu de 27 021 ms)
    var customers = (await _context.DimCustomers.AsAsyncQueryable()
        .OrderBy(c => c.CustomerKey)
        .Take(100)
        .IncludeFactOnlineSalesWithExpression(
            onlineSales => onlineSales.IncludeDimProduct())
        .Execute()).ToList();
  • Récupération de 100 clients avec leurs ventes en ligne, les produits de celles-ci et les catégories de ceux-ci : 4 883 ms (au lieu de 42 604 ms)
    var customers = (await _context.DimCustomers.AsAsyncQueryable()
        .OrderBy(c => c.CustomerKey)
        .Take(100)
        .IncludeFactOnlineSalesWithExpression(
            onlineSales => onlineSales.IncludeDimProductWithExpression(
                products => products.IncludeDimProductSubcategoryWithExpression(
                    productSubcategories => productSubcategories.IncludeDimProductCategory())))
        .Execute()).ToList();
  • Récupération de 200 clients avec leurs ventes en ligne, les produits de celles-ci et les catégories de ceux-ci : 7 029 ms (au lieu d’une exception)
    var customers = (await _context.DimCustomers.AsAsyncQueryable()
        .OrderBy(c => c.CustomerKey)
        .Take(200)
        .IncludeFactOnlineSalesWithExpression(
            onlineSales => onlineSales.IncludeDimProductWithExpression(
                products => products.IncludeDimProductSubcategoryWithExpression(
                    productSubcategories => productSubcategories.IncludeDimProductCategory())))
        .Execute()).ToList();

Si on ne prends pas en compte le côté infini du ratio de la dernière requête, WAQS est donc entre 2,02 et 14,18 fois plus rapide que WCF Data Services avec une moyenne sur mes tests de 6,83.

Ca va, je suis rassuré… :)

// A noter que la version de WAQS que j’ai utilisé n’est pas encore publique

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié lundi 11 février 2013 01:30 par Matthieu MEZIL

Commentaires

# re: WCF Data Services vs WAQS – Comparatif de performance @ lundi 11 février 2013 16:13

Classe !

Tu assures ! :)

Groc

# re: WCF Data Services vs WAQS – Comparatif de performance @ mardi 4 juin 2013 14:03

bonjour et 1 grand merci pour ce travail.

Comment peut-on se procurer votre travail et a quel type de licence est-il soumis ?

Bib34690

# re: WCF Data Services vs WAQS – Comparatif de performance @ mardi 4 juin 2013 16:15

La version utilisée n'est pas encore publique.

Je pense que je publierai une version d'ici un mois à peu près.

Matthieu MEZIL

# re: WCF Data Services vs WAQS – Comparatif de performance @ vendredi 13 septembre 2013 14:57

Est-elle désormais publique et comment la récuperer ?

Bib34690

# re: WCF Data Services vs WAQS – Comparatif de performance @ vendredi 13 septembre 2013 15:00

@Bib34690  : toujours pas mais c'est une question de semaines maintenant (probablement début Octobre)

Matthieu MEZIL

# re: WCF Data Services vs WAQS – Comparatif de performance @ jeudi 10 avril 2014 23:28

FYI, elle l'est maintenant

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau blog en anglais / New blog in english ! par Le blog de Patrick [MVP SharePoint] le 09-18-2014, 18:42

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31