arangodb

43
1 Lucas Dohmen @moonbeamlabs the multi-purpose NoSQL Database www.arangodb.org

Upload: arangodb

Post on 29-Aug-2014

443 views

Category:

Technology


2 download

DESCRIPTION

This is our current version of our general presentation about ArangoDB

TRANSCRIPT

Page 1: ArangoDB

1

Lucas Dohmen @moonbeamlabs

!the multi-purpose NoSQL Database

!www.arangodb.org

Page 2: ArangoDB

Lucas Dohmen

‣ ArangoDB Core Team

‣ ArangoDB Foxx & Ruby Adapter

‣ Student on the master branch

‣ Open Source Developer & Podcaster

2

/\ (~( ) ) /\_/\ ( _-----_(@ @) ( \ / /|/--\|\ V " " " "

Page 3: ArangoDB

Why did we start ArangoDB?

How should an ideal multi-purpose database look like?

Is it already out there?

!

‣ Second Generation NoSQL DB

‣ Unique feature set

‣ Solves some problems of other NoSQL DBs

‣ Greenfield project

‣ Experienced team building NoSQL DBs for more than 10 years

3

Page 4: ArangoDB

Main Features

4

‣ Open source and free

‣ Multi model database

‣ Convenient querying

‣ Extendable through JS

‣ High performance & space efficiency

‣ Easy to use

‣ Started in Sep 2011

‣ Current Version: 2.0

Page 5: ArangoDB

Free and Open Source

‣ Apache 2 License

‣ On Github

‣ Do what you want with it

‣ ... and don‘t pay a dime!

5

Page 6: ArangoDB

Multi model database

6

Key/Value Store Document Store Graph Database

Source: Andrew Carol

Polyglot Persistence

Page 7: ArangoDB

Key-Value Store

‣ Map value data to unique string keys (identifiers) ‣ Treat data as opaque (data has no structure) ‣ Can implement scaling and partitioning easily due to simplistic

data model ‣ Key-value can be seen as a special case of documents. For

many applications this is sufficient, but not for all cases. !

ArangoDB ‣ It‘s currently supported as a key-value document. ‣ In the near future it supports special key-value collection. ‣ One of the optimization will be the elimination of JSON in

this case, so the value need not be parsed. ‣ Sharding capabilities of Key-Value Collections will differ

from Document Collections

7

Page 8: ArangoDB

Document Store

‣ Normally based on key-value stores (each document still has a unique key)

‣ Allow to save documents with logical similarity in „collections“ ‣ Treat data records as attribute-structured documents (data is

no longer opaque) ‣ Often allows querying and indexing document attributes !

ArangoDB ‣ It supports both. A database can contain collections from

different types. ‣ For efficient memory handling we have an automatic schema

recognition. ‣ It has different ways to retrieve data. CRUD via RESTful

Interface, QueryByExample, JS for graph traversals and AQL.

8

Page 9: ArangoDB

‣ Example: Computer Science Bibliography

!

!

!

!

!

ArangoDB ‣ Supports Property Graphs ‣ Vertices and edges are documents ‣ Query them using geo-index, full-text, SQL-like queries ‣ Edges are directed relations between vertices

‣ Custom traversals and built-in graph algorithms

Graph Store

9

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

Page 10: ArangoDB

Analytic Processing DBsTransaction Processing DBsManaging the evolving state of an IT system

Complex Queries Map/Reduce

Graphs

Extensibility

Key/Value

Column-Stores

Documents

Massively Distributed

Structured Data

NoSQL Map

10

Page 11: ArangoDB

11

Transaction Processing DBsManaging the evolving state of an IT system

Analytic Processing DBs

Map/Reduce

Graphs

Extensibility

Key/Value

Column-Stores

Complex Queries

Documents

Massively Distributed

Structured Data

Another NoSQL Map

Page 12: ArangoDB

Convenient querying

Different scenarios require different access methods:

‣ Query a document by its unique id / key:

GET /_api/document/users/12345

‣ Query by providing an example document:

PUT /_api/simple/by-example { "name": "Jan", "age": 38 }

‣ Query via AQL: FOR user IN users FILTER user.active == true RETURN { name: user.name }

‣ Graph Traversals und JS for your own traversals

‣ JS Actions for “intelligent” DB request

12

Page 13: ArangoDB

Why another query language?

13

‣ Initially, we implemented a subset of SQL's SELECT

‣ It didn't fit well

‣ UNQL addressed some of the problems

‣ Looked dead

‣ No working implementations

‣ XQuery seemed quite powerful

‣ A bit too complex for simple queries

‣ JSONiq wasn't there when we started

Page 14: ArangoDB

Other Document Stores

‣ MongoDB uses JSON/BSON as its “query language”

‣ Limited

‣ Hard to read & write for more complex queries

‣ Complex queries, joins and transactions not possible

‣ CouchDB uses Map/Reduces

‣ It‘s not a relational algebra, and therefore hard to generate

‣ Not easy to learn

‣ Complex queries, joins and transactions not possible

14

Page 15: ArangoDB

Why you may want a more expressive query language

15

Source: http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/

users

friends

commenter

liker

many

many

many

many

one

one

posts

comments

likes

Page 16: ArangoDB

users

friends

commenter

liker

many

many

many

many

one

one

posts

comments

likes

Why you may want a more expressive query language

16

‣ Model it as you would in a SQL database

‣ comments gets a commenter_id – then do a join

Page 17: ArangoDB

users

friends

commenter

liker

many

many

many

many

one

one

posts

comments

likes

Why you may want a more expressive query language

17

‣ Model it as you would in a document store

‣ posts embed comments as an array

Page 18: ArangoDB

users

friends

commenter

liker

many

many

many

many

one

one

posts

comments

likes

Why you may want a more expressive query language

18

‣ Model it as you would in a graph database

‣ users as nodes, friendships as edges

Page 19: ArangoDB

ArangoDB Query Language (AQL)

19

‣ We came up with AQL mid-2012

‣ Declarative language, loosely based on the syntax of XQuery

‣ Other keywords than SQL so it's clear that the languages are different

‣ Implemented in C and JavaScript

Page 20: ArangoDB

Example for Aggregation

‣ Retrieve cities with the number of users:

FOR u IN users COLLECT city = u.city INTO g RETURN { "city" : city, "numUsersInCity": LENGTH(g) }

20

Page 21: ArangoDB

Example for Graph Query

‣ Paths:

FOR u IN users LET userRelations = ( FOR p IN PATHS( users, relations, "OUTBOUND" ) FILTER p._from == u._id RETURN p ) RETURN { "user" : u, "relations" : userRelations }

21

Page 22: ArangoDB

Extendable through JS

‣ JavaScript enriches ArangoDB

‣ Multi Collection Transactions

‣ Building small and efficient Apps - Foxx App Framework

‣ Individually Graph Traversals

‣ Cascading deletes/updates

‣ Assign permissions to actions

‣ Aggregate data from multiple queries into a single response

‣ Carry out data-intensive operations

‣ Help to create efficient Push Services - in the near Future

22

Page 23: ArangoDB

Action Server - a little Application Server

‣ ArangoDB can answer arbitrary HTTP requests directly

‣ You can write your own JavaScript functions (“actions”) that will be executed server-side

‣ Includes a permission system

!

➡You can use it as a database or as a combined database/app server

23

Page 24: ArangoDB

‣ Single Page Web Applications

‣ Native Mobile Applications

‣ ext. Developer APIs

APIs - will become more & more important

24

Page 25: ArangoDB

ArangoDB Foxx

‣ What if you could talk to the database directly?

‣ It would only need an API.

‣ What if we could define this API in JavaScript?

!!!!!!

‣ ArangoDB Foxx is streamlined for API creation – not a jack of all trades

‣ It is designed for front end developers: Use JavaScript, which you already know (without running into callback hell)

25

/\ (~( ) ) /\_/\ ( _-----_(@ @) ( \ / /|/--\|\ V " " " "

Page 26: ArangoDB

Foxx - Simple Example

26

Foxx = require("org/arangodb/foxx"); !controller = new Foxx.Controller(appContext); !controller.get("/users ", function(req, res) { res.json({ hello: }); });

req.params("name");

/:name

Page 27: ArangoDB

Foxx - More features

‣ Full access to ArangoDB‘s internal APIs:

‣ Simple Queries

‣ AQL

‣ Traversals

‣ Automatic generation of interactive documentation

‣ Models and Repositories

‣ Central repository of Foxx apps for re-use and inspiration

‣ Authentication Module

27

Page 28: ArangoDB

High performance & space efficiency

RAM is cheap, but it's still not free and data volume is growing fast. Requests volumes are also growing. So performance and space efficiency are key features of a multi-purpose database.

!

‣ ArangoDB supports automatic schema recognition, so it is one of the most space efficient document stores.

‣ It offers a performance oriented architecture with a C database core, a C++ communication layer, JS and C++ for additional functionalities.

‣ Performance critical points can be transformed to C oder C++.

‣ Although ArangoDB has a wide range of functions, such as MVCC real ACID, schema recognition, etc., it can compete with popular stores documents.

28

Page 29: ArangoDB

Space Efficiency

‣ Measure the space on disk of different data sets

‣ First in the standard config, then with some optimization

‣ We measured a bunch of different tasks

29

Page 30: ArangoDB

Store 50,000 Wiki Articles

30

0 MB

500 MB

1000 MB

1500 MB

2000 MB

ArangoDB CouchDB MongoDB

NormalOptimized

http://www.arangodb.org/2012/07/08/collection-disk-usage-arangodb

Page 31: ArangoDB

3,459,421 AOL Search Queries

31

0 MB

550 MB

1100 MB

1650 MB

2200 MB

ArangoDB CouchDB MongoDB

NormalOptimized

http://www.arangodb.org/2012/07/08/collection-disk-usage-arangodb

Page 32: ArangoDB

Performance: Disclaimer

‣ Always take performance tests with a grain of salt

‣ Performance is very dependent on a lot of factors including the specific task at hand

‣ This is just to give you a glimpse at the performance

‣ Always do your own performance tests (and if you do, report back to us :) )

‣ But now: Let‘s see some numbers

32

Page 33: ArangoDB

Execution Time: Bulk Insert of 10,000,000 documents

33

ArangoDB CouchDB MongoDB

http://www.arangodb.org/2012/09/04/bulk-inserts-mongodb-couchdb-arangodb

Page 34: ArangoDB

Conclusion from Tests

‣ ArangoDB is really space efficient

‣ ArangoDB is “fast enough”

‣ Please test it for your own use case

34

Page 35: ArangoDB

Easy to use

‣ Easy to use admin interface

‣ Simple Queries for simple queries, AQL for complex queries

‣ Simplify your setup: ArangoDB only – no Application Server etc. – on a single server is sufficient for some use cases

‣ You need graph queries or key value storage? You don't need to add another component to the mix.

‣ No external dependencies like the JVM – just install ArangoDB

‣ HTTP interface – use your load balancer

35

Page 36: ArangoDB

Admin Frontend Dashboard

36

Page 37: ArangoDB

Admin Frontend Collections & Documents

37

Page 38: ArangoDB

Admin Frontend Graph Explorer

38

Page 39: ArangoDB

Admin Frontend AQL development

39

Page 40: ArangoDB

Admin Frontend complete V8 access

40

Page 41: ArangoDB

ArangoShell

41

Page 42: ArangoDB

Join the growing community

42

They are working on geo index, full text search and many APIs: Ruby, Python, PHP, Java, Clojure, ...

Page 43: ArangoDB

ArangoDB.explain()

{ "type": "2nd generation NoSQL database", "model": [ "document", "graph", "key-value" ], "openSource": true, "license“: "apache 2", "version": [ "1.3 stable", "1.4 alpha" ], "builtWith": [ "C", "C++", "JS" ], "uses": [ "Google V8" ], "mainFeatures": [ "Multi-Collection-Transaction", "Foxx API Framework", "ArangoDB Query Language", "Various Indexes", "API Server", "Automatic Schema Recognition" ]

}

43