SlideShare a Scribd company logo
JavaScript in the Database
Frank Celler & Lucas Dohmen
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
The NoSQL Movement
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
CAP
www.arangodb.org (c) f.celler@triagens.de
ACID
BASE
Samstag, 1. Juni 13
www.arangodb.org (c) f.celler@triagens.de
nosql.eventbrite.com
distributed structured
data storage
Samstag, 1. Juni 13
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
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
Use Aggregates
Do not Normalize
www.arangodb.org (c) f.celler@triagens.de
{ name: { first: „Frank“, last: „Celler“ },
address: { home: { street: „...“, city: „...“ } },
email: { work: „frank@celler.de“ },
hobbies: [ „C++“, „MRuby“, „JavaScript“ ] }
Samstag, 1. Juni 13
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
www.arangodb.org (c) f.celler@triagens.de 9
Samstag, 1. Juni 13
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
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
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
ArangoDB.explain()
www.arangodb.org (c) f.celler@triagens.de
{
"type": "NoSQL database",
"model": [ "document", "graph", "key-value" ],
"openSource": true,
"license“: "apache",
"version": 1.3,
"builtWith": [ "C", "C++", "js" ],
"Javascript": [ "client side", "server side" ],
"uses": [ "V8" ]
}
Samstag, 1. Juni 13
Why Use JavaScript?
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
JavaScript Everywhere
in the Browser
Application-Layer (Node.JS)
Database
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
Why is Node not enough?
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
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
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
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
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
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)
};
www.arangodb.org (c) f.celler@triagens.de
Graph Traversal
Samstag, 1. Juni 13
No Back-End?
www.arangodb.org (c) f.celler@triagens.de
Samstag, 1. Juni 13
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
Ad

Recommended

Running MRuby in a Database - ArangoDB - RuPy 2012
Running MRuby in a Database - ArangoDB - RuPy 2012
ArangoDB Database
 
ArangoDB - Using JavaScript in the database
ArangoDB - Using JavaScript in the database
ArangoDB Database
 
Using MRuby in a database
Using MRuby in a database
ArangoDB Database
 
Rupy2012 ArangoDB Workshop Part1
Rupy2012 ArangoDB Workshop Part1
ArangoDB Database
 
ArangoDB
ArangoDB
ArangoDB Database
 
A Little SPARQL in your Analytics
A Little SPARQL in your Analytics
Dr. Neil Brittliff
 
Graph Analytics with ArangoDB
Graph Analytics with ArangoDB
ArangoDB Database
 
Visualizing Web Data Query Results
Visualizing Web Data Query Results
Anja Jentzsch
 
Hands on with Ruby & MongoDB
Hands on with Ruby & MongoDB
Wynn Netherland
 
FOXX - a Javascript application framework on top of ArangoDB
FOXX - a Javascript application framework on top of ArangoDB
ArangoDB Database
 
iOS: Web Services and XML parsing
iOS: Web Services and XML parsing
Jussi Pohjolainen
 
Introduction to couch_db
Introduction to couch_db
Romain Testard
 
Big Data Processing using Apache Spark and Clojure
Big Data Processing using Apache Spark and Clojure
Dr. Christian Betz
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data Relationships
Fabrizio Fortino
 
DrupalCon Chicago Practical MongoDB and Drupal
DrupalCon Chicago Practical MongoDB and Drupal
Doug Green
 
2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction
antoinegirbal
 
OrientDB & Node.js Overview - JS.Everywhere() KW
OrientDB & Node.js Overview - JS.Everywhere() KW
gmccarvell
 
MongoDB
MongoDB
Bembeng Arifin
 
RDF APIs for .NET Framework
RDF APIs for .NET Framework
Adriana Ivanciu
 
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
DECK36
 
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
Data Con LA
 
Mapreduce in Search
Mapreduce in Search
Amund Tveit
 
OrientDB the graph database
OrientDB the graph database
Artem Orobets
 
Introduction to MongoDB
Introduction to MongoDB
Nosh Petigara
 
2011 mongo FR - scaling with mongodb
2011 mongo FR - scaling with mongodb
antoinegirbal
 
