Azure Cosmos DB for Apache Gremlin을 사용한 그래프 데이터 모델링
적용 대상: Gremlin
이 문서에서는 그래프 데이터 모델 사용에 대한 권장 사항을 제공합니다. 이러한 모범 사례는 데이터가 발전함에 따라 그래프 데이터베이스 시스템의 스케일링 기능과 성능을 보장하는 데 매우 중요합니다. 효율적인 데이터 모델은 대규모 그래프에서 특히 중요합니다.
요구 사항
이 가이드에 설명된 프로세스는 다음과 같은 가정을 기반으로 합니다.
- 문제 공간의 엔터티가 식별되었습니다. 이러한 엔터티는 각 요청에 대해 원자 단위(atomically)로 소비됩니다. 즉, 데이터베이스 시스템은 여러 쿼리 요청에서 단일 엔터티의 데이터를 검색하도록 설계되지 않았습니다.
- 데이터베이스 시스템에 대한 ‘읽기 및 쓰기 요구 사항’을 이해해야 합니다. 이러한 요구 사항은 그래프 데이터 모델에 필요한 최적화를 안내합니다.
- Apache Tinkerpop 속성 그래프 표준의 원칙을 잘 이해하고 있습니다.
그래프 데이터베이스가 필요한 경우
그래프 데이터베이스 솔루션은 데이터 도메인의 엔터티 및 관계에 다음과 같은 특징이 있는 경우 최적으로 사용할 수 있습니다.
- 엔터티가 기술적인 관계로 밀접하게 연결되어 있습니다. 이 시나리오의 이점은 관계가 스토리지에 유지된다는 것입니다.
- 주기적인 관계 또는 자체 참조 엔터티가 있습니다. 이 패턴은 관계형 데이터베이스나 문서 데이터베이스를 사용할 때 문제가 경우가 많습니다.
- 엔터티 간에 동적으로 진화하는 관계가 있습니다 이 패턴은 특히 여러 수준의 계층 구조나 트리 구조의 데이터에 적용할 수 있습니다.
- 엔터티 간에 다대다 관계가 있습니다.
- 엔터티와 관계 모두에 대한 쓰기 및 읽기 요구 사항이 있습니다.
위의 조건을 충족하면, 그래프 데이터베이스 접근 방식이 쿼리 복잡성, 데이터 모델 확장성 및 쿼리 성능에 대한 이점을 누릴 가능성이 높습니다.
다음 단계는 분석 또는 트랜잭션 중에 어떤 용도로 그래프를 사용할지 결정하는 것입니다. 대량 계산 및 데이터 처리 워크로드에 그래프를 사용하려는 경우에는 Cosmos DB Spark 커넥터와 GraphX 라이브러리를 살펴볼 가치가 있습니다.
그래프 개체를 사용하는 방법
Apache Tinkerpop 속성 그래프 표준은 ‘꼭짓점’과 ‘모서리’라는 두 가지 유형의 개체를 정의합니다.
다음은 그래프 개체의 속성에 대한 모범 사례입니다.
Object | 속성 | Type | 주의 |
---|---|---|---|
꼭짓점 | ID | 문자열 | 파티션별로 고유하게 적용됩니다. 삽입 시 값이 제공되지 않으면 자동 생성된 GUID가 저장됩니다. |
꼭짓점 | Label | 문자열 | 이 속성은 꼭짓점이 나타내는 엔터티 유형을 정의하는 데 사용됩니다. 값을 제공하지 않으면 기본값인 ‘꼭짓점’이 사용됩니다. |
꼭짓점 | 속성 | 문자열, 부울, 숫자 | 꼭짓점마다 키-값 쌍으로 저장된 별도의 속성 목록입니다. |
꼭짓점 | 파티션 키 | 문자열, 부울, 숫자 | 이 속성은 꼭짓점과 나가는 모서리를 저장할 위치를 정의합니다. 그래프 분할에 대해 자세히 읽어보세요. |
Edge | ID | 문자열 | 파티션별로 고유하게 적용됩니다. 기본적으로 자동 생성됩니다. 모서리는 대개 ID로 고유하게 검색할 필요가 없습니다. |
Edge | Label | 문자열 | 이 속성은 두 꼭짓점의 관계 유형을 정의하는 데 사용됩니다. |
Edge | 속성 | 문자열, 부울, 숫자 | 가장자리마다 키-값 쌍으로 저장된 별도의 속성 목록입니다. |
참고 항목
모서리 값은 원본 꼭짓점에 따라 자동으로 할당되기 때문에 모서리에는 파티션 키 값이 필요하지 않습니다. Azure Cosmos DB에서 분할된 그래프 사용에서 자세히 알아보세요.
엔터티 및 관계 모델링 지침
다음은 Azure Cosmos DB for Apache Gremlin 그래프 데이터베이스의 데이터 모델링을 수행하는 데 도움이 되는 지침입니다. 해당 지침은 데이터 도메인에 대한 기존 정의가 있고 그에 대한 쿼리가 있다고 가정합니다.
참고 항목
다음 단계는 권장 사항으로 제공됩니다. 최종 모델을 프로덕션 준비 상태로 간주하기 전에 평가하고 테스트해야 합니다. 또한 이러한 권장 사항은 Azure Cosmos DB의 Gremlin API 구현에만 해당됩니다.
속성 및 꼭짓점 모델링
그래프 데이터 모델의 첫 번째 단계는 식별된 모든 엔터티를 꼭짓점 개체에 매핑하는 것입니다. 모든 엔터티를 꼭짓점에 일대일로 매핑하는 것은 초기 단계이며 변경되기 마련입니다.
한 가지 일반적인 함정은 단일 엔터티의 속성을 별도의 꼭짓점으로 매핑하는 것입니다. 동일한 엔터티가 두 가지 다른 방식으로 표현되는 다음 예제를 고려해보세요.
꼭짓점 기반 속성: 이 방식에서, 엔터티는 3개의 개별 꼭짓점과 2개의 가장자리를 사용하여 속성을 설명합니다. 이 방식은 중복성을 줄일 수 있지만 모델 복잡성을 증가시킵니다. 모델 복잡성이 증가하면 대기 시간, 쿼리 복잡성 및 계산 비용이 추가될 수 있습니다. 이 모델은 분할에서 어려움을 보일 수도 있습니다.
속성 포함 꼭짓점: 이 방식은 키-값 쌍 목록을 활용하여 꼭짓점 내부 엔터티의 모든 속성을 나타냅니다. 이 방식은 모델 복잡성을 줄여서 쿼리를 간소화하고 순회의 비용 효율을 높입니다.
참고 항목
위의 다이어그램은 엔터티 속성을 구분하는 두 가지 방법을 비교하기만 하는 간소화된 그래프 모델을 보여 줍니다.
속성 포함 꼭짓점 패턴은 일반적으로 뛰어난 성능과 확장 가능한 방식을 제공합니다. 새 그래프 데이터 모델에 대한 기본 방식은 이 패턴을 향해야 합니다.
하지만 속성에 대한 참조가 장점을 제공할 수 있는 시나리오가 있습니다. 예를 들어, 참조된 속성이 자주 업데이트되는 경우가 있습니다. 지속적으로 변경되는 속성을 나타내는 별도의 꼭짓점을 사용하여 업데이트에 필요한 쓰기 작업량을 최소화할 수 있습니다.
모서리 방향을 사용하여 관계 모델링
꼭짓점이 모델링된 후에 가장자리를 추가하여 이들 간의 관계를 나타낼 수 있습니다. 평가해야 할 첫 번째 측면은 관계의 방향입니다.
모서리 개체에는 기본 방향이 있고, out()
또는 outE()
함수를 사용할 때 순회가 발생합니다. 이렇게 자연스러운 방향을 사용하면 효율적인 작업이 가능합니다. 모든 꼭짓점이 나가는 가장자리와 함께 저장되기 때문입니다.
하지만 in()
함수를 사용하여 모서리 반대 방향으로 순회하면 항상 파티션 간 쿼리가 발생합니다. 그래프 분할에 대해 자세히 알아보세요. in()
함수를 사용하여 지속적으로 트래버스해야 하는 경우 양방향에 가장자리를 추가하는 것이 좋습니다.
모서리 방향은 .addE()
Gremlin 단계에 .to()
또는 .from()
조건자를 사용하여 결정할 수 있습니다. 또는 Gremlin API용 대량 실행기 라이브러리를 사용할 수 있습니다.
참고 항목
가장자리 개체에는 기본적으로 방향이 있습니다.
관계 레이블
설명이 포함된 관계 레이블을 사용하면 가장자리 확인 작업의 효율을 높일 수 있습니다. 이 패턴은 다음과 같은 방법으로 적용할 수 있습니다.
- 관계에 레이블을 지정할 때는 제네릭이 아닌 용어를 사용합니다.
- 원본 꼭짓점의 레이블을 관계 이름을 사용하여 대상 꼭짓점의 레이블과 연결합니다.
트래버서가 모서리를 필터링하는 데 사용하는 레이블은 구체적일수록 더 좋습니다. 이 결정은 쿼리 비용에도 상당한 영향을 줄 수 있습니다. 쿼리 비용은 언제든지 executionProfile 단계를 사용하여 평가할 수 있습니다.
다음 단계
- 지원되는 Gremlin 단계 목록을 확인합니다.
- 대규모 그래프를 처리하는 그래프 데이터베이스 분할에 대해 알아봅니다.
- 실행 프로필 단계를 사용하여 Gremlin 쿼리를 평가합니다.
- 타사 그래프 디자인 데이터 모델