Open Source DC/OS: The modern way to run a distributed database

The mission of ArangoDB is to simplify the complexity of data work. ArangoDB is a distributed native multi-model NoSQL database that supports JSON documents, graphs and key-value pairs in one database engine with one query language. The cluster management is based on Apache Mesos, a battle-hardened technology. With the launch of DC/OS by a community of more than 50 companies all ArangoDB users can easily scale.

Just a little while ago setup, management, and maintenance of a database cluster was just a world of pain. Everybody who has put effort into getting automatic failover to work or who updated their database cluster know what I am talking about. Many of us may have experienced calls at 4 am in the morning notifying us that something within the cluster just went bad. Say hello to the Fail Whale. More »

Posted in Architecture, General | Leave a comment

Index Free Adjacency or Hybrid Indexes for Graph Databases

Some graph database vendors propagandize index-free adjacency for the implementation of graph models. There has been some discussion on Wikipedia about what makes a database a graph database. These vendors tried to push the definition of index-free adjacency as foundation of graph databases, but were stopped by the community.
More »

Posted in Architecture, Graphs | Leave a comment

Maintenance Release – ArangoDB 2.8.7

Our next maintenance release – ArangoDB 2.8.7 – comes with several bug fixes and improved Foxx backwards compatibility. Here is a list of changes:

  • optimized primary=>secondary failover

  • fix detection of TRUE for whole documents

  • expose the User-Agent http header since github requires it More »

Posted in Releases | Leave a comment

ArangoDB Bi-Weekly #46 | ArangoDB 2.8.6 Maintenance Release

Heading towards our 3.0 release we get to know more and more teams working on innovative stuff. Fraud detection, intellectual property management, business process management and much more. We learn so many things during those calls that we´d like to encourage even more of you to drop us a line about the things you are working on. What are the problems you want to solve and which features would help you do it? Drop a line to jan.stuecke@arangodb.com, we would be happy to learn more!

In the other news, we just released ArangoDB 2.8.6 and it’s available for download on our website. Our awesome community member, Mike Williamson from Ottawa, Canada, gave a talk at a local Graph user group. All of the participants enjoyed an interesting and interactive presentation. Have a look at the slides!

ArangoDB Releases

The ArangoDB 2.8.6 maintenance release is available for download. After fixing the last issues we are happy to release the next version of ArangoDB with these improvements:

  • arangosh can now execute JavaScript script files that contain a shebang in the first line of the file. This allows executing script files directly.
  • added missing reset of traversal state for nested traversals.

You can find a full list of changes in our change-log (2.8.6) or in the corresponding blog post. More »

Posted in Newsletter | Leave a comment

Maintenance Release – ArangoDB 2.8.6

The ArangoDB 2.8.6 maintenance release comes with improved arangosh and some general bug fixes. You can download the latest version from our download page.

  • arangosh can now execute JavaScript script files that contain a shebang in the first line of the file. This allows executing script files directly. Provided there is a script file /path/to/script.js with the shebang #!arangosh --javascript.execute:

    If the script file is made executable

    it can be invoked on the shell directly and use arangosh for its execution:

    This did not work in previous versions of ArangoDB, as the whole script contents (including the shebang) were treated as JavaScript code. Now shebangs in script files will be ignored for all files passed to arangosh’s --javascript.execute parameter. More »

Posted in Releases | Leave a comment

ArangoDB Bi-Weekly #45 | 2.8.4 Release, ArangoDB in Spartan-Mode & more

The fourth maintenance release of ArangoDB 2.8 is available for download. On the other note, one of our core developers, Michael Hackstein @mchacki , did a 6h long hands-on workshop for our community in Denmark, where participants learned how to build an “eBay-style” application using ArangoDB JavaScript Framework – Foxx.

Interested in having a workshop or meetup for your local community focussed on multi-model, cluster, graphs or Foxx? – Drop us a line! :) Don’t forget to mention your favourite topics.

ArangoDB Releases

The ArangoDB 2.8.4 Maintenance Release comes with some bug-fixes and Foxx improvements. It is now available for download. You can find a full list of changes in our change-log (2.8.4). More »

Posted in Newsletter | Leave a comment

How to put ArangoDB to Spartan-Mode

Most of us saw the fantastic movie 300 (I did it last night…again) or at least read the comics. 300 spartans barely wearing anything but achieving a lot. This little how-to will show you how to put ArangoDB into Spartan-Mode and thereby reduce memory-footprint and CPU usage.

Big thanks to Conrad from L.A. for his time and for giving us the impulse for this little how-to!

Background

Recently, we had a lot of cool talks with users who are new to ArangoDB or doing their PoC at the moment. Two topics came up several times. First ArangoDB’s memory footprint which is higher compared to some other DBs. We stated this already in our latest performance benchmark. The second issue is the CPU usage in standby mode. Users claimed 4-6% CPU usage when ArangoDB isn’t really doing anything.

