ssl 2011 : présentation de 2 bases nosql

36
Hervé Leclerc Alter Way SSL 2011 Présentation de 2 Bases de données NoSQL

Upload: herve-leclerc

Post on 25-Jun-2015

1.080 views

Category:

Technology


0 download

DESCRIPTION

Présentation au Salon Solution Linux 2011 de 2 bases de données NoSQL

TRANSCRIPT

Page 1: SSL 2011 : Présentation de 2 bases noSQL

Hervé Leclerc – Alter Way – SSL 2011

Présentation

de 2

Bases de données

NoSQL

Page 2: SSL 2011 : Présentation de 2 bases noSQL
Page 3: SSL 2011 : Présentation de 2 bases noSQL

Type de bases

Document

Graph

Clé / Valeur

Colonne

Eventuellement Consistante

Page 4: SSL 2011 : Présentation de 2 bases noSQL

Document

terrastore

thrudb

SisoDb

Simple Structure Oriented Db

Nom=“Leclerc", Addresse=“6 Rue Gambetta", Hobby=“moto".

Nom="Vollong", Addresse="15 Bld X", Enfants=[{Name:« Victor",Age:10}, {Name:« Leopold", Age:8}].

Page 5: SSL 2011 : Présentation de 2 bases noSQL

Graph

Vertexdb

FlockDB

Dex

Nœuds (entités) , propriétés, liens (d’intéractions)

Page 6: SSL 2011 : Présentation de 2 bases noSQL

Clé / Valeur

Tokyo Tyrant

GT.M

RaptorDB MemcacheDB

scalaris

[client 1] get(1234) => {" nom":« leclerc", "email":« [email protected]"}

Page 7: SSL 2011 : Présentation de 2 bases noSQL

Colonne

1,Smith,Joe,40000;

2,Jones,Mary,50000;

3,Johnson,Cathy,44000;

1,2,3;

Smith,Jones,Johnson;

Joe,Mary,Cathy;

40000,50000,44000;

Page 8: SSL 2011 : Présentation de 2 bases noSQL

Eventuellement Consistante

KAI

Dynamo

Dynomite (Framework)

Page 9: SSL 2011 : Présentation de 2 bases noSQL

Focus sur 2 bases orientées Document

http://www.mongodb.org

http://www.orientechnologies.com

Page 10: SSL 2011 : Présentation de 2 bases noSQL

MongoDB

Wikipedia : MongoDB permet de manipuler des objets structurés en BSON (JSON binaire), sans schéma prédéterminé mais en permettant d'indexer n'importe quel attribut.

BSON : Spécifications : http://bsonspec.org/

Les attributs peuvent être ajoutés, supprimés, modifiés et renommés à n'importe quel moment.

Sharding (partition) automatique

Réplication

Haute disponibilité

Map Reduce

GidFS

Support Commercial

Page 11: SSL 2011 : Présentation de 2 bases noSQL

Qui l’utilise ?

etc

Page 12: SSL 2011 : Présentation de 2 bases noSQL

D’origine Italienne

Tout comme MongoDB elle est axée sur la scalabilité

Annoncée pour encaisser des charges en entrée de 150 000 enreg/sec sur un notebook Dell XPS 1530

Peu d’empreintes physiques

Pas d’adhérence de librairies

A la fois Document et Graph

++ les relations

Page 13: SSL 2011 : Présentation de 2 bases noSQL

Qui l’utilise ?

Hummmm…. ?

Page 14: SSL 2011 : Présentation de 2 bases noSQL

Licence Open Source (AGPL) Open Source License

Apache 2.0.

Langage C++ Java

Type de schéma Schema-less Schema-less

Schema-full et Hybrid

Modèle de données Document (BSON) Document (JSON), Graph,

Key-Value et Objet

Méthode d’interrogation JavaScript/ECMAScript,

API calls, JSON

API calls, HTTP, JSON,

JavaScript/ECMAScript,

REST, SQL, SparQL

Réplication Master-Master Master-

Slave

Cluster

Interface Custom TCP/IP + RESTful http RESTful

Transactions ACID non Oui

Comparaisons

Page 15: SSL 2011 : Présentation de 2 bases noSQL

Map and reduce Oui Non

Unicode Oui Oui

Recherche full Text Non Oui

Intégrité Base Base, ACID, MVCC

Transactions Non Oui

Sharding Oui Non

OS X Platforme X Plateforme

Site www.mongodb.org www.orientechnologies.com

Comparaisons

Page 16: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

> connect remote:localhost/demo admin admin

> connect local:${ORIENTDB_HOME}/databases/ssl2011 admin admin

Connexion à la base

Connecting to database [remote:localhost/demo] with user 'admin'...OK

> use ssl2011

Switched to db ssl2011

Page 17: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

> create database remote:localhost/ssl2011 admin admin local

Créer une base

Creating database [remote:localhost/ssl2011] using the storage type

[local]...

Connecting to database [remote:localhost/ssl2011] with user

'admin'...OK

Database created successfully.

Current database is: remote:localhost/ssl2011

> use ssl2011

Switched to db ssl2011

Page 18: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

> classes

Afficher les composants de la base

CLASSES: ----------------------------------------------+------+---------------------+-----------+ NAME | ID | CLUSTERS | RECORDS | ----------------------------------------------+------+---------------------+-----------+ Whiz | 5 | 11 | 1000 | OUser | 1 | 4 | 3 | GraphMotocycle | 16 | 22 | 2 | ----------------------------------------------+------+---------------------+-----------+ TOTAL 12518 | ---------------------------------------------------------------------------------------+

