Archive

Posts Tagged ‘Humeur’

[C#] Réflexion sur la reflection

La reflection, parfois, ça peut être super utile.
Mais avant d’utiliser de la reflection, il convient de bien poser sa réflexion.

En effet, si cela peut être une solution de facilité à un instant donné, cela peut également être une source de difficulté non négligeable par la suite.
En réalité, j’avais bien une métaphore en tête, mais elle n’est pas à proprement parlé « politiquement correcte ». Donc, je vais éviter.

En attendant, dans ce billet, je vais donner deux exemples (que j’ai vu en entreprise, mais « annonymisés ») de ce qui justifie ce même billet.
Je parlerais ensuite de petites questions utiles pour réfléchir avant de faire et enfin de ce est généralement admit avec un peu de lecture supplémentaire.

 
Lire la suite…

Catégories :.Net, C#, Développement, Humeur

Traiter les données dans le code ou en base ?

Cela fait plusieurs fois que je vois de gros traitements de manipulation de données directement dans le code.

A chaque fois, il y a eu des variations, mais en règle générale, c’est un algorithme plus ou moins comme cela :

Récupération des données depuis la base de données.
Pour chaque ligne récupérée.
     Si le champX est égale à "variable1", alors on lance la procédure "procedure1" pour cette ligne.
     Si le champX est égale à "variable2", alors on lance la procédure "procedure2" pour cette ligne.
     Si le champX est égale à "variable3", alors on lance la procédure "procedure3" pour cette ligne.
     Sinon, on lance la procédure "procedure4" pour cette ligne.

Le tout avec du if, else if, esle (ou un switch, c’est selon), parfois d’autres boucles à l’intérieur de la première (forception, foreachception ou whileception, si je puis dire).

Comme je l’ai dis, il y a des variantes, mais cependant, si les causes sont différentes, l’effet reste le même : c’est pas performant.
Voir pire, ça occasionne des timeout vis-à-vis de la base de données.

Mais, alors, que faire ?
Le traitement ensembliste. En base de données.
Voilà, c’est tout.

Alors, je sais que parfois, la base ne doit être utilisée que pour stocker les données (sic…) et que le code métier ne doit se trouver qu’en un seul et unique endroit (sic bis…), que la base de données ne doit pas contenir d’intelligence (sic ter…).

Mais parfois (souvent ?), c’est juste très con de vouloir procéder comme cela.
Bon, l’avantage, c’est quand même que c’est tellement à la ramasse qu’optimiser n’est pas très compliqué… (en fait, l’étape « ohmondieucesthorrible » est plus longue à gérer).

Quand on a un SGBDR, il ne faut pas oublier que le G, c’est pour Gestion.
C’est autant de la gestion des base de données que de données elles-mêmes.
En somme, les SGBDR sont fait pour traiter de la données !!!

Comment on fait, du coup ?
A chaque fois que j’ai eu ce problème, il a été résolu avec des tables temporaires.
En somme, récupération des données vers une table temporaire, puis traitement des données depuis cette table en reprenant les conditions mentionnées plus haut.
Donc, j’ai du :

UPDATE #MaTable
SET ChampY = "Valeur1"
WHERE ChampX = "variable1"

Et là, miraculeusement (ou pas), au lieu de traiter les lignes une par une, le SGBDR va traiter toutes les lignes.

Après, il faut quand même réfléchir un peu à comment on peut procéder, mais il est tout à fait possible de gérer les données de cette manière.

Un exemple ?
Là, j’ai un traitement qui doit gérer 70.000 lignes.

C’est pas une volumétrie très importante, mais le traitement via code dure 20 minutes avant que la connexion à la base de données ne parte en timeout.
Avec les traitements ensemblistes, la même volume de données (c’est à dire le MÊME cas de test) dure…environ 15 secondes.

Oui, oui, 15 secondes.
Et même en purgeant le cache de SqlServer (pour info).
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Sur d’autres cas de tests, le gain de temps varie d’un facteur 1 (pour les très petits volumes) à 10 (pour les volumes plus importants et mixtes).
Le coup des 15 secondes est sur un scénario assez précis et j’avoue que…eh bien, je m’attendais pas à un tel gain ! ^^

J’ai pourtant 8 insertions de différents types (et différentes provenances) dans ma table temporaire, 18 updates différents puis insertion des données (conditionnées) dans une table physique et modification de deux autres tables (dont l’un compte plus de 67 millions d’entrée).

 
 
Alors OUI aux traitements de masse des données dans la base de données et NON aux mêmes traitements dans le code !!!

Catégories :Développement, Humeur, SGBDR

Commenter son code

Les commentaires, c’est comme tout.
Y a les bons commentaires et les mauvais commentaires.
Un bon commentaire, c’est un commentaire sur le code, mais c’est un bon commentaire.
Un mauvais commentaire, c’est un commentaire sur le code, mais c’est un mauvais commentaire.

Bon, outre cette introduction en clin d’oeil à des humoristes comme on en fait plus, il y a le réel problème des commentaires dans le code.
Pourquoi réel ?
Parce que certains commentaires brillent par leurs absences, certains sont tellement obscurs qu’ils n’éclairent en rien, les commentaires qui sont vides, et enfin les commentaires qui sont carrément faux, résidu de commentaire qui a été pertinent à une époque plus ou moins déterminée.

Un commentaire que j’avais rencontré :

Puisque le chef de projets est une vraie buse, il a totalement sous-chiffré le projet. Donc, j’ai pas le temps de faire mieux que le code présent. Une fois en production, ça ne sera pas à moi de le maintenir, donc : bon courage. Et quand quelqu’un lira ce commentaire, je serais déjà parti !

Je n’ai pas reproduit fidèlement, « une vraie buse » n’étant pas le texte originel…mais bon… 🙂

Lire la suite…

Catégories :.Net, C#, Humeur

Logiciel open source versus logiciel propriétaire

Suite à une discussion sur l’open source contre le propriétaire, j’ai préféré arrêter mon intervention.
La discussion m’agaçait quelque peu.

Résultat, j’ai pensé faire un billet dessus.
Mais avant de commencer à écrire, j’ai réfléchis.
Qu’est-ce que je reproche à l’open source ? Au propriétaire ?
Quelles sont les idées potentiellement erronées que j’ai sur chacun ?

J’ai donc fais des recherches en premier lieu, le présent billet en est le résultat.
Dedans, il y a mes réflexions, des éléments de vécu et du questionnement (d’ailleurs, je suis preneur pour entamer une discussion sereine et constructive).
Et pour le coup, quelques idées préconçues que j’avais et qui se sont avérées fausses.

J’ai essayé d’être objectif (enfin, ça dépend des parties, mais le titre est assez clair, je pense), mais ma vision des choses peut parfois être biaisée.
Après, tout le texte peut être discuté.

Lire la suite…

Catégories :Divers, Humeur, Open Source

[MMIT] Vocabulaire

BSODDans ce premier billet (introduction ici) , on va voir un peu de vocabulaire pour comprendre ce qui sera dit dans les suivants.

Il faut savoir qu’en France (je ne sais pas pour les autres pays), mais le modèle qui a été choisie (à tort ou à raison) pour l’organisation dans un Système d’Information est un modèle calqué sur le bâtiment et les travaux publics.
Pourquoi ? Bonne question (j’y reviendrais une autre fois)…

Lire la suite…

Catégories :Divers, Humeur, Humour, MMIT