노드/관계에 사용자 정의 ID 사용 선호
Neptune은 사용자가 노드와 관계에 ID를 명시적으로 할당할 수 있도록 합니다. ID는 데이터세트에서 전역적으로 고유해야 하며 유용하도록 결정적이어야 합니다. 결정적 ID는 속성과 마찬가지로 조회 또는 필터링 메커니즘으로 사용할 수 있지만, ID 사용은 속성을 사용하는 것보다 쿼리 실행 관점에서 훨씬 더 최적화되어 있습니다. 사용자 정의 ID를 사용하면 여러 가지 이점이 있습니다.
-
속성은 기존 개체에 대해 null일 수 있지만 ID가 있어야 합니다. 이렇게 하면 쿼리 엔진이 실행 중에 최적화된 조인을 사용할 수 있습니다.
-
동시 변형 쿼리를 실행하면 강제 고유성으로 인해 속성보다 IDs에 대한 잠금이 더 적기 때문에 ID를 사용하여 노드에 액세스할 때 동시 수정 예외(CMEs)가 발생할 가능성이 크게 줄어듭니다.
-
ID를 사용하면 중복 데이터 생성 가능성을 피할 수 있습니다. 왜냐하면 Neptune은 속성과 달리 ID에 대해 고유성을 강제하기 때문입니다.
다음 쿼리 예제에서는 사용자 지정 ID를 사용합니다.
참고
~id 속성은 ID를 지정하는 데 사용되는 반면, id는 다른 속성과 마찬가지로 단순히 저장됩니다.
CREATE (n:Person {`~id`: '1', name: 'alice'})
사용자 지정 ID를 사용하지 않는 경우:
CREATE (n:Person {id: '1', name: 'alice'})
후자의 메커니즘을 사용하는 경우 고유성 적용이 없으며 나중에 쿼리를 실행할 수 있습니다.
CREATE (n:Person {id: '1', name: 'john'})
이로 인해 id=1이 john인 두 번째 노드가 생성됩니다. 이 시나리오에서는 이제 id=1을 가진 두 개의 노드가 존재하게 되며, 각각 다른 이름(alice와 john)을 가집니다.