Recherche textuelle sur SQL Server, c’est dur!

Pour faire suite à l’article d’avant-hier, celui sur la déformation de notre vision du monde que cause les outils que l’on emploie, je voulais vous parler de la recherche textuelle sur la plateforme SQL Server. Désolé si certains sont déçus mais oui c’est un point technique 🙂

Alors pourquoi faire le lien entre cette problématique et la recherche textuelle ?

Dans une base de données on a une obsession : tout mettre dans des tables composées de lignes et des colonnes. Naturellement dans ce modèle l’unité de traitement minimale est la cellule, l’intersection d’une ligne et d’une colonne.

Très bien, mais que faire quand la cellule contient une entité unique, comme demandée par la modélisation, mais que cette entité se décompose de manière complexe ? Je pense par exemple à un descriptif produit ou un commentaire client. Comment exploiter une information humaine, un avis, une description, comprise dans une chaîne de caractère, avec des outils qui ne savent pas vraiment travailler à ce niveau de granularité ?

Et bien on fait comme on peut, mais en général ce n’est pas très joli !

Pour parler d’une situation précise, je monte actuellement une solution décisionnelle qui stocke et analyse pratiquement toutes les informations concernant le parc informatique d’un grand groupe. On pourrait penser que sur ce domaine fonctionnel on n’aurait pas de surprises dans les données: que du technique ou du numérique. Et bien détrompez-vous, remonter l’ensemble des applications installées sur les postes, sur un parc de 30’000 machines, dans 10 langues (vive l’Unicode), ça donne 3 millions de lignes à brasser par jour…

Pour vous donner un exemple : j’ai environ 1500 valeurs distinctes par jour d’applications qui contiennent le mot ‘Microsoft’, dont 500 qui contiennent le mot ‘Office’… Là dedans je dois retrouver les différentes éditions d’Office 2003 et 2007 pour faire le suivi du licensing.

Miam !

Le minimum qu’on puisse dire c’est que j’ai un problème de qualité de données. L’approche que je préfère sur ce genre de problème c’est d’utiliser les outils décisionnels pour instaurer un cycle d’amélioration des données (Tip 131):

  1. On récupère tout dans le datawarehouse avec un premier cycle d’import
  2. On flag ce qui n’est pas bon / pas encore revu
  3. On génère des rapports pour que les opérationnels puissent corriger les systèmes sources et / ou proposer des nouvelles règles d’alimentation
  4. On implémente les changements, puis retour à l’étape 1

Bien ! Le problème c’est que pour faire l’étape 2 il faut pouvoir interagir sur la donnée : est-ce que mon descriptif d’application contient ‘Office’ ? Enfin, est ce qu’il contient ‘%Office’, ‘Office%’, ‘% Office %’, ‘%Office%’… La différence ?

  • Office’ : le seul résultat qui passe c’est « Office »
  • %Office’ : « Office », « LibreOffice », « Microsoft Office »
  • Office%’ : « Office », « Office 2003 », « OfficeCracker »
  • % Office %’ : « Microsoft Office 2003», la subtilité est dans les espaces autour du mot
  • %Office%’ : toutes les possibilités

Presque facile pour Microsoft Office, mais pas pour Adobe et toutes les variations de flash, ni pour IBM, ni Mozilla, ni pour toutes les autres en fait…Et ‘0ffice’ ? ‘Offisse’ ? On peut les oublier pour des champs fournis par les éditeurs eux-même, mais pour une recherche dans des champs saisis à la main ?

Pour pouvoir traiter tous ces cas de figure on va utiliser des critères de recherche compliqués, conditionnels, qui impliquent des traitements unitaires multiples sur chacune des cellules les unes après les autres: les performances s’écroulent. En temps de réponse on passe de moins d’une seconde sur une table bien indexée à plusieurs minutes sur une recherche en ‘%…’. En fait c’est une particularité dans la manière qu’ont les bases de données relationnelles de stocker et traiter l’information qui force une lecture complète de la table à chaque fois.

On retrouve cette limite là dans tous nos outils :

Ça plus le fait qu’il faille créer toutes les règles de gestion une par une de manière exhaustive. Vivement que les IA viennent nous filer un coup de main !

Malheureusement pour le moment il n’existe pas de solution magique, une recherche textuelle étendue sur une base de données relationnelles classique aura forcément un coût important en performance et/ou un résultat foireux. La prochaine fois que vous verrez un site web équipé d’un moteur de recherche bancal, ne cherchez pas pourquoi… Et c’est là que le bas blesse: à force de galérer avec ce type d’opérations on ne les propose plus, on ne les implémente plus, et on en vient à penser qu’elles ne sont pas possibles.

