ArangoDB эффективный обход через атрибуты узла
В OrientDB каждая вершина имеет присоединенные ребра. Это означает, что можно явно ходить по узлам из коллекции, используя вложенные операторы "select".
В качестве примера: учитывая путь атрибутов узла, найдите соответствующий конечный узел. Путь состоит из списка атрибутов узла (например, kind
является уникальным в узлах на пути).
Теперь предположим, что у меня есть дерево:
kind=site, name=site1
-- kind=project, name=project1
-- kind=library, name=library1
kind=site, name=site2
-- kind=project, name=project2
-- kind=library, name=library1
Пользователь хочет получить информацию из библиотеки с именем library1 с путем:
[{kind=site},{kind=project,name=project1},{kind=library,name=library1}]
Полностью квалифицированный для обхода каждый узел - это нормально, если в результате получается один узел.
В OrientDB процесс будет:
- начать со всех узлов вида = сайт
- пройти через "дочерний" край и собрать все объекты, которые имеют вид = проект и имя = проект1
- пройти через дочерний край и собрать все объекты, которые имеют вид = библиотека и имя = библиотека1
Это можно сделать с помощью вложенного оператора select. Поле kind индексируется, поэтому начальные узлы быстро собираются из большого количества объектов. Чтобы еще больше повысить производительность, я знаю, какие виды есть в каких таблицах (коллекциях), чтобы я мог выбирать количество объектов для выбора (выберите из