OpenPaaS Le réseau social d'entreprise

Documents pareils
La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Introduction à JDBC. Accès aux bases de données en Java

Programmation d application Bases de données avec Java

TP Programmation Java / JDBC / Oracle

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java DataBaseConnectivity

Bases de Données relationnelles et leurs systèmes de Gestion

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Accès aux bases de données

Le langage SQL (première partie) c Olivier Caron

Configurer la supervision pour une base MS SQL Server Viadéis Services

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Cours 8 Not Only SQL

Olivier Mondet

Cours Bases de données 2ème année IUT

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

CREATION WEB DYNAMIQUE

Notes de cours : bases de données distribuées et repliquées

Pratique et administration des systèmes

I4 : Bases de Données

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Java et les bases de données

Application web de gestion de comptes en banques

Bases de Données NoSQL

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Bases de données relationnelles

Gestion de base de données

Introduction à ElasticSearch

Langage SQL : créer et interroger une base

PHP. PHP et bases de données

PHP 5. La base de données MySql. A. Belaïd 1

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Alfstore workflow framework Spécification technique

Le Langage SQL version Oracle

SQL Historique

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Les BASES de DONNEES dans WampServer

Historisation des données

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Les bases de données

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Mysql. Les requêtes préparées Prepared statements

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

La base de données XML exist. A. Belaïd

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Présentation Windows Azure Hadoop Big Data - BI

1. Base de données SQLite

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Création et Gestion des tables

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

PHP et les Bases de données - Généralités

PDO : PHP Data Object 1/13

FileMaker 13. Guide de référence SQL

Création d une application JEE

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Partie 0 : Gestion des tablespace et des utilisateurs... 3

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de données et sites WEB

A QUOI SERVENT LES BASES DE DONNÉES?

Gestion de stock pour un magasin

Cours: Administration d'une Base de Données

Dis papa, c est quoi un bus logiciel réparti?

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Stockage de données sous Android

Compétences Business Objects

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Une introduction à Java

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Tutoriel d installation de Hibernate avec Eclipse

Corrigé des exercices sur les références

Serveur d'archivage 2007 Installation et utilisation de la BD exist

PHP 4 PARTIE : BASE DE DONNEES

Compte-rendu de projet de Système de gestion de base de données

Développement Web - Object Relational Mapping and Hibernate

Sybase Adaptive Server Enterprise 15

Panorama des Bases de Données

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Auto-évaluation Oracle: cours de base

Bases de données avancées

1. Langage de programmation Java

Bases de données - Modèle relationnel

JDBC le langage Java XVI-1 JMF

Projet de programmation (IK3) : TP n 1 Correction

Bases de SQL. Hacks 1-6 CHAPITRE UN

as Architecture des Systèmes d Information

Java - MySQL. Code: java-mysql

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Construire une base de donnée pour bibliothèque

Transcription:

OpenPaaS Le réseau social d'entreprise Spécification des API datastore SP L2.3.1 Diffusion : Institut MinesTélécom, Télécom SudParis 1 / 12

1OpenPaaS DataBase API : ODBAPI...3 1.1Comparaison des concepts...3 1.2Présentation synthétique de l API...4 1.3Diagramme de paquetage...5 1.4Spécification détaillée de ODBAPI...7 1.5Exemples d utilisation de ODBAPI...9 1.5.1Création d une collection...9 1.5.2Création d une table...10 1.5.3Ajout de documents...10 1.5.4Ajout de tuples...10 1.5.5Exécution d une requête sur une base de données...11 1.5.6Exécution d une requête sur une base de données relationnelle...11 Télécom, Télécom SudParis 2 / 12

