기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
효율적인 멀티스레드 Gremlin 쓰기 생성
Gremlin을 사용하여 데이터를 Neptune으로 멀티스레드 로드하는 작업에 대한 몇 가지 지침이 있습니다.
가능하면 각 스레드에 일련의 버텍스 또는 엣지를 지정하고 충돌하지 않는 것을 삽입하거나 수정하십시오. 예를 들어 스레드 1에 ID 범위 1~50,000이 지정되고, 스레드 2에 ID 범위 50,001~100,000이 지정되는 방식입니다. 이렇게 하면 ConcurrentModificationException
발생 가능성이 낮아집니다. 더 확실하게 하려면 모든 쓰기 주위에 try/catch
블록을 배치합니다. 장애가 발생하는 경우 잠시 기다린 후 다시 시도할 수 있습니다.
50에서 100 사이(버텍스 또는 엣지)의 배치 크기로 쓰기를 배치로 묶는 것도 대개 효과가 좋습니다. 각 버텍스용으로 추가할 속성 수가 많은 경우 100보다 50에 가까운 숫자를 선택하는 것이 더 좋습니다. 몇 가지 실험을 해 볼 만합니다. 배치 쓰기의 경우, 다음과 같은 방법을 사용할 수 있습니다.
g.addV(‘test’).property(id,’1’).as(‘a’). addV(‘test’).property(id,’2’). addE(‘friend’).to(‘a’).
그런 다음 각 배치 작업에서 이를 반복합니다.
Gremlin 라운트 트립당 버텍스 또는 엣지를 하나씩 서버에 추가하는 것보다 배치를 사용하는 편이 훨씬 효율적입니다.
Gremlin Language Variant (GLV) 클라이언트를 사용하는 경우 먼저 순회를 생성하여 프로그래밍 방식으로 일괄 처리를 생성할 수 있습니다. 그런 다음 추가하고 마지막으로 반복합니다. 예를 들면 다음과 같습니다.
t.addV(‘test’).property(id,’1’).as(‘a’) t.addV(‘test’).property(id,’2’) t.addE(‘friend’).to(‘a’) t.iterate()
가능하면 GLV(Gremlin Language Variant) 클라이언트를 사용하는 것이 가장 좋습니다. 그러나 문자열을 연결하여 하나의 배치를 만들어 쿼리를 텍스트 문자열로 제출하는 클라이언트를 사용해도 유사한 작업을 수행할 수 있습니다.
HTTP쿼리용 기본 라이브러리가 아닌 Gremlin Client 라이브러리 중 하나를 사용하는 경우 스레드가 모두 동일한 클라이언트, 클러스터 또는 연결 풀을 공유해야 합니다. 최상의 처리량을 얻으려면 Gremlin 클라이언트가 사용하는 작업자 스레드 수, 연결 풀의 크기와 같은 설정을 조정해야 할 수 있습니다.