• JSON: ArangoDB uses
JSON as a default storage format, but internally it uses ArangoDB VelocyPack – a fast and compact binary format for serialization and storage. ArangoDB can natively store a nested JSON object as a data entry inside a collection. Therefore, there is no need to disassemble the resulting JSON objects. Thus, the stored data would simply inherit the tree structure of the JSON data. • Predictable performance: ArangoDB is written mainly in C++ and manages its own memory to avoid unpredictable performance arising from
garbage collection. • Scaling: ArangoDB provides
scaling through clustering. • Reliability: ArangoDB provides datacenter-to-datacenter replication. •
Kubernetes: ArangoDB runs on Kubernetes, including cloud-based Kubernetes services Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE), and
Microsoft Azure Kubernetes Service (AKS). • Microservices: ArangoDB provides integration with native
JavaScript microservices directly on top of the DBMS using the Foxx framework. • Multiple query languages: The database has its own query language, AQL (ArangoDB Query Language), and also provides
GraphQL to write flexible native web services directly on top of the DBMS. • Search: ArangoDB's search engine combines Boolean retrieval capabilities with generalized ranking components allowing for data retrieval based on a precise
vector space model. • Pregel algorithm: Pregel is a system for large scale graph processing. Pregel is implemented in ArangoDB and can be used with predefined algorithms, e.g.
PageRank, Single-Source Shortest Path and Connected components. • Transactions: ArangoDB supports user-definable transactions. Transactions in ArangoDB are atomic, consistent, isolated, and durable (
ACID), but only if data is not sharded. AQL (ArangoDB Query Language) is the
SQL-like query language used in ArangoDB. It supports
CRUD operations for both documents (nodes) and edges, but it is not a
data definition language (DDL). AQL does support
geospatial queries. AQL is
JSON-oriented: // Return every document in a collection FOR doc IN collection RETURN doc // Count the number of documents in a collection FOR doc IN collection COLLECT WITH COUNT INTO length RETURN length // Add a new document into our collection INSERT { _key: "john", name: "John", age: 45 } INTO collection // Update document with key of “john” to have age 46. UPDATE { _key: "john", age: 46 } IN collection // Add an attribute numberOfLogins for all users with status active: FOR u IN users FILTER u.active == true UPDATE u WITH { numberOfLogins: 0 } IN users == Editions ==