1 OpenPaaS DataBase API : ODBAPI De nos jour, les APIs pour les SGBDs relationnels (i.e. JDBC, ODBC, etc.) d une part et pour les SGBD NoSQL (i.e., CouchDB, etc.) sont hétérogènes sur plusieurs plans : Niveau d API : Il y a deux catégories d API. Dans la première catégorie, les opérations sont non explicites dans l API puisque les requêtes d accès aux BD sont décrites dans des chaînes de caractères (tel que JDBC). Dans la deuxième catégorie, les opérations sont explicitées dans l API avec une méthode pour chaque opération (tel que driver). Typage : Il y a des APIs très liées aux langages de programmation et qui manipulent des objets typés (Java pour JBDC par exemple) et d autres qui manipulent des structures de données plus neutres (JSON par exemple). Afin de surmonter ces problèmes d hétérogénéité, nous proposons une nouvelle API que nous appelons OpenPaaS DataBase API (ODBAPI). Elle est une API générique permettant d interroger des datastores relationnels et NoSQL. ODBAPI est conçue pour être indépendante d un langage de programmation et peut être implémenté pour n importe quel langage. En plus, ODBAPI peut être facilement transformée en une API basée sur l architecture REST. 1.1 Comparaison des concepts Dans Table1, nous présentons une analogie entre les terminologies utilisées dans une base de données relationnelle et et nous définissons une terminologie propre à notre API. Par exemple, une table dans une base de données relationnelle est équivalente à une collection dans. Dans ODBAPI, nous appelons cette structure de données «Entity Set». Table 1: Tableau de correspondance des concepts. Relational concepts ODBAPI concepts concepts Database Database Database Table Entity Set Collection Row Entity Document Column Attribute Field Query Query Query Index Index Index Table joins Entity join Embeded documents Primary key Primary key Primary key Aggregation Aggregation Aggregation pipeline Dans ce qui suit, nous présenterons l API que nous proposons. Dans cette API, Télécom, Télécom SudParis 3 / 12

nous utilisons les concepts suivants : Database, Entity Set, Entity, Attribute, and Query. 1.2 Présentation synthétique de l API Nous présentons ci-dessous de manière synthétique l API proposée ODBAPI en la comparant aux APIs JDBC et. Nous avons choisi de reprendre le schéma classique connexion-authentification, suivie d un ensemble d opérations de type CRUD (pour «Create», «Read», «Update», «Delete»). Pour celles-ci nous avons définis une opération ODAPI par type d opération CRUD. Les méthodes que nous présentons dans la colonne «ODBAPI» de la Table 2 seront introduites par la suite dans la section 1.4. Table 2: Tableau de correspondance des API. JDBC API ODBAPI API Class.forName("com.mysql.jdbc.Driver "); Connection con=drivermanager.getconnection (db_url, login,pswd); Statement stmt = stmt.executeupdate(query); Statement stmt = stmt.executeupdate(query); Statement stmt = stmt.executeupdate(query); Statement stmt = stmt.executeupdate(query); DB db = connectdb(login, pswd, dbname, host, port) Connection con= connectdb(login, pswd, db_url) dropdb(db); dropdb(dbname, con); DBCollection coll = createentity(nameentity, db); createentity(query, con); dropentity(coll); dropentity(query, con) inserttuple(doc, coll) inserttuple(query, con) Mongo mongo = new Mongo(host, port); DB db =mongo.getdb(dbname); boolean auth = db.authenticate(login, pswd); db.dropdatabase(); DBCollection coll = db.createcollection(nameentity, null); coll.drop(); coll.insert(doc); Statement stmt = stmt.executeupdate(query); Statement stmt = stmt.executeupdate(query); updatetuple(doc, coll, true); updatetuple(query, con); deletetuple(coll, condition); deletetuple(query, con); BasicDBObject multi= new BasicDBObject("multi", "true"); coll.update(doc, multi); BasicDBObject condition; coll.remove(condition); Télécom, Télécom SudParis 4 / 12