RDFa Tutorial
RDFa Tutorial
Ivan Herman
 
Small Overview of Skype Database Tools
Small Overview of Skype Database Tools
elliando dias
 
Brief Intro to Apache Spark @ Stanford ICME
Brief Intro to Apache Spark @ Stanford ICME
Paco Nathan
 
Multi-model databases and node.js
Multi-model databases and node.js
Max Neunhöffer
 
GraphDatabases and what we can use them for
GraphDatabases and what we can use them for
Michael Hackstein
 

More Related Content

What's hot (20)

Hands on with Ruby & MongoDB
Hands on with Ruby & MongoDB
Wynn Netherland
 
FOXX - a Javascript application framework on top of ArangoDB
FOXX - a Javascript application framework on top of ArangoDB
ArangoDB Database
 
iOS: Web Services and XML parsing
iOS: Web Services and XML parsing
Jussi Pohjolainen
 
Introduction to couch_db
Introduction to couch_db
Romain Testard
 
Big Data Processing using Apache Spark and Clojure
Big Data Processing using Apache Spark and Clojure
Dr. Christian Betz
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data Relationships
Fabrizio Fortino
 
DrupalCon Chicago Practical MongoDB and Drupal
DrupalCon Chicago Practical MongoDB and Drupal
Doug Green
 
2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction
antoinegirbal
 
OrientDB & Node.js Overview - JS.Everywhere() KW
OrientDB & Node.js Overview - JS.Everywhere() KW
gmccarvell
 
MongoDB
MongoDB
Bembeng Arifin
 
RDF APIs for .NET Framework
RDF APIs for .NET Framework
Adriana Ivanciu
 
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
DECK36
 
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
Data Con LA
 
Mapreduce in Search
Mapreduce in Search
Amund Tveit
 
OrientDB the graph database
OrientDB the graph database
Artem Orobets
 
Introduction to MongoDB
Introduction to MongoDB
Nosh Petigara
 
2011 mongo FR - scaling with mongodb
2011 mongo FR - scaling with mongodb
antoinegirbal
 
RDFa Tutorial
RDFa Tutorial
Ivan Herman
 
Small Overview of Skype Database Tools
Small Overview of Skype Database Tools
elliando dias
 
Brief Intro to Apache Spark @ Stanford ICME
Brief Intro to Apache Spark @ Stanford ICME
Paco Nathan
 
Hands on with Ruby & MongoDB
Hands on with Ruby & MongoDB
Wynn Netherland
 
FOXX - a Javascript application framework on top of ArangoDB
FOXX - a Javascript application framework on top of ArangoDB
ArangoDB Database
 
iOS: Web Services and XML parsing
iOS: Web Services and XML parsing
Jussi Pohjolainen
 
Introduction to couch_db
Introduction to couch_db
Romain Testard
 
Big Data Processing using Apache Spark and Clojure
Big Data Processing using Apache Spark and Clojure
Dr. Christian Betz
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data Relationships
Fabrizio Fortino
 
DrupalCon Chicago Practical MongoDB and Drupal
DrupalCon Chicago Practical MongoDB and Drupal
Doug Green
 
2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction
antoinegirbal
 
OrientDB & Node.js Overview - JS.Everywhere() KW
OrientDB & Node.js Overview - JS.Everywhere() KW
gmccarvell
 
RDF APIs for .NET Framework
RDF APIs for .NET Framework
Adriana Ivanciu
 
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
Real-time Data De-duplication using Locality-sensitive Hashing powered by Sto...
DECK36
 
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
DataFrame: Spark's new abstraction for data science by Reynold Xin of Databricks
Data Con LA
 
Mapreduce in Search
Mapreduce in Search
Amund Tveit
 
OrientDB the graph database
OrientDB the graph database
Artem Orobets
 
Introduction to MongoDB
Introduction to MongoDB
Nosh Petigara
 
2011 mongo FR - scaling with mongodb
2011 mongo FR - scaling with mongodb
antoinegirbal
 
Small Overview of Skype Database Tools
Small Overview of Skype Database Tools
elliando dias
 
