Lucas Michael at FrOSCon: ArangoDB Community Event

Like every year, the ArangoDB team visited the FrOSCon. FrOSCon is the yearly Free and Open Source conference in St. Augustin, a small city near Cologne where the ArangoDB headquarters are. This year two talks were given by us, one by Michael and one by me, Lucas.

Michael gave a talk about “Multi-Model NoSQL Databases” and gave an introduction to Polyglot persistence and NoSQL. He also co-organized the JavaScript track of the conference with topics ranging from Angular JS to Property-based testing.
If you missed his talk, you can watch it here:
(more…)

More info...

Documentation Review & Roadmap: ArangoDB Updates

We want to present you our growing documentation. A few weeks ago we published the new documentation with a completely new look and a far better structure than before.

Since than we fixed some small issues and rewrote some of the sections. In addition you can fold the code examples for a better overview. Now these code examples will be generated before the release of a new documentation. Because of that the code will be accurate. Now you have the possibility to download .epub or .mobi for your ebook-reader. This way you can explore ArangoDB comfortable on a trip even if you have no internet.

The foundation of our new documentation is build and we think it will help you to understand ArangoDB and its functions. Of course there are some plans for the near future to make our documentation more extensive.

We want to make the documentation even more clearer. So you can find everything you desire as soon as possible. It is planned to add an extra subchapter in most of the chapters with a list of all functions. This way you have a better overview about all functions with a brief explanation. With this list you don’t have to scroll through a whole chapter to find a specific function.

(more…)

More info...

ArangoDB 2.2.2 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release of ArangoDB 2.2 is available via the package manager or from our download page.

v2.2.2 (2014-08-08)


  • allow storing non-reserved attribute names starting with an underscore Previous versions of ArangoDB parsed away all attribute names that started with an underscore (e.g. `_test`, `_foo`, `_bar`) on all levels of a document (root level and sub-attribute levels). While this behavior was documented, it was unintuitive and prevented storing documents inside other documents, e.g.:
{
        "_key" : "foo",
        "_type" : "mydoc",
        "references" : [
          {
            "_key" : "something",
            "_rev" : "...",
            "value" : 1
          },
          { 
            "_key" : "something else",
            "_rev" : "...",
            "value" : 2
          }
        ]
      }

In the above example, previous versions of ArangoDB removed all attributes and sub-attributes that started with underscores, meaning the embedded documents would lose some of their attributes. 2.2.2 should preserve such attributes, and will also allow storing user-defined attribute names on the top-level even if they start with underscores (such as `_type` in the above example).

  • fix conversion of JavaScript String, Number and Boolean objects to JSON. Objects created in JavaScript using `new Number(…)`, `new String(…)`, or `new Boolean(…)` were not converted to JSON correctly.
  • fixed a race condition on task registration (i.e. `require(“org/arangodb/tasks”).register()`) this race condition led to undefined behavior when a just-created task with no offset and no period was instantly executed and deleted by the task scheduler, before the `register` function returned to the caller.
  • changed run-tests.sh to execute all suitable tests.
  • switch to new version of gyp
  • fixed upgrade button
More info...

ArangoDB 2.2.1 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.2 is available. It will fix the performance problems encountered with the new graph module plus

v2.2.1 (2014-07-24)

  • fixed issue with –check-version: when creating a new database the check failed
  • issue #947 Foxx applicationContext missing some properties
  • added startup option `–wal.suppress-shape-information` Setting this option to `true` will reduce memory and disk space usage and require less CPU time when modifying documents or edges. It should therefore be turned on for standalone ArangoDB servers. However, for servers that are used as replication masters, setting this option to `true` will effectively disable the usage of the write-ahead log for replication, so it should be set to `false` for any replication master servers. The default value for this option is `false`.
  • added optional `ttl` attribute to specify result cursor expiration for HTTP API method `POST /_api/cursor` The `ttl` attribute can be used to prevent cursor results from timing out too early.
  • (reported by Christian Neubauer): The problem was that in Google’s V8, signed and unsigned chars are not always declared cleanly. so we need to force v8 to compile with forced signed chars which is done by the Flag: -fsigned-char at least it is enough to follow the instructions of compiling arango on rasperry and add “CFLAGS=’-fsigned-char'” to the make command of V8 and remove the armv7=0
  • Fixed a bug with the replication client. In the case of single document transactions the collection was not write locked.
More info...

New feature: Multi Collection Graphs

This version is deprecated. Download the new version of ArangoDB

With the 2.2 release we proudly announce that we now offer the feature of multi collection graphs. This allows you to group an arbitrary set of ArangoDB collections into one graph. In order to do this grouping you execute the following steps in arangosh or Foxx: 1. Require the general-graph module and create a graph.

var graph_module = require("org/arangodb/general-graph");
var graph = graph._create("myGraph");
  1. Add collections to be used as vertex collections. If the collections are not yet created, ArangoDB will create them for you.
