際際滷

際際滷Share a Scribd company logo
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

More Related Content

OrientDB

  • 1. OrientDB The fastest NoSQL 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 ≒Complex Types 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.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
  • 16. Links OrientDB orientechnologies.com JRuby Client github.com/aemadrid/orientdb-jruby