> show collections

equipements

system.indexes

users

Page 19: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

> select from OUser

Retrouver les éléments

> db.users.find();

{ "date" : ISODate("2011-04-10T13:55:10.378Z"), "_id" : ObjectId("4da3083ecf2e667e1b000001"),

"username" : "user_1", "password" : "password1" }

> select from OUser where name = 'admin'; ---+--------+--------------------+--------------------+--------------------+-------------------- #| REC ID |STATUS |NAME |ROLES |PASSWORD ---+--------+--------------------+--------------------+--------------------+-------------------- 0| #4:0|ACTIVE |admin |[1] |8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918 ---+--------+--------------------+--------------------+--------------------+--------------------

> db.users.find({username:"user_1"});

Page 20: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

• select from Account where address.city.country.name = ‘France'

• select from Account where addresses contains (city.country.name = ‘France')

• select from Profile where any() like '%herve%'

• select from Tree where children contains ( married = true )

• select from User where roles containsKey 'shutdown'

• select from Vehicle where @class = 'Car'

• select from Friend where @version > 100

Retrouver les éléments

Page 21: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

db.collector.find().count()

db.collector.find({"variables.var9" : {$ne:null}}).count()

db.collector.find({"sensor_id" : "4d768db2b456989f3e000000", "variables.var9" : /to/i})

db.collector.find({"sensor_id" : "4d768db2b456989f3e000000"}).count()

db.collector.find({"sensor_id" : "4d768db2b456989f3e000000", "variables.var9" :

/to/i}).count()

Retrouver les éléments

Page 22: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

> create class users_ssl2011

Insérer des éléments

> db.users_ssl2011.save( { username:"hleclerc" } )

{ "_id" : ObjectId("4dc45753e74668e001d54cd1"), "username" : "hleclerc" }

{ "_id" : ObjectId("4dc46c07cc2193af6e31fc43"), "username" : "hleclerc", "email" : "[email protected]" }

> insert into users_ssl2011 (username,password) values

('hleclerc','test')

> insert into users_ssl2011 (username,password,mail) values

('hme','test','[email protected]')

> db.users_ssl2011.save( { username:"hl", email: "[email protected]"} )

> db.users_ssl2011.find()

---+--------+--------------------+-------------------- #| REC ID |USERNAME |PASSWORD ---+--------+--------------------+-------------------- 0| #6:0|hleclerc |test 1| #6:1|hme |test |[email protected] ---+--------+--------------------+--------------------+--------------------

Page 23: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

update products set KCal = 0 where KCal is null

Updated 2 record(s) in 0,008000 sec(s)

update People add friends = [Herve @rid] where @rid =

[Marie @rid]

modifier des éléments

> db.mycollection.save(x); // updates Si ca existe insertion sinon

> myColl.update( { _id: X }, { _id: X, name: "herve", age: 45 }, true );

Page 24: SSL 2011 : Présentation de 2 bases noSQL

Comparaisons

delete from Profile where surname.toLowerCase() = 'unknown‘

delete from Profile where surname = 'Gates'

Supprimer des éléments

> db.things.remove({}); // Supprime tout

> db.things.remove({n:1}); // removes all where n == 1

t.update( {'comments.by':'joe'}, $unset : { age : 1} }}, false, true )

Page 25: SSL 2011 : Présentation de 2 bases noSQL

OrientDB : Transactions ACID

db.begin();

try {

// code

db.commit();

} catch (error) {

db.rollback();

}

Page 26: SSL 2011 : Présentation de 2 bases noSQL

MongoDB : Transactions ACID

MongoDB ne supporte les transactions

ACID que sur les documents unitaires

C’est un des reproches fait à MongoDB

comparé par exemple à couchDB

Page 27: SSL 2011 : Présentation de 2 bases noSQL

OrientDB : Type de données complexes

Gère nativement

Les collections

Les maps (clé valeur)

Les documents inclus

Page 28: SSL 2011 : Présentation de 2 bases noSQL

MongoDB : Type de données complexes

Tout est géré dans les collections sous

forme d’enregistrement json

Page 29: SSL 2011 : Présentation de 2 bases noSQL

OrientDB : Relations

Sont des liens direct

Pas de jointure relationnelles entre les tables

select * from city

select * from city where country.name = 'Italy'

Page 30: SSL 2011 : Présentation de 2 bases noSQL

MongoDB : Relations

> p = db.postings.findOne();

{ "_id" : ObjectId("4b866f08234ae01d21d89604"),

"author" : "jim",

"title" : "Brewing Methods"

}

> // Plus d’info sur l’auteur

> db.users.findOne( { _id : p.author } ) {

"_id" : "jim",

"email" : "[email protected]"

}

Page 31: SSL 2011 : Présentation de 2 bases noSQL

MongoDB vs OrientDB

SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/pric

FROM Balance

VS

function (key, values) {

var price = 0.0, cost = 0.0, margin = 0.0, marginPercent = 0.0;

for (var i = 0; i < values.length; i++) {

price += values[i].price;

cost += values[i].cost;

}

margin = price - cost;

marginPercent = margin / price;

return {

price: price,

cost: cost,

margin: margin,

marginPercent: marginPercent

};

}

Page 32: SSL 2011 : Présentation de 2 bases noSQL

MongoDB vs OrientDB

Page 33: SSL 2011 : Présentation de 2 bases noSQL

MongoDB : Drivers

Page 35: SSL 2011 : Présentation de 2 bases noSQL

Démo

Page 36: SSL 2011 : Présentation de 2 bases noSQL