While working on the upcoming ArangoDB 2.8, we have reimplemented some AQL functions in C++ for improved performance. AQL queries using these functions may benefit from using the new implementation of the function.
The following list shows the AQL functions for which a C++ implementation has been added in 2.8. The other C++-based AQL function implementations added since ArangoDB 2.5 are also still available. Here’s the list of functions added in 2.8:
- document-related functions: DOCUMENT, EDGES, PARSE_IDENTIFIER
- numerical functions: ABS, FLOOR, RAND, ROUND, SQRT
- statistical functions: MEDIAN, PERCENTILE, STDDEV_POPULATION, STDDEV_SAMPLE, VARIANCE_POPULATION, VARIANCE_SAMPLE
- geo functions: NEAR, WITHIN
- array functions: APPEND, FIRST, FLATTEN, LAST, MINUS, NTH, POP, POSITION, PUSH, REMOVE_NTH, REMOVE_VALUE, REMOVE_VALUES, SHIFT, UNSHIFT
- informational functions: COLLECTIONS, CURRENT_DATABASE, FIRST_DOCUMENT, FIRST_LIST, NOT_NULL
- object-related functions: MERGE_RECURSIVE, ZIP
Following are a few example queries that benefit from using the C++ variants of some of the above functions:
Fetching documents programmatically using the DOCUMENT
function:
- query:
FOR i IN 1..10000 RETURN DOCUMENT(test, CONCAT('test', i))
- 2.7: 0.3005 s
- 2.8: 0.1050 s
Fetching edges programmatically using the EDGES
function:
- query:
FOR i IN 1..100000 RETURN EDGES(edges, CONCAT('test/test', i), 'outbound')
: - 2.7: 4.3590 s
- 2.8: 1.4469 s
Fetching many documents from a geo index, post-filtering most of them:
- query:
FOR doc IN WITHIN(locations, 0, 0, 100000) FILTER doc.value2 == 'test1001' LIMIT 1 RETURN doc
- 2.7: 2.9876 s
- 2.8: 0.4087 s
Generating random numbers:
- query:
FOR value IN 1..100000 RETURN RAND() * 50
- 2.7: 0.1743 s
- 2.8: 0.1364 s
Please note that not in every case there will be a tremendous speedup. As usual, it depends on how often a function is called inside a query and what other constructs are used. Your mileage may vary.