First of all we use Google’s V8 engine for our JS framework Foxx. At first glance it might seem that V8 is memory thirsty but most of the memory is virtual memory and therefore does not actually fill up your physical RAM at all. If you don’t need V8 (not using Foxx) then you can run ArangoDB with less V8 contexts which reduces the memory usage significantly.

More »

Posted in Foxx, General, how to | Leave a comment

ArangoDB Bi-Weekly #44 | ArangoDB 2.8.3 Maintenance Release & more

The year seems to continue quite well for ArangoDB. We are super excited about our community becoming bigger and bigger… we might hit the magic 2.000 stargazers mark next month! 😉

You can now download the ArangoDB 2.8.3 maintenance release with several bug fixes and Foxx improvements. Our architect Max joined ThoughtWorks Cologne this week to show the participants indepth capabilities of ArangoDB. The slides are now available online.

ArangoDB Releases

The third maintenance release of ArangoDB 2.8 is available for download. After fixing the last issues we are happy to release the next version of ArangoDB with these improvements:

  • Deleting a Foxx service in the frontend should now always succeed even if the files no longer exist on the file system
  • Enhancements for AQL: added parentheses in AQL explain command output to correctly display precedence of logical and arithmetic operators

You can find a full list of changes in our change-log (2.8.3). More »

Posted in Newsletter | Leave a comment

Using GraphQL with NoSQL database ArangoDB

GraphQL is a query language created by Facebook for modern web and mobile applications as an alternative to REST APIs. Following the original announcement alongside Relay, Facebook has published an official specification and reference implementation in JavaScript. Recently projects outside Facebook like Meteor have also begun to embrace GraphQL.

Users have been asking us how they can try out GraphQL with ArangoDB. While working on the 2.8 release of our NoSQL database we experimented with GraphQL and published an ArangoDB-compatible wrapper for GraphQL.js. With the general availability of ArangoDB 2.8 you can now use GraphQL in ArangoDB using Foxx services (JavaScript in the database).

A GraphQL primer

GraphQL is a query language that bears some superficial similarities with JSON. Generally GraphQL APIs consist of three parts:

The GraphQL schema is implemented on the server using a library like graphql-sync and defines the types supported by the API, the names of fields that can be queried and the types of queries that can be made. Additionally it defines how the fields are resolved to values using a backend (which can be anything from a simple function call, a remote web service or accessing a database collection).

The client sends queries to the GraphQL API using the GraphQL query language. For web applications and JavaScript mobile apps you can use either GraphQL.js or graphql-sync to make it easier to generate these queries by escaping parameters.

The server exposes the GraphQL API (e.g. using an HTTP endpoint) and passes the schema and query to the GraphQL implementation, which validates and executes the query, later returning the output as JSON.

GraphQL vs REST

Whereas in REST APIs each endpoint represents a single resource or collection of resources, GraphQL is agnostic of the underlying protocols. When used via HTTP it only needs a single endpoint that handles all queries.

The API developer still needs to decide what information should be exposed to the client or what access controls should apply to the data but instead of implementing them at each API endpoint, GraphQL allows centralising them in the GraphQL schema. Instead of querying multiple endpoints, the client can pick and choose from the schema when defining the query and filter the response to only contain the fields it actually needs.

For example, the following GraphQL query:

could return a response like this:

whereas in a traditional REST API accessing the names of the friends would likely require additional API calls and filtering the responses to certain fields would either require proprietary extensions or additional endpoints.

GraphQL Demo Service

If you are running ArangoDB 2.8 you can install the Foxx service demo-graphql from the Store. The service provides a single HTTP POST endpoint /graphql that accepts well-formed GraphQL queries against the Star Wars data set used by GraphQL.js. More »

Posted in API, Foxx | Tagged , , | 9 Comments

Linenoise NG – a BSD licensed readline replacement with UTF8 support

For projects that are BSD or Apache 2 licensed, Linenoise (by Salvatore Sanfilippo) is a pretty small, portable GNU readline (GPL) replacement. Based on the work of Salvatore and 10gen Inc. this Linenoise NG implementation adds UTF8 and Windows support, uses a BSD license and can be used in any kind of program.

Features:

  • single-line and multi-line editing mode with the usual key bindings implemented
  • history handling
  • completion
  • BSD license source code
  • Only uses a subset of VT100 escapes (ANSI.SYS compatible)
  • UTF8 aware
  • support for Linux, MacOS and Windows

Linenoise NG deviates from Salvatore’s original goal to have a minimal readline replacement for the sake of supporting UTF8 and Windows. It deviates from 10gen Inc.’s goal to create a C++ interface to linenoise. This library uses C++ internally, but to the user it provides a pure C interface that is compatible with the original linenoise API.

Contributions welcome! See the repository on Github for details.

Posted in General | Tagged , | Leave a comment