9. Focus sur 2 bases orientées Document
http://www.mongodb.org
http://www.orientechnologies.com
10. 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
12. 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
14. Comparaisons
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, HTTP, JSON,
API calls, JSON JavaScript/ECMAScript,
REST, SQL, SparQL
Réplication Master-Master Master- Cluster
Slave
Interface Custom TCP/IP + RESTful http RESTful
Transactions ACID non Oui
15. Comparaisons
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
16. Comparaisons
Connexion à la base
> connect remote:localhost/demo admin admin
> connect local:${ORIENTDB_HOME}/databases/ssl2011 admin admin
Connecting to database [remote:localhost/demo] with user 'admin'...OK
> use ssl2011
Switched to db ssl2011
17. Comparaisons
Créer une base
> create database remote:localhost/ssl2011 admin admin local
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
18. Comparaisons
Afficher les composants de la base
> classes
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
19. Comparaisons
Retrouver les éléments
> select from OUser
> select from OUser where name = 'admin';
---+--------+--------------------+--------------------+--------------------+--------------------
#| REC ID |STATUS |NAME |ROLES |PASSWORD
---+--------+--------------------+--------------------+--------------------+--------------------
0| #4:0|ACTIVE |admin |[1]
|8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918
---+--------+--------------------+--------------------+--------------------+--------------------
> db.users.find();
> db.users.find({username:"user_1"});
{ "date" : ISODate("2011-04-10T13:55:10.378Z"), "_id" : ObjectId("4da3083ecf2e667e1b000001"),
"username" : "user_1", "password" : "password1" }
20. Comparaisons
Retrouver les éléments
• 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
23. Comparaisons
modifier des éléments
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]
> db.mycollection.save(x); // updates Si ca existe insertion sinon
> myColl.update( { _id: X }, { _id: X, name: "herve", age: 45 }, true );
24. Comparaisons
Supprimer des éléments
delete from Profile where surname.toLowerCase() = 'unknown‘
delete from Profile where surname = 'Gates'
> 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 )
26. 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
27. OrientDB : Type de données complexes
Gère nativement
Les collections
Les maps (clé valeur)
Les documents inclus
28. MongoDB : Type de données complexes
Tout est géré dans les collections sous
forme d’enregistrement json
29. OrientDB : Relations
Sont des liens direct
Pas de jointure relationnelles entre les tables
select * from city
select * from city where country.name = 'Italy'