ArangoDB /* Using Javascript in the database */ Jan Steemann, triAGENS, Cologne
ArangoDB basics www.arangodb.org © j.steemann@triagens.de
ArangoDB.explain() { "type": "NoSQL database", "openSource": true, "version": 1.0, "builtWith": [ "C", "C++", "js" ], "Javascript": [ "client side", "server side" ], "uses": [ "V8" ] } www.arangodb.org © j.steemann@triagens.de
Documents and collections ArangoDB is a database that works with documents Documents are sets of name / value pairs (think of JSON objects), e.g. { "name": "Jan", "age": 37 } Documents are organised in collections (like tables in relational databases) www.arangodb.org © j.steemann@triagens.de
Data types: JSON! ArangoDB operates on JSON documents JSON data can be saved as-is: db.users.save({ "name": "Jan", "uses": [ "vi", "js", "C++" ] }); www.arangodb.org © j.steemann@triagens.de
Schema-free Documents can be heterogenous – even in the same collection, e.g. { "name": "Jan", "age": 37 }, { "name": "Tim", "likes": [ "js" ] }, { "name": { "first": "Patrick", "last": "Star" } } No need to care about schemas www.arangodb.org © j.steemann@triagens.de
API & protocols ArangoDB server functionality is exposed via an HTTP REST API ArangoDB answers HTTP queries, so it can be used from the browser Simple to use from Javascript clients (3rd party) drivers available for node.js, Ruby, PHP, ... Javascript-enabled client shell provided www.arangodb.org © j.steemann@triagens.de
Querying www.arangodb.org © j.steemann@triagens.de
Querying is simple Query a document by its unique id / key: db._document("users/9558905"); Query by providing an example: db.users.byExample({ "name": "Jan", "age": 37 }); www.arangodb.org © j.steemann@triagens.de
Indexes ArangoDB allows querying on any document attributes or sub-attributes Secondary indexes can be created for higher query performance: • Hash indexes (equality queries) • Skiplists (range queries) • 2d geo indexes (location queries) www.arangodb.org © j.steemann@triagens.de
Geo index examples // get b a r n ea r es t t o coor d in a t e db.bars.near(48.51, 2.21).limit(1); // get a ll s h op s w it h in r a d iu s // a r ou n d coor d in a t e db.shops.within(48.51, 2.21, rad); www.arangodb.org © j.steemann@triagens.de
References ArangoDB can store references between documents References are documents with two endpoints (the documents they connect) Reference documents can carry own attributes www.arangodb.org © j.steemann@triagens.de
References example Users documents: Relations documents: (references) { "name": "Jan", "age": 37 { } "_from": "users/jan", "_to": "users/tim", { "type": "knows", "name": "Tim", } "city": "Paris" } // q u er y ou t b ou n d r ela t ion s f r om "J a n " db.relations.outEdges(jan); // => tim www.arangodb.org © j.steemann@triagens.de
Graph queries References make it possible to process graphs with ArangoDB Some special functions are provided to determine paths in a graph etc. Can write own Javascript functions for special traversals www.arangodb.org © j.steemann@triagens.de
Query language ArangoDB can also answer complex SQL-like queries Such queries are expressed in ArangoDB's textual query language This language allows joins, sub-queries, aggregation etc. www.arangodb.org © j.steemann@triagens.de
Example query FOR u IN users It er a t or FILTER u.addr.country == "US" && (u.isConfirmed == true || u.age >= 18) F ilt er LET userLogins = ( FOR l IN logins FILTER l.userId == u.id RETURN l ) S u b q u er y RETURN { "user": u, "logins": LENGTH(userLogins) } R es u lt www.arangodb.org © j.steemann@triagens.de
Server side „actions“ www.arangodb.org © j.steemann@triagens.de
Application server ArangoDB can answer web requests directly This also makes it an application server Users can extend its functionality with server side Javascript „actions“ Actions are user-defined functions that contain custom business logic www.arangodb.org © j.steemann@triagens.de
Actions Actions are bound to URLs and executed when URLs are called, e.g. /users?name=... => function(...) /users/.../friends => function(...) www.arangodb.org © j.steemann@triagens.de
Actions example function (req, res) { // get r eq u es t ed u s er f r om d b , // n a m e is r ea d f r om U R L p a r a m et er var u = db.users.byExample({ "username": req.urlParameters.name }); // r em ov e p a s s w or d h a s h delete u.hashedPassword; // b ef or e r et u r n in g t o ca ller actions.resultOk(req, res, 200, u); } www.arangodb.org © j.steemann@triagens.de
Actions – Use cases Filter out sensitive data before responding Validate input Check privileges Check and enforce constraints Aggregate data from multiple queries into a single response Carry out data-intensive operations www.arangodb.org © j.steemann@triagens.de
Summary www.arangodb.org © j.steemann@triagens.de
ArangoDB - summary Flexible in terms of data modelling and querying API is based on web standards: HTTP, REST, JSON Easy to use from Javascript clients Can be used as application server Functionality can be extended with server side Javascript „actions“ www.arangodb.org © j.steemann@triagens.de
Thanks! Any questions? Спасибо Grazie Teşekkürler ¡Gracias! Merci! Хвала Dank je wel Ευχαριστώ ありがとう 고마워 Tack så mycket Danke www.arangodb.org © j.steemann@triagens.de
Give it a try! ArangoDB source repository: https://www.github.com/triAGENS/ArangoDB (use master branch) Website: http://www.arangodb.org/ Builds available for Homebrew and several Linux distributions Twitter: #arangodb, @arangodb Google group: ArangoDB www.arangodb.org © j.steemann@triagens.de
Roadmap MVCC / ACID transactions Triggers Synchronous and asynchronous replication www.arangodb.org © j.steemann@triagens.de
Thank you! Stay in Touch: • Fork me on github • Google Group: ArangoDB • Twitter: @steemann & @arangodb • www.arangodb.org www.arangodb.org © j.steemann@triagens.de

ArangoDB - Using JavaScript in the database

  • 1.
    ArangoDB /* Using Javascript in the database */ Jan Steemann, triAGENS, Cologne
  • 2.
    ArangoDB basics www.arangodb.org© j.steemann@triagens.de
  • 3.
    ArangoDB.explain() { "type": "NoSQL database", "openSource": true, "version": 1.0, "builtWith": [ "C", "C++", "js" ], "Javascript": [ "client side", "server side" ], "uses": [ "V8" ] } www.arangodb.org © j.steemann@triagens.de
  • 4.
    Documents and collections ArangoDB is a database that works with documents Documents are sets of name / value pairs (think of JSON objects), e.g. { "name": "Jan", "age": 37 } Documents are organised in collections (like tables in relational databases) www.arangodb.org © j.steemann@triagens.de
  • 5.
    Data types: JSON! ArangoDBoperates on JSON documents JSON data can be saved as-is: db.users.save({ "name": "Jan", "uses": [ "vi", "js", "C++" ] }); www.arangodb.org © j.steemann@triagens.de
  • 6.
    Schema-free Documents can beheterogenous – even in the same collection, e.g. { "name": "Jan", "age": 37 }, { "name": "Tim", "likes": [ "js" ] }, { "name": { "first": "Patrick", "last": "Star" } } No need to care about schemas www.arangodb.org © j.steemann@triagens.de
  • 7.
    API & protocols ArangoDBserver functionality is exposed via an HTTP REST API ArangoDB answers HTTP queries, so it can be used from the browser Simple to use from Javascript clients (3rd party) drivers available for node.js, Ruby, PHP, ... Javascript-enabled client shell provided www.arangodb.org © j.steemann@triagens.de
  • 8.
  • 9.
    Querying is simple Querya document by its unique id / key: db._document("users/9558905"); Query by providing an example: db.users.byExample({ "name": "Jan", "age": 37 }); www.arangodb.org © j.steemann@triagens.de
  • 10.
    Indexes ArangoDB allows queryingon any document attributes or sub-attributes Secondary indexes can be created for higher query performance: • Hash indexes (equality queries) • Skiplists (range queries) • 2d geo indexes (location queries) www.arangodb.org © j.steemann@triagens.de
  • 11.
    Geo index examples //get b a r n ea r es t t o coor d in a t e db.bars.near(48.51, 2.21).limit(1); // get a ll s h op s w it h in r a d iu s // a r ou n d coor d in a t e db.shops.within(48.51, 2.21, rad); www.arangodb.org © j.steemann@triagens.de
  • 12.
    References ArangoDB can storereferences between documents References are documents with two endpoints (the documents they connect) Reference documents can carry own attributes www.arangodb.org © j.steemann@triagens.de
  • 13.
    References example Users documents: Relations documents: (references) { "name": "Jan", "age": 37 { } "_from": "users/jan", "_to": "users/tim", { "type": "knows", "name": "Tim", } "city": "Paris" } // q u er y ou t b ou n d r ela t ion s f r om "J a n " db.relations.outEdges(jan); // => tim www.arangodb.org © j.steemann@triagens.de
  • 14.
    Graph queries References makeit possible to process graphs with ArangoDB Some special functions are provided to determine paths in a graph etc. Can write own Javascript functions for special traversals www.arangodb.org © j.steemann@triagens.de
  • 15.
    Query language ArangoDB canalso answer complex SQL-like queries Such queries are expressed in ArangoDB's textual query language This language allows joins, sub-queries, aggregation etc. www.arangodb.org © j.steemann@triagens.de
  • 16.
    Example query FOR uIN users It er a t or FILTER u.addr.country == "US" && (u.isConfirmed == true || u.age >= 18) F ilt er LET userLogins = ( FOR l IN logins FILTER l.userId == u.id RETURN l ) S u b q u er y RETURN { "user": u, "logins": LENGTH(userLogins) } R es u lt www.arangodb.org © j.steemann@triagens.de
  • 17.
    Server side „actions“ www.arangodb.org © j.steemann@triagens.de
  • 18.
    Application server ArangoDB cananswer web requests directly This also makes it an application server Users can extend its functionality with server side Javascript „actions“ Actions are user-defined functions that contain custom business logic www.arangodb.org © j.steemann@triagens.de
  • 19.
    Actions Actions are boundto URLs and executed when URLs are called, e.g. /users?name=... => function(...) /users/.../friends => function(...) www.arangodb.org © j.steemann@triagens.de
  • 20.
    Actions example function (req,res) { // get r eq u es t ed u s er f r om d b , // n a m e is r ea d f r om U R L p a r a m et er var u = db.users.byExample({ "username": req.urlParameters.name }); // r em ov e p a s s w or d h a s h delete u.hashedPassword; // b ef or e r et u r n in g t o ca ller actions.resultOk(req, res, 200, u); } www.arangodb.org © j.steemann@triagens.de
  • 21.
    Actions – Usecases Filter out sensitive data before responding Validate input Check privileges Check and enforce constraints Aggregate data from multiple queries into a single response Carry out data-intensive operations www.arangodb.org © j.steemann@triagens.de
  • 22.
  • 23.
    ArangoDB - summary Flexiblein terms of data modelling and querying API is based on web standards: HTTP, REST, JSON Easy to use from Javascript clients Can be used as application server Functionality can be extended with server side Javascript „actions“ www.arangodb.org © j.steemann@triagens.de
  • 24.
    Thanks! Any questions? Спасибо Grazie Teşekkürler ¡Gracias! Merci! Хвала Dank je wel Ευχαριστώ ありがとう 고마워 Tack så mycket Danke www.arangodb.org © j.steemann@triagens.de
  • 25.
    Give it atry! ArangoDB source repository: https://www.github.com/triAGENS/ArangoDB (use master branch) Website: http://www.arangodb.org/ Builds available for Homebrew and several Linux distributions Twitter: #arangodb, @arangodb Google group: ArangoDB www.arangodb.org © j.steemann@triagens.de
  • 26.
    Roadmap MVCC / ACIDtransactions Triggers Synchronous and asynchronous replication www.arangodb.org © j.steemann@triagens.de
  • 27.
    Thank you! Stay inTouch: • Fork me on github • Google Group: ArangoDB • Twitter: @steemann & @arangodb • www.arangodb.org www.arangodb.org © j.steemann@triagens.de