OrientDB
 The 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 => :string
doc = 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.surname
end
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

OrientDB

  • 1.
    OrientDB The fastestNoSQL document graph dbms
  • 2.
    Spiel • Best of NoSQL • Best of RDBMS • New ideas & concepts Luca Garulli
  • 3.
    Features • HTTP / Binary • REST • JSON
  • 4.
    Features • Schema-less • Schema-full •constraints / validations / inheritance • Hybrid
  • 5.
    Features • ACID Transactions ••ComplexTypes Arrays / Hashes / Embedded Documents • Direct Links
  • 6.
    Features • SQL in NoSQL • WTH? • SELECT * FROM employee WHERE name LIKE '%Jay%' AND status = 0
  • 7.
    JSON Documents { '@rid' = '26:10', '@class' = 'Developer', 'name' : 'Luca', 'surname' : 'Garulli', 'company' : '19:76' }
  • 8.
    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 ]
  • 9.
    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();
  • 10.
    orientdb-jruby person_class = DB.create_class:person, :name => :string doc = OrientDB::Document.new DB, "Person" doc[:name] = "Luke" doc[:surname] = "Skywalker" doc[:city] = OrientDB::Document.new DB, "City", :name => "Rome" doc.save
  • 11.
    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.surname end
  • 12.
    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
  • 13.
    Console ORIENT database v.0.9.23www.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
  • 14.
  • 15.
  • 16.
    Links • OrientDB • orientechnologies.com • JRuby Client • github.com/aemadrid/orientdb-jruby