Pourtant Google y arrive, et sur des volumes de données autrement plus important! C’est d’ailleurs pour ça que pour l’avenir j’ai espoir dans la prochaine génération de bases avec moteur de stockage en colonne / vertical. Va bien y avoir un génie quelque part qui va nous révolutionner les recherches textuelles là-dessus!

Business Objects 4.0 avec un 4 comme 2004…

Voilà un parfait exemple d’éditeur qui reste coincé dans les années 2000.

Pour prendre du recul:

  • Screenshots de la solution BI de SAP annoncée hier (23/02/2011).

Versus

  • Galerie de rapports Tableau. C’est du live, pas des captures d’écran hein.

Je vous laisse 2 minutes pour faire l’allez/retour…

C’est bon?

Choquant non?

Mais SAP, personne vous a prévenu qu’on était en 2011? Ça vous pose un problème de faire des jolies choses ou quoi? Que ce soit pour l’application, pour l’annonce ou pour le site web d’ailleurs…

Des lignes et des colonnes

Je me suis fait une drôle de réflexion ce matin en lisant cet article d’Alex Payne (un des premiers ingés de Twitter, maintenant CTO de BankSimple), et plus particulièrement ce paragraphe:

Even the most bureaucratic of technologies can’t be claimed to be un-opinionated or free from our values. The lowly SQL database, workhorse of dismal trades like accounting and business analytics, is theoretically “value-neutral” to the data it stores. Yet, in structuring data into rows and columns of particular standard types, a set of values emerges that dictates what information is and how it should be stored and queried.

Traduit grossièrement:

Même la plus basique des technologies est affectée par nos valeurs et nos opinions. La simple base de données SQL, moteur de basses besognes telles que la comptabilité ou l’analyse business, est en théorie neutre en valeur vis-à-vis des données qu’elle héberge. Pourtant, en structurant les données en lignes et en colonnes de types standardisés, un ensemble de valeurs apparaît et dicte ce qu’est l’information et comment elle doit être stockée et requêtée.

C’est tellement vrai!

Pour étudier un événement à travers un modèle relationnel, un modèle en étoile, on le force à prendre une forme qui ne lui est pas forcément naturelle. La question devient: quelle est la valeur de l’analyse si pour la réaliser il a fallut tordre les faits et les conformer à un modèle artificiel? On retourne ici en plein problème de « legibility » dont je parlais tantôt.

Alors évidemment, étant donné que la plupart des phénomènes que l’on doit modéliser dans l’entreprise sont artificiels, il est facile de les modéliser en utilisant un processus artificiel. Un flux comptable, un portefeuille financier, une masse salariale, une chaîne de production… ce sont des éléments inventés de toutes pièces par l’homme et qui donc se conforment facilement dans une base de données.

Mais quand on étudie des phénomènes plus libres comme des courants d’idées sur Internet, la manière dont les sociétés s’organisent et se désorganisent, la mode… les relations humaines en somme, et bien cette mécanique se grippe vite. C’est surement la raison pour laquelle la plupart les gros acteurs sur le web, les journalistes et bloggeurs data ou encore les chercheurs en sciences sociales, n’utilisent que très peu les bases de données SQL et préfèrent le NoSQL, BigData et les nouveaux outils de visualisation (R & co).

Il suffit de voir les résultats de leurs études sur FlowingData ou Information is Beautiful, et de considérer l’effort que cela prendrait de faire certaines de ces analyses sur une plateforme décisionnelle classique, quand c’est possible, pour bien prendre conscience du poids que nous impose le modèle relationnel.

C’est une état de fait tellement évident qu’on l’oublie trop souvent lorsque vient le moment de modéliser un nouveau système décisionnel. Or certaines activités de l’entreprise comportent des éléments à la limite du modélisable, des éléments pourtant cruciaux à la compréhension globale de l’activité. Je pense par exemple aux relations clients ou aux ressources humaines. Sur ces domaines il faut donc être particulièrement prudent, se souvenir de ces limitations, et prévenir les utilisateurs des limites de l’outil à analyser un phénomène qui par définition ne peut pas être modélisé correctement.

Excel 2003? En 2011? Soyons sérieux…

Nous sommes en 2011: Excel 2003 est sorti il y a 8 ans, IE6 et Windows XP il y a 10 ans.

Malgré ça je rencontre encore très régulièrement ces environnements chez mes clients, dont des sociétés très bien cotées au CAC40.

Alors je veux bien que les départements IT doivent se protéger:

  1. de la ré-écriture des applis en cas de non compatibilité ascendante
  2. des débacles produits comme Vista

Ok, ce sont des arguments valables…

Mais pour des softs vieux de 8 ans!? Qui de plus ont trouvé des remplaçants reconnus sur le marché! C’est dur à avaler.

