Vous êtes sur la page 1sur 8

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java

Par Franois Ostyn (So@t) - Soat


Date de publication : 13 octobre 2012

Aujourd'hui, je me suis connect mon compte GMail, pass quelques appels professionnels, ajout quelques sources dans Subversion, install quelques RMP sur ma distribution Linux Mais pourquoi est-ce que je vous parle de a ? Eh bien tout simplement car GMail, SVN, RPM ont un lment en commun, ils stockent certaines de leurs donnes dans une base Berkeley DB. Pour ragir au contenu de cet article, un espace de dialogue vous est propos sur le forum .

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

I - Introduction..............................................................................................................................................................3 II - propos de Berkeley DB......................................................................................................................................3 III - La famille de Berkeley DB....................................................................................................................................3 III-A - Oracle BDB Core......................................................................................................................................... 3 III-B - Oracle BDB XML Edition............................................................................................................................. 3 III-C - BDB Java Edition.........................................................................................................................................3 IV - Les fonctionnalits-cls........................................................................................................................................ 3 V - Les fonctionnalits additionnelles..........................................................................................................................4 VI - Introduction Berkeley DB Java Edition............................................................................................................. 4 VI-A - Installation.................................................................................................................................................... 4 VI-B - Les API d'accs aux donnes.....................................................................................................................5 VI-C - L'API de base par la pratique..................................................................................................................... 5 VI-D - L'API DPL par la pratique........................................................................................................................... 5 VII - Description de l'environnement de Berkeley DB Java Edition............................................................................ 6 VIII - Le support des transactions............................................................................................................................... 7 IX - Monitorer une application utilisant BDB JE..........................................................................................................7 X - Les sources........................................................................................................................................................... 8 XI - Conclusion et remerciements............................................................................................................................... 8

-2Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

I - Introduction
Aujourd'hui, je me suis connect mon compte GMail, pass quelques appels professionnels, ajout quelques sources dans Subversion, install quelques RMP sur ma distribution Linux Mais pourquoi est-ce que je vous parle de a ? Eh bien tout simplement car GMail, SVN, RPM ont un lment en commun, ils stockent certaines de leurs donnes dans une base Berkeley DB.

II - propos de Berkeley DB
Berkeley DB (que nous nommerons BDB) fait partie de la famille des bases de donnes cl-valeur et est sans doute le produit de cette famille le plus utilis au monde avec plusieurs dizaines de millions de dploiements revendiqus par l'diteur. La premire version de BDB remonte 1986 et est la proprit d'Oracle depuis fvrier 2006.

III - La famille de Berkeley DB III-A - Oracle BDB Core


Cette version de Berkeley DB est crite en C ANSI et peut tre utilise comme une bibliothque pour accder aux donnes persistes. Oracle BDB fournit de nombreuses interfaces pour diffrents langages de programmation (C, Perl, PHP, Python).

III-B - Oracle BDB XML Edition


Cette version est une surcouche de BDB. Cette version XML permet de stocker et rcuprer facilement des documents XML. L'utilisation de XQuery permet d'accder aux documents XML stocks.

III-C - BDB Java Edition


Cette version de Berkeley DB, 100 % Java est une base embarque adoptant le format de stockage cl-valeur. De plus, BDB JE est trs performante et flexible. Cette base supporte les transactions, permet de stocker des objets Java en utilisant seulement quelques annotations.

IV - Les fonctionnalits-cls
Chaque membre de la famille BDB possde diffrentes fonctionnalits. Dans toutes les familles de BDB, nous pouvons remarquer les fonctionnalits suivantes. Feature Set Data Store (DS) Concurrent Data Store (CDS) Transactional Data Store (TD) High Availability (HA) Description 1 Writer and n reader n writers and n snapshot reader Full ACID support on top of CDS Replication for fault tolerence. Fail over recovery support

Le tableau suivant dcrit les diffrences entre BDB "core" et BDB JE.

-3Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

DS CDS TS HA BDB/ X X X X BDB XML BDD X X JE

V - Les fonctionnalits additionnelles


Vous trouverez les fonctionnalits qui rendent BDB unique ! Fonctionnalit Bnfice Haute concurrence Performance et pas de conversion ncessaire Performances et flexibilit et contrle Performances et pas d'IPC ncessaire Cot de possession faible Fiabilit et donnes intgres Open/Close source distributions Transacted caching/Persisted data store Facilit de passer de BDB BDB JE Facile dployer et utiliser Virtuellement pas de limite de base de donnes

