SlideShare a Scribd company logo
1 of 77
Design your application using Persistent
        Graphs and OrientDB
        Luca Garulli – Founder and CEO
        NuvolaBase Ltd

                                            May 2012 29 - 30 in Cologne, Germany
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License     Page 1
                                                                                                 www.orientechnologies.com
Usually NoSQL products are selected
because are fast and super scalable,
         but at what price?




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 2
Can you really renounce to
  Transactions, an expressive Query
    language and all the features
    available for years by RDBMS?




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 3
Can we have a fast and scalable NoSQL
     product with flexible schema,
  transactions, SQL, security and the
      support for complex types ?




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 4
The answer is OrientDB,
            the document-graph NoSQL dbms




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 5
The answer is OrientDB,
            the document-graph NoSQL dbms
                                                                                                 I never will
                                                                                                 change my
                                                                                                 RDBMS with
                                                                                                  anything!




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License        Page 6
Mission?
Reduce to the minimum the compromises
  on fitting the application domain to a
     persistent database supporting
              multiple models

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 7
OrientDB = {
              flexibility of Document databases
              + complexity of the Graph model
                 + Object Oriented concepts
                           + fast Index
                    + powerful SQL dialect                                                       }
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License       Page 8
+13 years
                                 of research

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 9
+3 years
           of design and development

