- ^ Composants de jelix
- jTpl : le moteur de templates
- jZone : découper vos pages en zones
- jDao : mapping objet relationnel
- Formulaires classiques
- jForms : des formulaires automatiques
- jDb : accéder à une base de données SQL
- jKvDb : accéder à une base de type key/value
- jClasses: utiliser des classes métiers
- jUrl : des URLs automatiques
- jAuth : système d'authentification
- jAcl2 : système de droits
- jLocale: internationaliser votre application
- jEvents : communication inter-module
Chapitre: jKvDb : accéder à une base de type key/value
| « jDb : accéder à une base de données SQL | ^ Composants de jelix | jClasses: utiliser des classes métiers » |
− Table des matières
Jelix contient une couche d'abstraction aux bases de données de type key-value, moins complexes que les bases de données SQL.
Vous avez jKVDb dont vous pouvez récupérer un connecteur à une base de
données clé-valeur. Tout comme jDb, il y a des profiles définis dans un fichier
profiles.ini.php (Voir le chapitre sur l'utilisation de ce fichier profiles.ini.php),
où vous pouvez définir des paramètres pour vous connecter à ces bases de
données.
jKVDb fonctionne avec des "drivers" pour accéder aux données clé-valeur. Jelix fourni des drivers pour de simples fichiers (file et file2), memcache, redis, et ... sql. Voir plus bas pour plus d'informations sur ces drivers.
Configuration ¶
Comme jDb, profiles.ini.php contient des sections, une pour chaque base de
données à laquelle vous voulez accéder. Chaque section contient au moins un
paramètre driver donnant le nom du driver à utiliser Des autres paramètres
peuvent être définis en fonction du driver sélectionné.
Le type de connexion à indiquer dans les noms des sections de
profiles.ini.php est jkvdb.
Accéder à une base de données ¶
Vous devez appeler jKVDb::getConnection(), en donnant éventuellement un
profile (sinon le profile par défaut est utilisé). Vous récupérez un objet qui
hérite de jKVDriver.
Avec cet objet, vous pouvez accéder au contenu de la base clé-valeur, et aussi le modifier. Voici des méthodes que vous pouvez appeler:
get($key): pour récupérer un valeur correspondant à une clé donnée.set($key, $value): pour stocker un nouvelle valeur ou modifier une valeur existante.insert($key, $value): pour stocker une nouvelle valeur. Retourne false si clé existe déjà.replace($key,$value): pour changer la valeur correspondant à une clé. Si la clé n'existe pas, false est retourné.delete($key): supprime la clé-valeur correspondante.flush(): supprime toutes les clés.append($key, $value): Concatène une chaine de caractères à la fin d'une valeur.prepend($key, $value): Concatène une chaine de caractères au début d'une valeur.
Autres opérations particulières ¶
Certains drivers peuvent implémenter des méthodes additionnelles en fonction des
possibilités de la base. Un exemple de ces interfaces est jIKVttl, où les
valeurs ont un temps de vie limité.
Pour stocker de telles valeurs, vous devez appeler la méthode
setWithTtl($key, $value, $ttl), où $ttl est une valeur en secondes.
Vous pouvez aussi appeler la méthode garbage pour effacer toutes les clés
que ne sont plus valides.
Drivers ¶
memcache ¶
Il utilise l'API memcache de PHP (à ne pas confondre avec l'autre API: memcached). Il supporte uniquement la version 3.0.1 de memcache ou inférieur.
Dans le profil, vous devez indiquer un host et un port, ou plusieurs host/port. Voici un exemple avec un simple serveur:
[jkvdb:mymemcacheserver]
driver=memcache
host=localhost
Ou avec plusieurs serveurs:
[jkvdb:mymemcacheserver]
driver=memcache
host=memcache_server1:11211;memcache_server2:11212
; ou:
host[]=memcache_server1:11211
host[]=memcache_server2:11212
Vous pouvez aussi définir le paramètre compress=1, pour que les valeurs
soient compressées lors du stockage.
Ce driver supporte l'interface jIKVttl.
redis ¶
Ce driver permet d'accéder à une base de données Redis. Il utilise la librairie
php5redis. Pour le configurer, il suffit d'indiquer un host et un paramètre
port.
[jkvdb:myredis]
driver=redis
host = localhost
port = 6379
Ce driver supporte l'interface jIKVttl.
db ¶
Il permet d'utiliser une table SQL pour stocker les clé-valeurs. Pour le configurer, vous devez indiquer:
table: le nom de la table à utiliser.dbprofile: le nom du profil jDb à utiliser pour accéder à la base SQL.
La table doit contenir trois champs, avec des noms et des types de champs spécifiques. Voici un script SQL pour créer de telles tables:
CREATE TABLE mykvdbtable (
k_key VARCHAR( 50 ) NOT NULL ,
k_value longblob NOT NULL ,
k_expire DATETIME NOT NULL ,
PRIMARY KEY (k_key)
);
Vous pouvez avoir plusieurs tables, pour éviter d'avoir des conflits entre les modules qui utilisent jKVDb.
Ce driver supporte l'interface jIKVttl
file ¶
Il charge les valeurs dans des fichiers. Chaque fichier contient une valeur. Configuration:
storage_dir: le répertoire où les fichiers sont placés. Peut contenir des raccourcis comme "var:" ou "temp:", le répertoire par défaut estvar/kvfiles/.file_locking: false pour désactiver le "lock" de fichiers. True par défaut.automatic_cleaning_factor: donne la fréquence avec laquelle il faut nettoyer les fichiers trop vieux.0signifie jamais,1signifie pour chaque accès, plus élevé signifie une fréquence moins élevée..directory_level: si vous savez que vous aurez des milliers de valeurs, vous pouvez augmenter le nombre de niveau de répertoires: 2 par defaut.directory_umask: le umask des répertoires créés. 0700 par défaut.file_umask: le umask des fichiers créés. 0600 par défaut.
Ce driver supporte l'interface jIKVttl.
file2 ¶
C'est un driver similaire au driver "file", mais en moins sophistiqué. Pas de
paramètres de configuration et les fichiers sont stockés dans
temp/filekv/.
Vous ne devez l'utiliser que pour des valeurs temporaires.