Statement stmt = ResultSet rs = stmt.executequery(query); DBCursor cursor = executequery(query, coll) ResultSet rs=executequery(query,con) DBCursor cursor = coll.find(query); 1.3 Diagramme de paquetage Pour une bonne conception logicielle de ODBAPI, nous l avons illustré par un diagramme de paquetage. En effet, ce diagramme permet de regrouper les classes liées logiquement entre elles dans des modules afin de donner une vue globale sur l API proposée. Dans la Figure 1, nous présentons six paquets : «dbmapi» : Ce paquet contient la classe principale de l API. En effet, ce paquet contient la ODBAPI qui nous permet de choisir le type de datastore (i.e. relationnel ou ) que nous voulons interroger et d accéder aux méthodes appropriées au type choisi. «connection» : Ce paquet fournit les méthodes nécessaires pour la connexion à une base de données selon son type. Dans ce paquet, nous trouvons l interface qui présente ces méthodes et leur implémentation dans le paquet «impl». Cette structure est adoptée pour les quatre paquets qui suivent. «database» : Ce paquet présente les méthodes assurant toutes les opérations possibles sur une base de données. «entityset» : Ce paquet contient les méthodes permettant la manipulation d une entity set (i.e. une table ou une collection). «entity» : Ce paquet fournit les méthodes permettant de manipuler une entity (i.e. un tuple ou un document) «query» : Ce paquet présente les méthodes nécessaires pour l exécution des requêtes sur une base de données relationnelle ou. Télécom, Télécom SudParis 5 / 12

Figure 1 Diagramme de paquetage Télécom, Télécom SudParis 6 / 12

1.4 Spécification détaillée de ODBAPI Dans la Table 3, nous présentons les différentes méthodes de notre API type d opération par type d opération en alternant et JDBC. API DB connectdb(string dbname, String host, int port) DB connectdb(string login, char[] pswd, String dbname, String host, int port) DB connectdb(string login, char[] pswd, String dbname, Vector<String> host, Vector port) java.sql.connection connectdb(string login, String pswd, String db_url) Table 3: Spécification de l API ODBAPI. Description Connect to a database - dbname: database name - host: host name of the server - port: port number of the server - Connection object to a server Connect to a database with authentication - login: username - pswd : password - dbname: database name - host: host name of the server - port: port number of the - Connection object to a server Connect to a replicas set of a database with authentication - login: username - pswd : password - dbname: database name - host: Vector of host names of replicas - port: Vector of port numbers of replicas - Connection object to a server Connect to a relational database with authentication - login: username - pswd : password - db_url : database url - Connection object to a relational database Télécom, Télécom SudParis 7 / 12

Void dropdb(db db) Void dropdb(string dbname, Connection con) DBCollection createentityset(string entityname, DB db) void createentityset(string stmt, Connection con) void dropentityset(dbcollection coll) void dropentityset(string entityname, Connection con) DBCollection getentityset(db db, String entityname) Set<String> getallentityset(db db) Vector getallentityset(connection con) void insertentity(basicdbobject doc, Drop a database - db : instance of the database Drop a relational database - dbname: name of the relational database - con : a connection object to a relational Create a collection - entityname: collection name - db: name instance of the database - the created collection Create a table - stmt: statement for table creation drop a collection drop a table - coll: Connection object to a server - entityname: table name get a collection - db: name instance of the database - entityname: collection name - the requested collection get all the collection - db: name instance of the database - Collections set get all the tables - tables set insert a document Télécom, Télécom SudParis 8 / 12

DBCollection coll) - doc: document to insert - coll: Connection object to a void insertentity(string stmt, Connection con) void updateentity(basicdbobject doc, DBCollection coll, boolean multiple) void updateentity(string stmt, Connection con) void deleteentity( DBCollection coll, BasicDBObject condition) void deleteentity(string stmt, Connection con) DBCursor executequery(basicdbobject mongodbquery, DBCollection coll) ResultSet executequery(string rdbmsquery, Connection con) server Insert a tuple - stmt: statement for insertion update a single or multiple document - doc: the modification - coll: Connection object to a server - multiple: update multiple documents if multiple is true update a tuple - stmt: statement for modificaion Delete a document - coll: Connection object to a server - condition: Delete condition Delete a tuple - stmt: statement for query Execute a query on a collection - mongodbquery: the query - coll: Connection object to a server Execute a query - rdbmsquery: the query 1.5 Exemples d utilisation de ODBAPI Télécom, Télécom SudParis 9 / 12

