CosmosDB Gremlin API를 사용하여 소셜 네트워크를 구축하고 싶지만 올바른 파티션 키를 선택하는 방법을 이해하는 데 문제가 있습니다.CosmosDB gremlin API로 소셜 네트워크를 설계하는 방법은 무엇입니까?
간단히하기 위해 애플리케이션이 다른 사용자 (Instagram 스타일)를 따라갈 수있는 사용자와 사용자가 추종자를 배치 할 수있는 그룹 (Google Plus Circles 스타일)만으로 구성된다고 가정 해 봅시다.
- APPUSER 다음과 같은 관계가 있습니다 :
의 그래프 데이터베이스가이 정점을 가지고 있다고 가정 해 봅시다
- APPUSER을 - 소유 -> FollowerGroup 을
- AppUser - following -> APPUSER
- APPUSER - belongsTo를 -> FollowerGroup
나는 appUserId 파티션 키에 대한 좋은 후보가 될 것이라고 생각했다. 그렇게하면 해당 사용자와 관련된 모든 항목 (게시물, 그림 등)이 동일한 파티션에 보관됩니다.
내 딜레마는 다른 사용자를 따르는 것입니다. 파티션 키가 appUserId이면 각 사용자의 데이터가 자체 파티션으로 분할됩니다. 파티션간에 쓰기를 분산시키고 데이터를 고르게 분산시키는 규칙을 만족시키는 데 좋은 방법입니다.
하지만 내가 쿼리하고 싶을 때, 사용자가 따르고있는 모든 사람들을 말하고 상태를 얻으려면 어떻게 될까요? 내가 20 명을 따르고 있다고 가정 해 봅시다. 해당 데이터를 가져 오는 쿼리는 20 개의 파티션을 거쳐 모든 데이터를 검색해야합니다. 가장 성능이 좋은 동일한 파티션에서 쿼리를 가져와야한다는 규칙을 따르지 않습니다.
누구나 나에게 더 나은 파티션 키를 제공 할 수 있습니까? 또는 데이터를 모델링하는 더 좋은 방법은?
PartitionKey를 "PartitionKey"또는 "Key"와 같이 일반화하고 삽입/읽기 패턴을 최적화 할 수 있도록 애플리케이션을 삽입 시간에 설정하십시오. –