기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Gremlin repeatMode 쿼리 힌트
Neptune repeatMode
쿼리 힌트는 Neptune 엔진이 Gremlin 순회에서 폭 우선, 깊이 우선 또는 청크 깊이 우선으로 repeat()
단계를 평가하는 방법을 지정합니다.
repeat()
단계의 평가 모드는 단계를 제한된 횟수만큼 반복하는 대신 경로를 검색하거나 따르는 데 사용되는 경우 중요합니다.
구문
repeatMode
쿼리 힌트는 쿼리에 withSideEffect
단계를 추가하여 지정합니다.
g.withSideEffect('Neptune#repeatMode', '
mode
').gremlin-traversal
참고
모든 Gremlin 쿼리 힌트 부작용에는 Neptune#
이라는 접두사가 붙습니다.
사용 가능한 모드
-
BFS
폭 우선 검색
repeat()
단계의 기본 실행 모드입니다. 이 모드에서는 경로를 따라 더 깊이 들어가기 전에 모든 형제 노드를 가져옵니다.이 버전은 메모리 집약적이며 한계가 매우 커질 수 있습니다. 쿼리가 메모리가 부족한 상태에서 실행하여 Neptune 엔진에 의해 취소될 위험이 더 높습니다. 이는 다른 Gremlin 구현과 가장 일치합니다.
-
DFS
깊이 우선 검색
다음 솔루션으로 이동하기 전에 각 경로를 최대 깊이까지 따릅니다.
이 경우에는 메모리를 적게 사용합니다. 출발점에서부터 다중 홉(hop)까지 단일 경로를 찾는 것과 같은 상황에서 더 나은 성능을 제공할 수 있습니다.
-
CHUNKED_DFS
청크 깊이 우선 검색
1 노드(
DFS
) 또는 모든 노드(BFS)
)가 아닌 1,000개의 노드로 구성된 청크에서 그래프 깊이를 우선 탐구하는 하이브리드 접근 방식입니다.Neptune 엔진은 경로를 더 깊이 따라가기 전에 각 수준에서 노드를 최대 1,000개 확보합니다.
이는 속도와 메모리 사용량 간에 균형 잡힌 접근 방식입니다.
BFS
을 사용하려고 하지만 쿼리가 너무 많은 메모리를 사용하는 경우에도 유용합니다.
예
다음 단원에서는 Gremlin 순회에 반복 모드가 미치는 영향에 대해 설명합니다.
Neptune에서 repeat()
단계의 기본 모드는 모든 순회에 대해 폭 우선(BFS
) 실행 전략을 수행하는 것입니다.
대부분의 경우 TinkerGraph 구현은 동일한 실행 전략을 사용하지만 경우에 따라 트래버설의 실행을 변경합니다.
예를 들어 구현은 다음 쿼리를 TinkerGraph 수정합니다.
g.V("
3
").repeat(out()).times(10).limit(1).path()
이 순회의 repeat()
단계는 다음 순회로 '언롤'되어 깊이 우선(DFS
) 전략이 됩니다.
g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
중요
Neptune 쿼리 엔진은 이 작업을 자동으로 수행하지 않습니다.
너비 우선(BFS
)은 기본 실행 전략이며 대부분의 경우 와 유사 TinkerGraph 합니다. 그러나 깊이 우선(DFS
) 전략이 더 나은 경우가 있습니다.
BFS (기본값)
폭 우선(BFS)은 repeat()
연산자의 기본 실행 전략입니다.
g.V("
3
").repeat(out()).times(10).limit(1).path()
Neptune 엔진은 10개 홉의 솔루션을 찾기 전에 처음 9개 홉 경계를 완전히 탐색합니다. 이 방법은 최단 경로 쿼리 등 많은 경우에 효과적입니다.
그러나 앞에 나온 예제의 경우 repeat()
연산자에 대해 깊이 우선(DFS
) 모드를 사용하면 순회가 훨씬 빨라집니다.
DFS
다음 쿼리는 repeat()
연산자에 깊이 우선(DFS
) 모드를 사용합니다.
g.withSideEffect("Neptune#repeatMode", "DFS").V("
3
").repeat(out()).times(10).limit(1)
이렇게 하면 다음 솔루션을 탐색하기 전에 각 솔루션을 최대 깊이까지 따릅니다.