5. Your Entities
A Person has a
Name, first and last
one or more addresses, emails,
telephone
a list of hobbies, skills, tags
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
6. Relational World
www.arangodb.org (c) f.celler@triagens.de
PersonPersonPerson
AddressAddressAddress
HobbyHobbyHobby
emailemailemail
n-to-mn-to-mn-to-m
n-to-mn-to-mn-to-m
n-to-mn-to-mn-to-m
Samstag, 1. Juni 13
8. Document Databases
documents can be
as simple as key/value maps
or as complex as lists containing embedded
sub-documents
or anything in between
representated in JSON
Schema-less
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
10. www.arangodb.org (c) f.celler@triagens.de 10
Analytic Processing DBsTransaction Processing DBs
Managing the evolving state of an IT system
Map/Reduce
Graphs
Extensibility
Key/Value
Column-
Stores
Complex
Queries
Structured
Data
Massively
Distributed
Documents
Samstag, 1. Juni 13
11. Property Graphs
www.arangodb.org (c) f.celler@triagens.de
Type: inproceeding
Title: Finite Size Effects
Type: proceeding
Title: Neural Modeling
Type: person
Name: Anthony C. C. Coolen
Label: written
Label: published
Pages: 99-120
Type: person
Name: Snchez-Andrs
Label: edited
Just Documents
Samstag, 1. Juni 13
12. Multi-Model Databases
www.arangodb.org (c) f.celler@triagens.de
vertices and edges are documents
query them using geo-index, full-text,
SQL-like queries
relations are expressed as graphs
traverse them using graph algorithms
Samstag, 1. Juni 13
15. JavaScript Everywhere
in the Browser
Application-Layer (Node.JS)
Database
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
16. Why is Node not enough?
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
17. JavaScript in a Database
MVC in the Browser and/or NODE.JS
Script-Language in the DB for
transactions as functions
graph traversal
no-backend, just API
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
18. db._create("accounts");
db.accounts.save({ _key: "john", amount: 423 });
db.accounts.save({ _key: "fred", amount: 197 });
db._executeTransaction({
collections: {
write: "accounts"
},
params: {
user1: "fred",
user2: "john",
amount: 10
},
action: function (params) {
var db = require("internal").db;
var account1 = db.accounts.document(params['user1']);
var account2 = db.accounts.document(params['user2']);
var amount = params['amount'];
if (account1.amount < amount) {
throw "account of user '" + user1 + "' does not have enough money!";
}
db.accounts.update(account1, { amount : account1.amount - amount });
db.accounts.update(account2, { amount : account2.amount + amount });
/* will commit the transaction and return the value true */
return true;
}
});
www.arangodb.org (c) f.celler@triagens.de
Transactions
Samstag, 1. Juni 13
19. db._executeTransaction({
collections: {
write: "accounts"
},
params: {
user1: "fred",
user2: "john",
amount: 10
},
action: function (params) {
var db = require("internal").db;
var account1 = db.accounts.document(params['user1']);
var account2 = db.accounts.document(params['user2']);
var amount = params['amount'];
if (account1.amount < amount) {
throw "account of user '" + user1 + "' does not have enough money!";
}
db.accounts.update(account1, { amount : account1.amount - amount });
db.accounts.update(account2, { amount : account2.amount + amount });
www.arangodb.org (c) f.celler@triagens.de
Transactions
Samstag, 1. Juni 13
20. function traverse (graph, start, depth, maxlen) {
var config = {
datasource: traversal.collectionDatasourceFactory(graph._edges),
strategy: Traverser.BREADTH_FIRST,
expander: traversal.anyExpander,
filter: traversal.maxDepthFilter,
maxDepth: depth,
uniqueness: { edges: Traverser.UNIQUE_GLOBAL, vertices: Traverser.UNIQUE_NONE },
visitor: coauthorVisitor(maxlen)
};
var traverser = new Traverser(config);
var result = { positions: {}, vertices: [], links: [], minYear: 0, maxYear: 0 };
var first = graph._vertices.firstExample({ name: start });
if (first !== null) {
traverser.traverse(result, first);
}
return {
start: start,
depth: depth,
minYear: result.minYear,
maxYear: result.maxYear,
vertices: result.vertices,
links: result.links };
}
www.arangodb.org (c) f.celler@triagens.de
Graph Traversal
Samstag, 1. Juni 13
23. To Be Continued ... Now
Fork me on github
Google Group: ArangoDB
Twitter: @fceller & @arangodb
www.arangodb.org
www.arangodb.org (c) f.celler@triagens.de
Stay in Touch:
Samstag, 1. Juni 13