Locking Donnes stockes dans le format natif de l'application API et pas de SQL In Process et pas de client/serveur Zro administration Transactions ACID et rcupration Dual licences En mmoire ou sur disque Similar data access API Faible dpendance vers des bibliothques tierces Bases de donnes de grandes capacits

Et pour ce qui est BDB Java Edition, vous trouverez ses propres fonctionnalits dans le tableau ci-dessous : Fonctionnalit Fast, Indexed, B-Tree Java JEE JTA et JCA Support Efficient Direct Persistence Layer Easy Java Collections API Low Level Base API JMX Support Bnfice Rcupration des donnes trs rapide Intgration avec les serveurs d'applications Java EE Utilisation d'annotations pour stocker les graphes d'objets Java Manipulation transactionnelle des API de base au travers de Collections Java amliores Travailler avec des schmas de donnes dynamiques Possibilit de monitoring

VI - Introduction Berkeley DB Java Edition VI-A - Installation


Tout d'abord, dbutons par le commencement. Pour pouvoir utiliser BDB Java Edition, vous devez l'installer l'adresse suivante : http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html. L'installation de Berkeley DB est assez simple, il suffit de dcompresser l'archive que vous venez de tlcharger ! Le seul fichier dont vous aurez besoin pour faire fonctionner les exemples que nous verrons plus tard est le : "je-*.jar".

-4Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

VI-B - Les API d'accs aux donnes


BDB JE fournit trois API pour accder aux donnes : l'API de base fournit un simple modle cl-valeur pour stocker et rcuprer les donnes ; l'API DPL (Direct Persistence Layer) qui vous laisse persister n'importe quelle classe Java comportant un constructeur par dfaut en base de donnes. Cette API vous permet de rcuprer les donnes avec des fonctionnalits de recherche assez riches ; la Collection API qui tend la Java Collection API avec le support de la persistance et des transactions en plus de l'accs aux donnes.

VI-C - L'API de base par la pratique


// Ouverture de la base de donnes et cration si ncessaire EnvironmentConfig environmentConfig = new EnvironmentConfig(); environmentConfig.setAllowCreate(true); // Physiquement o se trouve la base Environment environment = new Environment(new File(System.getProperty("java.io.tmpdir")), environmentConfig); DatabaseConfig databaseConfig = new DatabaseConfig(); databaseConfig.setAllowCreate(true); databaseConfig.setSortedDuplicates(false); Database database = environment.openDatabase(null, "BDBJESample", databaseConfig); // Enregistrement en base DatabaseEntry key = new DatabaseEntry("keyValue".getBytes("UTF-8)); DatabaseEntry data = new DatabaseEntry("dataVAlue".getBytes("UTF-8)); database.put(null, key, data); // Rcupration des enregistrements DatabaseEntry searchEntry = new DatabaseEntry(); database.get(null, key, searchEntry, LockMode.DEFAULT); String found = new String(searchEntry.getData(),"UTF-8"); // Mise jour de l'enregistrement database.put(null, key, data); // Suppression en base database.delete(null, key); // Fermeture de la connexion la base database.close(); environment.close();

Comme vous pouvez le remarquer, l'utilisation de cette API est trs simple mais assez verbeuse.

VI-D - L'API DPL par la pratique


Tout d'abord, avant de commencer vous parler de DPL, mme si nous sommes dans l'univers NoSQL , il est toujours possible de faire une analogie avec le SQL. Terme SQL Database Table Primary Index Secondary Index Tuple/Row quivalence Oracle DPL Environment Primary Index and its related secondary indices Primary Index Secondary Index Entity

L'exemple que je vais vous prsenter se dcompose en deux parties. Premirement, un entity bean et une classe de management qui gre le CRUD (Create-Replace-Update-Delete) au-dessus de l'entity bean.

-5Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

