MyBase - Application CLX

A la sortie de Kylix une nouveauté est presque passé innaperçue : MyBase.

Les essais de cet article ont été réalisés à part égale avec Kylix et D6.
Certaines images notamment celle de la migration vers une base XML viennent de Delphi 6. Il est important de noter que grâce à la nouvelle CLX cette page est mixte et concerne aussi bien D6 que Kylix.

Une application CLX orientée MyBase

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. My Base

Mybase n'est pas à proprement parler une base de données, MyBase est l'appelation qui désigne l'utilisation des nouveaux composants qui permettent de simuler un comportement base de données tout en restant indépendant d'un SGBD externe. MyBase reconnaît et travaille avec des fichiers XML ou binaires. L'utilisation de MyBase permet de s'affranchir du déploiement d'un moteur de base de donnée. Mybase est de par nature très léger à deployer, rapide et compact. La version Windows nécessite simplement la redististribution d'une dll, "midas.dll", et "midas.so" sous Linux.

Ces caractérisques le désigne donc particulierement pour une application monoposte légère ou une distribution sur le net. Et cerise sur le gateau MyBase est portable Kylix/D6 ou inversément.

La conception d'une apllication utilisant MyBase s'articule principalement sur un composant : TClientDataSet.

Je vous propose d'aborder trois sujets concernant MyBase : La création d'une base, la comparaison de Paradox et de MyBase en terme de performance et enfin comment transporter vos bases de données vers MyBase et donc Linux.

II. Création d'une base

II-A. Création dans l'IDE directement

Clic droit ou double clic sur le TClientDataset et... une petite image vallant mille mots :-)

Image non disponible

Très simple et bien dans la lignée du TTable de Delphi, on crée les nouveaux champs, on précise leur type. Une fois la structure de la base faite, il suffit de la valider. Clic droit toujours sur le TClientDataSet et "créer un dataset". Pour l'instant la base n'a pas encore d'existence physique, il faut au préalable, bien que celà puisse être fait par la suite, créer les index. Dans l'inspecteur d'objet, dans propriétés du TClientDataSet, cliquer sur les 3 points de "IndexDefs", un nouvel éditeur toujours d'aspect familier apparait. Ici il suffit d'ajouter le nombre d'index souhaité, de les nommer et de spécifier pour chacun d'entre eux le champ (Fields) sur lequel ils portent. Eventuellement la propriété "Options" permet de spécifier certaines particularités portant sur la nature de l'index (primaire, unique, etc.).

Image non disponible

Ici la structure la base est crée, il faut maintenant la sauvegarder physiquement. Toujours sur le TClientDataSet, clic droit et Enregister la base Mybase, XML ou CDS au choix. Remarque le format CDS assure une plus grande confidentialité de vos données et s'avère plus compact. Toutefois la compacité est relative car en cas de transport au format ZIP, le résultat obtenu lors de la compression d'un même ensemble de données donne une taille identique, qu'elle que soit le format de départ.

I-B. Création par code

Encore une fois la similitude avec Delphi est parfaite (ne pas oublier que cet article est initialement fait a partir de Kylix). Le code pourrait être celui-ci :

 
Sélectionnez

with ClientDataSet1 do
begin
  with FieldDefs.AddFieldDef do
  begin
    Name := 'NOM_CHAMP1';
    DataType := ftInteger;
  end;
  with FieldDefs.addFieldDef do
  begin
    Name := 'NOM_CHAMP2';
    DataType := ftString;
    Size := 10;
  end;
  CreateDataSet;
end;

// Sauvegarde de la base
ClientDataSet1.SaveToFile('PATH_DE_MA_BASE',dfXML);
				

II. Utilisation d'une base

II-A. Comparaison avec Paradox en terme de performance

Très simple, maintenant que nous avons créé une base, la méthode LoadFromFile, du TClientDadaSet permet de charger le fichier à l'exécution, et la propriété Filename autorise la même chose dans l'IDE. Ensuite tout se passe comme avec une TTable, il suffit de spécifier un index pour obtenir un ordre de tri. Les méthodes classiques First, Next, Prior fonctionnent, Locate aussi mais la métode SetRange/ApplyRange m'a semblé donner des résultats très rapides. Comme avec un TTable, mais en plus rapide encore.

Pour confirmer cette impression j'ai créé une table Paradox et une table MyBase de 40 000 enregistrements, avec la même structure. Les index sont indentiques et utilisés à part égale. Les résultats sont donnés en millisecondes, le chiffre de gauche indiquant le meilleur temps, celui de droite le plus long. Premier test, SetRange aléatoires, un très léger avantage à MyBase. Ce qui est un très bon résultat quand on connait la vélocité de Paradox sur ce genre d'exercice. Dans le cas de locate l'écart se creuse et devient significatif toujours à l'avantage de MyBase.

SetRange Locate simple Locate [loPartialKey]
MyBase Paradox MyBase Paradox MyBase Paradox
0 / 5 5 / 10 470 / 500 1345 / 1475 335 / 510 955 / 1420

À ces chiffres, il convient toutefois de rajouter ceux-ci :

Open IndexName := 'New_Index'
MyBase Paradox MyBase Paradox
3740 480 1645 5

Paradox prends ici sa revanche, l'ouverture de la table, ou le changement d'index s'avère plus lourds avec MyBase.

III. Migration Paradox ou DBase vers MyBase

III-A. Exemple de migration

En fait MyBase possède bien des avantages par rapport à Paradox ou DBase. Ne serait-ce que la portabilité Linux. Par ailleurs, le couple TCLientDataSet/TDataSetProvider est d'une puissance et d'une souplesse d'utilisation incroyable, on peut tout faire avec (ou presque).

Le composant TCLientDataSet est utilisable aussi bien dans des développements d'applis BD locales, deux-tiers, trois-tiers et multi-tiers, c'est le composant base de donnée universel par excellence. Dans cet article seul l'aspect monoposte à travers MyBase est abordé.

Un exemple concret de migration de votre base Paradox vers Linux, pas de problème si ce n'est posséder Delphi 6 et Windows :-) C'est si simple que je n'ai rien a dire, tout est là.

Image non disponible

L'image se passe de commentaires, le TTable charge les données, le DataSetProvider les récupère et les fournit au TClientDataSet, il suffit alors de sauvegarder au format XML. Ceci offre donc la possibilité de transporter toutes les bases accessibles via le BDE vers le format XML. Bien évidemment, il n'est pas nécessaire de faire ça dans l'IDE :-) L'affichage des données, donc les "DBGrid" et les "DataSource" ne sont là que pour l'exemple. Il est tout à fait possible de créer dynamiquement les composants sans rien afficher lors du changement de format, une simple procedure ou fonction devrait suffire à la tâche.

III-B. Une fonction de convertion

 
Sélectionnez

function TForm1.DBF2XML(DBFFile,XMLFIle:String):boolean;
var Table:TTable;
    DataSetProvider:TDataSetProvider;
    ClientDataSet:TClientDataSet;
begin
  Result:=true;
  try
    try
      Table:=TTable.Create(self);
      if FileExists(DBFFile) then
        Table.TableName:=DBFFile
      Table.Open;
      {création de la Table et chargement du DBF}
      try
        DataSetProvider:=TDataSetProvider.Create(self);
        DataSetProvider.DataSet:=Table;
        {creation et paramètres du DataSetProvider}
        try
          ClientDataSet:=TClientDataSet.Create(Self);
          ClientDataSet.SetProvider(DataSetProvider);
          ClientDataSet.Open;
          ClientDataset.SaveToFile(XMLFile,dfXML);
          {Création paramétrage et sauvegarde du ClientDataset}
        finally
          ClientDataSet.Free;
        end;
      finally
        DataSetProvider.Free;
      end;
    finally
      Table.Free;
    end;
  except
    Result:=false;
    {une erreur s'est produite}
  end;
end;
				

IV. Conclusion

Cet article vous permettra de faire vos premiers pas avec MyBase ou du moins je l'espère vous en donnera l'envie :-)

Au final, je pense que des formats comme DBase utilisés pour des raisons de légèreté et de compatibilité ont cette fois, trouvé un concurrent de taille. Aujourd'hui il est possible de distribuer une application sous 2 plateformes différentes (Windows et Linux) en utilisant le même format de base de données et sans avoir à installer un quelconque moteur externe. Interbase et Mybase pourraient former le duo BD standartd du developpeur Delphi / Kylix.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 Jean-Marc Carayon. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.