Brief Intro to Apache Spark @ Stanford ICME
Brief Intro to Apache Spark @ Stanford ICME
Paco Nathan
 

Viewers also liked (20)

Multi-model databases and node.js
Multi-model databases and node.js
Max Neunhöffer
 
GraphDatabases and what we can use them for
GraphDatabases and what we can use them for
Michael Hackstein
 
Backbone using Extensible Database APIs over HTTP
Backbone using Extensible Database APIs over HTTP
Max Neunhöffer
 
Complex queries in a distributed multi-model database
Complex queries in a distributed multi-model database
Max Neunhöffer
 
Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)
ArangoDB Database
 
Extensible Database APIs and their role in Software Architecture
Extensible Database APIs and their role in Software Architecture
Max Neunhöffer
 
Domain Driven Design & NoSQL
Domain Driven Design & NoSQL
ArangoDB Database
 
Domain Driven Design & NoSQL
Domain Driven Design & NoSQL
ArangoDB Database
 
ArangoDB – Persistência Poliglota e Banco de Dados Multi-Modelos
ArangoDB – Persistência Poliglota e Banco de Dados Multi-Modelos
Helder Santana
 
Jan Steemann: Modelling data in a schema free world (Talk held at Froscon, 2...
Jan Steemann: Modelling data in a schema free world (Talk held at Froscon, 2...
ArangoDB Database
 
Multi model-databases
Multi model-databases
ArangoDB Database
 
Is multi-model the future of NoSQL?
Is multi-model the future of NoSQL?
Max Neunhöffer
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Big Data Spain
 
Overhauling a database engine in 2 months
Overhauling a database engine in 2 months
Max Neunhöffer
 
guacamole: an Object Document Mapper for ArangoDB
guacamole: an Object Document Mapper for ArangoDB
Max Neunhöffer
 
Domain driven design @FrOSCon
Domain driven design @FrOSCon
ArangoDB Database
 
Processing large-scale graphs with Google Pregel
Processing large-scale graphs with Google Pregel
Max Neunhöffer
 
Wir sind aber nicht Twitter
Wir sind aber nicht Twitter
ArangoDB Database
 
Domain Driven Design and NoSQL TLV
Domain Driven Design and NoSQL TLV
ArangoDB Database
 
Introduction to ArangoDB (nosql matters Barcelona 2012)
Introduction to ArangoDB (nosql matters Barcelona 2012)
ArangoDB Database
 
Multi-model databases and node.js
Multi-model databases and node.js
Max Neunhöffer
 
GraphDatabases and what we can use them for
GraphDatabases and what we can use them for
Michael Hackstein
 
Backbone using Extensible Database APIs over HTTP
Backbone using Extensible Database APIs over HTTP
Max Neunhöffer
 
Complex queries in a distributed multi-model database
Complex queries in a distributed multi-model database
Max Neunhöffer
 
Hotcode 2013: Javascript in a database (Part 2)
Hotcode 2013: Javascript in a database (Part 2)
ArangoDB Database
 
Extensible Database APIs and their role in Software Architecture
Extensible Database APIs and their role in Software Architecture
Max Neunhöffer
 
Domain Driven Design & NoSQL
Domain Driven Design & NoSQL
ArangoDB Database
 
Domain Driven Design & NoSQL
Domain Driven Design & NoSQL
ArangoDB Database
 
ArangoDB – Persistência Poliglota e Banco de Dados Multi-Modelos
ArangoDB – Persistência Poliglota e Banco de Dados Multi-Modelos
Helder Santana
 
Jan Steemann: Modelling data in a schema free world (Talk held at Froscon, 2...
Jan Steemann: Modelling data in a schema free world (Talk held at Froscon, 2...
ArangoDB Database
 
Is multi-model the future of NoSQL?
Is multi-model the future of NoSQL?
Max Neunhöffer
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Big Data Spain
 
Overhauling a database engine in 2 months
Overhauling a database engine in 2 months
Max Neunhöffer
 
guacamole: an Object Document Mapper for ArangoDB
guacamole: an Object Document Mapper for ArangoDB
Max Neunhöffer
 
Domain driven design @FrOSCon
Domain driven design @FrOSCon
ArangoDB Database
 
Processing large-scale graphs with Google Pregel
Processing large-scale graphs with Google Pregel
Max Neunhöffer
 
Domain Driven Design and NoSQL TLV
Domain Driven Design and NoSQL TLV
ArangoDB Database
 
Introduction to ArangoDB (nosql matters Barcelona 2012)
Introduction to ArangoDB (nosql matters Barcelona 2012)
ArangoDB Database
 
Ad

Similar to Hotcode 2013: Javascript in a database (Part 1) (20)

Your Database Cannot Do this (well)
Your Database Cannot Do this (well)
javier ramirez
 
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Databricks
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutes
David Pilato
 
Full-Stack Data Science: How to be a One-person Data Team
Full-Stack Data Science: How to be a One-person Data Team
Greg Goltsov
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code Europe
David Pilato
 
Managing your Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC Oslo
David Pilato
 
NoSQL Now 2013 Presentation
NoSQL Now 2013 Presentation
Arjen Schoneveld
 
112 portfpres.pdf
112 portfpres.pdf
sash236
 
Scaling up data science applications
Scaling up data science applications
Kexin Xie
 
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Databricks
 
MLconf NYC Shan Shan Huang
MLconf NYC Shan Shan Huang
MLconf
 
Quick trip around the Cosmos - Things every astronaut supposed to know
Quick trip around the Cosmos - Things every astronaut supposed to know
Rafał Hryniewski
 
JQuery Flot
JQuery Flot
Arshavski Alexander
 
Elasticsearch first-steps
Elasticsearch first-steps
Matteo Moci
 
Designing The Right Schema To Power Heap (PGConf Silicon Valley 2016)
Designing The Right Schema To Power Heap (PGConf Silicon Valley 2016)
Dan Robinson
 
Mastering MapReduce: MapReduce for Big Data Management and Analysis
Mastering MapReduce: MapReduce for Big Data Management and Analysis
Teradata Aster
 
Introduction to MongoDB
Introduction to MongoDB
antoinegirbal
 
Awesome Banking API's
Awesome Banking API's
Natalino Busa
 
Real-Time Spark: From Interactive Queries to Streaming
Real-Time Spark: From Interactive Queries to Streaming
Databricks
 
huhu
huhu
Dung Trương
 
Your Database Cannot Do this (well)
Your Database Cannot Do this (well)
javier ramirez
 
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Databricks
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutes
David Pilato
 
Full-Stack Data Science: How to be a One-person Data Team
Full-Stack Data Science: How to be a One-person Data Team
Greg Goltsov
 
Managing your black friday logs - Code Europe
Managing your black friday logs - Code Europe
David Pilato
 
Managing your Black Friday Logs NDC Oslo
Managing your Black Friday Logs NDC Oslo
David Pilato
 
NoSQL Now 2013 Presentation
NoSQL Now 2013 Presentation
Arjen Schoneveld
 
112 portfpres.pdf
112 portfpres.pdf
sash236
 
Scaling up data science applications
Scaling up data science applications
Kexin Xie
 
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Scaling Up: How Switching to Apache Spark Improved Performance, Realizability...
Databricks
 
MLconf NYC Shan Shan Huang
MLconf NYC Shan Shan Huang
MLconf
 
Quick trip around the Cosmos - Things every astronaut supposed to know
Quick trip around the Cosmos - Things every astronaut supposed to know
Rafał Hryniewski
 
Elasticsearch first-steps
Elasticsearch first-steps
Matteo Moci
 
Designing The Right Schema To Power Heap (PGConf Silicon Valley 2016)
Designing The Right Schema To Power Heap (PGConf Silicon Valley 2016)
Dan Robinson
 
Mastering MapReduce: MapReduce for Big Data Management and Analysis
Mastering MapReduce: MapReduce for Big Data Management and Analysis
Teradata Aster
 
Introduction to MongoDB
Introduction to MongoDB
antoinegirbal
 
Awesome Banking API's
Awesome Banking API's
Natalino Busa
 
Real-Time Spark: From Interactive Queries to Streaming
Real-Time Spark: From Interactive Queries to Streaming
Databricks
 
Ad

More from ArangoDB Database (20)

ATO 2022 - Machine Learning + Graph Databases for Better Recommendations (3)....
ATO 2022 - Machine Learning + Graph Databases for Better Recommendations (3)....
ArangoDB Database
 
Machine Learning + Graph Databases for Better Recommendations V2 08/20/2022
Machine Learning + Graph Databases for Better Recommendations V2 08/20/2022
ArangoDB Database
 
Machine Learning + Graph Databases for Better Recommendations V1 08/06/2022
Machine Learning + Graph Databases for Better Recommendations V1 08/06/2022
ArangoDB Database
 
ArangoDB 3.9 - Further Powering Graphs at Scale
ArangoDB 3.9 - Further Powering Graphs at Scale
ArangoDB Database
 
GraphSage vs Pinsage #InsideArangoDB
GraphSage vs Pinsage #InsideArangoDB
ArangoDB Database
 
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
ArangoDB Database
 
Getting Started with ArangoDB Oasis
Getting Started with ArangoDB Oasis
ArangoDB Database
 
Custom Pregel Algorithms in ArangoDB
Custom Pregel Algorithms in ArangoDB
ArangoDB Database
 
Hacktoberfest 2020 - Intro to Knowledge Graphs
Hacktoberfest 2020 - Intro to Knowledge Graphs
ArangoDB Database
 
A Graph Database That Scales - ArangoDB 3.7 Release Webinar
A Graph Database That Scales - ArangoDB 3.7 Release Webinar
ArangoDB Database
 
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
ArangoDB Database
 
ArangoML Pipeline Cloud - Managed Machine Learning Metadata
ArangoML Pipeline Cloud - Managed Machine Learning Metadata
ArangoDB Database
 
ArangoDB 3.7 Roadmap: Performance at Scale
ArangoDB 3.7 Roadmap: Performance at Scale
ArangoDB Database
 
Webinar: What to expect from ArangoDB Oasis
Webinar: What to expect from ArangoDB Oasis
ArangoDB Database
 
ArangoDB 3.5 Feature Overview Webinar - Sept 12, 2019
ArangoDB 3.5 Feature Overview Webinar - Sept 12, 2019
ArangoDB Database
 
3.5 webinar
3.5 webinar
ArangoDB Database
 
Webinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDB
ArangoDB Database
 
An introduction to multi-model databases
An introduction to multi-model databases
ArangoDB Database
 
Running complex data queries in a distributed system
Running complex data queries in a distributed system
ArangoDB Database
 
Guacamole Fiesta: What do avocados and databases have in common?
Guacamole Fiesta: What do avocados and databases have in common?
ArangoDB Database
 
ATO 2022 - Machine Learning + Graph Databases for Better Recommendations (3)....
ATO 2022 - Machine Learning + Graph Databases for Better Recommendations (3)....
ArangoDB Database
 
Machine Learning + Graph Databases for Better Recommendations V2 08/20/2022
Machine Learning + Graph Databases for Better Recommendations V2 08/20/2022
ArangoDB Database
 
Machine Learning + Graph Databases for Better Recommendations V1 08/06/2022
Machine Learning + Graph Databases for Better Recommendations V1 08/06/2022
ArangoDB Database
 
ArangoDB 3.9 - Further Powering Graphs at Scale
ArangoDB 3.9 - Further Powering Graphs at Scale
ArangoDB Database
 
GraphSage vs Pinsage #InsideArangoDB
GraphSage vs Pinsage #InsideArangoDB
ArangoDB Database
 
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
Webinar: ArangoDB 3.8 Preview - Analytics at Scale
ArangoDB Database
 
Getting Started with ArangoDB Oasis
Getting Started with ArangoDB Oasis
ArangoDB Database
 
Custom Pregel Algorithms in ArangoDB
Custom Pregel Algorithms in ArangoDB
ArangoDB Database
 
Hacktoberfest 2020 - Intro to Knowledge Graphs
Hacktoberfest 2020 - Intro to Knowledge Graphs
ArangoDB Database
 
A Graph Database That Scales - ArangoDB 3.7 Release Webinar
A Graph Database That Scales - ArangoDB 3.7 Release Webinar
ArangoDB Database
 
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
ArangoDB Database
 
ArangoML Pipeline Cloud - Managed Machine Learning Metadata
ArangoML Pipeline Cloud - Managed Machine Learning Metadata
ArangoDB Database
 
ArangoDB 3.7 Roadmap: Performance at Scale
ArangoDB 3.7 Roadmap: Performance at Scale
ArangoDB Database
 
Webinar: What to expect from ArangoDB Oasis
Webinar: What to expect from ArangoDB Oasis
ArangoDB Database
 
ArangoDB 3.5 Feature Overview Webinar - Sept 12, 2019
ArangoDB 3.5 Feature Overview Webinar - Sept 12, 2019
ArangoDB Database
 
Webinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDB
ArangoDB Database
 
An introduction to multi-model databases
An introduction to multi-model databases
ArangoDB Database
 
Running complex data queries in a distributed system
Running complex data queries in a distributed system
ArangoDB Database
 
Guacamole Fiesta: What do avocados and databases have in common?
Guacamole Fiesta: What do avocados and databases have in common?
ArangoDB Database
 

Recently uploaded (20)

The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
Enhance GitHub Copilot using MCP - Enterprise version.pdf
Enhance GitHub Copilot using MCP - Enterprise version.pdf
Nilesh Gule
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
Python Conference Singapore - 19 Jun 2025
Python Conference Singapore - 19 Jun 2025
ninefyi
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Lessons Learned from Developing Secure AI Workflows.pdf
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
Enhance GitHub Copilot using MCP - Enterprise version.pdf
Enhance GitHub Copilot using MCP - Enterprise version.pdf
Nilesh Gule
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
Python Conference Singapore - 19 Jun 2025
Python Conference Singapore - 19 Jun 2025
ninefyi
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
OWASP Barcelona 2025 Threat Model Library
OWASP Barcelona 2025 Threat Model Library
PetraVukmirovic
 
Lessons Learned from Developing Secure AI Workflows.pdf
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
AI vs Human Writing: Can You Tell the Difference?
AI vs Human Writing: Can You Tell the Difference?
Shashi Sathyanarayana, Ph.D
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
CapCut Pro Crack For PC Latest Version {Fully Unlocked} 2025
pcprocore
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 

Hotcode 2013: Javascript in a database (Part 1)

  • 1. JavaScript in the Database Frank Celler & Lucas Dohmen www.arangodb.org (c) [email protected] Samstag, 1. Juni 13
  • 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) [email protected] Samstag, 1. Juni 13
  • 6. Relational World www.arangodb.org (c) [email protected] 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
  • 7. Use Aggregates Do not Normalize www.arangodb.org (c) [email protected] { name: { first: „Frank“, last: „Celler“ }, address: { home: { street: „...“, city: „...“ } }, email: { work: „[email protected]“ }, hobbies: [ „C++“, „MRuby“, „JavaScript“ ] } 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) [email protected] Samstag, 1. Juni 13
  • 10. www.arangodb.org (c) [email protected] 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) [email protected] 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) [email protected] 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
  • 13. ArangoDB.explain() www.arangodb.org (c) [email protected] { "type": "NoSQL database", "model": [ "document", "graph", "key-value" ], "openSource": true, "license“: "apache", "version": 1.3, "builtWith": [ "C", "C++", "js" ], "Javascript": [ "client side", "server side" ], "uses": [ "V8" ] } Samstag, 1. Juni 13
  • 15. JavaScript Everywhere in the Browser Application-Layer (Node.JS) Database www.arangodb.org (c) [email protected] Samstag, 1. Juni 13
  • 16. Why is Node not enough? www.arangodb.org (c) [email protected] 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) [email protected] 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) [email protected] 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) [email protected] 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) [email protected] Graph Traversal Samstag, 1. Juni 13
  • 21. 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) }; www.arangodb.org (c) [email protected] 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) [email protected] Stay in Touch: Samstag, 1. Juni 13