| |
|
Au debut
Pour commencer je tiens à préciser que je suis pédiatre et non informaticien de métier.
L'informatique est mon loisir préféré et la programmation, comme l'exercice médical
est, pour moi, un vrai plaisir inégalé et ce avant toute autre considération.
C'est quoi une database ?
C'est un ensemble de fonction capable d'organiser des données distinctes sur un fichier linéaire
et les resortir distinctes à la demande. Ces fonctions doivent être capable d'ajouter, modifier et supprimer
distinctement ces différentes données.
Comment sépare-t-on les données dans la database ?
Puisque la database, se présente comme un fichier linéaire, pour séparer les données, au sein de ce fichier,
il y a plusieurs solutions :
1- l'utilisation d'un caractère, peu utilisé, comme "\" pour séparer deux champs contigues.
Et si une donnée contient ce caractère,
on l'échappe en le transformant en "\\" et comme ca on sait qu'a l'origine c'est une seule slash. Cette architecture
nécessite pas mal de temps de calcul précieux du processus pour verifier les données caractère par caractère
afin de trouver le séparateur, et au lieu de servir le client, les fonctions vont passer un temps à vérifier
les limites des champs, noter puis dénoter les caractères spéciaux, puis calculer la vrai taille du champs avec ou sans
le caractère d'échappement.
2- L'utilisation d'un fichier d'entête contenant la place et tailles de toutes les données. Et c'est la solution
qu'on a adopté. Comme ca, il suffit de lire le fichier d'entête pour connaitre le nombre et la place de toutes
les données contenu dans le fichier.
Comment ca se passe ?
Dans l'architecture utilisant un fichier d'entête, la fonction [ouvrante] charge le fichier d'entête (le premier morceau)
de la database afin de construire une réelle carte contenant les details de chaque champ [debut, taille, etc ... ]. Les
champs de données (deuxiéme morceau) est
1- soit lié a un descripteur de fichier et dans ce cas la fonction [lectrice] place la tête de lecture du disque sur le debut
du champs pour lire la taille du champ.. Mais les modification des champs ne peuvent s'effectuer qu'en ajout et cela va
agrandir la taille de la database indéfiniment jusqu'a l'appelle a une fonction [compactatrice] qui va réorganiser les champs
pour se débarasser les champs non utilisés mais coincés au milieu du fichier.
2- soit chargé en entier dans la RAM, solution adoptée par softamed, et dans ce cas, l'accés aux champs et instantané, même pas
le temps de déplacement de la tête du disque. La modification s'effectue par réallocation de mémoire vive, qui est instantanée aussi.
La fermeture de la database, pose en une seule coulée les deux morceaux (entête+données) sur le disque dure. Softamed ne
compacte jamais sa database puisqu'elle est reconstruite à chaque fois.
Et Les fonctions ttoufic ?
Le portage des fonctions dans le milieu BSD-Linux, vient à peine de commencer, et pour l'instant nous chargeons,
l'entête et les données dans la RAM, mais là c'est un peu différent puisque, les fonctions sont intégrées à des processus
fork(), qui naissent pour servir et mourir le plus rapidement possible en usant le moins de RAM possible. Donc leurs place sera a moyen
terme est dans un processus serveur de type daemon. Pour l'instant on va tester ces fonctions sur des petites databases de quelques Mb.
En fait, ils seraient parfait pour des blogs, comme ca chaque fork() constitue a lui seul un nano-serveur-php + nano-serveur-mysql.
04/01/2006: Nous developperons dans l'avenir un peu plus les notions
abordées dans cette page.
Copyright © 2005 Dr Mteyrek Mohamad All rights reserved
|
|