jeudi 7 octobre 2010

RBAR - Row By Agonizing Row

Le dernier séminaire du CLUG sur SSIS fut vraiment intéressant. Il faut en autre question de RBAR.

RBAR  identifie un procédé de développement traitent l'information row-by-row, que cela soit au sein de SQL serveur ou dans les applications métier.
Il est en effet courant de voir des architectes logiciel coder le contrôle des contraintes et la logique de mise à jour dans leurs applications plutôt que de coder ces fonctionnalités dans la base de donnée elle même (c'est soit disant plus facile pour eux).
Tout comme il est courant de voir des "select * from table" ou équivalent au sein de l'application.
Si cela est efficace sur des petites bases de données (logiciel en début de vie), cela est ingérable sur les VLDB (very large DB).

Imaginez donc l'ouverture et le passage en revue d'une table de plusieurs millions de records pour vérifier l'existence d'une Primary Key! Sql serveur fait cela bien mieux que nous.
Imaginez la localisation de quelques enregistrements pour les effacer et flagger un champs dans une table parent a peine moins grande... encore une opération que Sql Serveur fera bien plus efficacement que du code logiciel.
Passer un dataset en revue, ou faire un traitement enregistrement par enregistrement (avec, souvent des boucles imbriquées) peut anéantir les performances de votre logiciel et du moteur SQL qui croule sous les opérations. C'est ça le RBAR de la mort qui tue!

Ne jamais oublier
  • Ne jamais oublier qu'une base de données avec des types bien choisis, des définitions de contraintes sera toujours le meilleur choix (plus rapide).
  • Ne jamais oublier que SQL serveur est le mieux placé et le plus rapide pour gérer les contraintes et les modifications en cascades (stored procedure, triggers).
  • Ne jamais oublier qu'il faut être parcimonieux en sélectionnant ses données.
  • Ne jamais oublier qu'il faut traiter les données par ensemble (set-based update) plutôt que ligne-par-ligne (row-by-row), le rapport de performance sur une VLDB peut être supérieur à 1 pour 1000.
Lecture sur le sujet RBAR


L'article RBAR - Row By Agonizing Row (autre lien) de Remy Gregoire fait tès bonne introduction de RBAR et de ses conséquences.
Il discute de l'implémentation de type RBAR dans les application métier et montre, exemple à l'appuis, comment éviter les traitements de type RBAR dans les triggers.

Aucun commentaire: