fermez cette fenêtre pour revenir au site de microrun

Plan de la page :



Utilité de ces fonctions
Présentation
Spécificités, limites
Les fonctions en détail
Fonctionnement interne




Fonctions ZSI :

Utilité :

Il ne s'agit pas de remplacer avec ces fonctions une base de données.
Cependant, il est souvent utile dans les programmes, de :

* Accéder à des fichiers locaux sans avoir besoin d'une base de données sur le poste.
(dans un cadre client/serveur, inutile d'installer un Criteria sur les clients)
* Réaliser des tris en mémoire.
* Utiliser des listes chaînées de données.
* Réaliser des programmes manipulant des fichiers de petit volume, n'ayant pas besoin de Criteria.


Les fonctions ZSI répondent à ce besoin:

Elles permettent de réaliser des fichiers de tris, temporaires ou permanents, qui se situent soit en mémoire, ce qui est très rapide, soit sur le disque. Le tout sans avoir besoin d'installer une base de données sur le PC.

Ces fonctions reprennent la syntaxe et les codes erreur de Criteria. Ainsi, il est très facile des les utiliser.

De plus, un simple paramètre permet de basculer en mode Criteria ou en mode ZSI :
Avec le même code source, le fichier peut être tantôt au format Criteria, tantôt au format ZSI.

Enfin, des tris peuvent être réalisés, ZSI étant Multi-clés.
Par rapport à une base de données, la limitation concerne le nombre d'enregistrements, qui ne peut dépasser 100.000 sans perte de performance notable.


Programme 100K, livré avec le source dans les exemples BIKINI.
Ce programme, qui gère un fichier clients, n'utilise pas Criteria et utilise exclusivement le SI multi-clés ZSI.








































début





Présentation :

Les fonctions ZI* sont des fonctions Abal de Bikini V1.5 qui permettent d'accéder, fichier par fichier, soit à Criteria, soit à un gestionnaire de fichiers SI multiclés (ZSI) intégré dans ZXP-Library.
Selon un paramètre présent sur la fonction d'assignation du fichier, toutes les instructions suivantes relatives au fichier, se feront soit sur Criteria, soit sur ZSI.
Ceci permet dans vos logiciels de paramétrer entièrement le type de gestionnaire utilisé, fichier par fichier, et en fonction des besoins du client final.
Ceci permet également de garder la portabilité des logiciels sous Linux ou Twin-Server, dans ce dernier cas les fonctions ZI utilisant exclusivement Criteria, car ZSI n'existe que sous Windows.

Les fonctions ZI reprennent la syntaxe des fonctions Criteria. Les codes erreurs, que l'on utilise Criteria ou ZSI sont les mêmes de façon à n'intégrer qu'une seule gestion des erreurs dans les programmes.
Les fonctions ZSI couvrent le séquentiel indexé à l'exception des fichiers de longueur variable et des fichier MC.
Des instructions permettent de gérer des index secondaires.
Certaines fonctions sont purement ZSI et n'existent pas dans Criteria.

Les fichiers ZSI ne peuvent être exploités en monoposte ou en multiposte (depuis la version 1.9),
les LOCKS d'enregistrements et les ouvertures exclusives des fichiers sont gérés par ZSI.
De même les conflits d'accès (écriture en même temps que lecture depuis 2 postes différents) sont gérés, et garantissent l'intégrité des données.

























début



Spécificités :

Les fichiers ZSI peuvent être ouverts et exploités selon trois mode :
- Un mode entièrement sur disque, dit sécurisé, les fichiers sont partageables, les locks gérés.
- Un mode intermédiaire avec gestion d'un cache en lecture et en écriture sur les index. (ouverture EXCLUSIVE SEULEMLENT)
- Un mode entièrement en mémoire vive. C'est le plus rapide. Les fichiers ne sont pas créés sur le disque.
Ce dernier mode est particulièrement adapté aux fichiers de tris.

Les fichiers ZSI ont obligatoirement les extensions suivantes :
.zi = fichier des clés principales
.zd = fichier des données
.ziX = fichier d'index secondaires (X = No d'index [1,2,3,...,9,11,12...])
Sous Twin-Server ou sous Windows, les fonctions ZI utilisées avec ZSI retournent l'erreur 56.

Limites :

Les limites de ZSI sont les suivantes :
- Fourchette de numéros logiques: [1-1024]
- Taille maximum clé: 120 caractères
- Taille maximum données: 32767 caractères
- Nombre maximum de records dans un fichier: 100.000.
- Taille maximum fichier .zi ou .zd: 4 Go

A propos de cette documentation :

Seuls les codes erreurs pouvant être spécifiques à ZSI sont documentés. Les autres codes erreur (ex: er 41 sur Cfile) sont les codes erreur Abal.


Le programme d'exemple EXBIKV15 utilise les fonctions ZSI, notament pour réaliser un PATCH
A noter que les fonctions zi_svzi et zi_rtzi permettent de passer par les .U de Criteria, permettant ainsi le passage d'un fichier Criteria à un fichier ZSI et réciproquement.


































début



Présentation des fonctions :

