Update sur de tres grosses tables

CREATE TABLE `sbtest2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
`c2` char(120) NOT NULL DEFAULT '',
`pad2` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=20000001 DEFAULT CHARSET=latin1;

alter table sbtest2 disable keys;
insert into sbtest2 select id,k,c,upper(pad),c2,pad2 from sbtest;
/* rebuild index*/
alter table sbtest2 enable keys;
alter table sbtest2 engine='InnoDB';

mysql backup script

Une fois installée votre première base de donnée Mysql sur un os Windows qui n’est pas un poste de développeur, vous deviendrez par définition un DBA et la tâche la plus importante de celui-ci est … la sauvegarde des données.

Vous irez souvent chercher sur le net un script tout fait qui face cela simplement et la plupart d’entre eux utilise une méthode simple mais qui a fait ses preuve, l’utilitaire mysqldump.

Voici un script un peu plus complet que la moyenne, gèrant un bug pernicieux du ERRORLEVEL sous Windows, et sauvant en plus les routines et la table d’évènements. Et testé depuis un an en production.

Il gère les sauvegardes à chaud, à froid (service coupé, la méthode la plus fiable), incrémental (fichiers binlogs), et vous envoyant un mail de rapport si spécifié.
J’aimerais le compléter avec une gestion des binlogs plus poussé, la compression des fichiers, des méthodes de sauvegardes plus complètes voir le support des snapshots

Le zip fourni contient le script, un fichier de configuration et un utilitaire d’envoi de mail.

mysqlbackupscriptTéléchargement

Je vous recommande également la lecture de cet article de la documentation officielle:
http://dev.mysql.com/doc/refman/5.0/fr/backup-policy.html

Pour une solution plus complète, regardez les solutions commerciales zmanda recovery manager ou mysql enterprise backup

De l’arrivée des ORMs

En passant

projet pour la fontaine de l’éléphant de la Bastille, Aquarelle de Jean-Antoine Alavoine (1776-1834)

Un des changements récents et inévitable de notre nouvelle ère numérique est l’objectivation  des bases de données, et l’introduction des ORMs. Je me frotte a ces beautés fatales depuis plusieurs années et si les débuts furent assez séduisants mais houleux, j’en conclus avec le recul que l’évolution est incontournable.
Essentiellement de part la proéminence des langages objects : même si C tient le haut du pavé sur Tiobe, C++ C# et java sont juste derrière (voir devant depuis janvier). Quoi de plus naturel que de persister directement les objets en bases, sans mapping manuel qui est source d’erreurs.

Seulement, ces outils puissants sont aussi complexes et ne remplacent pas une connaissance minimale de SQL, faute de se tirer une balle dans le pied. Si vous ne regardez pas les requetes générées ou le modèle, attention aux surprises lors de la mise en production. Sur de gros volume de données, cela pardonne moins facilement.

Vous serez donc bien aise de lire les mauvaises pratiques d’hibernate et d’autres avant de vous lancer plus en avant, et de trouver un bon tutoriel (ici pour nhibernate).

A contrario, il existe de nombreux cas où l’utilisation d’un ORM est trop coûteux, et vos premiers projets avec cette technologie seront bien sur plus lents.

Je vois plusieurs effets directs de cette arrivée à maturité des ORM :

  • un premier est que les développeurs s’intéressent plus à ce qui se passe coté base de donnée et vont moins faire de copier/coller, sans doute parce que l’ORM les soulage des tâches les moins nobles
  • un autre est que les couches d’accès aux données peuvent se simplifier considérablement,
    il est possible de les faire tenir en une centaine de ligne nonobstant les entités.
  • un dernier est le blowback, l’arrivée des noSQL, non pas pour stocker des grosses quantités de données, mais pour s’astreindre des difficultés de la modélisation (et je rejoins l’avis de monty).

Un cas classique est le stockage d’objets sérialisés (en json, ou en xml) sur des bases jeunes (mongoDB) ou des graphes d’objets dans des blobs… avec les médiocres performances ou la perte de fonctionnalités: plus de critères, plus de compatilité ascendante.

Les développeurs ne savent-ils plus modéliser, ou le DBA n’a-t-il plus de rôle  ? C’est un éventualitée mais dans ce cas c’est effectivement la fin de vie des SGBDR car ils ne sont performants qu’avec des modèles bien fait.

La prochaine étape sera peut-être alors le retour en grâce des bases de données objets qui existent depuis nombreuses années mais n’ont pas réussit à s’imposer face aux SGBDR traditionnels, même s’ils sont plus performants sur les opérations de CRUD.
A moins que les SGBDR n’intègrent de plus en plus l’objet… A cet égard, l’exemple CRUD de mysqlcluster est impressionant.

Ou alors des SGBDR qui crée

Une anecdote pour finir: savez-vous que Posgresql gère l’héritage de table depuis la version 7 ?

Sql Server Express log des requêtes

Si on prend le cas de SQL Express, il n’est pas possible nativement de voir les requêtes exécutées, ce qui est au combien pénible surtout dans notre ère des ORM. On risque de se retrouver en production avec des horreur de type n+1 ou autre comme l’explique si bien R.J Lorimer (son article parle d’Hibernate mais s’applique très bien à ses congénères) ou d’autres.

On peut démarrer le service avec les paramètres /T4032 /T3605 en éditant le  registre ou mieux faire un démarrage en ligne de commande et faire un bon vieux tail des familles.

SQL Express a le bon gout de faire tourner ses logs à chaque démarrage.

Accessoirement, je vous laisse découvrir le  billet d’un développeur indien qui a construit un plugin visual studio autour de l’idée !!

Une solution qui a le mérite de (re)faire découvrir la relative simplicité du développement des plugin VS encore que son implémentation du tail lui-même ne soit peut-être pas très performante…
Décidément Pondicherry semble inspirer

Un Eclipse sur mesure

Etant passé depuis un petit mois et demi sur un nouveau projet, j’ai eu la joie de devoir refaire un eclipse from scratch pour supporter maven + gwt. Rompu à l’exercice dans un ancien environnement jboss+Ivy, je me suis un peu cassé les dents pour obtenir un IDE stable.

Quelques rappels

Eclipse est un projet initié par IBM qui avait besoin de remplacer un IDE maison, Visual Age, pour passer à l’ère du java. Une de ses particularité est d’être basé sur un framework OSGI, Equinox.

Ce framework offre un cadre précis pour l’ajout de fonctionnalités sous forme de services (ou plugins), et le support de Java n’est qu’un service parmi d’autres. L’extensibilité est théoriquement infinie et il existe pléthore de plugins et de support de langages : C++, Scala, Javascript, XML, Ruby, Ceylon…
Eclipse est même souvent rebrandé par d’autres éditeurs dans leurs produits (Adobe, IBM pour Notes, etc).
Enfin le marketplace fourni dans les dernières versions d’Eclipse permet à tout développeur de rajouter en quelques clics le support des plugins nécessaires au projet.

Mais ce qui confère à Eclipse sa force est également sa faiblesse : avec des centaines de plugins disponibles, il est aisé d’obtenir au final une plateforme obèse, instable, bref inutilisable.
Et pour une équipe de développement, cela peut se chiffrer rapidement en perte de productivité, en frustration, et au final par une remise en cause des choix techniques (du vécu).

Quelques idées de bases

Pour éviter ces écueils, quelques idées de bases pour la suite de l’exercice :

  • La version Java IDE est la plus light et donc préférable.
  • Les versions 32 bits prennent moins de mémoire et sont toutes aussi rapides voir plus (en 64 bits, la mémoire cache du cpu sature plus vite)
  • Dans le choix des plugins à installer, ne prendre que le strict minimum. Tel éditeur fourni les modules core, testing, web workflow, android ? Si vous n’utiliser que les premiers, n’installer que ceux-là.
    Si jamais vous faites évoluer votre projet, vous aurez suffisamment de temps pour ajouter le nécessaire, et le cycle de release de votre IDE maison devrait suivre celui d’Eclipse, qui est assez rapide.
  • Le marketplace d’Eclipse proposant pour chaque feature un large choix des plugins spécifiques, vous vous retrouvez vite avec des plugins optionnels dont vous n’avez nul besoin. Preférez les required aux optionnels.
  • Utiliser des bétas testeurs dans vos équipes de développement, comme tous clients, ils n’apprécient pas les produits non finis.

Dans une seconde partie, je vous parlerais du fichier de paramétrage de la jvm, le fameux eclipse.ini.

Bing versus Google

Voila, Kumo vient d’être renommé Bing (attention, vidéo en Silverlight) et on commence à en parler dans la presse (ici sur Tom’s Guide). Arrivée en béta imminente.

Pour info, Kumo est un « concurrent » de Google lancé par MicroSoft (MS), selon le leitmotivz « les gens ne recherchent désormais plus seulement des informations, mais des connaissances ». A voir ce que l’on entend par là…

Du point de vue de popularité, MS a en théorie la possibilité de prendre une grosse part du marché de la recherche. Car conservant des desktops, des navigateurs, des liens par défaut… et des pages de pub dans les canards. Ne sous-estimons pas non plus les millions d’apologistes de Redmont, même si l’espèce se raréfie.
Vous me direz, Firefox grimpe, je vous retorque il reste à moins de 30 % du marché, et à ce rythme il lui faudra des années avant d’atteindre le même niveau qu’IE.

De toute façon, est-ce important industriellement ? Est-ce que cela va changer la part de marché de Flash /Vista /XP /Linux /google /Office /Photoshop /Maya ?
Non, commercialement et industriellement c’est symbolique. cela pousse uniquement MS a garder ses produits à jour et a éviter que ne s’installe l’obsolescence comme avec le cas IE6. Mais l’arrivée de FF3 ne change pas le fait qu’il faille être compatible IE7, voir IE6 pour certains.

Donc pour en revenir au match google / Bing, j’ai regardé la vidéo de démo ce dernier et en tire quelques remarques:

  • MS a sans doute la possibilité d’offrir des résultats de recherche pertinents pour le texte et les images , après tout ils ont l’infrastructure et la technologie pour. Quoi qu’on puisse se demander s’ils ne se foutent pas un peu du monde en sortant comme exemple de résultat deux (!!) pauvres pages web en noir et blanc dignes des années 90.
    Si l’index est le même que LiveSearch, ce produit est mort né.
  • Mappoint es utilisé pour la carto, je connais des anglais l’utilisant et rien à dire.
  • Pour la recherche de video, il me semble qu’ils n’ont pas de contenu d’aileurs leur démo montre les résultats de vidéo liées depuis youtube (!)
  • on voit beaucoup de $ et de pubs dans les résultats de recherche, & des comparateurs de prix. Ca fait penser à un moteur de recherche commercial, qui va faire de la concurrence à Cnet et autres, mais pas trop à Google.
    Qui lui donne des résultats et suggère -discrètement- des liens commerciaux, qui sont principal mais présentés comme secondaires.
  • l’interface flashe mais ne semble pas constante, on ne s’y retrouve pas… on dirait du Vista… d’ailleurs le chef du projet utilise un vocabulaire ronflant, parle de « changer le comportement des utilisateurs »… à voir à l’usage.

En conclusion, il est difficile de se rendre compte via quelques vidéos de ce que sera le site sans l’accès à une béta voir une alpha. Mais le trailer ne donne pas envie d’aller voir le film