---
title: COLLECTing With a Hash Table - ArangoDB
description: ArangoDB 2.6 will feature an alternative hash implementation of the AQL COLLECT operation. The new implementation can speed up some AQL queries that can not exploit indexes on the COLLECT group criteria. This blog post provides a preview of the feature and shows some nice performance improvements. It also explains the COLLECT-related optimizer parts and…
---

ArangoDB 3.12 Product Release Announcement! Read the blog for details. [Read Blog](https://arangodb.com/2024/03/arangodb-3-12-performance-for-all-your-data-models/)

[![logo](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/logo.png?width=301&height=50&name=logo.png "logo")](https://arango.ai)

### Why Graph

[The Rise of Graph](https://arangodb.com/the-rise-of-graph/)

[The Graph ML Gamechanger](https://arangodb.com/the-graph-ml-gamechanger/)

[Consolidate to Graph](https://arangodb.com/graph-vs-relational/)

[Graph DB Basics](https://arangodb.com/graph-database/)

### Products

[Managed Graph DB](https://arangodb.com/arangograph-managedgraphdb/)

[Self-Managed Graph DB](https://arangodb.com/arangograph-selfmanaged/)

[Managed Graph ML](https://arangodb.com/managed-ml-graph/)

[Community Edition](https://arangodb.com/community-server/)

[Compare Products](https://arangodb.com/subscriptions/)

### Solutions

Use Cases

Industries

Solution Accelerators

- [Cyber/Threat Mgmt](https://arangodb.com/solutions/use-cases/cyber-threat-management/)
- [Fraud Detection](https://arangodb.com/solutions/use-cases/fraud-detections/)
- [Supply Chain](https://arangodb.com/solutions/use-cases/supply-chain/)
- [Network Asset Management](https://arangodb.com/solutions/use-cases/network-asset-management/)
- [Customer & Patient 360](https://blog.arangodb.com/solutions/use-case/customer-and-patient-360/)
- [Recommendations](https://arangodb.com/solutions/use-cases/recommendations/)
- [Case Management](https://blog.arangodb.com/solutions/use-case/case-management/)
- [Geospatial Analysis](https://arangodb.com/solutions/use-cases/geospatial/)
- [Master Data Mgmt](https://arangodb.com/solutions/use-cases/master-data-management/)

- [Software & Technology](https://arangodb.com/arangodb-for-software-tech/)
- [Financial Services](https://arangodb.com/arangodb-for-financial-services/)
- [Tele Communication](https://arangodb.com/telecommunications-and-network/)
- [E-commerce](https://arangodb.com/arangodb-for-e-commerce/)
- [Healthcare](https://arangodb.com/arangodb-for-healthcare/)
- [Government](https://arangodb.com/arangodb-for-government/)
- [Aerospace & Defence](https://arangodb.com/arangodb-for-aerospace-defense/)
- [Manufacturing](https://arangodb.com/arangodb-for-manufacturing/)

- [Enterprise Knowledge Graphs](https://arangodb.com/resources/white-papers/enterprise-knowledge-graphs/)
- [Entity Resolution](https://arangodb.com/entity-resolution/)
- [Traceability/Lineage](https://arangodb.com/traceability-and-lineage/)
- [Contexual Relevance](https://arangodb.com/contextual-relevance/)

### Developers

Capabilities

Integrations

Differentiators

- [Graph Traversals](https://arangodb.com/graph-traversals/)
- [Multi-Model DB](https://arangodb.com/multi-model-db/)
- [LLM + Knowledge Graph](https://arangodb.com/llm-knowledge-graph/)
- [Graph ML](https://arangodb.com/managed-ml-graph/)
- [Advanced Geospatial](https://arangodb.com/advanced-geospatial/)
- [Document Store](https://arangodb.com/document-store/)
- [Search Engine](https://arangodb.com/full-text-search-engine/)
- [Security & Compliance](https://arangodb.com/security/)
- [Data Masking](https://arangodb.com/Data-masking/)
- [Key/Value DB](https://arangodb.com/integrated-key-value-support/)

- [Clients / Languages](https://arangodb.com/clients-languages/)
- [BI Tools](https://arangodb.com/bi-tools-support/)
- [Containers](https://arangodb.com/container-support/)
- [Community driven](https://arangodb.com/community-driven/)

- [Model Flexibility](https://arangodb.com/model-flexibility/)
- [Graph Scalability](https://arangodb.com/graph-scalability/)
- [Performance at Scale](https://arangodb.com/performance-at-scale/)
- [Highest Availability](https://arangodb.com/highest-availability/)
- [Unified Query Language](https://arangodb.com/unified-query-languageaql/)
- [Graph + Native Document](https://arangodb.com/graph-document/)
- [Graph + Native Search](https://arangodb.com/graph-search/)
- [Cost Effective](https://arangodb.com/cost-effective-development-operation/)
- [Full Geospatial](https://arangodb.com/full-geospatial/)

### Customers

[All Case Studies](https://arangodb.com/solutions/solutions-customers/#all)

[Government & Cyber](https://arangodb.com/solutions/solutions-customers/#Government-Cyber)

[Manufacturing & Supply Chain](https://arangodb.com/solutions/solutions-customers/#Manufacturing-Supply-Chain)

[Healthcare & Science](https://arangodb.com/solutions/solutions-customers/#Healthcare-Science)

[Retail & Commerce](https://arangodb.com/solutions/solutions-customers/#Retail-Commerce)

[Technology](https://arangodb.com/solutions/solutions-customers/#Technology)

[Education](https://arangodb.com/solutions/solutions-customers/#Education)

[Telco](https://arangodb.com/solutions/solutions-customers/#Telco)

[Financial Services](https://arangodb.com/solutions/solutions-customers/#Financial-Services)

### Learn

[Documentation](https://docs.arangodb.com/stable/)

[Developer Hub](https://developer.arangodb.com/)

[ArangoDB University](https://university.arangodb.com/)

[Blog](https://arangodb.com/blog/)

[Certification](https://arangodb.com/learn/certification/)

[Community](https://arangodb.com/community/)

[Events](https://arangodb.com/events/)

[Resources](https://arangodb.com/resources/)

[Training Center](https://arangodb.com/learn/)

### Company

[About Us](https://arangodb.com/about-us/)

[Team](https://arangodb.com/about-arangodb/)

[Partners](https://arangodb.com/partners/)

[News](https://arangodb.com/news/)

[Careers](https://arangodb.applytojob.com/apply)

### Pricing

- Why Graph 
    - [The Rise of Graph](https://arangodb.com/the-rise-of-graph/)
    - [The Graph ML Gamechanger](https://arangodb.com/the-graph-ml-gamechanger/)
    - [Consolidate to Graph](https://arangodb.com/graph-vs-relational/)
    - [Graph DB Basics](https://arangodb.com/graph-database/)
- Products 
    - [Managed Graph DB](https://arangodb.com/arangograph-managedgraphdb/)
    - [Self-Managed Graph DB](https://arangodb.com/arangograph-selfmanaged/)
    - [Managed Graph ML](https://arangodb.com/managed-ml-graph/)
    - [Community Edition](https://arangodb.com/community-server/)
    - [Compare Products](https://arangodb.com/subscriptions/)
- Solutions 
    - Use Cases 
          - [Cyber/Threat Mgmt](https://arangodb.com/solutions/use-cases/cyber-threat-management/)
          - [Fraud Detection](https://arangodb.com/solutions/use-cases/fraud-detections/)
          - [Supply Chain](https://arangodb.com/solutions/use-cases/supply-chain/)
          - [Network Asset Management](https://arangodb.com/solutions/use-cases/network-asset-management/)
          - [Customer & Patient 360](https://arangodb.com/solutions/use-cases/customer-and-patient-360/)
          - [Recommendations](https://arangodb.com/solutions/use-cases/recommendations/)
          - [Case Management](https://arangodb.com/solutions/use-cases/case-management/)
          - [Geospatial Analysis](https://arangodb.com/solutions/use-cases/geospatial/)
          - [Master Data Mgmt](https://arangodb.com/solutions/use-cases/master-data-management/)
    - Industries 
          - [Software & Technology](https://arangodb.com/arangodb-for-software-tech/)
          - [Financial Services](https://arangodb.com/arangodb-for-financial-services/)
          - [Tele Communication](https://arangodb.com/telecommunications-and-network/)
          - [E-commerce](https://arangodb.com/arangodb-for-e-commerce/)
          - [Healthcare](https://arangodb.com/arangodb-for-healthcare/)
          - [Government](https://arangodb.com/arangodb-for-government/)
          - [Aerospace & Defence](https://arangodb.com/arangodb-for-aerospace-defense/)
          - [Manufacturing](https://arangodb.com/arangodb-for-manufacturing/)
    - Solution Accelerators 
          - [Enterprise Knowledge Graphs](https://arangodb.com/resources/white-papers/enterprise-knowledge-graphs/)
          - [Entity Resolution](https://arangodb.com/entity-resolution/)
          - [Traceability/Lineage](https://arangodb.com/traceability-and-lineage/)
          - [Contexual Relevance](https://arangodb.com/contextual-relevance/)
- Customers 
    - [All Case Studies](https://arangodb.com/solutions/solutions-customers/#all)
    - [Government & Cyber](https://arangodb.com/solutions/solutions-customers/#Government-Cyber)
    - [Manufacturing & Supply Chain](https://arangodb.com/solutions/solutions-customers/#Manufacturing-Supply-Chain)
    - [Healthcare & Science](https://arangodb.com/solutions/solutions-customers/#Healthcare-Science)
    - [Retail & Commerce](https://arangodb.com/solutions/solutions-customers/#Retail-Commerce)
    - [Technology](https://arangodb.com/solutions/solutions-customers/#Technology)
    - [Education](https://arangodb.com/solutions/solutions-customers/#Education)
    - [Telco](https://arangodb.com/solutions/solutions-customers/#Telco)
    - [Financial Services](https://arangodb.com/solutions/solutions-customers/#Financial-Services)
- Learn 
    - [Documentation](https://docs.arangodb.com/stable/)
    - [Developer Hub](https://developer.arangodb.com/)
    - [ArangoDB University](https://university.arangodb.com/)
    - [Blog](https://arangodb.com/blog/)
    - [Certification](https://arangodb.com/learn/certification/)
    - [Community](https://arangodb.com/community/)
    - [Events](https://arangodb.com/events/)
    - [Resources](https://arangodb.com/resources/)
    - [Training Center](https://arangodb.com/learn/)
- Company 
    - [About Us](https://arangodb.com/about-us/)
    - [Team](https://arangodb.com/about-arangodb/)
    - [Partners](https://arangodb.com/partners/)
    - [News](https://arangodb.com/news/)
    - [Careers](https://arangodb.applytojob.com/apply)
- [Pricing](https://arangodb.com/download-major/pricing/)

[**Start Free** ArangoGraph Cloud](https://dashboard.arangodb.cloud/signup?acceptedTermsAndConditions=1)

[**Download Now** ArangoDB Enterprise](https://arangodb.com/download-arangodb-enterprise/)

![Vector-5](https://blog.arangodb.com/hubfs/Imported_Blog_Media/search.svg)

# COLLECTing With a Hash Table

 April 22, 2015

 Tags: [AQL](https://blog.arangodb.com/blog/topic/aql), [Query Language](https://blog.arangodb.com/blog/topic/query-language), [Performance](https://blog.arangodb.com/blog/topic/performance)

[Twitter](https://twitter.com/intent/tweet?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [Reddit](https://www.reddit.com/share?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [Yahoo](https://plus.google.com/share?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table%3Futm_medium%3Dsocial%26utm_source%3Dgoogle_plus)

![](https://blog.arangodb.com/hubfs/ArangoDB-Blog/clock.svg)Estimated reading time: 8 minutes

ArangoDB 2.6 will feature an alternative **hash** implementation of the AQL `COLLECT` operation. The new implementation can speed up some AQL queries that can not exploit indexes on the `COLLECT` group criteria.

This blog post provides a preview of the feature and shows some nice performance improvements. It also explains the `COLLECT`-related optimizer parts and how the optimizer will decide whether to use the new or the traditional implementation.

### Introduction to COLLECT

A quick recap: in AQL, the `COLLECT` operation can be used for grouping and optionally counting values.

Here’s an example, using flight data:

```
FOR flight IN flights
  COLLECT from = flight._from WITH COUNT INTO count
  RETURN { from: from, count: count }
```

This query will iterate over all documents in collection `flights`, and count the number of flights per different `_from` value (origin airport). The query result will contain only unique `from` values plus a counter for each:

```
[
  { "from" : "airports/ABE", "count" : 6205 },
  { "from" : "airports/ABQ", "count" : 39346 },
  { "from" : "airports/ACV", "count" : 362 },
  ...
  { "from" : "airports/YAP", "count" : 285 },
  { "from" : "airports/YKM", "count" : 879 },
  { "from" : "airports/YUM", "count" : 2275 }
]
```

As the `COLLECT` will group its result according to the specified group criteria (`flights._from` in the above query), it needs a way of figuring out to which group any input value does belong.

Before ArangoDB 2.6, there was a single method for determining the group. Starting with ArangoDB 2.6, the query optimizer can choose between two different `COLLECT` methods, the **sorted** method and the **hash** method.

### Sorted COLLECT method

The traditional method for determining the group values is the **sorted** method. It has been available in ArangoDB since the very start.

The sorted method of `COLLECT` requires its input to be sorted by the group criteria specified in the `COLLECT` statement. Because there is no guarantee that the input data are already sorted in the same way, the query optimizer will automatically insert a `SORT` statement into the query in front of the `COLLECT`. In case there is a sorted index present on the group criteria attributes, the optimizer may be able to optimize away the `SORT` again. If there is no sorted index present on the group criteria attributes, the `SORT` will remain in the execution plan.

Here is the execution plan for the above query using the **sorted** method of `COLLECT`. We can see the extra `SortNode` with id #7 being added by the optimizer in front of the `COLLECT`:

![execution-plan](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/collect-sorted.png?width=700&height=349&name=collect-sorted.png)

The **sorted** method of `COLLECT` is efficient because it can write out a group result whenever an input value will start a new group. Therefore it does not need to keep the whole `COLLECT` result in memory. The downside of using the sorted method is that it requires its input to be sorted, and that this requires adding an extra `SORT` for not properly sorted input.

### Hash COLLECT method

Since ArangoDB 2.6, the query optimizer can also employ the **hash** method for `COLLECT`. The hash method works by assigning the input values of the `COLLECT` to slots in a hash table. It does not require its input to be sorted. Because the entries in the hash table do not have a particular order, the query optimizer will add a post-`COLLECT` `SORT` statement. With this extra sort of the `COLLECT` result, the optimizer ensures that the output of the sorted `COLLECT` will be the same as the output of the hash `COLLECT`.

Here is the execution plan for the above query when using the **hash** method of `COLLECT`. Here we can see the extra `SortNode` with id #7 being added post-`COLLECT`:

![execution-plan](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/collect-hash.png?width=700&height=390&name=collect-hash.png)

The **hash** method is beneficial because it does not require sorted input and thus no extra `SORT` step in front. However, as the input is not sorted, it is never clear when a group is actually finished. The hash method therefore needs to build the whole `COLLECT` result in memory until the input is exhausted. Then it can safely write out all group results. Additionally, the result of the hash `COLLECT` is unsorted. Therefore the optimizer will add a post-`COLLECT` sort to ensure the result will be identical to a **sorted** `COLLECT`.

### Which method will be used when?

The query optimizer will always take the initial query plan and specialize its `COLLECT` nodes to using the **sorted** method. It will also add the pre-`COLLECT` `SORT` in the original plan.

In addition, for every `COLLECT` statement not using an `INTO` clause, the optimizer will create a plan variant that uses the **hash** method. In that plan variant, the post-`COLLECT` `SORT` will be added. Note that a `WITH COUNT INTO` is still ok here, but that using a regular `INTO` clause will disable the usage of the **hash** method:

```
FOR flight IN flights
  COLLECT from = flight._from INTO allFlights
  RETURN { from: from, flights: allFlights }
```

If more than one `COLLECT` method can be used for a query, the created plans will be shipped through the regular optimization pipeline. In the end, the optimizer will pick the plan with the lowest estimated total cost as it will do for all other queries.

The **hash** variant does not require an up-front sort of the `COLLECT` input, and will thus be preferred over the **sorted** method if the optimizer estimates many input elements for the `COLLECT` and cannot use an index to process them in already sorted order. In this case, the optimizer will estimate that post-sorting the result of the **hash** `COLLECT` will be more efficient than pre-sorting the input for the **sorted** `COLLECT`.

The main assumption behind this estimation is that the result of any `COLLECT` statement will contain at most as many elements as there are input elements to it. Therefore, the output of a `COLLECT` is likely to be smaller (in terms of rows) than its input, making post-sorting more efficient than pre-sorting.

If there is a sorted index on the `COLLECT` group criteria that the optimizer can exploit, the optimizer will pick the **sorted** method because thanks to the index it can optimize away the pre-`COLLECT` sort, leaving no sorts left in the final execution plan.

To override the optimizer decision, `COLLECT` statements now have an `OPTIONS` modifier. This modifier can be used to force the optimizer to use the **sorted** variant:

```
FOR flight IN flights
  COLLECT from = flight._from WITH COUNT INTO count OPTIONS { method: "sorted" }
  RETURN { from: from, count: count }
```

Note that specifying **hash** in `method` will not force the optimizer to use the **hash** method. The reason is that the **hash** variant cannot be used for all queries (only `COLLECT` statements without an `INTO` clause are eligible). If `OPTIONS` are omitted or any other method than `sorted` is specified, the optimizer will ignore it and use its regular cost estimations.

### Understanding execution plans

Which method is actually used in a query can found out by explaining it and looking at its execution plan.

A `COLLECT` is internally handled by an object called `AggregateNode`, so we have to look for that. In the above screenshots, the `AggregateNode`s are tagged with either **hash** or **sorted**. This can also be checked programatically by looking at the `aggregationOptions.method` attributes in the JSON result of an explain().

Here is some example code to extract this information, limited to the `AggregateNode`s of the query already:

```
var query = `
  FOR flight IN flights
  COLLECT from = flight._from WITH COUNT INTO count
  RETURN { from: from, count: count }
`;
var stmt = db._createStatement(query);
var plan = stmt.explain().plan;
plan.nodes.filter(function(node) {
  return node.type === 'AggregateNode';
});
```

For the above query, this will produce something like this:

```
[
  {
    "type" : "AggregateNode",
    ...
    "aggregationOptions" : {
      "method" : "hash"
    }
  }
]
```

Here we can see that the query is using the **hash** method.

### Optimizing away post-COLLECT sorts

If a query uses the **hash** method for a `COLLECT` but the sort order of the `COLLECT` result is irrelevant to the user, the user can provide a hint to the optimizer to remove the post-`COLLECT` sort.

This can be achieved by simplying appending a `SORT null` to the original `COLLECT` statement. Here we can see that this removes the post-`COLLECT` sort:

![execution-plan](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/collect-nosort.png?width=700&height=386&name=collect-nosort.png)

### Performance improvements

The improvements achievable by using the **hash** method instead of the **sorted** method obviously depend on whether there are appropriate indexes present for the group criteria. If an index can be exploited, the **sorted** method may be just fine. However, there are cases when no indexes are present, for example, when running arbitrary ad-hoc queries or when indexes are too expensive (indexes need to be updated on insert/update/remove and also will use memory).

Following are a few comparisons of the **sorted** and the **hash** methods in case no indexes can be used.

Here’s the setup for the test data. This generates 1M documents with both unique and repeating string and numeric values. For the non-unique values, we’ll use 20 different categories:

```
var test = db._create("test");
for (var i = 0; i < 1000000; ++i) {
  test.insert({
    uniqueNumber: i,
    uniqueString: String("test" + i),
    repeatingNumber: (i % 20),
    repeatingString: String("test" + (i % 20))
  });
}
```

Now let’s run the following query on the data and measure its execution time:

```
FOR v IN test
  COLLECT value = v.@attribute WITH COUNT INTO count
  RETURN { value: value, count: count }
```

The worst case is when the `COLLECT` will produce as many output rows as there are input rows. This will happen when using a unique attribute as the grouping criterion. We’ll run tests on both numeric and string values.

Here are the execution times for unique inputs. It can be seen that the **hash** method here will be beneficial if the post-`COLLECT` sort can be optimized away. As demonstrated above, this can be achieved by adding an extra `SORT null` after the `COLLECT` statement. If the post-`COLLECT` sort is not optimized away, it will make the hash method a bit more expensive than the **sorted** method:

```
collect method       @attribute                duration
-------------------------------------------------------
sorted               uniqueNumber               11.92 s
hash                 uniqueNumber               13.40 s
hash (sort null)     uniqueNumber               10.13 s
sorted               uniqueString               22.04 s
hash                 uniqueString               27.35 s
hash (sort null)     uniqueString               12.12 s
```

Now let’s check the results when we group on an attribute that is non-unique. Following are the results for numeric and string attributes with 20 different categories each:

```
collect method       @attribute                duration
-------------------------------------------------------
sorted               repeatingNumber             5.56 s
hash                 repeatingNumber             0.94 s
hash (sort null)     repeatingNumber             0.94 s
sorted               repeatingString            10.56 s
hash                 repeatingString             1.09 s
hash (sort null)     repeatingString             1.09 s
```

In these cases, the result of the `COLLECT` will be much smaller than its input (we’ll only get 20 result rows out instead of 1M). Therefore the post-`COLLECT` sort for the **hash** method will not make any difference, but the pre-`COLLECT` sort for the **sorted** method will still need to sort 1M input values. This is also the reason why the **hash** method is significantly faster here.

As usual, your mileage may vary, so please run your own tests.

[Twitter](https://twitter.com/intent/tweet?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [Reddit](https://www.reddit.com/share?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table) [Yahoo](https://plus.google.com/share?url=https://blog.arangodb.com/blog/2015/04/collecting-with-a-hash-table%3Futm_medium%3Dsocial%26utm_source%3Dgoogle_plus)

![Picture of Jan Steemann](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Authors/Jan-Steemann-100x100.webp)

 April 22, 2015 , [Jan Steemann](https://blog.arangodb.com/blog/author/jan-steemann)

After more than 30 years of playing around with 8 bit computers, assembler and scripting languages, Jan decided to move on to work in database engineering. Jan is now a senior C/C++ developer with the ArangoDB core team, being there from version 0.1. He is mostly working on performance optimization, storage engines and the querying functionality. He also wrote most of AQL (ArangoDB’s query language).

### Leave a Comment

 Tags

- [General](https://blog.arangodb.com/blog/topic/general)
- [Release](https://blog.arangodb.com/blog/topic/release)
- [Community](https://blog.arangodb.com/blog/topic/community)
- [Releases](https://blog.arangodb.com/blog/topic/releases)
- [Performance](https://blog.arangodb.com/blog/topic/performance)
- [Tutorial](https://blog.arangodb.com/blog/topic/tutorial)
- [Foxx](https://blog.arangodb.com/blog/topic/foxx)
- [AQL](https://blog.arangodb.com/blog/topic/aql)
- [API](https://blog.arangodb.com/blog/topic/api)
- [Newsletter](https://blog.arangodb.com/blog/topic/newsletter)
- [Cluster](https://blog.arangodb.com/blog/topic/cluster)
- [Graph](https://blog.arangodb.com/blog/topic/graph)
- [Graphs](https://blog.arangodb.com/blog/topic/graphs)
- [Documentation](https://blog.arangodb.com/blog/topic/documentation)
- [Javascript](https://blog.arangodb.com/blog/topic/javascript)
- [Query Language](https://blog.arangodb.com/blog/topic/query-language)
- [Architecture](https://blog.arangodb.com/blog/topic/architecture)
- [NoSQL](https://blog.arangodb.com/blog/topic/nosql)
- [Enterprise](https://blog.arangodb.com/blog/topic/enterprise)
- [Ruby](https://blog.arangodb.com/blog/topic/ruby)
- [RocksDB](https://blog.arangodb.com/blog/topic/rocksdb)
- [testing](https://blog.arangodb.com/blog/topic/testing)
- [ArangoML](https://blog.arangodb.com/blog/topic/arangoml)
- [Machine Learning](https://blog.arangodb.com/blog/topic/machine-learning)
- [Benchmark](https://blog.arangodb.com/blog/topic/benchmark)
- [Java](https://blog.arangodb.com/blog/topic/java)
- [driver](https://blog.arangodb.com/blog/topic/driver)
- [multi-model](https://blog.arangodb.com/blog/topic/multi-model)
- [geo](https://blog.arangodb.com/blog/topic/geo)
- [how to](https://blog.arangodb.com/blog/topic/how-to)
- [Drivers](https://blog.arangodb.com/blog/topic/drivers)
- [PHP](https://blog.arangodb.com/blog/topic/php)
- [Security](https://blog.arangodb.com/blog/topic/security)
- [nodejs](https://blog.arangodb.com/blog/topic/nodejs)
- [python](https://blog.arangodb.com/blog/topic/python)
- [ArangoSearch](https://blog.arangodb.com/blog/topic/arangosearch)
- [Kubernetes](https://blog.arangodb.com/blog/topic/kubernetes)
- [Presentation](https://blog.arangodb.com/blog/topic/presentation)
- [open-source](https://blog.arangodb.com/blog/topic/open-source)
- [Future-of-nosql](https://blog.arangodb.com/blog/topic/future-of-nosql)
- [GitHub](https://blog.arangodb.com/blog/topic/github)
- [ARM: Raspberry + Co.](https://blog.arangodb.com/blog/topic/arm-raspberry-co-)
- [Fraud Detection](https://blog.arangodb.com/blog/topic/fraud-detection)
- [Managed Service](https://blog.arangodb.com/blog/topic/managed-service)
- [arangosh](https://blog.arangodb.com/blog/topic/arangosh)
- [C++](https://blog.arangodb.com/blog/topic/c)
- [Cloud](https://blog.arangodb.com/blog/topic/cloud)
- [Conferences](https://blog.arangodb.com/blog/topic/conferences)
- [Data Science](https://blog.arangodb.com/blog/topic/data-science)
- [HTTP](https://blog.arangodb.com/blog/topic/http)
- [ML](https://blog.arangodb.com/blog/topic/ml)
- [Pregel](https://blog.arangodb.com/blog/topic/pregel)
- [Replication](https://blog.arangodb.com/blog/topic/replication)
- [WebUI](https://blog.arangodb.com/blog/topic/webui)
- [graph database](https://blog.arangodb.com/blog/topic/graph-database)
- [monitoring](https://blog.arangodb.com/blog/topic/monitoring)
- [pytorch](https://blog.arangodb.com/blog/topic/pytorch)
- [Application Server](https://blog.arangodb.com/blog/topic/application-server)
- [ArangoGraphML](https://blog.arangodb.com/blog/topic/arangographml)
- [Community Edition](https://blog.arangodb.com/blog/topic/community-edition)
- [Compliance](https://blog.arangodb.com/blog/topic/compliance)
- [Linux](https://blog.arangodb.com/blog/topic/linux)
- [Publication](https://blog.arangodb.com/blog/topic/publication)
- [Relational Database](https://blog.arangodb.com/blog/topic/relational-database)
- [SOC 2](https://blog.arangodb.com/blog/topic/soc-2)
- [Windows](https://blog.arangodb.com/blog/topic/windows)
- [licensing](https://blog.arangodb.com/blog/topic/licensing)
- [networkx](https://blog.arangodb.com/blog/topic/networkx)
- [storage](https://blog.arangodb.com/blog/topic/storage)
- [ARM](https://blog.arangodb.com/blog/topic/arm)
- [Alliances](https://blog.arangodb.com/blog/topic/alliances)
- [ArangoDB Cloud](https://blog.arangodb.com/blog/topic/arangodb-cloud)
- [ArangoSync](https://blog.arangodb.com/blog/topic/arangosync)
- [Arangograph](https://blog.arangodb.com/blog/topic/arangograph)
- [CNFC](https://blog.arangodb.com/blog/topic/cnfc)
- [DC/OS](https://blog.arangodb.com/blog/topic/dc-os)
- [DGL Adaptor](https://blog.arangodb.com/blog/topic/dgl-adaptor)
- [Data Loader](https://blog.arangodb.com/blog/topic/data-loader)
- [Dev Days 2021](https://blog.arangodb.com/blog/topic/dev-days-2021)
- [Developer Hub](https://blog.arangodb.com/blog/topic/developer-hub)
- [Funding Announcement](https://blog.arangodb.com/blog/topic/funding-announcement)
- [GO](https://blog.arangodb.com/blog/topic/go)
- [GenAI](https://blog.arangodb.com/blog/topic/genai)
- [Graph DB](https://blog.arangodb.com/blog/topic/graph-db)
- [Graph DBs](https://blog.arangodb.com/blog/topic/graph-dbs)
- [Graph Databases](https://blog.arangodb.com/blog/topic/graph-databases)
- [Graph Neural Networks](https://blog.arangodb.com/blog/topic/graph-neural-networks)
- [GraphDB](https://blog.arangodb.com/blog/topic/graphdb)
- [Inside ArangoDB](https://blog.arangodb.com/blog/topic/inside-arangodb)
- [Intel](https://blog.arangodb.com/blog/topic/intel)
- [Intel PyG](https://blog.arangodb.com/blog/topic/intel-pyg)
- [Intel Xeon CPU](https://blog.arangodb.com/blog/topic/intel-xeon-cpu)
- [KG](https://blog.arangodb.com/blog/topic/kg)
- [Knowledge Graphs](https://blog.arangodb.com/blog/topic/knowledge-graphs)
- [LLM](https://blog.arangodb.com/blog/topic/llm)
- [Large Language Models](https://blog.arangodb.com/blog/topic/large-language-models)
- [Migrate to Graph](https://blog.arangodb.com/blog/topic/migrate-to-graph)
- [NetworkX Adaptor](https://blog.arangodb.com/blog/topic/networkx-adaptor)
- [Oasis](https://blog.arangodb.com/blog/topic/oasis)
- [Partners](https://blog.arangodb.com/blog/topic/partners)
- [PyG](https://blog.arangodb.com/blog/topic/pyg)
- [PyTorch Geometric](https://blog.arangodb.com/blog/topic/pytorch-geometric)
- [RDF](https://blog.arangodb.com/blog/topic/rdf)
- [Series B](https://blog.arangodb.com/blog/topic/series-b)
- [adapter](https://blog.arangodb.com/blog/topic/adapter)
- [analytics](https://blog.arangodb.com/blog/topic/analytics)
- [analyzers](https://blog.arangodb.com/blog/topic/analyzers)
- [arangopipe](https://blog.arangodb.com/blog/topic/arangopipe)
- [atomics](https://blog.arangodb.com/blog/topic/atomics)
- [aws](https://blog.arangodb.com/blog/topic/aws)
- [collaboration](https://blog.arangodb.com/blog/topic/collaboration)
- [concurrency](https://blog.arangodb.com/blog/topic/concurrency)
- [dev days](https://blog.arangodb.com/blog/topic/dev-days)
- [fuzzy search](https://blog.arangodb.com/blog/topic/fuzzy-search)
- [graphsage](https://blog.arangodb.com/blog/topic/graphsage)
- [licence](https://blog.arangodb.com/blog/topic/licence)
- [memory model](https://blog.arangodb.com/blog/topic/memory-model)
- [plugin](https://blog.arangodb.com/blog/topic/plugin)
- [preprocessing](https://blog.arangodb.com/blog/topic/preprocessing)
- [recommendation](https://blog.arangodb.com/blog/topic/recommendation)
- [resource description framework](https://blog.arangodb.com/blog/topic/resource-description-framework)
- [semantic web](https://blog.arangodb.com/blog/topic/semantic-web)
- [torch](https://blog.arangodb.com/blog/topic/torch)
- [turtle](https://blog.arangodb.com/blog/topic/turtle)
- [x86](https://blog.arangodb.com/blog/topic/x86)
- [— Relational Database](https://blog.arangodb.com/blog/topic/-relational-database)

[![logo](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/logo.png?width=301&height=50&name=logo.png "logo")](https://arango.ai)

ArangoGraph Insights Platform Accelerate application innovation and performance with our next-generation graph data and analytics platform.

- <https://www.facebook.com/arangodb.database/>
- <https://twitter.com/i/flow/login?redirect_after_login=%2Farangodb>
- <https://www.instagram.com/arangodb/>
- <https://www.linkedin.com/company/arangodb/>
- <https://www.youtube.com/user/ArangoDB>

#### Quick Links

- [Quick Start](https://docs.arangodb.com/3.11/)
- [Roadmap](https://arangodb.com/roadmap/)
- [Language Drivers](https://docs.arangodb.com/3.11/develop/drivers/)
- [Case Studies](https://arangodb.com/solutions/solutions-customers/#all)
- [BI Connectors](https://arangodb.com/community-driven/bi-connector-arangodb/)
- [Certification Exam](https://arangodb.com/learn/certification/)

#### Info

- [Community](https://arangodb.com/community/)
- [Events](https://arangodb.com/events)
- [Online Meetup](https://www.meetup.com/online-ArangoDB-meetup/)
- [Logo/Resources](https://arangodb.com/resources/logos/)
- [Stackoverflow](https://stackoverflow.com/questions/tagged/arangodb)
- [Slack](https://join.slack.com/t/arangodb-community/shared_invite/zt-2d4p43cma-flyf72j9a9wq4A2OtuMFkA)

#### About Us

- [About Us](https://arangodb.com/about-us/)
- [Jobs](https://arangodb.applytojob.com/apply)
- [Imprint](https://arangodb.com/imprint/)
- [Contact Us](https://arangodb.com/contact/)
- [News](https://arangodb.com/news/)
- [Google Groups](https://groups.google.com/g/arangodb)

#### Stay In Touch

Keep up with the latest news from the ArangoDB

 ©2023 ArangoDB. All Rights Reserved.

[Terms & Conditions](https://cloud.arangodb.com/terms-and-conditions)|[Our Privacy Policy](https://cloud.arangodb.com/privacy-policy)

![](https://www.facebook.com/tr?id=336858843477853&ev=PageView&noscript=1)