ArangoDB 2.2.4 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.2 is available from the usual channels. v2.2.4 (2014-10-01) ——————-
* fixed accessing `_from` and `_to` attributes in `collection.byExample` and   `collection.firstExample`   These internal attributes were not handled properly in the mentioned functions, so   searching for them did not always produce documents
* fixed issue #1030: arangoimp 2.2.3 crashing, not logging on large Windows CSV file
* fixed issue #1025: Traversal not as expected in undirected graph
* fixed issue #1020   This requires re-introducing the startup option `–database.force-sync-properties`.   This option can again be used to force fsyncs of collection, index and database properties   stored as JSON strings on disk in files named `parameter.json`. Syncing these files after   a write may be necessary if the underlying storage does not sync file contents by itself   in a “sensible” amount of time after a file has been written and closed.   The default value is `true` so collection, index and database properties will always be   synced to disk immediately. This affects creating, renaming and dropping collections as   well as creating and dropping databases and indexes. Each of these operations will perform   an additional fsync on the `parameter.json` file if the option is set to `true`.   It might be sensible to set this option to `false` for workloads that create and drop a   lot of collections (e.g. test runs).   Document operations such as creating, updating and dropping documents are not affected   by this option.
* fixed issue #1016: AQL editor bug
* fixed issue #1014: WITHIN function returns wrong distance
* fixed AQL shortest path calculation in function `GRAPH_SHORTEST_PATH` to return   complete vertex objects instead of just vertex ids
* allow changing of attributes of documents stored in server-side JavaScript variables   Previously, the following did not work:

      var doc = db.collection.document(key);
      doc._key = "abc"; // overwriting internal attributes not supported
      doc.value = 123;  // overwriting existing attributes not supported 

Now, modifying documents stored in server-side variables (e.g. `doc` in the above case)   is supported. Modifying the variables will not update the documents in the database,   but will modify the JavaScript object (which can be written back to the database using   `db.collection.update` or `db.collection.replace`)

  • fixed issue #997: arangoimp apparently doesn’t support files >2gig on Windows   large file support (requires using `_stat64` instead of `stat`) is now supported on   Windows
More info...

ArangoDB 2.2.3 Release: Enhancements & Bug Fixes

This version is deprecated. Download the new version of ArangoDB

A maintenance release for ArangoDB 2.2 is available from the usual channels. v2.2.3 (2014-09-02) ——————-
* added `around` for Foxx controller
* added `type` option for HTTP API `GET /_api/document?collection=…` This allows controlling the type of results to be returned. By default, paths to documents will be returned, e.g.

[
        `/_api/document/test/mykey1`,
        `/_api/document/test/mykey2`,
        ...
      ]

To return a list of document ids instead of paths, the `type` URL parameter can be set to `id`:

    <pre>[
    `test/mykey1`,
    `test/mykey2`,
    ...
  ]

To return a list of document keys only, the `type` URL parameter can be set to `key`:

    <pre>[
    `mykey1`,
    `mykey2`,
    ...
  ]
*   properly capitalize HTTP response header field names in case the \`x-arango-async\` HTTP header was used in a request.
*   fixed several documentation issues
*   speedup for several general-graph functions, AQL functions starting with \`GRAPH_\` and traversals</ul>
More info...

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...

Get the latest tutorials,
blog posts and news: