AWS Neptune: более производительно, если отбрасывать ребра перед вершинами?
Использование — Neptune Engine: 1.0.5.1, Apache Tinkerpop: 3.5.2
Мой вопрос касается производительности удаления вершин, а не загрузки вершин.
У нас есть задание cron, которое очищает ограниченное количество (1000) «истекших» вершин.
Мы получаем и сохраняем удаляемые вершины в наборе.
Затем мы удаляем их с помощью gV([vertices]).sideEffect(drop()).next().
Это прекрасно работает.
Все удаляемые вершины будут иметь 1 inE и 1 outE.
Очевидно, что эти ребра автоматически удаляются при удалении связанной вершины.
Однако мне интересно, будет ли Нептун (под капотом) более производительным, если мы сначала возьмем и удалим ребра, а затем удалим вершины.
Просто интересно, изучил ли кто-нибудь их (в основном, используя Neptune, но это, вероятно, «вещь» и с другими базами данных графов) и имеет какие-либо веские доказательства в любом случае.
Большое спасибо
1 ответ
Что касается использования Amazon Neptune — если вы просто выполняете однопоточное удаление 1000 вершин, где каждая имеет только одно инцидентное ребро, то то, что вы делаете, в порядке. Если вы отбрасывали тысячи (или более) вершин в многопоточном режиме, то сначала отбрасывая ребра, можно избежать коллизий, поскольку разные потоки могут попытаться заблокировать один и тот же объект в базе данных. В таких случаях, чтобы избежать конфликтов и, следовательно, избежать повторных попыток, удаление ребер первым может повысить производительность.