graph._addVertexCollection("person");
graph._addVertexCollection("publication");
graph._addVertexCollection("university");
graph._addVertexCollection("company");
  1. Create edge definitions between your vertex collections. These definitions create edge collections and allow you to store edges where source and target vertices come from the collections written in the definition. If you give vertex collections unknown to the graph they will be added to the graph. (more…)
More info...

ArangoDB 2.2.0 Released: Explore New Features & Enhancements

This version is deprecated. Download the new version of ArangoDB

We are happy to announce the release of 2.2.0. All the open issue mentioned in the beta release are now fixed.

Features and Improvements The following list shows in detail which features have been added or improved in ArangoDB 2.2. ArangoDB 2.2 also contains several bugfixes that are not listed here.

AQL improvements

Data modification AQL queries Up to including version 2.1, AQL supported data retrieval operations only. Starting with ArangoDB version 2.2, AQL also supports the following data modification operations:

  • INSERT: insert new documents into a collection
  • UPDATE: partially update existing documents in a collection
  • REPLACE: completely replace existing documents in a collection
  • REMOVE: remove existing documents from a collection

(more…)

More info...

Modifying AQL

ArangoDB comes with a powerful query language, called AQL. It combines all the different aspects in any easy-to-use query language. You can use joins as in SQL or graph queries as in Cypher. However, up to now it only supported read-queries.

FOR u IN users 
  FOR c IN cities 
    FILTER u.zip == c.zip 
    RETURN { 'name': u.name, 'city': c.name }

Allows you to join the name of city a persons lives in. If you want to follow the social graph and mix in the neighbors, simply add a graph query.

FOR u IN users
  FOR c IN cities
    FILTER u.zip == c.zip
    RETURN {
      'name': u.name,
      'city': c.name, 
      'knows': GRAPH_NEIGHBORS('social', u)[*].vertex.name
    }

(more…)

More info...

Hate OpenSSL? Get Started with LibreSSL | ArangoDB Blog

ArangoDB has an HTTP interface to talk to its clients. Sometimes people want to secure this connection and use SSL or TLS instead. That is where we are using OpenSSL. It provides all the methods to implemented HTTPS on top of an HTTP server. It worked well and the corresponding code is only some 300 lines of C++ code. The biggest obstacle was the documentation. You can basically only learn from examples. That’s what we did. However, we finally encountered a bizarre bug. ArangoDB uses a number of threads to handle I/O in an asynchronous manner. The underlying library for I/O is libev. We span three threads by default each with its own event loop. With HTTP everything is working fine and even HTTPS was no problem.

Until we made a mistake during testing. We started ArangoDB as HTTPS server and ran our unittests. Everything showed green until we connected with an HTTP client to the HTTPS port by accident. The client could not connect and returned an error message – as expected. Meanwhile the unittests started to fail for a few seconds and then recovered. What! This is a completely different socket connection. How is it possible that one connection influences the other?

First idea: We managed to somehow mangle the sockets. So we started to print out file descriptors for accept, read and write, close. As there are a lot of unittests, the output is quite messy. But after hours of debugging, we convinced yourself that everything looked fine.
(more…)

More info...

ArangoDB 2.2.0 Beta: Try Out Exciting New Features!

This version is deprecated. Download the new version of ArangoDB

We are proud to announce the beta release of ArangoDB 2.2. It is a major step forward, improving the usability of AQL and graphs a lot. As always, a lot of small improvements are incorporated into your favourite NoSQL database – we will list them in a separated blog entry. However, the three major improvements are

  • a new and improved graph module
  • modifying AQL
  • a true write-a-head log

While the latter is a big step on the way to automatic failover and synchronous replication, it is mostly hidden from the user. A more detailed description will follow in the next days. The new graph module is directly visible and intended to be used by you. Graphs are much more flexible now. You can easily use more than one vertex collection to group your vertex documents into “classes”. For example, for a bipartite graph, use two vertex collections – one for each part. You can even group your edges. Use one collection for each type (“friendship” and “alliance”). Or what about Graphs-on-Graphs! Why on earth would you like to do that? Well, consider a street map, where the junctions are vertices, the edges are street segments between junctions. Now put another graph on top, to model streets as segments – again more information is coming its way. The graph viewer works with these extended graphs and even allows you to explore sharded graphs with billions of nodes. (more…)

More info...

ArangoDB 2.1.2 & 2.0.9 Releases: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

New maintenance releases of ArangoDB are available from our download page or via your favourite package manager.

ArangoDB 2.1.2

v2.1.2 (2014-06-15)

  • fixed check-version for empty directory
  • moved try/catch block to the top of routing chain

ArangoDB 2.0.9

v2.0.9 (2014-06-06)

  • fixed issue #883: arango 2.1 – when starting multi-machine cluster, UI web does not change to cluster overview
More info...

Get the latest tutorials,
blog posts and news: