Contenu connexe Similaire à ArangoDB - Using JavaScript in the database (20) Plus de ArangoDB Database (20) ArangoDB - Using JavaScript in the database3. 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!
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
6. 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
7. 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
9. 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
10. 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
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 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
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 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
15. 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
16. 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
18. 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
19. 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
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 – 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
23. 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
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 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
26. Roadmap
MVCC / ACID transactions
Triggers
Synchronous and asynchronous replication
www.arangodb.org © j.steemann@triagens.de
27. 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