Bulk Inserts: MongoDB vs CouchDB vs ArangoDB (Dec 2014)

More than two years ago, we compared the bulk insert performance of ArangoDB, CouchDB and MongoDB in a blog post.

The original blog post dates back to the times of ArangoDB 1.1-alpha. We have been asked several times to re-run the tests with the current versions of the databases. So here we go.

(more…)

More info...

ArangoDB 2.3.3 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.3 is available for download or via your favourite package manager.

v2.3.3 (2014-12-17)
-------------------

* fixed error handling in instantiation of distributed AQL queries, this 
  also fixes a bug in cluster startup with many servers

* issue #1185: parse non-fractional JSON numbers with exponent (e.g. `4e-261`)

* issue #1159: allow --server.request-timeout and --server.connect-timeout of 0
More info...

ArangoDB Query Builder: Simplifying Database Queries

The most powerful way to query your data in ArangoDB is by using ArangoDB’s own query language, AQL. In the past using AQL in your JavaScript code sadly would often require writing long, unwieldy strings. This made writing complex queries difficult and could often lead to subtle syntax errors or mistakes.

The ArangoDB Query Builder (AQB) is a JavaScript node packaged module that provides a fluid API for writing AQL queries in plain JavaScript. And if you’re using ArangoDB 2.3, the aqb module is already available to your Foxx applications. (more…)

More info...

Enhanced AQL in ArangoDB 2.4: Boost Query Performance

While on a retreat in Belgium, we found some spare time to work on improvements for AQL. These will be shipped with ArangoDB version 2.4, and are already available in the devel version for testing from now on.

Here’s a short overview of the improvements:

Collect with count

A common use case in query languages is to count the number of documents returned by a query. The AQL solution for this has been to use the LENGTH function and a subquery:

RETURN LENGTH((
  FOR doc IN collection 
    FILTER doc.someAttribute == someValue
    RETURN doc
  ))

This is quite long and probably unintuitive for people which have used SQL for years.

We therefore now allow using the following alternative version:

Read more on Jan’s Blog

More info...

Weekly Newsletter – December 11, 2014 | ArangoDB Updates

ArangoDB Release

We released ArangoDB 2.3.2 with some bug fixes. You can find a full list of changes in our change-log. Here is a short extract:

  • added AQL optimizer rule for removing INTO from a COLLECT statement if not needed
  • fixed missing makeDirectory when fetching a Foxx application from a zip file
  • fixed issue #1173: AQL Editor “Save current query” resets user password

ArangoDB related (Drivers & more)

  • ArangoPy 0.5.3 (Python): Sascha Häusler has updated the Python driver so it is compatible with 2.3
  • ansible-arangodb 1.0.0: Patrick Huber made an install helper, in this case Ansible-Galaxy. Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates

Documentation and Cookbook

  • Joins in AQL: How to join documents from several collections. Thanks to Frank Celler

(more…)

More info...

ArangoDB 2.3.2 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.3 is available for download or via your favourite package manager.

v2.3.2 (2014-12-09)
-------------------

* fixed issue #1173: AQL Editor "Save current query" resets user password

* fixed missing makeDirectory when fetching a Foxx application from a zip file

* put in warning about default changed: fixed issue #1134: Change the default endpoint to localhost

* fixed issue #1163: invalid fullCount value returned from AQL

* fixed range operator precedence 

* limit default maximum number of plans created by AQL optimizer to 256 (from 1024)

* make AQL optimizer not generate an extra plan if an index can be used, but modify
  existing plans in place

* fixed AQL cursor ttl (time-to-live) issue

  Any user-specified cursor ttl value was not honored since 2.3.0.

* fixed segfault in AQL query hash index setup with unknown shapes

* fixed memleaks

* added AQL optimizer rule for removing `INTO` from a `COLLECT` statement if not needed

* fixed issue #1131

  This change provides the `KEEP` clause for `COLLECT ... INTO`. The `KEEP` clause
  allows controlling which variables will be kept in the variable created by `INTO`.

* fixed issue #1147, must protect dispatcher ID for etcd
More info...

Building Hypermedia APIs with FoxxGenerator: ArangoDB Tutorial

This is the third and final part of Lucas blog series about building hypermedia APIs. In the previous part, we identified the needed transitions and collected some information about each of them. Begin with blog post one to get familiar with concepts on Hypermedia and JSON.

We can now describe the identified transitions using FoxxGenerator. To make the most common case simple, it defaults to the type follow. Therefore defining our four follow transitions is easy using FoxxGenerator:

generator.defineTransition('books');
generator.defineTransition('users');
generator.defineTransition('item');
generator.defineTransition('likes');

