ZODBZope Object Database
La ZODB (Zope Object DataBase) est la base de données orientée objet du serveur d'applications Zope. Bien que Zope l'utilise comme système de fichiers, elle est néanmoins utilisable indépendamment de ce dernier pour stocker des objets Python par exemple. À la différence d'une base de données relationnelle, une base de données orientée objet est hiérarchique, autrement dit, il s'agit d'une arborescence comme le système de fichiers d'un ordinateur : root / \ objet A objet B Il est possible d'utiliser des relations en donnant un identifiant aux objets qui en ont besoin et en gérant ça comme sur une base de données relationnelle avec un identifiant qui s'auto-incrémente à la création d'un objet. En pratiqueZEO (Zope Entreprise Objects) sert à donner accès concurrentiel à la ZODB sur le réseau.
$ runzeo -a localhost:8080 -f /home/user/Data.fs
<zodb> <zeoclient> server localhost:8080 </zeoclient> </zodb>
import ZODB.config, transaction db = ZODB.config.databaseFromURL('/home/user/zeo.conf') conn = db.open() root = conn.root() #root est le dictionnaire racine qui contient tous les objets de la base root['variable'] = 'mon objet' transaction.commit() # enregistre les changements dans la ZODB Il est conseillé d'utiliser des objets BTrees fournis avec la ZODB, un objet BTree est conteneur, un nœud de l'arborescence, un peu comme un dictionnaire ou une liste Python mais qui n'est pas chargé entièrement en mémoire quand on l'utilise. Par exemple : from BTrees.IOBTree import IOBTree root = IOBTree() root[0] = "Python" root[1] = "Zope" print root n'affichera pas ['Python', Zope] mais quelque chose du genre : <BTrees.IOBTree.IOBTree object at 0x87ecb24> L'intérêt se situe lorsque l'on possède des milliers d'occurrences dans la base de données, qui en plus sont souvent imbriquées les unes dans les autres : print root[1] # ne chargera pas en mémoire tout l'objet root mais juste l'occurrence numéro 1 Il existe plusieurs BTrees : OOBTree, IOBTree, OIBTree, IIBTree et IFBTree. La première lettre correspond à la clef et la seconde à la valeur, O pour Object, I pour Integer et F pour Float. Ainsi, IOBTree correspond à un BTree qu'on identifie avec un entier et qui peut contenir des objets. Liens internes
|