Как приблизить время выполнения функции подсчета ArangoDB
Я рассматриваю возможность использования ArangoDB для моего нового проекта, но мне не удалось найти очень много информации относительно его масштабируемости.
В частности, я ищу некоторую информацию о функции подсчета. Существует ли надежный способ (возможно, формула) для приблизительного подсчета времени, которое потребуется для подсчета количества документов в коллекции, которые соответствуют простому логическому значению?
Все документы в коллекции будут иметь одинаковые поля, но с разными значениями. Как я могу определить, сколько времени потребуется для подсчета нескольких сотен миллионов документов?
1 ответ
Просто создайте коллекцию users
и вставьте столько случайных документов, сколько вам нужно.
FOR i IN 1..1100000
INSERT {
name: CONCAT("test", i),
year: 1970 + FLOOR(RAND() * 55),
gender: i % 2 == 0 ? 'male' : 'female'
} IN users
Затем сделайте подсчет:
FOR user IN users
FILTER user.gender == 'male'
COLLECT WITH COUNT INTO number
RETURN {
number: number
}
И если вы используете этот запрос в производственном процессе, обязательно добавьте индекс. На моей машине это сокращает время выполнения в 100 раз (0,043 с / 1,1 млн. Документов).
Проверьте ваш запрос с помощью EXPLAIN, чтобы оценить, насколько "дорогим" будет выполнение.
Query string:
FOR user IN users
FILTER user.gender == 'male'
COLLECT WITH COUNT INTO number
RETURN {
number: number
}
Execution plan:
Id NodeType Est. Comment
1 SingletonNode 1 * ROOT
8 IndexRangeNode 550001 - FOR user IN users /* hash index scan */
5 AggregateNode 1 - COLLECT WITH COUNT INTO number /* sorted*/
6 CalculationNode 1 - LET #4 = { "number" : number } /* simple expression */
7 ReturnNode 1 - RETURN #4
Indexes used:
Id Type Collection Unique Sparse Selectivity Est. Fields Ranges
8 hash users false false 0.00 % `gender` [ `gender` == "male" ]
Optimization rules applied:
Id RuleName
1 use-index-range
2 remove-filter-covered-by-index