Часть моего графика построена с использованием гигантского соединения между двумя большими коллекциями, и я запускаю его каждый раз, когда добавляю документы в любую коллекцию. Запрос основан на более раннем сообщении.
FOR fromItem IN fromCollection
FOR toItem IN toCollection
FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection
Это займет около 55 000 секунд для моего набора данных. Я был бы абсолютно рад предложениям сделать это быстрее.
Но у меня есть две связанные проблемы:
- Мне нужно подтверждение. Обычно
upsert
было бы хорошо, но в этом случае, поскольку у меня нет возможности узнать ключ заранее, это мне не поможет. Чтобы получить ключ заранее, мне нужно было бы запросить на примере, чтобы найти ключ идентичного в остальном существующего края. Это кажется разумным, если это не убивает мою производительность, но я не знаю, как в AQL построить мой запрос условно, чтобы он вставлял ребро, если эквивалентное ребро еще не существует, но ничего не делает, если эквивалентное ребро существует. Как я могу это сделать? - Мне нужно запускать это каждый раз, когда данные добавляются в любую коллекцию. Мне нужен способ запустить это только с новейшими данными, чтобы он не пытался присоединиться ко всей коллекции. Как я могу написать AQL, который позволяет мне присоединяться только к вновь вставленным записям? Они добавляются с помощью Arangoimp, и у меня нет гарантий, в каком порядке они будут обновляться, поэтому я не могу создавать ребра одновременно с созданием узлов. Как я могу присоединиться только к новым данным? Я не хочу тратить 55 тысяч секунд каждый раз, когда добавляется запись.
linked = false
в коллекцииfromCollection
иtoCollection
. - person David Thomas   schedule 19.10.2016linked
наfalse
. Когда вы связываете документы, вы также возвращаетесь назад и устанавливаетеlinked
наtrue
. Чтобы ускорить это, вы также можете поместить индекс наlinked
. Вы обнаружите, что это значительно ускоряет вашу обработку, хотя в ПЕРВЫЙ раз она все равно будет медленной, так как все будет иметь значениеlinked = false
. - person David Thomas   schedule 19.10.2016linked = false
. - person David Thomas   schedule 19.10.2016