@Entity public class Employee { @PrimaryKey public Integer id; public String name; public String forname; @SecondaryKey(relate = Relationship.MANY_TO_MANY, relatedEntity = Project.class, onRelatedEntityDelete = DeleteAction.NULLIFY) public Set<Long> projects; public Employee(Integer id, String name, String forname, Set<Long> projects) { this.id = id; this.name = name; this.forname = forname; this.projects = projects; }

Il s'agit en effet d'un simple POJO avec quelques annotations. Ceux qui connaissent un peu JPA ne seront pas perdus ! Le code ci-dessous vous montre comment accder aux donnes prsentes dans le POJO Employee.
@Entity EnvironmentConfig environmentConfig = new EnvironmentConfig(); environmentConfig.setAllowCreate(true); // Physiquement o se trouve la base Environment environment = new Environment(new File(System.getProperty("java.io.tmpdir")), environmentConfig); StoreConfig storeConfig = new StoreConfig(); storeConfig.setAllowCreate(true); EntityStore entityStore = new EntityStore(environment, "BDBJEDPLSample", storeConfig); PrimaryIndex<Integer, Employee> employeePrimaryIndex = entityStore.getPrimaryIndex(Integer.class, Employee.class); employeePrimaryIndex.putNoReturn(new Employee(12,"francois", "ostyn", null)); Employee employee = employeePrimaryIndex.get(12); Assert.assertNotNull(employee); employeePrimaryIndex.delete(12); employee = employeePrimaryIndex.get(12); Assert.assertNull(employee); entityStore.close(); environment.close();

Dans l'exemple ci-dessus nous ne grons ni les transactions, ni des relations complexes.

VII - Description de l'environnement de Berkeley DB Java Edition


Une base de donnes BDB JE est compose d'un ou plusieurs fichiers de logs qui sont situs dans le rpertoire d'environnement. Par dfaut, leur taille est de 10 Mb et peut tre modifie (par exemple, augmenter la taille des logs permet de limiter le nombre d'I/O).

-6Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

VIII - Le support des transactions


Pour grer les transactions avec DPL, il faut faire quelques modifications dans son code.
EnvironmentConfig environmentConfig = new EnvironmentConfig(); environmentConfig.setAllowCreate(true); environmentConfig.setTransactional(true); // << gestion des transactions TransactionConfig transactionConfig = new TransactionConfig(); // << gestion des transactions transactionConfig.setReadCommitted(true); // << gestion des transactions // Physiquement o se trouve la base Environment environment = new Environment(file, environmentConfig); StoreConfig storeConfig = new StoreConfig(); storeConfig.setAllowCreate(true); storeConfig.setTransactional(true); // << gestion des transactions Transaction tx = environment.getThreadTransaction(); // << gestion des transactions environment.beginTransaction(tx, transactionConfig); // << gestion des transactions EntityStore entityStore = new EntityStore(environment, "BDBJEDPLSample", storeConfig); PrimaryIndex<Integer, Employee> employeePrimaryIndex = entityStore.getPrimaryIndex(Integer.class, Employee.class); employeePrimaryIndex.putNoReturn(new Employee(12, "francois", "ostyn", null)); tx.commit();

Bien entendu, vous pouvez prciser un timeout transactionnel, ainsi que le retry policy

IX - Monitorer une application utilisant BDB JE


tant donn que BDB JE est totalement crit en Java, ce dernier expose bon nombre de mtriques via JMX. Pour l'activer, il faut positionner la property "-DJEMonitor=true" au dmarrage de la JVM.

-7Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/

Introduction Oracle Berkeley DataBase Java Edition, une base de donnes cl/valeur dveloppe en Java par Franois Ostyn (So@t) - Soat

Ceci peut tre trs utile pour modifier le comportement de votre application chaud ou rcuprer certaines mtriques.

X - Les sources
Vous pourrez trouver les sources prsentes dans les exemples sur GitHub l'adresse suivante : https://github.com/ francoisostyn/bdbJeSampleFost.

XI - Conclusion et remerciements
l'heure o l'on nous parle de bon nombre de solutions NoSQL , Berkeley DB Java Edition est bien souvent oubli et tort. En effet, cette version est d'une performance redoutable. Cependant, je regrette tout de mme la double licence qui pourra freiner beaucoup de monde. En tout cas, BDB JE est parmi mes solutions NoSQL cl-valeur ! Cet article a t publi avec l'aimable autorisation de la socit So@t. Nous tenons remercier ClaudeLELOUP pour sa relecture orthographique attentive de cet article et Keulkeul pour la mise au gabarit.

-8Copyright 2012 SOAT. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

http://soat.developpez.com/articles/oracle-berkeley-database-javaedition/