(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 10
Relationships
                      are direct links
        no Relational JOINS to connect multiple tables
                   Load trees and                        graphs in few ms!

(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 11
Ø config       download, unzip, run!
                    cut & paste the db
(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 12
150,000       records per second
                   (flat records, no index, on commodity hw)



(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 13
Schema-less
 schema is not mandatory, relaxed model,
collect heterogeneous documents all together


(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 14
Schema-full
schema with        constraints on fields and validation rules

                    Customer.age > 17
                 Customer.address not null
             Customer.surname is mandatory
  Customer.email matches 'b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b'


(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 15
Schema-mixed
schema with mandatory and optional fields + constraints
    the best of schema-less and schema-full modes



(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 16
ACID Transactions
           db.begin();
           try{
             // your code
             ...
             db.commit();

           } catch( Exception e ) {
             db.rollback();
           }


(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 17
Complex types
native support for collections,                                                   maps (key/value)
                        and embedded documents
                   no more additional tables to handle them


(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 18
SQL
select * from employee where name like '%Jay%' and status=0



(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 19
Why reinvent
                     yet another language when
                   the 100% of developers already
                             know SQL?

               OrientDB begins from SQL
               but improves it with new
            operators for graph manipulation
(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 20
For the most of the queries
                   everyday a programmer needs
                       SQL is simpler,
                      more readable and
                        compact then
                      Scripting (Map/Reduce)
(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 21
SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/price
  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
    };
} Luca Garulli
(c)                    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 22
Asynchronous Query
      invoke       callback when a record matches the condition
                            doesn't collect the result set
                       perfect for immediate results
                        useful to compute aggregates


(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 23
Enhanced SQL
 SQL is not enough for collections, maps, trees and graphs
               need to enhance SQL syntax
      Easy syntax derived from JDO/JPA standards



(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 24
SQL & relationships
                   select from Account where address.city.country.name = 'Italy'

   select from Account where addresses contains (city.country.name = 'Italy')




(c) Luca Garulli           Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 25
SQL & trees/graphs
select out[label='friend'].in from V where name = 'Luca' and surname = 'Garulli'

select out[@class='knows'].in from V where name = 'Jay' and surname = 'Miner'

                   traverse friends from Profile where $depth < 7




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 26
SQL sub queries
                   select from (
                      traverse friends from Profile where $depth < 7
                   ) where home.city.name = ‘Cologne’




(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 27
SQL & strings
                   select from Profile where name.toUpperCase() = 'LUCA'

    select from City where country.name.substring(1,3).toUpperCase() = 'TAL'

    select from Agenda where phones contains ( number.indexOf( '+39' ) > -1 )

   select from Agenda where email matches 'bA-Z0-9._%+-?+@A-Z0-9.-?+.A-Z?{2,4}b'



(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 28
SQL & schema-less
                    select from Profile where any() like '%Jay%'

                       select from Stock where all() is not null




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 29
SQL & collections
                    select from Tree where children contains ( married = true )

                   select from Tree where children containsAll ( married = true )

                       select from User where roles containsKey 'shutdown'

                              select from Graph where edges.size() > 0



(c) Luca Garulli           Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 30
runs
                    Java
                   everywhere is available JRE1.5+
                                                                                       ®
                        robust engine
(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 31
Language bindings
                                Java as native

                   JRuby, PHP, C, Scala, .NET,
                     Ruby, Clojure, Node.js,
                      Python and Javascript

(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 32
Is your language
not supported (yet)?
             Write an adapter using the
               C, Java or HTTP binding
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 33
Binary protocol
   Fast compressed JSON over tcp/ip
            available for Java
        and soon C, C++ and Ruby
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 34
HTTP RESTful
                         firewall friendly
      use it from the web           browser
                   use it from the ESB (SOA)
(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 35
Native JSON
              ODocument = new ODocument().fromJSON( "
               {
                 '@rid' = '26:10',
                 '@class' = 'Developer',
                 'name' : 'Luca',
                 'surname' : 'Garulli',
                 'out' : [ #10:33, #10:232 ]
               }“ );


(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 36
Import/Export
                          uses JSON format
              online operations (don't stop the database)

                    > export database demo

(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 37
MVRB-Tree                                                             index

         the best of B+Tree and RB-Tree
       fast on browsing, low insertion cost
               it's a new algorithm

(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 38
Hooks
                            similar to                  triggers
    catch events against records, database and transactions
         implement custom cascade deletion                                             algorithm
                      enforce                   constraints
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 39
Security
  users and roles, encrypted passwords
          fine grain privileges
     (similar to what RDBMS offer)
(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 40
Cache
                   You can avoid using 3°party caches
                            like Memcached

                             2 Level caches:
                   Level1: Database level, 1 per thread
                     Level2: Storage level, 1 per JVM
(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 41
Inheritance
                   OGraphVertex (V)                                                   OGraphEdge (E)




                   Person             Vehicle                              Works             Resides          Knows
              Address : Address     brand : BRANDS                                            since : Date
                                                                          since : Date         till : Date   Level : LEVELS




  Customer               Provider
   totSold : float      totBuyed : float



(c) Luca Garulli            Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License      Page 42
Polymorphic SQL Query
                   OgraphVertex (V)




                   Person             Vehicle
              Address : Address     brand : BRANDS
                                                             select from Person
                                                              where city.name = 'Rome‘

                                                                      Queries are polymorphics
  Customer               Provider                                  and subclasses of Person can be
   totSold : float      totBuyed : float                                  part of result set

(c) Luca Garulli            Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 43
Fetch plans
 Choose what to fetch on query and vertexes/edges loading
Vertexes/Edges not fetched will be lazy-loaded on request
                          Optimizes network latency



(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 44
Fetch plans
                                                                               Load only the root vertex
                   Vertex                                                                = *:1
                    Luca
                      |
                      | lives                 city
                      +---------> Vertex ------------> Vertex
                      |         10th street            Italy
                      | knows
                      +--------->* [Vertex   Vertex   Vertex ]
                                    [ Marko   John   Nicholas]


(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 45
Fetch plans
                                                                                     Load root + address
                   Vertex                                                               = *:1 lives:2
                    Luca
                      |
                      | lives                 city
                      +---------> Vertex ------------> Vertex
                      |         10th street            Italy
                      | knows
                      +--------->* [Vertex   Vertex   Vertex ]
                                    [ Marko   John   Nicholas]


(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 46
Fetch plans
                                                                                   Load root + all known
                   Vertex                                                             = *:1 knows:1
                    Luca
                      |
                      | lives                 city
                      +---------> Vertex ------------> Vertex
                      |         10th street            Italy
                      | knows
                      +--------->* [Vertex   Vertex   Vertex ]
                                    [ Marko   John   Nicholas]


(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 47
Fetch plans
                                                                               Load up 3rd level of depth
                   Vertex                                                                = *:3
                    Luca
                      |
                      | lives                 city
                      +---------> Vertex ------------> Vertex
                      |         10th street            Italy
                      | knows
                      +--------->* [Vertex   Vertex   Vertex ]
                                    [ Marko   John   Nicholas]


(c) Luca Garulli        Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 48
Graph Database model
                   Built as wrapper on top of
                    The Document Database
Few simple concepts: Vertex,                                                                      Edge,
                    Property and Index
(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 49
Why OrientDB is so special on
     handling Graphs?

                   Can I model a graph
                   on top of a RDBMS?
(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 50
A GraphDB has an
               “index-free adjacency”
                 mechanism to cross
                the graph without any
                     index lookup
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 51
OrientDB doesn’t use JOIN
      but the “link” to traverse
   millions of elements per second
   In Blueprints benchmark, with a hot cache,
traverses 29,6M of records in less than 5 seconds
       = 5,92M of nodes traversed per sec!

 (c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 52
2 different API
                    OGraphDatabase
   Native, damn fast, not the most beautiful API                                                All APIs
                                                                                            are compatible
                                                                                             among them!
                                                                                          So use the right one
                                                                                           for the right case




                                                                     OrientGraph
                                          TinkerPop Blueprints, slowest but:
                                    common to other impls, Gremlin, SPARQL (via Sail)

(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License    Page 53
What to choose?
                                            OGraphDatabase
                      Native, damn fast, not the most beautiful API



                   OGraphDatabase if you need
                     performance at any cost.
                   Use it for massive insertion or
                            low resources
(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 54
What to choose?
                                              OrientGraph
                        TinkerPop Blueprints, slowest but:
                    common to other impls, Gremlin, SPARQL (Sail)

              OrientGraph if you want to stay
                           Portable
      at the cost of less speed and more memory used

                       or to use Gremlin language,
                        or as RDF store + SPARQL
(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 55
TinkerPop technologies
            sort of “standard” for GraphDB
           a lot of free open-source projects

                   http://tinkerpop.com

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 56
TinkerPop Blueprints
         basic API to interact with GraphDB
            implements transactional and
          indexable property graph model
                 bidirectional edges

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 57
GraphDB                                              & Blueprints API

              OrientGraph graph = new OrientGraph("local:/tmp/db/graph”);

              Vertex actor = graph.addVertex(null);
              actor.setProperty("name", "Leonardo");
              actor.setProperty("surname", "Di Caprio");

              Vertex movie = graph.addVertex(null);
              movie.setProperty("name", "Inception");

              Edge edge = graph.addEdge(null, actor, movie, "StarredIn");

              graph.shutdown();

(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 58
TinkerPop
                       scripting language
                   easy to learn and understand
         Used for operations against graphs

(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 59
graph-example-1.xml




(c) Luca Garulli          Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License     Page 60
                                                                                                        www.orientechnologies.com
Load graph
           Run the console, open the database and load a graph in xml format


           marko:~/software/gremlin$ ./gremlin.sh

                    ,,,/
                    (o o)
           -----oOOo-(_)-oOOo-----

           gremlin> $_g := orientdb:open('/tmp/graph/test')
           ==>orientgraph[/tmp/graph/test]

           gremlin> g:load('data/graph-example-1.xml')
           ==>true

           gremlin> $_g
           ==>orientgraph[/tmp/graph/test]
(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 61
Search
              Displays outgoing edges of vertices with name equals to 'marko',
              then the name of inbound vertices


              gremlin> g:key-v('name','marko')/outE
              ==>e[6:0][5:2-knows->5:1]
              ==>e[6:1][5:2-knows->5:4]
              ==>e[6:4][5:2-created->5:0]

              gremlin> g:key-v('name','marko')/outE/inV/@name
              ==>vadas
              ==>josh
              ==>lop

              gremlin> g:close()
              ==>true

(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 62
High-Availability
                           Multi-Master replication

                   Servers can be heterogeneous with
                     different replicated databases


(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 63
Where is the previous
      OrientDB
    Master/Slave
    architecture?
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 64
Mas
                                                               only ter/sla
                                                              recy . Do no ve
                                                                  cle!     t




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 65
After first tests we decided to
           throw away the old Master-Slave
              architecture because it was
          against the OrientDB philosophy:

                          (1) It didn't scale
                                  and
                   (2) It was hard to configure

(c) Luca Garulli    Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 66
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

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 67
OrientDB Studio/View graph




(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 68
Multi-Model
                    use case
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 69
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 70
Always                                 Free
              Open Source Apache 2 license
                        free for any purposes,
                          even commercials

(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 71
Do y o
                                                                           Conta u want to
                                                                                 ct info   be a
                                                                                        @nuv     partn
                                                                                             olaba     er?
                                                                                                   se.co

                        Prof€$$ional
                                                                                                        m




                          $€rvic€$
                   directly by NuvolaBase Ltd or partners
      support, training, consulting, mentoring

(c) Luca Garulli       Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 72
OrientDB                                              OrientDB
         for Java developers                                    Master Development
                    8 hours                                                        14 hours


                   OrientDB                                                    OrientDB
                    for SOA                                     and the power of graphs
                    6 hours                                                         6 hours


                   OrientDB                                               OrientPlanet
                   for DBA                                         for Web Developers
                    6 hours                                                         6 hours

(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 73
Certification Program
                    to be part of the network
                           do courses
                   share revenues for support
                        work as consultant
             info@ Contact
                  nuvo
                       labas
                             e.co        m

(c) Luca Garulli      Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 74
“OrientDB in Action”
                            book
                   by Manning Publications
                   is coming: January 2013

(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 75
NuvolaBase.com
                                                         The first
                                                      Graph Database
                                                       on the Cloud
                                                         always available
                                                      few seconds to setup it
                                                     use it from app & mobile
(c) Luca Garulli   Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 76
Luca Garulli
                   Author of                                                             CEO at



         Document-Graph NoSQL
           Open Source project
                                                                                 Ltd, London UK




  www.twitter.com/lgarulli
(c) Luca Garulli     Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License   Page 77

More Related Content

What's hot

Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital Kedia
Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital KediaTuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital Kedia
Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital KediaDatabricks
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 
PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기찬희 이
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaPostgreSQL-Consulting
 
OLTP+OLAP=HTAP
 OLTP+OLAP=HTAP OLTP+OLAP=HTAP
OLTP+OLAP=HTAPEDB
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるKLab Inc. / Tech
 
Transaction Management on Cassandra
Transaction Management on CassandraTransaction Management on Cassandra
Transaction Management on CassandraScalar, Inc.
 
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...Databricks
 
Transactional operations in Apache Hive: present and future
Transactional operations in Apache Hive: present and futureTransactional operations in Apache Hive: present and future
Transactional operations in Apache Hive: present and futureDataWorks Summit
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm Chandler Huang
 
Apache Calcite (a tutorial given at BOSS '21)
Apache Calcite (a tutorial given at BOSS '21)Apache Calcite (a tutorial given at BOSS '21)
Apache Calcite (a tutorial given at BOSS '21)Julian Hyde
 
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月VirtualTech Japan Inc.
 
The Parquet Format and Performance Optimization Opportunities
The Parquet Format and Performance Optimization OpportunitiesThe Parquet Format and Performance Optimization Opportunities
The Parquet Format and Performance Optimization OpportunitiesDatabricks
 
Apache Arrow and Pandas UDF on Apache Spark
Apache Arrow and Pandas UDF on Apache SparkApache Arrow and Pandas UDF on Apache Spark
Apache Arrow and Pandas UDF on Apache SparkTakuya UESHIN
 
RocksDB detail
RocksDB detailRocksDB detail
RocksDB detailMIJIN AN
 
Spark streaming , Spark SQL
Spark streaming , Spark SQLSpark streaming , Spark SQL
Spark streaming , Spark SQLYousun Jeong
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada
 

What's hot (20)

Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital Kedia
Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital KediaTuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital Kedia
Tuning Apache Spark for Large-Scale Workloads Gaoxiang Liu and Sital Kedia
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
OLTP+OLAP=HTAP
 OLTP+OLAP=HTAP OLTP+OLAP=HTAP
OLTP+OLAP=HTAP
 
ブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせるブレソルでテラバイト級データのALTERを短時間で終わらせる
ブレソルでテラバイト級データのALTERを短時間で終わらせる
 
Transaction Management on Cassandra
Transaction Management on CassandraTransaction Management on Cassandra
Transaction Management on Cassandra
 
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
 
Transactional operations in Apache Hive: present and future
Transactional operations in Apache Hive: present and futureTransactional operations in Apache Hive: present and future
Transactional operations in Apache Hive: present and future
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm
 
Apache Calcite (a tutorial given at BOSS '21)
Apache Calcite (a tutorial given at BOSS '21)Apache Calcite (a tutorial given at BOSS '21)
Apache Calcite (a tutorial given at BOSS '21)
 
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
 
The Parquet Format and Performance Optimization Opportunities
The Parquet Format and Performance Optimization OpportunitiesThe Parquet Format and Performance Optimization Opportunities
The Parquet Format and Performance Optimization Opportunities
 
redis basics
redis basicsredis basics
redis basics
 
Apache Arrow and Pandas UDF on Apache Spark
Apache Arrow and Pandas UDF on Apache SparkApache Arrow and Pandas UDF on Apache Spark
Apache Arrow and Pandas UDF on Apache Spark
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
RocksDB detail
RocksDB detailRocksDB detail
RocksDB detail
 
Spark streaming , Spark SQL
Spark streaming , Spark SQLSpark streaming , Spark SQL
Spark streaming , Spark SQL
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 

Viewers also liked

OrientDB for real & Web App development
OrientDB for real & Web App developmentOrientDB for real & Web App development
OrientDB for real & Web App developmentLuca Garulli
 
OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0Orient Technologies
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQLLuca Garulli
 
OrientDB vs Neo4j - Comparison of query/speed/functionality
OrientDB vs Neo4j - Comparison of query/speed/functionalityOrientDB vs Neo4j - Comparison of query/speed/functionality
OrientDB vs Neo4j - Comparison of query/speed/functionalityCurtis Mosters
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph DatabasesMax De Marzi
 
Presentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - WebinarPresentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - WebinarOrient Technologies
 
Why relationships are cool but "join" sucks
Why relationships are cool but "join" sucksWhy relationships are cool but "join" sucks
Why relationships are cool but "join" sucksLuca Garulli
 
OrientDB vs Neo4j - and an introduction to NoSQL databases
OrientDB vs Neo4j - and an introduction to NoSQL databasesOrientDB vs Neo4j - and an introduction to NoSQL databases
OrientDB vs Neo4j - and an introduction to NoSQL databasesCurtis Mosters
 
Internet Apps powered by NoSQL and JavaScript
Internet Apps powered by NoSQL and JavaScriptInternet Apps powered by NoSQL and JavaScript
Internet Apps powered by NoSQL and JavaScriptLuca Garulli
 
Polyglot Persistence vs Multi-Model Databases
Polyglot Persistence vs Multi-Model DatabasesPolyglot Persistence vs Multi-Model Databases
Polyglot Persistence vs Multi-Model DatabasesLuca Garulli
 
OrientDB distributed architecture 1.1
OrientDB distributed architecture 1.1OrientDB distributed architecture 1.1
OrientDB distributed architecture 1.1Luca Garulli
 
OrientDB the graph database
OrientDB the graph databaseOrientDB the graph database
OrientDB the graph databaseartem_orobets
 
The Long Term Investment Outlook for China
The Long Term Investment Outlook for ChinaThe Long Term Investment Outlook for China
The Long Term Investment Outlook for ChinaJohn M Olson, CLTC
 
Persona-fication or: Falling in Love with a Bot
Persona-fication or: Falling in Love with a BotPersona-fication or: Falling in Love with a Bot
Persona-fication or: Falling in Love with a BotModern Hombre
 
Investors Need Purchasing Power
Investors Need Purchasing Power Investors Need Purchasing Power
Investors Need Purchasing Power John M Olson, CLTC
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepguest9efd1a1
 
StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011Ian Ozsvald
 
لوحة الجيوب
لوحة الجيوبلوحة الجيوب
لوحة الجيوبboba56222
 
No sql matters_2012_keynote
No sql matters_2012_keynoteNo sql matters_2012_keynote
No sql matters_2012_keynoteLuca Garulli
 

Viewers also liked (20)

OrientDB for real & Web App development
OrientDB for real & Web App developmentOrientDB for real & Web App development
OrientDB for real & Web App development
 
OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0OrientDB Distributed Architecture v2.0
OrientDB Distributed Architecture v2.0
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
OrientDB vs Neo4j - Comparison of query/speed/functionality
OrientDB vs Neo4j - Comparison of query/speed/functionalityOrientDB vs Neo4j - Comparison of query/speed/functionality
OrientDB vs Neo4j - Comparison of query/speed/functionality
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph Databases
 
Presentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - WebinarPresentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - Webinar
 
Why relationships are cool but "join" sucks
Why relationships are cool but "join" sucksWhy relationships are cool but "join" sucks
Why relationships are cool but "join" sucks
 
OrientDB vs Neo4j - and an introduction to NoSQL databases
OrientDB vs Neo4j - and an introduction to NoSQL databasesOrientDB vs Neo4j - and an introduction to NoSQL databases
OrientDB vs Neo4j - and an introduction to NoSQL databases
 
Internet Apps powered by NoSQL and JavaScript
Internet Apps powered by NoSQL and JavaScriptInternet Apps powered by NoSQL and JavaScript
Internet Apps powered by NoSQL and JavaScript
 
Polyglot Persistence vs Multi-Model Databases
Polyglot Persistence vs Multi-Model DatabasesPolyglot Persistence vs Multi-Model Databases
Polyglot Persistence vs Multi-Model Databases
 
OrientDB distributed architecture 1.1
OrientDB distributed architecture 1.1OrientDB distributed architecture 1.1
OrientDB distributed architecture 1.1
 
OrientDB the graph database
OrientDB the graph databaseOrientDB the graph database
OrientDB the graph database
 
The Long Term Investment Outlook for China
The Long Term Investment Outlook for ChinaThe Long Term Investment Outlook for China
The Long Term Investment Outlook for China
 
Persona-fication or: Falling in Love with a Bot
Persona-fication or: Falling in Love with a BotPersona-fication or: Falling in Love with a Bot
Persona-fication or: Falling in Love with a Bot
 
Investors Need Purchasing Power
Investors Need Purchasing Power Investors Need Purchasing Power
Investors Need Purchasing Power
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep
 
Boomers to Millennials
Boomers to MillennialsBoomers to Millennials
Boomers to Millennials
 
StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011StrongSteam AI at HackerNews London October 2011
StrongSteam AI at HackerNews London October 2011
 
لوحة الجيوب
لوحة الجيوبلوحة الجيوب
لوحة الجيوب
 
No sql matters_2012_keynote
No sql matters_2012_keynoteNo sql matters_2012_keynote
No sql matters_2012_keynote
 

Similar to Design your application using Persistent Graphs and OrientDB

Why relationships are cool but join sucks - Big Data & Graphs in Rome
Why relationships are cool but join sucks - Big Data & Graphs in RomeWhy relationships are cool but join sucks - Big Data & Graphs in Rome
Why relationships are cool but join sucks - Big Data & Graphs in RomeLuca Garulli
 
Austin Data Geeks - Why relationships are cool but join sucks
Austin Data Geeks - Why relationships are cool but join sucksAustin Data Geeks - Why relationships are cool but join sucks
Austin Data Geeks - Why relationships are cool but join sucksOrient Technologies
 
Switching from the Relational to the Graph model
Switching from the Relational to the Graph modelSwitching from the Relational to the Graph model
Switching from the Relational to the Graph modelLuca Garulli
 
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...Luca Garulli
 
goPaddle Quick Introduction
goPaddle Quick IntroductiongoPaddle Quick Introduction
goPaddle Quick IntroductionVinothini Raju
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesPetteriTeikariPhD
 
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale ArangoDB Database
 
NoSQL on microsoft azure april 2014
NoSQL on microsoft azure   april 2014NoSQL on microsoft azure   april 2014
NoSQL on microsoft azure april 2014Brian Benz
 
WebGL - It's GO Time
WebGL - It's GO TimeWebGL - It's GO Time
WebGL - It's GO TimeTony Parisi
 
Google Cloud Platform (GCP) At a Glance
Google Cloud Platform (GCP)  At a GlanceGoogle Cloud Platform (GCP)  At a Glance
Google Cloud Platform (GCP) At a GlanceCloud Analogy
 
Gradle(the innovation continues)
Gradle(the innovation continues)Gradle(the innovation continues)
Gradle(the innovation continues)Sejong Park
 
Google Cloud Networking Deep Dive
Google Cloud Networking Deep DiveGoogle Cloud Networking Deep Dive
Google Cloud Networking Deep DiveMichelle Holley
 
Talking Architecture Shop - Exploring Open Source DevOps at Scale
Talking Architecture Shop - Exploring Open Source DevOps at ScaleTalking Architecture Shop - Exploring Open Source DevOps at Scale
Talking Architecture Shop - Exploring Open Source DevOps at ScaleEric D. Schabell
 
Dessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudDessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudMassimiliano Dessì
 
Come costruire una Platform As A Service con Docker, Kubernetes Go e Java
Come costruire una Platform As A Service con Docker, Kubernetes Go e JavaCome costruire una Platform As A Service con Docker, Kubernetes Go e Java
Come costruire una Platform As A Service con Docker, Kubernetes Go e JavaCodemotion
 
Decide for Dummies
Decide for DummiesDecide for Dummies
Decide for Dummiespruizclaudia
 
DECIDE for Dummies
DECIDE for Dummies DECIDE for Dummies
DECIDE for Dummies DECIDEH2020
 
Java and internet fundamentals.
Java and internet fundamentals.Java and internet fundamentals.
Java and internet fundamentals.mali yogesh kumar
 

Similar to Design your application using Persistent Graphs and OrientDB (20)

Why relationships are cool but join sucks - Big Data & Graphs in Rome
Why relationships are cool but join sucks - Big Data & Graphs in RomeWhy relationships are cool but join sucks - Big Data & Graphs in Rome
Why relationships are cool but join sucks - Big Data & Graphs in Rome
 
Austin Data Geeks - Why relationships are cool but join sucks
Austin Data Geeks - Why relationships are cool but join sucksAustin Data Geeks - Why relationships are cool but join sucks
Austin Data Geeks - Why relationships are cool but join sucks
 
Switching from the Relational to the Graph model
Switching from the Relational to the Graph modelSwitching from the Relational to the Graph model
Switching from the Relational to the Graph model
 
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...
Soffri di patologie da "domini complessi con tante relazioni"? C'è una nuova ...
 
goPaddle Quick Introduction
goPaddle Quick IntroductiongoPaddle Quick Introduction
goPaddle Quick Introduction
 
Deploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and KubernetesDeploying deep learning models with Docker and Kubernetes
Deploying deep learning models with Docker and Kubernetes
 
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
 
NoSQL on microsoft azure april 2014
NoSQL on microsoft azure   april 2014NoSQL on microsoft azure   april 2014
NoSQL on microsoft azure april 2014
 
WebGL - It's GO Time
WebGL - It's GO TimeWebGL - It's GO Time
WebGL - It's GO Time
 
Google Cloud Platform (GCP) At a Glance
Google Cloud Platform (GCP)  At a GlanceGoogle Cloud Platform (GCP)  At a Glance
Google Cloud Platform (GCP) At a Glance
 
Gradle(the innovation continues)
Gradle(the innovation continues)Gradle(the innovation continues)
Gradle(the innovation continues)
 
Google Cloud Networking Deep Dive
Google Cloud Networking Deep DiveGoogle Cloud Networking Deep Dive
Google Cloud Networking Deep Dive
 
Talking Architecture Shop - Exploring Open Source DevOps at Scale
Talking Architecture Shop - Exploring Open Source DevOps at ScaleTalking Architecture Shop - Exploring Open Source DevOps at Scale
Talking Architecture Shop - Exploring Open Source DevOps at Scale
 
CodeBook in the Cloud
CodeBook in the CloudCodeBook in the Cloud
CodeBook in the Cloud
 
Dessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudDessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloud
 
Come costruire una Platform As A Service con Docker, Kubernetes Go e Java
Come costruire una Platform As A Service con Docker, Kubernetes Go e JavaCome costruire una Platform As A Service con Docker, Kubernetes Go e Java
Come costruire una Platform As A Service con Docker, Kubernetes Go e Java
 
Decide for Dummies
Decide for DummiesDecide for Dummies
Decide for Dummies
 
DECIDE for Dummies
DECIDE for Dummies DECIDE for Dummies
DECIDE for Dummies
 
Java and internet fundamentals.
Java and internet fundamentals.Java and internet fundamentals.
Java and internet fundamentals.
 
Java
JavaJava
Java
 

More from Luca Garulli

Scale Out Your Graph Across Servers and Clouds with OrientDB
Scale Out Your Graph Across Servers and Clouds  with OrientDBScale Out Your Graph Across Servers and Clouds  with OrientDB
Scale Out Your Graph Across Servers and Clouds with OrientDBLuca Garulli
 
How Graph Databases started the Multi Model revolution
How Graph Databases started the Multi Model revolutionHow Graph Databases started the Multi Model revolution
How Graph Databases started the Multi Model revolutionLuca Garulli
 
OrientDB and Hazelcast
OrientDB and HazelcastOrientDB and Hazelcast
OrientDB and HazelcastLuca Garulli
 
Switching from Relational 2 Graph - CloudConf.it
Switching from Relational 2 Graph - CloudConf.itSwitching from Relational 2 Graph - CloudConf.it
Switching from Relational 2 Graph - CloudConf.itLuca Garulli
 
Switching from Relational to the Graph model v1.3
Switching from Relational to the Graph model v1.3Switching from Relational to the Graph model v1.3
Switching from Relational to the Graph model v1.3Luca Garulli
 
Switching from relational to the graph model
Switching from relational to the graph modelSwitching from relational to the graph model
Switching from relational to the graph modelLuca Garulli
 
OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)Luca Garulli
 
OrientDB the database for the web 1.1
OrientDB the database for the web 1.1OrientDB the database for the web 1.1
OrientDB the database for the web 1.1Luca Garulli
 
Roma introduction and concepts
Roma introduction and conceptsRoma introduction and concepts
Roma introduction and conceptsLuca Garulli
 
RomaFramework Tutorial Basics
RomaFramework Tutorial BasicsRomaFramework Tutorial Basics
RomaFramework Tutorial BasicsLuca Garulli
 
Roma Meta Framework Concepts @JavaDay Rome 2007
Roma Meta Framework Concepts @JavaDay Rome 2007Roma Meta Framework Concepts @JavaDay Rome 2007
Roma Meta Framework Concepts @JavaDay Rome 2007Luca Garulli
 

More from Luca Garulli (11)

Scale Out Your Graph Across Servers and Clouds with OrientDB
Scale Out Your Graph Across Servers and Clouds  with OrientDBScale Out Your Graph Across Servers and Clouds  with OrientDB
Scale Out Your Graph Across Servers and Clouds with OrientDB
 
How Graph Databases started the Multi Model revolution
How Graph Databases started the Multi Model revolutionHow Graph Databases started the Multi Model revolution
How Graph Databases started the Multi Model revolution
 
OrientDB and Hazelcast
OrientDB and HazelcastOrientDB and Hazelcast
OrientDB and Hazelcast
 
Switching from Relational 2 Graph - CloudConf.it
Switching from Relational 2 Graph - CloudConf.itSwitching from Relational 2 Graph - CloudConf.it
Switching from Relational 2 Graph - CloudConf.it
 
Switching from Relational to the Graph model v1.3
Switching from Relational to the Graph model v1.3Switching from Relational to the Graph model v1.3
Switching from Relational to the Graph model v1.3
 
Switching from relational to the graph model
Switching from relational to the graph modelSwitching from relational to the graph model
Switching from relational to the graph model
 
OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)
 
OrientDB the database for the web 1.1
OrientDB the database for the web 1.1OrientDB the database for the web 1.1
OrientDB the database for the web 1.1
 
Roma introduction and concepts
Roma introduction and conceptsRoma introduction and concepts
Roma introduction and concepts
 
RomaFramework Tutorial Basics
RomaFramework Tutorial BasicsRomaFramework Tutorial Basics
RomaFramework Tutorial Basics
 
Roma Meta Framework Concepts @JavaDay Rome 2007
Roma Meta Framework Concepts @JavaDay Rome 2007Roma Meta Framework Concepts @JavaDay Rome 2007
Roma Meta Framework Concepts @JavaDay Rome 2007
 

Recently uploaded

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

Design your application using Persistent Graphs and OrientDB

  • 1. Design your application using Persistent Graphs and OrientDB Luca Garulli – Founder and CEO NuvolaBase Ltd May 2012 29 - 30 in Cologne, Germany (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 1 www.orientechnologies.com
  • 2. Usually NoSQL products are selected because are fast and super scalable, but at what price? (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 2
  • 3. Can you really renounce to Transactions, an expressive Query language and all the features available for years by RDBMS? (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 3
  • 4. Can we have a fast and scalable NoSQL product with flexible schema, transactions, SQL, security and the support for complex types ? (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 4
  • 5. The answer is OrientDB, the document-graph NoSQL dbms (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 5
  • 6. The answer is OrientDB, the document-graph NoSQL dbms I never will change my RDBMS with anything! (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 6
  • 7. Mission? Reduce to the minimum the compromises on fitting the application domain to a persistent database supporting multiple models (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 7
  • 8. OrientDB = { flexibility of Document databases + complexity of the Graph model + Object Oriented concepts + fast Index + powerful SQL dialect } (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 8
  • 9. +13 years of research (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 9
  • 10. +3 years of design and development (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 10
  • 11. Relationships are direct links no Relational JOINS to connect multiple tables Load trees and graphs in few ms! (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 11
  • 12. Ø config download, unzip, run! cut & paste the db (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 12
  • 13. 150,000 records per second (flat records, no index, on commodity hw) (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 13
  • 14. Schema-less schema is not mandatory, relaxed model, collect heterogeneous documents all together (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 14
  • 15. Schema-full schema with constraints on fields and validation rules Customer.age > 17 Customer.address not null Customer.surname is mandatory Customer.email matches 'b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b' (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 15
  • 16. Schema-mixed schema with mandatory and optional fields + constraints the best of schema-less and schema-full modes (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 16
  • 17. ACID Transactions db.begin(); try{ // your code ... db.commit(); } catch( Exception e ) { db.rollback(); } (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 17
  • 18. Complex types native support for collections, maps (key/value) and embedded documents no more additional tables to handle them (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 18
  • 19. SQL select * from employee where name like '%Jay%' and status=0 (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 19
  • 20. Why reinvent yet another language when the 100% of developers already know SQL? OrientDB begins from SQL but improves it with new operators for graph manipulation (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 20
  • 21. For the most of the queries everyday a programmer needs SQL is simpler, more readable and compact then Scripting (Map/Reduce) (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 21
  • 22. SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/price 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 }; } Luca Garulli (c) Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 22
  • 23. Asynchronous Query invoke callback when a record matches the condition doesn't collect the result set perfect for immediate results useful to compute aggregates (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 23
  • 24. Enhanced SQL SQL is not enough for collections, maps, trees and graphs need to enhance SQL syntax Easy syntax derived from JDO/JPA standards (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 24
  • 25. SQL & relationships select from Account where address.city.country.name = 'Italy' select from Account where addresses contains (city.country.name = 'Italy') (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 25
  • 26. SQL & trees/graphs select out[label='friend'].in from V where name = 'Luca' and surname = 'Garulli' select out[@class='knows'].in from V where name = 'Jay' and surname = 'Miner' traverse friends from Profile where $depth < 7 (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 26
  • 27. SQL sub queries select from ( traverse friends from Profile where $depth < 7 ) where home.city.name = ‘Cologne’ (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 27
  • 28. SQL & strings select from Profile where name.toUpperCase() = 'LUCA' select from City where country.name.substring(1,3).toUpperCase() = 'TAL' select from Agenda where phones contains ( number.indexOf( '+39' ) > -1 ) select from Agenda where email matches 'bA-Z0-9._%+-?+@A-Z0-9.-?+.A-Z?{2,4}b' (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 28
  • 29. SQL & schema-less select from Profile where any() like '%Jay%' select from Stock where all() is not null (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 29
  • 30. SQL & collections select from Tree where children contains ( married = true ) select from Tree where children containsAll ( married = true ) select from User where roles containsKey 'shutdown' select from Graph where edges.size() > 0 (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 30
  • 31. runs Java everywhere is available JRE1.5+ ® robust engine (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 31
  • 32. Language bindings Java as native JRuby, PHP, C, Scala, .NET, Ruby, Clojure, Node.js, Python and Javascript (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 32
  • 33. Is your language not supported (yet)? Write an adapter using the C, Java or HTTP binding (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 33
  • 34. Binary protocol Fast compressed JSON over tcp/ip available for Java and soon C, C++ and Ruby (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 34
  • 35. HTTP RESTful firewall friendly use it from the web browser use it from the ESB (SOA) (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 35
  • 36. Native JSON ODocument = new ODocument().fromJSON( " { '@rid' = '26:10', '@class' = 'Developer', 'name' : 'Luca', 'surname' : 'Garulli', 'out' : [ #10:33, #10:232 ] }“ ); (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 36
  • 37. Import/Export uses JSON format online operations (don't stop the database) > export database demo (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 37
  • 38. MVRB-Tree index the best of B+Tree and RB-Tree fast on browsing, low insertion cost it's a new algorithm (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 38
  • 39. Hooks similar to triggers catch events against records, database and transactions implement custom cascade deletion algorithm enforce constraints (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 39
  • 40. Security users and roles, encrypted passwords fine grain privileges (similar to what RDBMS offer) (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 40
  • 41. Cache You can avoid using 3°party caches like Memcached 2 Level caches: Level1: Database level, 1 per thread Level2: Storage level, 1 per JVM (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 41
  • 42. Inheritance OGraphVertex (V) OGraphEdge (E) Person Vehicle Works Resides Knows Address : Address brand : BRANDS since : Date since : Date till : Date Level : LEVELS Customer Provider totSold : float totBuyed : float (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 42
  • 43. Polymorphic SQL Query OgraphVertex (V) Person Vehicle Address : Address brand : BRANDS select from Person where city.name = 'Rome‘ Queries are polymorphics Customer Provider and subclasses of Person can be totSold : float totBuyed : float part of result set (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 43
  • 44. Fetch plans Choose what to fetch on query and vertexes/edges loading Vertexes/Edges not fetched will be lazy-loaded on request Optimizes network latency (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 44
  • 45. Fetch plans Load only the root vertex Vertex = *:1 Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas] (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 45
  • 46. Fetch plans Load root + address Vertex = *:1 lives:2 Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas] (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 46
  • 47. Fetch plans Load root + all known Vertex = *:1 knows:1 Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas] (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 47
  • 48. Fetch plans Load up 3rd level of depth Vertex = *:3 Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas] (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 48
  • 49. Graph Database model Built as wrapper on top of The Document Database Few simple concepts: Vertex, Edge, Property and Index (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 49
  • 50. Why OrientDB is so special on handling Graphs? Can I model a graph on top of a RDBMS? (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 50
  • 51. A GraphDB has an “index-free adjacency” mechanism to cross the graph without any index lookup (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 51
  • 52. OrientDB doesn’t use JOIN but the “link” to traverse millions of elements per second In Blueprints benchmark, with a hot cache, traverses 29,6M of records in less than 5 seconds = 5,92M of nodes traversed per sec! (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 52
  • 53. 2 different API OGraphDatabase Native, damn fast, not the most beautiful API All APIs are compatible among them! So use the right one for the right case OrientGraph TinkerPop Blueprints, slowest but: common to other impls, Gremlin, SPARQL (via Sail) (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 53
  • 54. What to choose? OGraphDatabase Native, damn fast, not the most beautiful API OGraphDatabase if you need performance at any cost. Use it for massive insertion or low resources (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 54
  • 55. What to choose? OrientGraph TinkerPop Blueprints, slowest but: common to other impls, Gremlin, SPARQL (Sail) OrientGraph if you want to stay Portable at the cost of less speed and more memory used or to use Gremlin language, or as RDF store + SPARQL (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 55
  • 56. TinkerPop technologies sort of “standard” for GraphDB a lot of free open-source projects http://tinkerpop.com (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 56
  • 57. TinkerPop Blueprints basic API to interact with GraphDB implements transactional and indexable property graph model bidirectional edges (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 57
  • 58. GraphDB & Blueprints API OrientGraph graph = new OrientGraph("local:/tmp/db/graph”); Vertex actor = graph.addVertex(null); actor.setProperty("name", "Leonardo"); actor.setProperty("surname", "Di Caprio"); Vertex movie = graph.addVertex(null); movie.setProperty("name", "Inception"); Edge edge = graph.addEdge(null, actor, movie, "StarredIn"); graph.shutdown(); (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 58
  • 59. TinkerPop scripting language easy to learn and understand Used for operations against graphs (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 59
  • 60. graph-example-1.xml (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 60 www.orientechnologies.com
  • 61. Load graph Run the console, open the database and load a graph in xml format marko:~/software/gremlin$ ./gremlin.sh ,,,/ (o o) -----oOOo-(_)-oOOo----- gremlin> $_g := orientdb:open('/tmp/graph/test') ==>orientgraph[/tmp/graph/test] gremlin> g:load('data/graph-example-1.xml') ==>true gremlin> $_g ==>orientgraph[/tmp/graph/test] (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 61
  • 62. Search Displays outgoing edges of vertices with name equals to 'marko', then the name of inbound vertices gremlin> g:key-v('name','marko')/outE ==>e[6:0][5:2-knows->5:1] ==>e[6:1][5:2-knows->5:4] ==>e[6:4][5:2-created->5:0] gremlin> g:key-v('name','marko')/outE/inV/@name ==>vadas ==>josh ==>lop gremlin> g:close() ==>true (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 62
  • 63. High-Availability Multi-Master replication Servers can be heterogeneous with different replicated databases (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 63
  • 64. Where is the previous OrientDB Master/Slave architecture? (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 64
  • 65. Mas only ter/sla recy . Do no ve cle! t (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 65
  • 66. After first tests we decided to throw away the old Master-Slave architecture because it was against the OrientDB philosophy: (1) It didn't scale and (2) It was hard to configure (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 66
  • 67. 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 (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 67
  • 68. OrientDB Studio/View graph (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 68
  • 69. Multi-Model use case (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 69
  • 70. (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 70
  • 71. Always Free Open Source Apache 2 license free for any purposes, even commercials (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 71
  • 72. Do y o Conta u want to ct info be a @nuv partn olaba er? se.co Prof€$$ional m $€rvic€$ directly by NuvolaBase Ltd or partners support, training, consulting, mentoring (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 72
  • 73. OrientDB OrientDB for Java developers Master Development 8 hours 14 hours OrientDB OrientDB for SOA and the power of graphs 6 hours 6 hours OrientDB OrientPlanet for DBA for Web Developers 6 hours 6 hours (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 73
  • 74. Certification Program to be part of the network do courses share revenues for support work as consultant info@ Contact nuvo labas e.co m (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 74
  • 75. “OrientDB in Action” book by Manning Publications is coming: January 2013 (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 75
  • 76. NuvolaBase.com The first Graph Database on the Cloud always available few seconds to setup it use it from app & mobile (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 76
  • 77. Luca Garulli Author of CEO at Document-Graph NoSQL Open Source project Ltd, London UK www.twitter.com/lgarulli (c) Luca Garulli Licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License Page 77