Note that at this point we are just defining the transitions, we are not adding them to the statemachine we are describing with the help of FoxxGenerator. In the case of creating a book, we need to add additional information. First of, it is a connect transition. Secondly we also need to define the parameters that this transition needs:

generator.defineTransition('createBook', {
  type: 'connect',

  parameters: {
    title: Joi.string()
  }
});

(more…)

More info...

Building Hypermedia APIs: Design Principles & Best Practices

This is the second blog post on building hypermedia APIs with the focus on API design. In part 1 Lucas describes the concept of links in JSON.

Imagine we have an API where people can like books and other people can then see, who likes a certain book. We want this API to be highly connected: We don’t want to look up URLs in a documentation, we want to follow links as we know it from the world wide web. All we want to do as the author of the API is give our users a single URL from which they can then follow links to all other resources. This is similar to the way we would do this with a website. Leonard Richardson and Mike Amundsen refer to this as the billboard URL for this reason: If you put this URL on some billboard, people know everything to get started with your API. (more…)

More info...

November Recap: ArangoDB Updates & Highlights

November 2014 was a month where our staff (and the cute ArangoDB Foxx) collected lot's of miles by visiting conferences, meetups and inspiring people in Europe, Africa, the US and Canada. If you missed a talk, there are plenty of slideshares / recordings available.

Release 2.3

Everyone who was not on a plane worked on ArangoDB 2.3 - our major release with a re-written query optimizer that optimizes execution plans, added/improved AQL functions and several performance improvements (@see Query Optimizer Tour by Jan). You can download ArangoDB 2.3.1 and start optimizing.

Frank added a docker file, so you might start shipping ArangoDB in a docker container as well.

Extensibility Framework Foxx

Our JavaScript extensibility framework Foxx (@see this new 2:45min ArangoDB Foxx intro by Lucas) also benefits from our 2.3 release, adding job queues and session handling for Foxx apps, plus 3 bundled apps for user management, session and authentication.

https://twitter.com/okiess/status/538656260577828864

With a blog post series started last week on Building Hypermedia APIs Lucas introduces the concepts of hypermedia in JSON. The second post will follow later today, explaining how to design a complete web API with a state-chart / state-machine. Finaly, the third post will describe how you can use the new FoxxGenerator (upcoming 2.4 release) to build your API.

Can't wait? Then use our newly introduced ArangoDB technical previews to get your hands on our latest features. The 2.4.1 technical preview can be used to test the FoxxGenerator feature.

ArangoDB Driver Support

We also worked on a new Java Driver which is fully documented and comes with an additional blog post on Graph handling with the Java Driver.

Great effort from the community leads to several more driver updates, improved documentation and ArangoDB 2.3 support. Have a look at the drivers page to see if your favorite programming language is one of the 16 supported.

Cookbook - Recipes to make with ArangoDB

We have introduced an ArangoDB Cookbook as a developers source that provides easy to use recipes for common tasks / problems to solve in or with ArangoDB. Recipes explain how-to start a docker container with ArangoDB, Fulldepth graph traversals or how to write your first Foxx app.

ArangoDB Cookbook

Please add your recipes via Github to extend this resource for relevant hands-on solutions!

Blog Posts

Several blog posts you might have missed last month:

#FoxxOnTour

This month we didn't only work on several releases, we also flew around the world visiting many conferences, user groups and awesome people, guarded by our lovely Foxx. Places we've been in November:

And here are some pictures of our Foxx having fun at different places all around the world, tagged with #FoxxOnTour:

More info...

ArangoDB 2.3.1 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.3 is available from our download page and through the package manager.

  • recreate password if missing during upgrade
  • fixed issue #1126
  • fixed non-working subquery index optimizations
  • do not restrict summary of Foxx applications to 60 characters
  • fixed display of “required” path parameters in Foxx application documentation
  • added more optimizations of constants values in AQL FILTER conditions
  • fixed invalid or-to-in optimization for FILTERs containing comparisons with boolean values
  • fixed replication of _graphs collection
  • added AQL list functions PUSH, POP, UNSHIFT, SHIFT, REMOVE_VALUES, REMOVE_VALUE, REMOVE_NTH and APPEND
  • added AQL functions CALL and APPLY to dynamically call other functions
  • fixed AQL optimizer cost estimation for LIMIT node
  • prevent Foxx queues from permanently writing to the journal even when server is idle
  • fixed AQL COLLECT statement with INTO clause, which copied more variables than v2.2 and thus lead to too much memory consumption. This deals with #1107.
  • fixed AQL COLLECT statement, this concerned every COLLECT statement, only the first group had access to the values of the variables before the COLLECT statement. This deals with #1127.
  • fixed some AQL internals, where sometimes too many items were fetched from upstream in the presence of a LIMIT clause. This should generally improve performance.
More info...

Get the latest tutorials,
blog posts and news: