- ^ 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.0
signifie jamais,1
signifie 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.