KEMBAR78
ArangoDB - Using JavaScript in the database | PDF
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