On retrouve toutes les fonctions SI Criteria :

zi_assign, zi_open, zi_close, zi_cfile, zi_rename, zi_atb pour la manipulation des fichiers.
zi_insert, zi_modif, zi_delete, zi_down, zi_up pour gérer les records d'un fichier.
Les fonctions zi_msearch, zi_mdown, zi_mup, zi_mfirst, zi_mlast permettent de locker un record.
Les fonctions zi_zcread, zi_zcreadlock, zi_zcwrite gèrent la zone commune.

A noter que les fonctions zi_svzi et zi_rtzi permettent de passer par les .U de Criteria, permettant ainsi le passage d'un fichier Criteria à un fichier ZSI et réciproquement.

Les fichiers ZSI peuvent être utilisés dans les listes Bikini :

Pour ce faire, la fonction zfilezi, équivalente à zfilesi pour Criteria, identifie le fichier pour Zlibrary.
Les fonction zlifposit_zi et zlifposit_zi permettent d'associer une liste fichier Bikini à un fichier ZSI.

Il existe également des fonctions spécifiques à ZSI :

Les fonctions zi_first et zi_last qui permettent de se positionner en début ou fin de fichier.
Les fonctions zi_write et zi_read sont un peu particulières :
Elles permettent d'adresser un record par son numéro dans les clés. Ceci est utile lorsque l'on gère un fichier en mémoire, avec un numéro de clé chrono.
Elles sont plus simple d'emploi que zi_search et zi_modif dans ce cas.


ZSI permet de gérer du séquentiel indexé multi-clés :

zf_xclink permet de définir et de créer les index secondaires. Un tableau de description par index doit être passé à cette fonction.
Les fichiers d'index sont des fichiers d'extension .zi1, .zi2 etc...
zf_xdlink détruit un index secondaire.
zi_xposit définit, comme le posit de Criteria, un intervalle de recherche sur un index secondaire. Cependant, on ne pose pas de question, on passe un index mini et un index maxi la fonction.
Les down et up qui suivent l'instruction sortiront en erreur 96 en fin des réponses.
zi_xpositd et zi_xcount sont les fonctions dérivées de zi_xposit.
La fonction zi_xsearch, bien pratique et absente de Criteria, permet de se positionner sur une clé précise sur l"index secondaire.
et les fonctions zi_up et zi_down navigueront dans le fichier.

début




Fonctionnement interne :

Le fichier des données .zd :
Le fichier des données contient les records les uns à la suite des autres (clé+marqueur+données). Une insertion de record place ce record en fin de fichier. Supprimer un record met son marqueur à zéro.

Les fichiers de clés .zi, .zi1, .zi2 etc :
Ce fichier contient les numéros d'ordre des records triés selon l'index principal.
Ces numéros sont stockés sur 2 octets, 3 octets ou 4 octets selon la taille du fichier.
Par exemple, au delà de 65535 records, le fichier est automatiquement reconstruit pour passer en structure 3 octets.

Une insertion provoque un déplacement de l'ensemble du fichier .Zi situé après le record inséré, vers l'arrière
Une suppression provoque un déplacement de l'ensemble du fichier .Zi situé après le record inséré, vers l'avant.

Ce principe est très simple et permet de construire un SI rapide en lecture. Cependant il limite le nombre des records, car plus le fichier grossit, plus les insertions et suppressions sont lentes.
On peut considérer que jusqu'à 100.000 records ces temps d'insertion/suppression sont négligeables.
Au delà, les performances en patissent.


Le secteur de description du fichier :
Ce secteur (256 octets) est le premier secteur du .zi.

Voici sa description
#define	MAX_INDEX	50				// nombre maximum d'index
// Secteur d'entête du .ZI :
typedef	struct
{
	char	signe[6];				// 'ZFILE1'
	WORD	lgk;					// Longueur clé (2 octets)
	SWORD	lgd;					// Longueur données (2 octets)
	WORD	nbo;					// Nombre d'octets record .zi [2,3 ou 4] (2 octets)
	DWORD	nbr;					// Nombre total de records du fichier (4 octets)
	DWORD	nbd;					// Nombre total de records dans datas (4 octets)
	WORD	hotflag;				// Hot-Flag (1 en début d'écriture, 0 en fin d'écriture)
	WORD	signature;				// Incrémenté de 1 à chaque accès en écriture (rechargement cache dès changement)
	WORD	idxnb;					// Nombre d'index
	WORD	didx[MAX_INDEX];			// Flag par numéro d'index secondaire (0=inexistant, 1=existe mais non clinké, 2=existe et clinké)
	char	reserve[80];
	char	zonec[50];				// Zone commune
} SI_1ST;
Patch du premier secteur d'un fichier ZSI contenant 4 index secondaires, Le fichier contient 199.352 record (B8.85.02.00). Il est en structure 3 octets.
Ce fichier est en exploitation quotidienne sur un réseau de 6 postes


































Le fichier index secondaire .ziX :
X=Numéro d'index.
Ce fichier fonctionne de la même manière que le .zi.
Pour le reconstruire, il suffit de le détruire, zi_xclink le re-créera automatiquement.


début