2017-10-11 12 views
-1

CosmosDB Gremlin API를 사용하여 소셜 네트워크를 구축하고 싶지만 올바른 파티션 키를 선택하는 방법을 이해하는 데 문제가 있습니다.CosmosDB gremlin API로 소셜 네트워크를 설계하는 방법은 무엇입니까?

간단히하기 위해 애플리케이션이 다른 사용자 (Instagram 스타일)를 따라갈 수있는 사용자와 사용자가 추종자를 배치 할 수있는 그룹 (Google Plus Circles 스타일)만으로 구성된다고 가정 해 봅시다.

  • FollowerGroup
    • APPUSER 다음과 같은 관계가 있습니다 :

      의 그래프 데이터베이스가이 정점을 가지고 있다고 가정 해 봅시다

      • APPUSER을 - 소유 -> FollowerGroup
      • AppUser - following -> APPUSER
      • APPUSER - belongsTo를 -> FollowerGroup

      나는 appUserId 파티션 키에 대한 좋은 후보가 될 것이라고 생각했다. 그렇게하면 해당 사용자와 관련된 모든 항목 (게시물, 그림 등)이 동일한 파티션에 보관됩니다.

      내 딜레마는 다른 사용자를 따르는 것입니다. 파티션 키가 appUserId이면 각 사용자의 데이터가 자체 파티션으로 분할됩니다. 파티션간에 쓰기를 분산시키고 데이터를 고르게 분산시키는 규칙을 만족시키는 데 좋은 방법입니다.

      하지만 내가 쿼리하고 싶을 때, 사용자가 따르고있는 모든 사람들을 말하고 상태를 얻으려면 어떻게 될까요? 내가 20 명을 따르고 있다고 가정 해 봅시다. 해당 데이터를 가져 오는 쿼리는 20 개의 파티션을 거쳐 모든 데이터를 검색해야합니다. 가장 성능이 좋은 동일한 파티션에서 쿼리를 가져와야한다는 규칙을 따르지 않습니다.

      누구나 나에게 더 나은 파티션 키를 제공 할 수 있습니까? 또는 데이터를 모델링하는 더 좋은 방법은?

    +0

    PartitionKey를 "PartitionKey"또는 "Key"와 같이 일반화하고 삽입/읽기 패턴을 최적화 할 수 있도록 애플리케이션을 삽입 시간에 설정하십시오. –

    답변

    2

    이것은 소셜 네트워크의 고전적인 문제이며 여러 번 호출되었습니다. 이것에 관해 읽을만한 온라인 자료가 많이 있습니다. 본질적으로 https://code.facebook.com/posts/274771932683700/large-scale-graph-partitioning-with-apache-giraph/

    http://www.adweek.com/digital/apache-giraph-partitioning/

  • http://perspectives.mvdirona.com/2008/06/scaling-linkedin/
    • , 그것은 스케일 아웃 (scale-out) 그래프의 크로스 파티션을가는 쿼리를 피하기 위해 매우 어렵다.

      마지막 디자인 선택은 실제로 에 달려 있습니다. 1. 처리 할 규모는 무엇입니까 2. 쿼리 작업 부하 (예 : 모든 쿼리). 모든 쿼리와 빈도를 알고 있다면 파티션 전략을 최적화 할 수 있습니다.

  • +0

    링크를 제공해 주셔서 감사합니다. 나는 그들을 조사해야 할 것이다. – Treyphor