ArangoDB Parent to Child создание ребра в существующих документах размером 1 миллион для вложенных уровней не работает / или МЕДЛЕННО

Создал events документ в ArangoDB. Загружен 1 миллион записей, как показано ниже, что выполняется за 40 секунд.

FOR I IN 1..1000000
INSERT {
    "source": "ABC",
    "target": "ABC",
    "type": "REST",
    "attributes" : { "MyAtrib" : TO_STRING(I)},
    "mynum" : I
} INTO events

Итак, запись 1 является супер-родительской, а 2 - дочерней для 1 и т. Д. 1 --> 2 --> 3 --> 4 --> ...1000000

Создал пустую коллекцию Edge ChildEvents и попытался установить отношения между родительским и дочерним краями с помощью запроса ниже, но он так и не завершился (создал хеш-индекс на mynum, но безуспешно)

FOR p IN events
   FOR c IN events
        FILTER p.mynum == ( c.mynum + 1 )
            INSERT { _from: p._id, _to: c._id}  INTO ChildEvents

Любая помощь будет принята с благодарностью.


person Solai Srinivasan    schedule 16.01.2020    source источник


Ответы (1)


Создание документов событий в моей системе заняло около 50 секунд. Я добавил индекс для mynum в коллекцию events и выполнил ваш второй запрос (с добавленным RETURN NEW в конце), и потребовалось примерно 70 секунд для обработки краев (плюс некоторое время для рендеринга их подмножества):

1 млн кромок записано за 69 секунд

Я использовал ArangoDB 3.6.0 с движком RocksDB под Windows 10, Intel i7-6700K 4x4,0 ГГц, 32 ГБ ОЗУ, Samsung Evo 850 SSD.

Вы уверены, что индекс настроен правильно? Объясните запрос и проверьте план выполнения, может быть, у вас что-то другое?

Execution plan:
 Id   NodeType                     Est.   Comment
  1   SingletonNode                   1   * ROOT
  3   EnumerateCollectionNode   1000000     - FOR c IN events   /* full collection scan, projections: `mynum`, `_id` */
  9   IndexNode                 1000000       - FOR p IN events   /* persistent index scan, projections: `_id` */
  6   CalculationNode           1000000         - LET #5 = { "_from" : p.`_id`, "_to" : c.`_id` }   /* simple expression */   /* collections used: p : events, c : events */
  7   InsertNode                1000000         - INSERT #5 IN ChildEvents 
  8   ReturnNode                1000000         - RETURN $NEW

Indexes used:
 By   Name                      Type         Collection   Unique   Sparse   Selectivity   Fields        Ranges
  9   idx_1655926293788622848   persistent   events       true     false       100.00 %   [ `mynum` ]   (p.`mynum` == (c.`mynum` + 1))

Optimization rules applied:
 Id   RuleName
  1   move-calculations-up
  2   move-filters-up
  3   interchange-adjacent-enumerations
  4   move-calculations-up-2
  5   move-filters-up-2
  6   remove-data-modification-out-variables
  7   use-indexes
  8   remove-filter-covered-by-index
  9   remove-unnecessary-calculations-2
 10   reduce-extraction-to-projection
person CodeManX    schedule 16.01.2020
comment
Большое спасибо. Это сработало. похоже, что раньше индекс не создавался в моей системе должным образом. Я воссоздал и добавил return $ NEW, и он создал края за 55 секунд. Приятно видеть результаты и помогать !! - person Solai Srinivasan; 17.01.2020
comment
Замечательно, что теперь это работает. Вы можете принять мой ответ и проголосовать за него. Спасибо! - person CodeManX; 18.01.2020