Excel 2003 quand même! Va jouer avec les add-ins OLAP pour essayer de te connecter à Analysis Services. Et une fois que tu y arrives, va faire rêver un client en lui montrant un cube à travers Excel 2003. C’est dur. Très dur. Surtout quand l’altérnative c’est Reporting Services 2005.

Parce que si d’un point de vue bureautique c’est le drame, pour moi déployer des nouveaux projets en 2011 sur une plateforme qui date de 2005 (suivez mon regard) c’est encore pire.

Alors oui ça coûte de renouveler son parc logiciel. Mais si au départ on économise sur le prix des licences et on capitalise sur l’expérience acquise par les développeurs, à l’arrivée on se retrouve avec des collaborateurs encroutés sur des plateformes abandonnées par les éditeurs et des développeurs aux compétences complétement obsolètes.

Gérer son parc c’est un équilibre, il ne faut pas aller trop vite, mais il ne faut pas non plus oublier de ne pas aller trop lentement. Et pour moi déployer aujourd’hui des postes client avec des softs vieux de 10 ans c’est une marque claire d’un dysfonctionnement important de la DSI.

Je conclurai juste en disant que pour remercier les clients qui font l’effort de se tenir à jour sur les softs, quand on m’en donne les moyens en sorte, je livre toujours un petit quelque chose en plus. Le dernier exemple c’est une jolie petite interface web qui permet d’exécuter les jobs SSIS de rafraichissement du DWH depuis un navigateur web. C’était pas dans le forfait mais c’est pas grave, c’était marrant et au final sacrément pratique pour les utilisateurs!

J’ai acheté un SSD, c’est le top!

Juste un mot pour vous dire que j’ai acheté un SSD de 60Go la semaine dernière pour mon PC vieillissant (article de 2006).

Je l’ai placé en disque système (les SSD sont quasiment tous au format PC portables de 2,5 pouces) à la place de mon SATA de 7’200tpm. 60Go c’est suffisant pour moi pour Windows, Office, SQL Express et un ou deux jeux. Tout le reste de mes données réside sur des disques USB.

Vu que mon processeur le supporte, j’en ai également profité pour passer de Windows XP 32bit à Windows 7 64bit. En 2006 on n’aimait pas trop le 64bit, c’est pour ça que j’étais parti sur un système 32bit.

Et bin tout ça pour vous dire que j’ai l’impression d’avoir une nouvelle machine. Les performances du SSD sont bluffantes. Démarrage en 10 secondes, reprise sur veille en 2, les applications qui me sautent à la tronche, même iTunes se lance en moins de 5 secondes!

Ça vaut vraiment le coup (100€ pour le mien), sachant que si je craque et que j’achète une autre machine dans l’année, je pourrais récupérer ce disque pour le mettre sur la nouvelle machine.

Après un maxage de la quantité de RAM, ça devient le point numéro 2 pour redonner un coup de jeune à une machine, loin devant tout le reste!

Ca plus Windows 7, me manque plus qu’Office 2010 pour avoir l’impression d’être en 2011!

Mise à jour 09/03/2011 : Une belle histoire qui finit mal

8 liens depuis la dernière fois jusqu’à la semaine (2011-08)

Tellement de choses à dire, mais je veux pas non plus vous noyer, donc je me limite 🙂

  1. Un mystère rigolo : pourquoi l’être humain est incapable de marcher droit quand on lui bande les yeux.
  2. John Gruber qui nous rappelait déjà il y a 2 ans qu’il ne faut pas faire du business pour faire de l’argent, mais faire de l’argent pour continuer à faire un business qui nous plait. Essentiel!
  3. Une anecdote racontée par Derek Sivers sur pourquoi les entrepreneurs doivent apprendre à déléguer pour la survie de leurs entreprises. Comme d’habitude, attention à l’auto-traducteur foireux!
  4. Une belle visualisation autour des horoscopes sur Information Is Beautiful. Si après ça vous y croyez encore…
  5. Une autre très belle visualisation via Flowing Data concernant le timing de l »investissement en bourse et son impact sur la performance. C’est vraiment un beau graph, j’aimerai avoir les outils pour présenter facilement ce genre de chose à mes clients!
  6. Une citation très courte de George Carlin sur l’éducation, rappelée par Marco Armant sur son blog. Très bien choisie!
  7. Je ne pouvais pas ne pas citer un petit Seth Godin dans cette liste: celui là concerne le biais qui nous pousse à favoriser l’urgent sur l’important.
  8. Et également incontournable : Mike Masnick qui nous parle de Kevin Smith. Ces gens ont bien 10 ans d’avance sur tout le monde en ce qui concerne les business models de l’économie numérique.

__

Bonne lecture!

<< Semaine PrécédenteSemaine Suivante >>