1.5.1 Création d une collection public class Test { public static void main(string[] args) throws ClassNotFoundException, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); // Connect to the "OpenPaaS" database DB db = dbmapi.getconnection().connectdb("openpaas", "localhost", 27017); // Create a collection called "user" DBCollection coll2= dbmapi.getentityset().createentityset("user", db); 1.5.2 Création d une table public class Test { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) t h r o w s C l a s s N o t F o u n d E x c e p t i o n, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); // Connect to the "OpenPaaS" database String DB_URL = "jdbc:mysql://localhost:3306/openpaas"; Connection con=dbmapi.getconnection().connectdb("root", "12345", DB_URL); // Create a table called "REGISTRATION" String stmt = "CREATE TABLE REGISTRATION " + "(id INTEGER not NULL, " + " first VARCHAR(255), " + " last VARCHAR(255), " + " age INTEGER, " + " PRIMARY KEY ( id )) "; dbmapi.getentityset().createentityset(stmt, con); 1.5.3 Ajout de documents public class Test { public static void main(string[] args) throws ClassNotFoundException, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); // Connect to the "OpenPaaS" database DB db = dbmapi.getconnection().connectdb("openpaas", "localhost", 27017); // get the "user" collection DBCollection coll=dbmapi.getentityset().getentityset(db, "user"); //Insert four documents in the "user" collection BasicDBObject doc1 = new BasicDBObject("name", "Alex").append("age", 26); dbmapi.getentity().insertentity(doc1, coll2); BasicDBObject doc2 = new BasicDBObject("name", "Marie").append("age", 30); dbmapi.getentity().insertentity(doc2, coll2); BasicDBObject doc3 = new BasicDBObject("name", "Matt").append("age", 18); dbmapi.getentity().insertentity(doc3, coll2); BasicDBObject doc4 = new BasicDBObject("name", "Natalie").append("age", 20); dbmapi.getentity().insertentity(doc4, coll2); Télécom, Télécom SudParis 10 / 12

1.5.4 Ajout de tuples public class Test { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) t h r o w s C l a s s N o t F o u n d E x c e p t i o n, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); //Connect to the "OpenPaaS" database String DB_URL = "jdbc:mysql://localhost:3306/openpaas"; Connection con=dbmapi.getconnection().connectdb("root", "12345", DB_URL); //Insert four tuples in the "REGISTRATION" table String stmt = "INSERT INTO Registration " + "VALUES (100, 'Zara', 'Ali', 18)"; dbmapi.getentity().insertentity(stmt, con); stmt = "INSERT INTO Registration " + "VALUES (101, 'Mahnaz', 'Fatma', 25)"; dbmapi.getentity().insertentity(stmt, con); stmt = "INSERT INTO Registration " + "VALUES (102, 'Zaid', 'Khan', 30)"; dbmapi.getentity().insertentity(stmt, con); stmt = "INSERT INTO Registration " + "VALUES(103, 'Sumit', 'Mittal', 28)"; dbmapi.getentity().insertentity(stmt, con); 1.5.5 Exécution d une requête sur une base de données public class Test { public static void main(string[] args) throws ClassNotFoundException, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); // Connect to the "OpenPaaS" database DB db = dbmapi.getconnection().connectdb("openpaas", "localhost", 27017); //This query selects documents in which age > 20 BasicDBObject query= new BasicDBObject("age", new BasicDBObject("$gt", 20)); // cursor contains the resultset of the query DBCursor dbc; dbc=dbmapi.getquery().executequery(query,dbmapi.getentityset().getentity(db,"user")); while(dbc.hasnext()) { System.out.println(dbc.next()); 1.5.6 Exécution d une requête sur une base de données relationnelle Télécom, Télécom SudParis 11 / 12

public class Test { public static void main(string[] args) throws ClassNotFoundException, UnknownHostException, MongoException { //Connect to a server DBMAPI dbmapi = new DBMAPI(""); //Connect to the "OpenPaaS" database String DB_URL = "jdbc:mysql://localhost:3306/openpaas"; Connection con=dbmapi.getconnection().connectdb("root", "12345", DB_URL); // The query String query = "SELECT id, first, last, age FROM Registration"; // the resultset ResultSet rs=dbmapi.getquery().executequery(query, con); while(rs.next()){ //Retrieve by column name int id = rs.getint("id"); int age = rs.getint("age"); String first = rs.getstring("first"); String last = rs.getstring("last"); //Display values System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); Télécom, Télécom SudParis 12 / 12