Upload
artemorobets
View
5.207
Download
7
Tags:
Embed Size (px)
Citation preview
www.orientechnologies.com
1.0 May 2012
Artem OrobetsSenior Java Developerin ExigenServices1.5 year in Java
OrientDB committer
Andrey LomakinSoftware Architectin ExigenServices6+ years JEE experience
OrientDB committer
OrientDB=
best features of newest NoSQL solutions
+best features of Relational DBMS
+True Graph engine
www.orientechnologies.com
Relationships
are direct linksno Relational JOINS to connect multiple
tables
Load trees and graphs in few ms!www.orientechnologies.com
Complex types
native support for collections, maps (key/value)
and embedded documentsno more additional tables to handle them
www.orientechnologies.com
Schema-mixed
schema with mandatory and optional fields + constraints
the best of schema-less and schema-full modes
www.orientechnologies.com
ACID Transactionsdb.begin();
try{ // your code ... db.commit();
} catch( Exception e ) { db.rollback();}
www.orientechnologies.com
SQLselect * from employee where name like '%Jay%' and
status=0
www.orientechnologies.com
www.orientechnologies.com
SELECT SUM(price) as prices, SUM(cost) as costs, prices-costs, margin/price FROM Balance
VSfunction (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 };}
SQL & relationships
select from Account where address.city.country.name = 'Italy'
select from Account where addresses contains (city.country.name = 'Italy')
www.orientechnologies.com
SQL & schema-less
select from Profile where any() like '%Jay%'
select from Stock where all() is not null
www.orientechnologies.com
HTTP RESTfulfirewall friendlyuse it from the web
browseruse it from the ESB (SOA)
www.orientechnologies.com
NativeJSON
www.orientechnologies.com
{ '@rid' = '26:10', '@class' = 'Developer', 'name' : 'Luca', 'surname' : 'Garulli', 'out' : [ #10:33, #10:232 ]}
Binary protocolavailable for Java
and soon C, C++ and Ruby
www.orientechnologies.com
MVRB-Tree indexthe best of B+Tree and RB-Tree
fast on browsing, low insertion cost
www.orientechnologies.com
Hookssimilar to triggers
catch events against records, database and transactions
implement custom cascade deletion
algorithm
enforce constraints
www.orientechnologies.com
Securityusers and roles, encrypted
passwordsfine grain privileges
www.orientechnologies.com
Multi-Master architecture
any node can read/write to the database
this scale up horizontly
adding nodes is straightforward
Leader Node
The actors
Any server node in the cluster. Has a permanentconnection to the Leader Node
Synchronous mode replication.
Asynchronous mode replication.
Peer Node
Only 1 per Leader per cluster, checks other nodes andnotify changes to other Peer Nodes.
Clients are connected to Server Nodes no matter if Leaderor Peer
Client
Database Database, where data are stored
Cluster auto-discoveringAt start up each Server Node sends a IP Multicast message in broadcast
todiscover if any Leader Node is available to join the cluster.
DBDBDBDBDBDB
DBDBDBDBDBDB
Server #1
(Leader)
Server #2
(Peer)
One Leader Multiple PeersThe first node to start is always the Leader but in case of failure can be
electedany other.
DBDBDBDBDBDB
DBDBDBDBDBDBDBDBDBDBDB
Server #1
(Leader)
Server #2
(Peer)
Server #3
(Peer)
SecurityTo join a cluster the Server Node has to configure the cluster name
and passwordBroadcast messages are encrypted using the password
DBDBDBDBDBDB
Server #1
(Leader)
Server #2
(Peer)
Join the clusterONLY
If knows the nameand password
Multiple clustersMultiple separate clusters can coexist in the same network
Clusters can't see each others. Are separated boxesWhat identify a cluster is name + password
Server #1
(Leader)Server #2
(Peer)Server
#3(Peer)
Cluster 'A', password 'aaa'
Server #1
(Leader)Server #2
(Peer)Server
#3(Peer)
Cluster 'B', password 'bbb'
Synchronous ReplicationGuarantees two databases are always consistent
More expensive than asynchronous
Server #1
Server #2
DB-1 DB-2
Synchronous Replicationsteps
Server #1
DB-2
Server #2
1) Update record request
2) Update record to DB-1
3) Propagates the update
5) Sends back OK to Server #1 4) update record to DB-2
Client #1
6) Sends back OK to Client #1
DB-1
Asynchronous ReplicationChanges are propagated without waiting for the
answerTwo databases could be not consistent in the range
of few ms
Server #1
Server #2
DB-1 DB-2
Asynchronous Replicationsteps
(4a and 4b are executed in parallel)
Server #1
Client #1
1) Update record request
2) Update record to DB-1
3) Propagates the update
4b) update record to DB-2
4a) Sends back OK to Client #1
DB-2
Server #2
DB-1
Conflict ManagementThe conflicts resolution strategy can be
plugged by providing implementations of the OReplicationConflictResolver interface
DB-2
Server #2
Conflict Strategy
Conflict ManagementDefault strategy
DB-2
Server #2
Conflict Log
Default implementation:Conflict mark is createdand conflict should be
resolved manually
DefaultConflict Strategy
Graph Database model
wrapper on top of Document Database
Few simple concepts: Vertex, Edge,
Property and Indexwww.orientechnologies.com
www.orientechnologies.com
OGraphDatabaseNative, damn fast, not the most beautiful
API
2 different API
OrientGraphTinkerPop Blueprints, slowest but:
common to other impls, Gremlin, SPARQL
All APIsare compatibleamong them!So use the right one
for the right case
TinkerPop technologies
sort of “standard” for GraphDBa lot of free open-source projects
http://tinkerpop.com
www.orientechnologies.com
TinkerPop Blueprintsbasic API to interact with GraphDB
implements transactional andindexable property graph model
bidirectional edges
www.orientechnologies.com
TinkerPop Gremli
scripting language
easy to learn and understandUsed for operations against graphs
www.orientechnologies.com
g.v(89).outE('followed_by').inV.outE('sung_by')
.inV.has('name','Garcia').back(3).name
www.orientechnologies.com
OgraphVertex (V)
PersonAddress : Address
Inheritance
Customer
totSold : float
Provider
totBuyed : float
OgraphEdge (E)
Works
since : Date
Resides
since : Date
till : Date
Knows
Level : LEVELS
Vehiclebrand : BRANDS
Polymorphic SQL Query
List<ODocument> result = database.query( new OSQLSynchQuery(
"select from Person where city.name = 'Rome'" ));
www.orientechnologies.com
Queries are polymorphicsand subclasses of Person can be
part of result set
Fetch plansChoose what to fetch on query and vertexes/edges
loadingVertexes/Edges not fetched will be lazy-loaded on
requestOptimizes network latency
www.orientechnologies.com
Fetch plansVertex Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas]
www.orientechnologies.com
Load only the root vertex= *:1
Fetch plansVertex Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas]
www.orientechnologies.com
Load root + address= *:1 lives:2
Fetch plansVertex Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas]
www.orientechnologies.com
Load root + all known= *:1 knows:1
Fetch plansVertex Luca | | lives city +---------> Vertex ------------> Vertex | 10th street Italy | knows +--------->* [Vertex Vertex Vertex ] [ Marko John Nicholas]
www.orientechnologies.com
Load up 3rd level of depth= *:3
ConsoleORIENT database v.1.0.0 www.orientechnologies.comType 'help' to display all the commands supported.
> connect remote:localhost/demo admin adminConnecting 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 |273 item(s) found. Query executed in 0.013 sec(s).
> closeDisconnecting from the database [demo]...OK
> quitwww.orientechnologies.com
OrientDB Studio/SQL query
www.orientechnologies.com
Resultset is editable andchanges are immediately
persistent!
OrientDB Studio/View graph
www.orientechnologies.com
Upcoming featuresNew hash Indexes,
query performance boost,
data consistency check,
new transaction lock mechanics,
object DB improvements
Production usage
Finance Solutions Of America
NuvolaBase.com(b
eta)
www.orientechnologies.com
The firstGraph
Databaseon the Cloud
always availablefew seconds to setup
ituse it from app &
mobile
User’s reasons to chose Only one graph DB with cloud computing
support, high flexibility of data format, powerful data analyzes (SQL + Gremlin), JDBC driver, huge reduction of integration
time, good technical support.
Module OrientDB Neo4j DEX
Release 1.0-SNAPSHOT 1.7M03 4.5.1
VertexTestSuite 11,628.98 30,535.02 4,686.65
EdgeTestSuite 7,712.06 41,206.89 58,671.90
GraphTestSuite 9,073.09 55,102.35 7,428.25
IndexableGraphTestSuite 4,620.61 11,299.02 1070.75
IndexTestSuite 2,072.23 5,239.92 not supported
AutomaticIndexTestSuite 3,252.48 9,402.59 not supported
TransactionGraphTestSuite 7,659.67 22,787.29 not supported
GraphMLReaderTestSuite 4,064.23 5,440.67 not supported
Blueprints microbenchmarks
git clone git://github.com/tinkerpop/blueprints.git mvn clean install
Always
FreeOpen Source Apache 2
licensefree for any purposes,
even commercialswww.orientechnologies.com
No dependencieswith 3rd parties software
no conflicts with other software
just 1 Mb of run-time libraries
www.orientechnologies.com
Ø configdownload, unzip, run!
cut & paste the dbwww.orientechnologies.com
Luca GarulliFounder of OrientDB
Andrey LomakinCommitter of OrientDB
Artem OrobetsCommiter of OrientDB
www.orientechnologies.com
@lgarulli,@Andrey_Lomakin,
@Dr_EniSh