OrientDB
Transcript of OrientDB
OrientDBThe fastest NoSQL
document graph dbms
Spiel
• Best of NoSQL• Best of RDBMS• New ideas & concepts
Luca Garulli
Features
• HTTP / Binary• REST• JSON
Features
• Schema-less• Schema-full • constraints / validations / inheritance
• Hybrid
Features
• ACID Transactions• Complex Types• Arrays / Hashes / Embedded Documents
• Direct Links
Features
• SQL in NoSQL • WTH?• SELECT *
FROM employee WHERE name LIKE '%Jay%' AND status = 0
JSON Documents
{ '@rid' = '26:10', '@class' = 'Developer', 'name' : 'Luca', 'surname' : 'Garulli', 'company' : '19:76'}
Fetch Plan
Invoice 3:100 | | customer +---------> Customer |! 5:233 | city! country +---------> City ---------> Country |! 11:2! 12:3 | orders +--------->* [OrderItem OrderItem OrderItem] [ 8:12! 8:19! 8:23 ]
Java
ODocument doc = new ODocument( db, "Person" );
doc.field( "name", "Luke" );
doc.field( "surname", "Skywalker" );
doc.field( "city", new ODocument("City" ).fields("name","Rome") );
doc.save();
orientdb-jruby
person_class = DB.create_class :person, :name => :stringdoc = OrientDB::Document.new DB, "Person"doc[:name] = "Luke"doc[:surname] = "Skywalker"doc[:city] = OrientDB::Document.new DB, "City", :name => "Rome"doc.save
orientdb-jruby
List<ODocument> result = db.query( new OSQLSynchQuery( "select * from person where city.name = 'Rome'" ) );for( ODocument d : result ) { System.out.println( "Person: " + d.field( "name" ) + d.field( "surname" ) );}
results = DB.first 'SELECT * FROM where WHERE city = "Rome"'results.each do |doc| puts "Person: " + person.name + doc.surnameend
Queries
• select from Account where address.city.country.name = 'Italy'
• select from Account where addresses contains (city.country.name = 'Italy')
• select from Profile where any() like '%Jay%'
• 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
Console
ORIENT database v.0.9.23 www.orientechnologies.com Type 'help' to display all the commands supported.
> connect remote:localhost/demo admin admin Connecting to database [remote:localhost/demo] with user 'admin'...OK
> select from profile where nick.startsWith('L')
---+--------+--------------------+--------------------+--------------------+
# | REC ID | NICK! | SEX! | AGE |
---+--------+--------------------+--------------------+--------------------+
0 | 10:0 | Lvca | male | 34
1 | 10:3 | Leo | male | 22
2 | 10:7 | Luisa | female | 27
3 item(s) found. Query executed in 0.013 sec(s).
> close Disconnecting from the database [demo]...OK
> quit
Web Admin
WINNING, DUH!
Links
• OrientDB• orientechnologies.com
• JRuby Client• github.com/aemadrid/orientdb-jruby