KR20160065923A - 클러스터링에 기반한 매핑과 라우팅을 위한 시스템 및 방법 - Google Patents

클러스터링에 기반한 매핑과 라우팅을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20160065923A
KR20160065923A KR1020167011320A KR20167011320A KR20160065923A KR 20160065923 A KR20160065923 A KR 20160065923A KR 1020167011320 A KR1020167011320 A KR 1020167011320A KR 20167011320 A KR20167011320 A KR 20167011320A KR 20160065923 A KR20160065923 A KR 20160065923A
Authority
KR
South Korea
Prior art keywords
user
nodes
community
level
classification
Prior art date
Application number
KR1020167011320A
Other languages
English (en)
Inventor
알렉산드로 프레스타
아룬 샤르마
Original Assignee
페이스북, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 페이스북, 인크. filed Critical 페이스북, 인크.
Publication of KR20160065923A publication Critical patent/KR20160065923A/ko

Links

Images

Classifications

    • G06F17/30598
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning
    • G06F17/30584
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/01Social networking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Business, Economics & Management (AREA)
  • General Health & Medical Sciences (AREA)
  • Tourism & Hospitality (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Primary Health Care (AREA)
  • Marketing (AREA)
  • Human Resources & Organizations (AREA)
  • Economics (AREA)
  • Health & Medical Sciences (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

복수의 노드와 연관된 분류가 식별될 수 있다. 분류 간의 에지 가중치에 기반하여 분류가 제1 레벨 커뮤니티로 그루핑될 수 있다. 제1 레벨 커뮤니티 간의 에지 가중치에 기반하여 제1 레벨 커뮤니티가 제2 레벨 커뮤니티로 그루핑될 수 있다. 분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 기반하여 복수의 노드의 정렬된 리스트가 생성될 수 있다. 복수의 노드의 정렬된 리스트에 고유 식별자(ID)가 순차적으로 할당될 수 있다.

Description

클러스터링에 기반한 매핑과 라우팅을 위한 시스템 및 방법{SYSTEMS AND METHODS FOR MAPPING AND ROUTING BASED ON CLUSTERING}
본 발명은 클러스터링 분야에 관한 것이다. 보다 상세하게는, 본 발명은 클러스터링에 기반하여 사용자에게 식별을 할당하는 기술을 제공한다.
소셜 네트워킹 웹사이트는 회원이 다른 회원과 연결되고 통신할 수 있는 동적 환경을 제공한다. 이들 웹사이트는 공통적으로 회원이 기존재하는 소셜 네트워크 내에서 상호작용할 뿐만 아니라 새로운 소셜 네트워크를 생성할 수 있게 할 수 있다. 회원은 임의의 개인 또는 엔티티, 예컨대 단체 또는 사업체를 포함할 수 있다. 다른 속성 중에서, 소셜 네트워킹 웹사이트는 회원이 효과적이고 효율적으로 관련된 정보를 그들의 소셜 네트워크와 통신할 수 있게 한다.
소셜 네트워크의 회원은 정보, 뉴스 소식, 관계 활동, 음악, 비디오 및 임의의 다른 관심 있는 컨텐츠를 회원 전용 웹사이트의 영역에 강조하거나 공유할 수 있고 또는 그런 컨텐츠를 다르게 사용가능하게 만들 수 있다. 소셜 네트워크의 다른 회원은 회원 프로필을 브라우징하거나 전용 검색을 수행함으로써 공유된 컨텐츠에 접근할 수 있다. 컨텐츠에 접근하고 고려하며, 다른 회원은 하나 이상의 응답 행위, 예컨대 컨텐츠에 대한 피드백 또는 의견을 제공함으로써 반응할 수 있다. 이 방식으로 회원이 상호작용하는 기능은 그들 사이의 통신을 발전시키고 소셜 네트워킹 웹사이트의 목표를 실현할 수 있게 돕는다.
소셜 네트워크의 규칙적인 사용조차도 컴퓨팅 자원의 방대한 배열에 걸쳐 큰 용량의 데이터의 생성을 수반할 수 있다. 회원 예측과 일치하는 방식으로 이러한 용량의 데이터를 관리하는 기술은 소셜 네트워크의 최적화된 구동에 중요하다. 예를 들어, 다른 자와의 상호작용에서, 소셜 네트워크의 자원을 요청하는 회원은 정보의 적시의 표시를 원한다. 다른 예로서, 소셜 네트워크에 의해 유지되는 데이터의 검색을 수행하는 회원은 검색 결과의 적시의 반환을 기대한다.
노드를 클러스터하고 노드를 최적화된 시스템 성능을 위한 컴퓨팅 자원에 매핑하기 위하여, 일실시예에서, 컴퓨터 구현된 방법, 시스템 및 컴퓨터 판독가능한 매체는 복수의 노드와 연관된 분류를 식별할 수 있다. 분류는 분류 간의 에지 가중치에 기반하여 제1 레벨 커뮤니티로 그루핑될 수 있다. 제1 레벨 커뮤니티는 제1 레벨 간의 에지 가중치에 기반하여 제2 레벨 커뮤니티로 그루핑될 수 있다. 복수의 노드의 정렬된 리스트는 분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 기반하여 생성될 수 있다. 이어서 고유의 식별자(ID)가 복수의 노드의 정렬된 리스트에 할당될 수 있다.
일실시예에서, 복수의 노드는 소셜 네트워킹 시스템의 사용자와 연관된다.
일실시예에서, 복수의 노드는 사람, 비-인격체, 단체, 컨텐츠, 이벤트, 웹 페이지, 통신, 객체 또는 컨셉 중 적어도 하나와 연관된다.
일실시예에서, 분류는 복수의 노드와 연관된 적어도 하나의 속성을 나타낸다.
일실시예에서, 적어도 하나의 속성은 지리적 위치를 포함한다.
일실시예에서, 복수의 노드 중 노드 간의 연결은 에지 가중치와 연관된다.
일실시예에서, 에지 가중치는 연결의 수에 기반한다.
일실시예에서, 에지 가중치는 연결의 강도에 기반한다.
일실시예에서, 연결은 복수의 노드 중 노드 간의 공유된 특성을 나타낸다.
일실시예에서, 에지 가중치는 공유된 특성을 설명한다.
일실시예에서, 제1 공유된 특성은 제2 공유된 특성과 다르게 가중치화된다.
일실시예에서, 복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 제2 레벨 커뮤니티로 정렬하는 단계를 포함한다.
일실시예에서, 복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 제1 레벨 커뮤니티로 정렬하는 단계를 포함한다.
일실시예에서, 복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 분류로 정렬하는 단계를 포함한다.
일실시예에서, 공유된 특성을 가지는 노드들은 공유된 특성을 가지지 않는 노드들에 할당된 고유 ID보다 더 수적으로 근접한 고유 ID를 할당받는다.
일실시예에서, 반복적으로 각 저레벨 커뮤니티 간의 에지 가중치에 기반하여 저레벨 커뮤니티가 고레벨 커뮤니티로 그루핑될 수 있다. 고레벨 커뮤니티에 더 기반하여 복수의 노드의 정렬된 리스트가 생성될 수 있다.
일실시예에서, 복수의 노드와 연관된 기존재하는 ID가 고유 ID로 매핑될 수 있다.
일실시예에서, 분류를 제1 레벨 커뮤니티로 그루핑하는 단계는 커뮤니티 내의 연결의 수 또는 연결의 강도 중 적어도 하나를 최대화하는 단계 및 커뮤니티 간의 연결의 수 또는 연결의 강도 중 적어도 하나를 최소화하는 단계를 포함한다.
본 발명의 많은 다른 특징 및 실시예가 첨부되는 도면과 다음의 상세한 설명으로부터 명백할 것이다.
본 발명의 내용 중에 포함되어 있다.
도 1은 본 명세서의 일실시예에 따른 클러스터링 모듈의 예시를 도시한다.
도 2는 본 명세서의 일실시예에 따른 식별 모듈의 예시를 도시한다.
도 3a 내지 3d는 본 명세서의 일실시예에 따른 매핑 테이블의 예시를 도시한다.
도 4는 본 명세서의 일실시예에 따른 분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 의해 구조화된 노드의 트리도의 예시를 도시한다.
도 5는 본 명세서의 일실시예에 따른 노드 그래프의 노드에 고유의 ID를 할당하는 프로세스의 예시를 도시한다.
도 6은 본 명세서의 일실시예에 따른 네트워크화된 컴퓨터 시스템의 예시를 도시한다.
도 7은 일실시예에 따른 매핑 모듈의 예시를 도시한다.
도 8은 일실시예에 따른 부하 균형 고려에 기반하여 장치에 사용자를 매핑하는 프로세스의 예시를 도시한다.
도 9는 일실시예에 따른 장치에 사용자를 라우팅하는 프로세스의 예시를 도시한다.
도 10은 일실시예에 따른 소셜 네트워킹 시스템 내의 사용자를 클러스터링하고 매핑하기 위한 시스템의 네트워크도의 예시를 도시한다.
도 11은 일실시예에 따른, 본 명세서에 서술된 하나 이상의 실시예를 구현하는데 사용될 수 있는 컴퓨터 시스템의 예시를 도시한다.
도면들은 오로지 예시적인 목적을 위해 본 발명의 다양한 실시예들을 도시하며, 도면들은 같은 구성요소를 식별하기 위해 같은 참조 번호를 사용한다. 통상의 기술자는 다음의 설명으로부터 도면들에 도시된 구조들 및 방법들의 대안적 실시예가 본 명세서에 기술된 발명의 원리로부터 벗어남이 없이 이용될 수 있음을 쉽게 인식할 것이다.
소셜 그래프와 같은 노드 그래프는 극도로 많은 수의 노드와 노드 간의 연결(또는 에지)를 포함할 수 있다. 예를 들어, 노드의 수는 수억 또는 심지어 수십억개일 수 있다. 많은 경우에, 네트워크화된 컴퓨터 시스템으로 구현되는 소셜 네트워킹 시스템 등으로, 사용자는 막대한 양의 정보에 접근하고 다른 사용자와 공유할 수 있다. 이러한 막대한 양의 데이터의 저장 및 제공에는 많은 난점이 존재한다. 이들 난점은, 예컨대 분산형 시스템에서 노드 그래프를 어떻게 파티셔닝할 것인지 결정하는데 수반되는 중요한 연산 상의 및 메모리 요구사항을 포함할 수 있다. 예를 들어, 분산형 시스템에 걸친 질의(또는 요청)을 수행하는 것은 잠재적으로 많은 수의 장치를 질의를 요할 수 있다. 이 질의의 "산개(fanout)"는 질의 응답 시간을 느리게 할 뿐만 아니라, 네트워크의 과도한 부담을 줄 수 있다.
분산형 시스템에 걸친 노드 정보의 파티셔닝은 네트워크 상의 연산 속도와 부담에 커다란 영양을 줄 수 있다. 예를 들어, 어디에(예컨대, 어떤 장치에) 사용자 정보가 저장됐는지 및 어떻게 사용자 정보가 접근되고 저장되는지(예컨대, 지속성 메모리 또는 고속 메모리에)는 연산의 양과 속도에 중대한 영양을 줄 수 있다. 본 명세서에 서술되는 시스템 및 방법의 실시예는 분산형 시스템에 걸쳐 최적의 방식으로 노드 그래프를 파티셔닝하는데 사용될 수 있는 고유의 ID의 생성에 관한 것일 수 있다. 예를 들어, 고유한 ID는 클러스터 노드가 그 관계에 기반하고, 이들 클러스터가 동일한 장치에 로컬로 있는 경향성을 증가시키는 방식으로 생성될 수 있다.
연산 및 네트워크 성능은 장치가 수신하는 트래픽의 양에 영향받을 수 있다. 사용 패턴은 장치에 가해지는 부하의 양을 다양하게 할 수 있다. 본 명세서에 서술되는 시스템 및 방법의 실시예는 또한 장치에 걸친 이러한 부하의 관리 및 균형화에 관한 것일 수 있다. 이것은, 예를 들어 클러스터에 관한 사용 패턴과 장치의 부하에 대한 대응하는 영향을 결정하고, 그리고 부하 균형을 더 좋게 하는 방식으로 클러스터를 장치에 재할당하는 것을 포함할 수 있다.
도 1은 일실시예에 따른 클러스터링 모듈(100)의 예시를 도시한다. 클러스터링 모듈(100)은 식별 모듈(102) 및 매핑 모듈(104)을 포함한다. 클러스터링 모듈(100)은 소셜 네트워킹 시스템의 일부와 같은 네트워크화된 컴퓨터의 분산형 시스템의 일부로서 구현될 수 있다. 본 명세서의 이 도면 및 모든 도면에 도시된 구성요소는 단지 예시적인 것이고, 다른 구현은 추가적이거나, 더 적거나, 상이한 구성요소를 포함할 수 있다. 일부 구성요소는 관련 세부사항을 모호하게 하지 않기 위해 도시되지 않을 수 있다.
식별 모듈(102)은 노드 그래프의 노드에 할당될 고유의 ID를 생성할 수 있다. 일실시예에서, 노드는 소셜 네트워킹 시스템의 사용자와 연관될 수 있다. 일실시예에서, 노드는, 구체적이거나 추상적인, 노드로서 표시될 수 있는, 예컨대 사람, 비-인격체, 단체, 컨텐츠(예컨대, 이미지, 비디오, 오디오, 기타 등등), 이벤트, 웹 페이지, 통신, 객체, 컨셉 또는 임의의 다른 것, 개념 또는 구성과 연관될 수 있다. 고유의 ID가 각 노드에 대해 먼저 분류를 결정함으로써 생성될 수 있다. 일실시예에서, 분류의 결정은 임의의 속성(속성들)에 기반할 수 있다. 예를 들어, 속성은 지리적 위치(예컨대, 거주하는 도시)에 기반할 수 있다. 일실시예에서, 본 명세서에 보다 자세히 서술되는 바와 같이 분류의 결정은 노드 간의 에지 가중치에 기반하지 않을 수 있다.
차례로, 분류는 분류 간에 정의된 에지 가중치에 기반하여 상위 레벨 커뮤니티로 그루핑될 수 있다. 특정 실시예에서, 에지 가중치는 분류 간 연결의 수, 분류 간 연결의 강도 또는 이들이나 다른 인자의 조합에 기반할 수 있다. 결과 커뮤니티는 반복적으로 다시 상위 레벨 커뮤니티로 그루핑될 수 있다. 이들 상위 레벨 커뮤니티로의 그루핑 또한 커뮤니티 간의 에지 가중치에 기반할 수 있다. 그 후 노드는 분류 및 모든 레벨의 커뮤니티에 의하여 정렬될 수 있고, 이어서 본 명세서에 보다 자세히 서술되는 바와 같이, 수적으로 연속적인 방법으로 고유의 ID가 할당된다.
일실시예에서, 연결은 임의의 타입의 활동, 상호작용, 공통의 관심사 또는 분류와 커뮤니티 간에 공유된 다른 특징을 나타낼 수 있다. 에지 가중치는 공유된 특징을 다르게 고려할 수 있다. 예를 들어, 제1 타입의 공유된 특징은 제2 타입의 공유된 특징보다 두 분류 또는 커뮤니티 간의 강한 관계를 반영할 수 있다. 그러므로, 그 상대적 중요도에 기반하여, 제1 타입의 공유된 특징은 제2 타입의 공유된 특징보다 높게 가중화될 수 있다. 따라서, 에지 가중치는 다양한 타입의 공유된 특징의 상대적 중요도를 반영할 수 있다. 공유된 특징과 연관된 값은 본 명세서에 보다 자세히 서술되는 바와 같이 계수로 표현될 수 있다.
매핑 모듈(104)은 네트워크화된 컴퓨터 시스템에 걸쳐 노드 그래프를 파티셔닝하는데 모든 노드에 대한 고유의 ID의 세트("고유 ID 공간"으로도 불림)을 이용할 수 있다. 일실시예에서, 고유 ID 공간은 노드를 네트워크화된 컴퓨터 시스템의 캐시 시스템에 매핑하는데 사용될 수 있다. 다른 실시예에서, 고유 ID 공간은 노드를 네트워크화된 컴퓨터 시스템의 캐시 시스템에 매핑하는데 사용될 수 있다.
매핑 모듈(104)은 고유 ID 공간을 파티션의 수로 나누고(또는 분할하고) 노드를 분할에 기반하여 네트워크화된 컴퓨터 시스템의 장치로 라우팅할 수 있다. 일실시예에서, 이들 분할은 특정 사례가 분할당 동일한 수의 고유 ID를 가지도록 동일하게 가중화될 수 있다. 다른 실시예에서, 분할은 동일하게 가중화되지 않는다. 매핑 모듈(104)은 연관된 고유 ID에 기반하여 장치에 노드를 매핑할 수 있는데, 가까이 연결된 노드(예컨대, 사용자와 그 친구들)이 동일한 장치(또는 가까이 연관된 장치의 그룹, 예컨대 장치 풀)에 클러스터링되는 경향성을 낳는다. 일실시예에서, 매핑 모듈(104)은 장치의 부하를 최적화하도록 매핑에 부하 균형을 고려한다.
도 2는 일실시예에 따른 식별 모듈(102)의 예시를 도시한다. 식별 모듈(102)은 원래의 노드 대신 분류(예컨대, 지리적 위치)의 새 그래프를 정의할 수 있다. 식별 모듈(102)은 분류 결정 모듈(202), 커뮤니티 생성 모듈(204) 및 ID 할당 모듈(206)을 포함할 수 있다. 분류 결정 모듈(202)은 노드 그래프의 노드에 관한 속성을 식별할 수 있고, 속성에 기반하여 각 노드에 대한 분류를 결정할 수 있다. 속성은 어떤 노드가 그루핑될 수 있는지에 따른 임의의 특징 또는 컨셉일 수 있다. 일실시예에서, 하나 이상의 속성 및 속성의 다른 조합이 노드를 분류하는데 선택되고 사용될 수 있다.
일실시예에서, 속성은 지리적 연관, 예컨대 연관된 도시, 이웃, 동네, 또는 다른 지리적 위치일 수 있다. 각 노드는 그 지리적 연관에 의해 분류될 수 있다. 예를 들어, 소셜 그래프는 사용자를 노드로, 친구관계를 노드 간의 연결(또는 에지)로 포함할 수 있다. 사용자의 속성은 연관된 도시(예컨대, 거주하는 도시)일 수 있다. 이 경우, 각 사용자는 사용자와 연관된 도시에 기반하여 분류될 수 있다. 도시 또는 다른 연관에 기반하여 분류된 사용자는 사용자의 커뮤니티를 구성할 수 있다.
노드 간의 연결과 강하게 상호관련된 속성은 커뮤니티의 결정을 가능하게 할 수 있다. 예를 들어, 소셜 그래프의 예에서, 사람들은 종종 지리적 영역(예컨대, 도시) 내에서 생활하고, 근무하고, 사회화되는 경향이 있고 따라서 동일한 지리적 영역의 다른 사람들과 친구가 되는 경향이 있기 때문에 지리적 연관은 친구관계와 강하게 상호관련될 수 있다. 따라서, 본 명세서에 보다 자세히 서술되는 바와 같이, 공통의 지리적 영역 내의 친구는 커뮤니티를 형성할 수 있다. 다른 예로서, 임의의 하나 또는 다수의 인구통계학적 고려(예컨대, 나이, 민족, 성별, 종교, 기타 등등)이 노드 간의 연결과 강하게 상호관련되는 속성일 수 있다. 이에 관하여, 동일한 인구통계학적 프로필을 가지는 사람은 종종 친구이다. 따라서, 인구통계학적 고려는 커뮤니티의 결정에서 사람들을 분류하는데 사용될 수 있다. 커뮤니티의 결정에서 사용자의 분류는 본 명세서에 예시로 명확히 서술되지 않은 속성에 기반할 수 있다.
소셜 그래프에 관한 예시는 예시적인 컨텍스트를 제공하고 다양한 실시예의 구동 원리를 설명하는데 사용된다. 소셜 그래프의 이 예시에 관한 설명은 제한적인 것으로 여겨지면 안된다. 다른 실시예에서, 소셜 그래프에 관한 이 예시의 기본적인 원리와 개념은 다른 타입의 그래프, 노드, 연결, 속성, 기타 등등에 적용가능할 수 있다.
분류 결정 모듈(202)은 새로운 그래프의 노드로서 분류(예컨대, 도시)를 나타내고, 분류 간의 에지 가중치(또는 값)을 정의할 수 있다. 특정 실시예에서, 에지 가중치는 분류 간 연결의 수, 분류 간 연결의 강도나 타입, 또는 이들이나 다른 인자의 조합에 기반할 수 있다. 일실시예에서, 에지 가중치는 분류 간 연결의 총 수에 기반하여 결정될 수 있다. 예를 들어, 에지 가중치는 두 분류 간 연결이 많을수록 그 연결을 나타내는 에지 가중치가 크도록, 임의의 두 분류 간의 연결의 수에 비례할 수 있다. 예를 들어, 에지 가중치는 두 분류 간의 연결의 수로 나타내어질 수 있는데, 예컨대 100개의 연결은 100의 에지 가중치가 되고, 200개의 연결은 200의 에지 가중치가 될 수 있는 등이다. 분류 간의 에지 가중치에 값을 할당하는 다른 기술이 다른 실시예에서 사용될 수 있다.
일실시예에서, 에지 가중치는 분류 간의 연결의 강도나 질(또는 친밀도)에 기반하여 결정될 수 있다. 예를 들어, 두 분류 간의 개별 연결은 연결의 강도에 기반하여 할당되는 다양한 계수를 가질 수 있다. 예를 들어, 특성 "A"를 가지는 연결(예컨대, 두 사용자가 결혼했음)은 특성 "B"를 가지는 연결(예컨대, 두 사용자는 동료임)보다 강한(또는 중요한) 연결로 여겨질 수 있다. 따라서, 특성 "A"를 가지는 연결은 특성 "B"를 가지는 연결보다 큰 계수가 할당될 수 있다. 예를 들어, 소셜 그래프의 예시에서, San Hose의 사용자는 San Francisco의 일반적인 지인과 특정한 수의 친구 관계를 가질 수 있지만, Los Angeles에 가족, 친한 친구 또는 자주 왕래하는 친구와 동일한 수의 친구 관계를 가질 수 있다. Los Angeles의 가족, 친한 친구 또는 자주 왕래하는 친구와의 친구 관계는 Los Angeles에서의 강한 친구 관계를 반영하여 San Francisco에서의 친구 관계보다 높은 계수값이 할당될 수 있다.
일반적으로, 소셜 그래프 데이터는 계수에 관한 정보를 소셜 그래프의 노드 간의 관련성의 척도로서 포함할 수 있다. 계수는 소셜 그래프의 노드 간의 연결(또는 경로)의 가중치를 반영할 수 있다. 예를 들어, 계수는 그들을 연결하는 경로의 각 가중치에 기반하여 사용자가 사용자에 의해 친구추가된 다른 사람보다 가장 친한 친구와 더 가깝다는 것을 가리킬 수 있다. 계수는 소셜 네트워킹 시스템의 내부 또는 외부에서 노드 간에 가능한 다양한 상호작용에 기반할 수 있다. 노드는 사용자, 사람, 페이지 또는 소셜 그래프의 임의의 객체를 포함할 수 있다. 계수의 결정은 방향성일 수 있고, 소셜 그래프의 노드 간의 관계, 상호작용 또는 근접도와 같은 많은 인자에 의존할 수 있다. 예로서, 한 사용자(예컨대, 사용자 A)의 다른 사용자(예컨대, 사용자 B)와의 관련성의 척도는: 사용자 A가 사용자 B의 친구인지; 사용자 A가 사용자 B의 사진에 코멘트했는지; 사용자 A가 사용자 B의 컨텐츠 또는 상태 업데이트를 좋아요했는지; 사용자 A가 사용자 B의 담벼락에 게시했는지; 사용자 A가 사용자 B와 동일한 스레드에 있었는지; 사용자 A가 사용자 B와 동일한 사진에 나타났는지; 사용자 A가 사용자 B 또는 사용자 B의 컨텐츠와 연관되고(또는 연관되지 않고) 특정한 양의 시간(예컨대, 수일)이 경과됐는지; 사용자 A가 사용자 B의 코멘트에 링크됐는지; 사용자 A가 사용자 B의 컨텐츠를 다른 사람과 공유했는지; 사용자 A가 담벼락 코멘트에 사용자 B를 언급했는지; 사용자 A가 사용자 B의 프로필이나 다른 웹 페이지를 열람했는지; 기타 등등의 여부를 포함하나 이에 제한되지 않는 다양한 고려에 기반할 수 있다.
사용자 A의 사용자 B에 대한 계수의 결정에 관한 상기 예시에서, 계수를 알려주는 많은 가능한 상호작용은 사용자 A의 행위에 기반할 수 있다. 하지만, 사용자 B의 행위를 수반하는 다른 상호작용 또한 사용자 A의 사용자 B에 대한 계수의 결정에서 고려될 수 있다. 이러한 상호작용은 임의의 다양한 상호작용, 예컨대: 사용자 B가 사용자 A의 사진을 열람했는지; 사용자 B가 사용자 A의 앨범을 열람했는지; 사용자 B가 사용자 A 또는 사용자 A의 컨텐츠와 연관되고(또는 연관되지 않고) 특정한 양의 시간(예컨대, 수일)이 경과됐는지; 기타 등등의 여부를 포함할 수 있다. 나아가, 계수의 결정을 알려주는 상호작용은 상호작용이 일어난 기간(예컨대, 최근 30일, 60일, 90일 또는 임의의 다른 적절한 시간 간격)에 기반할 수 있다. 계수는 또한 이들 이전 기간 내의 상호작용의 빈도뿐만 아니라 다른 인자에 기반할 수 있다.
계수는 또한 일부 경우에 비대칭일 수 있다. 예를 들어, 특정한 이유로(예컨대, 사생활), 계수 점수는 오로지 행위하는 사용자의 행위에 기반할 수 있다. 일실시예에서, 양방향 계수 점수는 캐시 샤딩이 사용 패턴을 더 잘 반영하도록 계산될 수 있다.
커뮤니티 생성 모듈(204)은 분류 간의 에지 가중치에 기반하여 제1 레벨에서 커뮤니티 내의 분류를 그루핑할 수 있다. 일실시예에서, 커뮤니티 검출 알고리즘이 분류를 입력으로 하여 수행될 수 있고, 대응하는 커뮤니티에 매핑되는 분류(예컨대, 도시)의 결과를 낳을 수 있다. 예를 들어, 일실시예에서, 상대적으로 큰 값의 에지 가중치를 가지는 분류는 커뮤니티에 함께 그루핑되어 커뮤니티 내의 연결의 수 또는 연결의 강도를 최대화하고 커뮤니티 간의 연결의 수 또는 연결의 강도를 최소화할 수 있다.
제1 레벨에서 분류의 그루핑의 결과로 나온 커뮤니티는 제1 레벨 커뮤니티로 불릴 수 있다. 반복적 그루핑이 수행되어 상위 레벨에서 커뮤니티를 생성할 수 있다. 예를 들어, 커뮤니티 검출 알고리즘이 제1 레벨 커뮤니티를 입력으로 수행되어 제1 레벨 커뮤니티를 제2 레벨 커뮤니티의 상위 레벨로 그루핑할 수 있다. 유사하게, 커뮤니티 검출 알고리즘이 제2 레벨 커뮤니티를 입력으로 수행되어 제2 레벨 커뮤니티를 제3 레벨 커뮤니티의 상위 레벨로 그루핑하는 등을 할 수 있다. 이 기술은 분류가 제1 레벨 커뮤니티로 그루핑되고, 제1 레벨 커뮤니티가 제2 레벨 커뮤니티로 그루핑되고, 제2 레벨 커뮤니티가 제3 레벨 커뮤니티 레벨로 그루핑되고, 제3 레벨 커뮤니티가 또 다른 상위 레벨 커뮤니티로 그루핑되는 결과를 낳는다. 각 연속적인 레벨의 커뮤니티의 한 커뮤니티는 커뮤니티 내의 연결의 수 또는 연결의 강도를 최대화하고 다른 커뮤니티와의 연결의 수 또는 연결의 강도를 최소화함으로써 결정될 수 있다.
연속적인 레벨의 커뮤니티를 생성하는 반복적 그루핑은 수에 제한되지 않는다. 일실시예에서, 기술은 n개의 커뮤니티 레벨로의 매핑을 수반할 수 있는데, n은 분류와 커뮤니티의 최적의 그루핑을 위해 선택된 임의의 정수일 수 있다. 예를 들어, n값은 2, 3 또는 다른 적절한 수일 수 있다. 다른 예로서, n값은 2나 3이 아닌 값일 수 있다.
소셜 그래프의 예시에서, 도시는 도시 간의 에지 가중치(예컨대, 도시 간의 친구 관계의 수, 도시 간의 친구 관계의 강도, 양자 모두, 기타 등등)에 기반하여 커뮤니티로 그루핑될 수 있다. 제1 레벨 커뮤니티 결과는 유사한 방식으로 제2 레벨 커뮤니티로 더 그루핑될 수 있다. 제2 레벨 커뮤니티 결과는 유사한 방식으로 제3 레벨 커뮤니티로 더 그루핑될 수 있는 등이다. 임의의 수의 상위 레벨 커뮤니티로의 반복적 그루핑이 수행될 수 있다. 특정 실시예에서, 원래의 노드와 연관된 기존재하는 ID(예컨대, 사용자 ID)가 분류 및 다양한 레벨의 커뮤니티로 매핑될 수 있다.
속성으로 노드를 분류하고 노드를 커뮤니티로 그루핑함으로써 분류를 작업 세트로 사용하는 것은 큰 장점을 제공한다. 소셜 그래프의 예시에서, 수십억의 사용자와 연관된 노드에 기반한 작업 세트는 사용자와 연관된 750,000개의 도시의 분류에 기반한 작업 세트로 감소될 수 있다. 이러한 작업 세트의 감소는 고유 ID를 결정하는 연산 시간을 막대하게, 예컨대 수시간에서 수분으로 감소시킬 수 있다. 나아가, 감소된 작업 세트는 다양한 애플리케이션에서 필요한 반복적 그루핑의 수를 막대하게 감소시킬 수 있다. 일부 사례에서, 감소된 작업 세트에 기반한 최적의 노드 클러스터링을 달성하기 위한 반복적 그루핑의 수는 5번 이하의 반복일 수 있다.
소셜 그래프의 예시에서, 소셜 그래프는 약 10억개의 노드를 포함할 수 있는데, 약 750,000개의 도시로 분류될 수 있다. 도시가 도시 간의 에지 가중치(예컨대, 연결의 수)에 기반하여 그루핑될 때, 제1 레벨 커뮤니티 결과의 수는 약 2,000개일 수 있다. 만약 제1 레벨 커뮤니티가 그들 간의 에지 가중치에 기반하여 더 그루핑된다면, 제2 레벨 커뮤니티 결과의 수는 약 60개일 수 있다. 더 상위 레벨에서 커뮤니티를 그루핑하는 후속 시도는 커뮤니티의 수에서 막대한 감소를 제공하지 않을 수 있다.
다양한 레벨에서 커뮤니티 결과가 지리적 위치와의 어느 정도의 대응성을 가지지만, 그들은 지리와 강한 상호관련을 가질 수 있는 친구 관계에 기반할 수 있다. 커뮤니티와 지리적 영역 간의 대응성은 엄격한 대응성일 필요가 없다. 예를 들어, 서로 가까운 일부 지리적 영역들은 그들 간에 많거나 강한 친구 관계를 가지고 있지 않을 수 있고, 서로 떨어진 일부 지리적 영역들은 많거나 강한 친구 관계를 가지고 있을 수 있다. 지리적 영역과 친구 관계 간의 상호관련은 넓은 범위의 고려, 예컨대 문화적 인자, 인구통계학적 경향, 공통의 관심사 또는 유대 관계 등에 기반할 수 있다.
ID 할당 모듈(206)은 고유 ID를 노드의 정렬된 리스트에 수적으로 연속적인 방법으로 할당할 수 있다. 노드는 친구들이 함께 클러스터링되는 경향으로, 및 동일한 분류를 가지고 동일한 커뮤니티에 속하는 경향이 되는 방식으로 정렬될 수 있다. ID 할당 모듈(206)은 노드를 분류와 커뮤니티 결과로 정렬할 수 있다. 일실시예에서, 노드는 분류로 정렬되고, 그 후 제1 레벨 커뮤니티로 정렬되고, 그 후 다시 제2 레벨 커뮤니티로 정렬되는 등일 수 있다.
고유 ID는 노드의 정렬된 리스트에 할당되는, 수적으로 연속적일(예컨대, 1부터 10억까지) 수 있다. 일반적으로, 클러스터링된 노드 또는 다양한 레벨에서의 커뮤니티는 수적으로 서로 근접한 고유 ID를 가질 것이다. 예를 들어, 동일한 분류를 가지는 노드는 서로 수적으로 근접한 고유 ID를 가질 것이다. 다른 예로서, 동일한 제1 레벨 커뮤니티 내의 노드는 서로 수적으로 근접한 고유 ID를 가질 것이다. 동일한 제2 레벨 커뮤니티 내의 노드는 서로 수적으로 근접한 고유 ID를 가질 것이다. 동일한 제3 레벨 커뮤니티 내의 노드는 서로 수적으로 근접한 고유 ID를 가질 것이다. 용어 "수적으로 근접"은 본 명세서에서 널리 사용되고 고유한 ID가 순서의 처음부터 끝까지의 모든 정수 또는 값을 포함하는 연속적인 숫자의 엄격한 순서를 가지는 것으로 제한되는 것이 아니다. 예를 들어, 수적으로 근접한 고유 ID는 수적으로 연속적인 홀수, 예컨대 1, 3, 5, 7, 9 등일 수 있다. 다른 예로서, 수적으로 근접한 수들은 일련의 비-연속적인 홀수 및 짝수, 예컨대 1, 2, 4, 5, 7, 8 등일 수 있다. 또 다른 예로서, 수적으로 근접한 숫자는 본 명세서에 서술된 기술에 의해 결정되는 바와 같이, 노드에 대한 고유 ID의 세트 내의 값 간의 차이가 노드에 대한 기존재하는 다른 타입의 ID의 세트 내의 값 간의 차이보다 상대적으로 작은 것을 가리킬 수 있다.
그러므로 고유 ID 공간은 친구, 분류 및 커뮤니티가 서로 근접한 고유 ID를 가지도록 구조화될 수 있다. 고유 ID는 네트워크화된 컴퓨터 시스템에 걸친 매핑을 위해 나누어질 수 있다. 고유 ID 공간이 나누어질 때, 고유 ID 공간의 분할은 친구의 클러스터뿐만 아니라 다양한 레벨에서 도시와 커뮤니티의 클러스터도 포함할 것이다. 일부 실시예에서, 특정 레벨에서의 도시나 다른 커뮤니티는 파티션 간에 나누어질 수 있다. 일반적으로, 본 명세서에 보다 자세히 서술되는 바와 같이, 파티셔닝은 산개와 연관된 단점을 감소시키며 집약성을 향상시키고 시스템 성능을 최적화할 수 있다.
식별 모듈(102)은 새로운 그래프의 정의를 업데이트할 수 있다. 식별 모듈(102)에 의한 원래의 노드 대신 분류에 기반한 새로운 그래프의 정의는 보다 적은 업데이트를 요구할 수 있다. 소셜 그래프의 예시에서, 도시 간의 친구 관계의 수 또는 친구 관계의 강도는 상당히 정적이고 짧은 기간에 크게 변하지 않을 수 있다. 이에 반해, 사람들은 도시 내에서, 이동하고, 새로운 친구를 만드는 등을 할 수 있기 때문에 사용자의 변화는 보다 자주 일어날 수 있다. 그러므로, 새로운 그래프가 원래의 노드 대신 분류에 기반하기 때문에, 식별 모듈(102)은 상대적으로 적게 사용자와 연관된 근본적인 데이터의 변화를 고려하여 업데이트를 수행하도록 요구될 수 있다. 다양한 실시예에서, 식별 모듈(102)은 다양한 간격(예컨대, 매주, 1개월, 3개월, 6개월 또는 다른 응용가능한 기간)으로 또는 특정한 이벤트의 발생 시(예컨대, 도시 또는 커뮤니티 간의 에지 가중치의 임계 변화) 새로운 그래프를 업데이트할 수 있다.
도 3a 내지 3d는 일실시예에 따른 매핑 테이블의 예시를 도시한다. 매핑 테이블의 예시는 소셜 그래프와 연관되어 서술된다. 하지만, 테이블과 관련되어 서술되는 근본적인 개념은 임의의 단알 소셜 그래프 또는 그 특별한 특징에 제한되지 않는다.
도 3a에서, 테이블(300)은 12명의 사용자(예컨대, 노드)를 나열하는 USER 열을 포함한다. 명확성과 간결성을 위하여, 12명의 사용자만이 예시적인 목적으로 도시된다. 생성된 매핑 테이블은 수백만, 수십억 또는 임의의 수의 사용자를 포함할 수 있다. 일실시예에서, USER 열은 이전에 각 사용자에게 할당된 기존재하는 ID(예컨대, 사용자 ID)를 나타낼 수 있는데, 그 후 L1 열의 분류(예컨대, 도시) 및 C1과 C2 열의 커뮤니티에 매핑될 수 있다.
L1 열은 사용자의 연관된 도시를 나타낸다. 도시는 사용자의 거주지를 나타낼 수 있다. 예를 들어, 사용자 1 내지 12 각각은 옆에 그 연관된 도시, 예컨대 New York(NY), San Francisco(SF), San Diego(SD), Los Angeles(LA) 또는 New Jersey(NJ)가 도시된다.
C1 열은 도시 간에 정의된 에지 가중치(예컨대, 도시 간의 친구 관계의 수, 도시 간의 친구 관계의 강도, 기타 등등)에 기반하여 도시를 그루핑하여 나온 제1 레벨 커뮤니티를 나타낸다. 일실시예에서, 제1 레벨 커뮤니티는 그들 사이에 많은 수(또는 강도)의 친구 관계를 가지는 도시들이 함께 그루핑되어 제1 레벨 커뮤니티 내의 친구 관계의 수(또는 강도)를 최대화하고 제1 레벨 커뮤니티 간의 친구 관계의 수(또는 강도)를 최소화하도록 선택된다. 도시된 바와 같이, NY는 제1 레벨 커뮤니티 "1" 내에 나열되고, SF는 제1 레벨 커뮤니티 "2" 내에 나열되고, SD와 LA는 제1 레벨 커뮤니티 "3" 내에 나열되고, NJ는 제1 레벨 커뮤니티 "4" 내에 나열된다. 도시된 실시예에서, LA와 SD는 그들 사이에 상대적으로 많은 수의 친구 관계를 가질 수 있고, LA와 SD가 동일한 제1 레벨 커뮤니티 내에 그루핑되는 결과를 낳는다.
C2 열은 제1 레벨 커뮤니티 간에 정의된 에지 가중치(예컨대, 제1 레벨 커뮤니티 간의 친구 관계의 수, 제1 레벨 커뮤니티 간의 친구 관계의 강도, 기타 등등)에 기반하여 제1 레벨 커뮤니티를 그루핑하여 나온다. 일실시예에서, 제2 레벨 커뮤니티는 그들 사이에 많은 수(또는 강도)의 친구 관계를 가지는 제1 레벨 커뮤니티들이 함께 그루핑되어 제2 레벨 커뮤니티 내의 친구 관계의 수(또는 강도)를 최대화하고 제2 레벨 커뮤니티 간의 친구 관계의 수(또는 강도)를 최소화하도록 선택된다. 도시된 실시예에서, NY와 NJ는 동일한 제2 레벨 커뮤니티 "1"에 속하고, SF, SD 및 LA는 동일한 제2 레벨 커뮤니티 "2"에 속한다.
그 후 도시와 레벨들의 커뮤니티 결과들은 정렬될 수 있고, 도시와 레벨들의 커뮤니티 결과들에 기반한 사용자(또는 사용자 ID)의 정렬된 리스트가 나온다. 예를 들어, 매핑 테이블(300) 내의 사용자는 도시(L1 열), 제1 레벨 커뮤니티(C1 열) 및 제2 레벨 커뮤니티(C2 열)로 정렬될 수 있다. 커뮤니티가 친구 관계와 연관된 에지 가중치에 기반하여 그루핑되기 때문에, 친구들은 함께 클러스터링되거나 그런 경향이 있다.
도 3b는 사용자가 도시(L1 열)로 정렬된 후의 매핑 테이블(300)을 도시한다. 도시된 바와 같이, LA의 사용자가 차트의 꼭대기에 먼저 나열되고, 도시들 NJ, NY, SD 및 SF가 뒤따른다.
도 3c는 사용자가 제1 레벨 커뮤니티(C1 열)로 정렬된 후의 매핑 테이블(300)을 도시한다. 도시된 바와 같이, 제1 레벨 커뮤니티 "1"의 사용자가 차트(200)의 꼭대기에 가장 먼저 나열되고, 제1 레벨 커뮤니티 "2", "3" 및 "4"의 사용자가 뒤따른다.
도 3d는 사용자가 제2 레벨 커뮤니티(C2 열)로 정렬된 후의 매핑 테이블(300)을 도시한다. 도시된 바와 같이, 제2 레벨 커뮤니티 "1"의 사용자가 차트(200)의 꼭대기에 가장 먼저 나열되고, 제2 레벨 커뮤니티 "2"의 사용자가 뒤따른다.
정렬 프로시저의 결과로서, 사용자 1 내지 12는 도시, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티로 정렬된다. 예를 들어, 제2 레벨 커뮤니티 "2" 내의 모든 사용자는 서로 수적으로 근접한다(예컨대, 사용자 2, 6, 8, 11, 4, 7, 1, 3 및 12). 나아가, 제2 레벨 커뮤니티 "2" 내에서, 제1 레벨 커뮤니티 "2" 내의 모든 사용자는 서로 수적으로 근접하고(예컨대, 사용자 2, 6, 8 및 11), 제1 레벨 커뮤니티 "3"의 모든 사용자는 서로 근접한다(예컨대, 사용자 4, 7, 1, 3 및 12). 더 나아가, 제1 레벨 커뮤니티 "2" 내에서, 도시 "SF" 내의 모든 사용자는 서로 수적으로 근접한다(예컨대, 사용자 2, 6, 8 및 11). 제1 레벨 커뮤니티 "3" 내에서, 도시 "LA" 내의 모든 사용자는 서로 근접하고(예컨대, 사용자 4 및 7), 도시 "NY" 내의 모든 사용자는 서로 근접하고(예컨대, 사용자 1), 도시 "SD" 내의 모든 사용자는 서로 근접한다(예컨대, 사용자 3 및 12). 이 도일한 패턴은 또한 제2 레벨 커뮤니티 "1" 내의 모든 사용자에게도 적용된다.
이 방법으로, 식별 모듈(102)가 사용자의 정렬된 리스트에 수적으로 연속인 방식으로 고유 ID를 할당할 때, 동일한 도시 내의 사용자 및 레벨들의 커뮤니티 결과는 서로 수적으로 근접한 고유 ID를 가질 것이다. 예를 들어, 도 3d의 테이블(300)은 분류, 제1 레벨 커뮤니티, 제2 레벨 커뮤니티로 정렬된 사용자들에게 수적으로 연속적인 방식으로 할당된 고유 ID를 나열하는 UQ_ID 열을 포함한다. 도시된 바와 같이, 동일한 분류를 가지거나 동일한 커뮤니티에 속하는 사용자들은 서로 근접하고, 따라서 서로 수적으로 근접한 고유 ID를 가진다. 이 방식으로 고유하게 식별된 노드는 본 명세서에 서술된 바와 같이 시스템 성능을 향상시키고 컴퓨팅 자원을 최적화하는 관점에서 유익하거나 이득일 수 있다. 일부 사례에서 커뮤니티가 지리적 구성요소를 가질 수 있지만, 다른 사례에서 커뮤니티는 지리적 구성요소를 가지지 않을 수 있다. 도 3a 내지 3d에서, 예를 들어, 사용자 1 및 사용자 5는 모두 NY와 연관되지만 다른 제1 레벨 커뮤니티에 있다. 사용자 1은, 예를 들어, 제1 레벨 커뮤니티 "3"에 많은 수의 친구를 가지고 제1 레벨 커뮤니티 "3"에 그루핑될 수 있다. 한편, 사용자 5는 제1 레벨 커뮤니티 "1"에 많은 수의 친구를 가질 수 있고 제1 레벨 커뮤니티 "1"에 그루핑될 수 있다.
일부 실시예에서, 정렬 기술은 상이할 수 있다. 예를 들어, 분류와 모든 레벨의 커뮤니티로 정렬하는 대신, 사용자는 분류나 커뮤니티의 레벨의 임의의 조합에 기반하여 선택적으로 정렬될 수 있다. 예를 들어, 사용자는 가장 높은 레벨의 커뮤니티(예컨대, 제2 레벨 커뮤니티)만에 기반하여 정렬될 수 있다. 그리고, 고유 ID는 그 정렬에 기반하여 할당될 수 있다. 다른 예로서, 오직 2개의 가장 높은 레벨의 커뮤니티(예컨대, 제1 레벨 커뮤니티와 제2 레벨 커뮤니티)만이 고유 ID가 할당되기 전에 정렬될 수 있다.
도 4는 일실시예에 따른 분류(402), 제1 레벨 커뮤니티(403), 제2 레벨 커뮤니티(404)에 할당된 노드(401)의 트리 다이어그램(400)의 예시를 도시한다. 트리 다이어그램(400)은 임의의 적절한 수 x1개의 노드를 포함할 수 있다. 도시된 예시에서, 각 노드(401)에서 대응하는 분류(402)로의 선으로 표현되는 바와 같이, 10억개의 노드(401)가 분류(402)로 그루핑된다. 노드와 연관된 임의의 적절한 수 x2개의 분류가 결정된다. 도시된 예시에서, 지리적 위치(예컨대, 도시)를 나타내는 750,000개의 분류(402)가 노드(401)와 연관된다. 각 분류(402)는 각 분류에서 대응하는 제1 레벨 커뮤니티로의 선으로 표현되는 바와 같이 제1 레벨 커뮤니티(403)로 그루핑된다. 임의의 적절한 수 x3개의 제1 레벨 커뮤니티(403)가 결정될 수 있다. 도시된 예시에서, 2,000개의 제1 레벨 커뮤니티(403)가 분류(402)와 연관된다. 나아가, 각 제1 레벨 커뮤니티에서 대응하는 제2 레벨 커뮤니티로의 선으로 표현되는 바와 같이 각각의 제1 레벨 커뮤니티(403)가 제2 레벨 커뮤니티(404)로 그루핑된다. 임의의 적절한 수 x4개의 제2 레벨 커뮤니티가 결정될 수 있다. 도시된 예시에서, 60개의 제2 레벨 커뮤니티(404)가 제1 레벨 커뮤니티(403)와 연관된다. 트리 다이어그램(400)은 동일한 분류를 가지고 동일한 커뮤니티에 속하는 노드(401)가 함께 클러스터링되도록 구조화되고, 따라서 분류(402), 제1 레벨 커뮤니티(403) 및 제2 레벨 커뮤니티(404)에 기반하여 정렬되는 방식으로 구조화된다. 이 방법으로, 고유 ID는 시작부터 끝까지(예컨대, 왼쪽에서 오른쪽으로) 수적으로 연속적인 방식으로 노드(401)에 할당될 수 있다. 동일한 분류를 가지거나 동일한 커뮤니티에 속하는 노드는 서로 수적으로 인접한 고유 ID를 가질 것이다. 도 4에서 x1, x2, x3, x4로 도시된 값은 예시적인 것이다. 임의의 적절한 수가 다른 실시예에서 구현될 수 있다.
도 5는 일실시예에 따른 노드 그래프의 노드에 고유 ID를 할당하는 프로세스의 예시를 도시한다. 도 1 내지 4에서 상술한 것들 역시 도 5의 프로세스에 적용될 수 있다. 간결성과 명확성을 위하여, 도 5에 적용가능한 모든 특징 및 기능은 여기 반복되지 않는다.
블록(502)에서, 노드 그래프의 노드가 식별될 수 있다. 일실시예에서, 예를 들면, 노드는 소셜 그래프 내의 사용자와 연관될 수 있다. 블록(504)에서, 노드의 하나 이상의 속성이 식별될 수 있다. 속성은 노드나 노드 간의 연결과 관련될 수 있다. 블록(506)에서, 각 노드의 분류가 속성에 기반하여 생성될 수 있다. 일실시예에서, 속성은 지리적 연관(예컨대, 도시와의 연관)일 수 있고, 노드는 그들이 연관된 지리적 위치(예컨대, 거주하는 도시, 사업이나 작동하는 도시)에 의해 분류될 수 있다. 분류는 분류 간에 정의된 에지 가중치를 가지는 새로운 그래프의 노드로 여겨질 수 있다. 일실시예에서, 에지 가중치는 노드 간 연결의 수에 기반할 수 있다. 일실시예에서, 에지 가중치는 연결의 강도에 기반할 수 있는데, 계수로 표현될 수 있다. 일실시예에서, 블록(502, 504 및 506)은 도 2의 분류 결정 모듈(202)에 의해 수행될 수 있다.
블록(508)에서, 분류(예컨대, 연관된 도시)는 분류 간에 정의된 에지 가중치에 기반하여 (예컨대, 분류 간의 연결의 수 또는 강도에 기반하여) 커뮤니티로 그루핑될 수 있다. 그루핑은 분류로부터 제1 레벨 커뮤니티로의 매핑을 제공할 수 있다. 블록(510)에서, 다른 레벨의 커뮤니티로의 추가적인 그루핑이 수행될 것인지 여부가 결정된다. 만약 추가적인 그루핑이 수행될 것이면, 블록(510)에서 블록(508)으로의 화살표로 표현된 바와 같이, 블록(508)에서 나온 제1 레벨 커뮤니티는 제1 레벨 커뮤니티 간의 에지 가중치에 기반하여(예컨대, 제1 레벨 커뮤니티 간의 연결의 수 또는 제1 레벨 커뮤니티 간의 연결의 강도에 기반하여) 그루핑된다. 이 프로세스는 상위 레벨 커뮤니티로의 임의의 추가적인 그루핑을 위하여 유사한 방식으로 반복될 수 있다. 만약 상위 레벨로의 추가적인 그루핑이 수행되지 않은 것이면, 블록(512)에서, (블록(502)으로부터의) 노드가 분류 및 레벨들의 커뮤니티의 결과의 정렬에 기반하여 정렬된다. 노드는 친구들이 정렬된 리스트에서 함께 클러스터링되는 경향을 가지고, 나아가 동일한 분류를 가지고 동일한 커뮤니티에 속하는 경향을 가지는 방식으로 정렬된다.
블록(514)에서, 고유 ID는 수적으로 연속적인 방식으로 노드의 정렬된 리스트에 할당된다. 이 방식으로, 연결(예컨대, 친구 관계)을 가지는 노드(예컨대, 사용자)는 동일한 분류를 가지고 동일한 커뮤니티로 함께 클러스터링되는 경향을 가질 것이고, 따라서 서로 수적으로 근접한 고유 ID를 가진다. 일실시예에서, 블록(508 및 510)은 도 2의 커뮤니티 생성 모듈(204)에 의해 수행될 수 있다. 나아가, 일실시예에서, 블록(512 및 514)은 도 2의 ID 할당 모듈(206)에 의해 수행될 수 있다.
분류 및 상위 레벨 커뮤니티는 반드시 분류 내의 보다 촘촘한 정보(finer grain information)를 제공하지 않을 수 있다. 예를 들어, 사용자의 정렬된 리스트는 반드시 도시 내의 친구의 서브-커뮤니티가 고유 ID 공간에서 연속적으로 서로 근접한 방식으로 정렬되지 않을 수 있다. 도시의 서브-커뮤니티는, 예를 들어, 사용자 간에 더 많은 수의 연결을 가지는 교외와 연결될 수 있다.
일실시예에서, 노드의 서브-커뮤니티는 분류 내에서 식별될 수 있다. 예를 들어, 서브-커뮤니티의 분류는 본 명세서에 서술되는 바와 유사한 방식으로 도출될 수 있다. 그 후 노드는 분류 내에서, 예를 들어 노드 간의 연결의 수나 강도에 기반하여 서브-커뮤니티로 그루핑될 수 있다. 추가적인 레벨의 서브-커뮤니티가 또한 반복적으로 계산될 수 있다. 노드의 정렬된 리스트는 그 후 노드를 분류 및 서브-커뮤니티(및 상위 레벨 커뮤니티)로 정렬함으로써 생성될 수 있다. 그 후 고유 ID는 노드의 정렬된 리스트에 수적으로 연속적인 방식으로 할당될 수 있다. 이 방식으로, 연결을 가지는 노드의 서브-커뮤니티는 함께 클러스터링되는 경향을 가질 수 있다.
식별 모듈(102)에 의해 수행되는 기술에 기반하여 고유하게 식별된 노드는 다양한 상황에서 장점을 제공할 수 있다. 예를 들어, 식별 모듈(102)에 의해 고유 ID를 생성하고 할당하는 것은 정보가 저장을 위해 압축될 수 있는 방식을 향상시킬 수 있다. 네트워크화된 컴퓨터 시스템은 접근하기 느리지만 큰 저장 용량을 가지는 메인 메모리를 포함할 수 있다. 이와 같은 이유로, 압축은 메인 메모리 관리와 관련하여 중요한 고려사항이 아닐 수 있다. 하지만, 네트워크화된 컴퓨터 시스템의 메모리 계층은 또한 종종 더 자주 접근될 수 있어 수행 속도를 향상시키는, 보다 빠른 메모리를 구현한다. 보다 빠른 메모리 기술이 보다 비싼 경향이 있기 때문에, 메모리의 크기는 종종 제한되고 따라서 압축 기술이 저장될 수 있는 데이터의 양을 최대화시키는 보다 중요한 역할을 수행한다. 델타 인코딩은 식별 모듈(102)에 의해 생성되고 할당된 고유 ID 공간으로부터 득을 보는 한 압축 기술이다.
예를 들어, 사용자의 친구 리스트는 기존재하는 사용자 ID: 200; 3,000; 및 30,000을 포함할 수 있다. 일반적으로, 친구 리스트를 델타 인코딩하기 위하여, 친구의 사용자 ID는 가장 작은 값에서 가장 큰 값으로 정렬된다. 선행하는 사용자 ID 값은, 선행하는 값이 없는 최소 사용자 ID를 제외하고, 각 사용자 ID에서 감산된다. 델타 인코딩된 리스트는: 200; 2800; 및 27,000을 포함할 것이다. 값 2800은 3000에서 200을 감산하여 도출되고, 값 27,000은 30,000에서 3,000을 감산함으로써 도출된다. 델타 인코딩에 의하면, 발상은 저장하는데 더 적은 비트가 요구되는 더 작은 수를 생성하는 것이다. 하지만, 도시된 바와 같이, 잠재적인 사용자 ID 값의 큰 세트를 다룰 때는, 사용자 ID 값 간의 차이가 상대적으로 큰 값일 수 있다.
고유 ID가 수적으로 연속인 방식으로 연결에 기반하여 노드를 클러스터링하는 노드(예컨대, 사용자)의 정렬된 리스트에 할당되기 때문에, 연결(예컨대, 친구 관계)을 가지는 많은 노드(예컨대, 사용자)가 정렬된 리스트 내에서 함께 클러스터링될 것이고, 최종적으로 서로 연속적으로 근접한 고유 ID를 할당한다. 그러므로, 사용자 ID 200; 3,000; 및 30,000과 동일한 친구는 식별 모듈(102)에 의해 할당된, 1,001; 1,003; 및 1010과 같이 서로 연속으로 근접한 고유 ID를 가질 수 있다. 델타 인코딩을 이들 고유 ID에 적용하면 델타 인코딩 값6 1,001; 2; 및 7이 나온다. 이들 델타 인코딩 값은 매우 작은 값을 제공하고, 매우 작은 메모리에 저장할 데이터를 요구한다.
식별 모듈(102)에 의해 수행되는 기술에 기반하여 고유 ID를 생성하고 노드에 할당하는 것은 거대한 그래프를 디스크, 장치, 데이터베이스 서버 및 데이터 센터를 포함하는 네트워크화된 컴퓨터 시스템에 걸친 규모로 파티셔닝할 때 이득일 수 있다.
도 6은 일실시예에 따른 네트워크화된 컴퓨터 시스템(600)의 예시를 도시한다. 네트워크화된 컴퓨터 시스템(600)은 n개의 데이터베이스 서버(602), n개의 데이터베이스 서버(602)와 연관된 캐시 시스템(604), 웹 서버(606) 및 웹 서버(606)와 연관된 캐시 시스템(608)을 포함하는데, n은 데이터베이스 서버와 소셜 네트워킹 시스템과 같은 네트워크화된 컴퓨터 시스템(600)을 지원하는 연관된 캐시 시스템의 임의의 수이다. 데이터베이스 서버(602)는 데이터베이스 서버(612), 데이터베이스 서버(614), 데이터베이스 서버(616) 및 데이터베이스 서버(618)를 포함한다. 캐시 시스템(604)는 캐시 시스템(622), 캐시 시스템(624), 캐시 시스템(626) 및 캐시 시스템(628)을 포함한다. 데이터베이스 서버(612)는 캐시 시스템(622)과 연관되고; 데이터베이스 서버(614)는 캐시 시스템(624)과 연관되고; 데이터베이스 서버(616)는 캐시 시스템(626)과 연관되고; 데이터베이스 서버(618)는 캐시 시스템(628)과 연관된다. 데이터베이스 서버(602), 캐시 시스템(604) 및 웹 서버(606)는 통신에 관하여 LAN, WAN 및 인터넷과 같은 하나 이상의 네트워크를 통하여 서로 연결될 수 있다. 데이터베이스 서버(602) 각각은 당일 데이터베이스 서버 또는 데이터 센터를 나타낼 수 있다. 소셜 그래프와 같은 그래프를 위한 정보는 데이터베이스 서버(602)에 의해 형성된 지속성 메모리층 내에 저장될 수 있다.
소셜 그래프의 예시에서, 데이터베이스 서버(602)는 소셜 그래프의 모든 사용자의 사용자 정보를 포함할 수 있다. 사용자 정보는, 예컨대, 사용자 프로필에 관한 정보, 이미지, 비디오, 게시물, 상태 업데이트, 친구 리스트, 피드 또는 소셜 그래프에 의해 지원되는, 사용자 및 소셜 네트워킹 시스템 상의 사용자의 활동과 연관된 임의의 다른 정보를 포함할 수 있다. 특정 사용자에 대한 사용자 정보는 데이터베이스 서버(602)의 특정 데이터베이스 서버에 저장될 수 있다. 사용자는 임의의 사용자 친구 관계와 상관없이 데이터베이스 서버(602)의 하나에 매핑될 수 있다. 예를 들어, 소셜 네트워킹 시스템의 새로운 사용자는 어떤 데이터베이스 서버(602)가 사용자가 소셜 네트워킹 시스템에 가입한 시점에 사용자에 대한 정보를 유지할 용량을 가지는지에 기반하여 데이터베이스 서버(602) 중 하나에 할당될 수 있다.
특정 실시예에서, 사용자와 연관된 사용자 ID는 어떤 데이터베이스 서버(602)에 사용자 정보가 저장되는지 가리키는데 사용될 수 있다. 만약 주어진 사용자에 대해 사용자 정보가 요구되면, 사용자의 정보를 가지는 특정한 데이터베이스 서버가 질의되어 사용자의 정보를 획득한다. 예를 들어, 사용자 A가 네트워크화된 컴퓨터 시스템(600)의 웹 서버(606)에 접근할 때, 웹 서버(606)는 사용자 A에 대해 사용자 ID를 식별할 수 있고, 사용자 ID를 사용하여 사용자 A에 대한 사용자 정보가 데이터베이스 서버(614)에 저장되었는지 결정할 수 있다. 사용자 A에 대한 사용자 정보는, 예컨대 사용자 A의 친구의 친구 리스트 또는 사용자 A에 대한 다른 정보를 포함할 수 있다.
그 후 사용자 A의 친구 각각의 사용자 정보가 각 데이터베이스 서버(612, 616 및 618)로의 질의(632, 636 및 638)에 의해 표현되는 바와 같이 각 사용자에 대한 사용자 정보를 가지는 각 데이터베이스 서버에 질의함으로써 획득될 수 있다. 각 데이터베이스 서버(612, 616 및 618)로의 질의(632, 636 및 638)는 산개 질의를 나타낸다. 예시가 3개의 데이터베이스 서버(612, 616 및 618)로의 추가적인 질의(632, 636 및 638)를 도시하지만, 사용자 A는 다수의 데이터베이스 서버(602)에 퍼져 있는 훨씬 많은 수의 친구들(예컨대, 수백 또는 수천명의 친구)을 가질 수 있고, 각 친구를 위해 상이한 데이터베이스 서버로의 산개 질의를 요구할 수 있다. 이 환경에서, 많은 수의 산개 질의는 바람직하지 않다. 산개 질의는 성능(예컨대, 정보가 획득되는 속도)를 막대하게 감소시킬 수 있고 특히 극도로 많은 수의 노드 및 질의를 다룰 때 많은 양의 네트워크 트래픽을 생성한다. 산개 질의와 연관된 문제는 사용자 A의 "친구의 친구"(또는 훨씬 큰 이격도를 가지는 간접적인 친구)에 대한 사용자 정보를 위한 질의가 수행될 때 더 발생한다. 산개 질의는 또한 캐시 시스템(604)의 많은 양의 메모리 사용에 기여할 수 있다.
네트워크화된 컴퓨터 시스템(600)은 또한 데이터베이스 서버(602)와 연관되어 구현된 캐시 시스템(604)을 포함하여 데이터베이스 서버(602)의 지속성 메모리층보다 빠른 메모리 접근을 제공한다. 예를 들어, 캐시 시스템(604)은 RAM이나 플래시 메모리와 같은 고속 메모리 기술의 다른 형태 내에서 캐시층 서비스를 구현할 수 있다. 예를 들어, 데이터나 연산은 APC(Alternative PHP Cache), Memcache, 기타 등등을 사용하여 캐싱될 수 있다. 유사하게, 웹 서버(606)은 또한 캐시 시스템(608) 내의 데이터나 연산을 캐싱할 수 있다. 사용자 A에 대한 사용자 정보를 위한 질의가 먼저 주어진 데이터베이스 서버(614)로 보내질 때, 예를 들어, 사용자 정보는 데이터베이스 서버(614)에서 검색되고 또한 캐시 시스템(624)에 저장될 수 있다. 그 후, 사용자 A에 대한 사용자 정보가 캐시 시스템(624)에 남아있는 한, 사용자 A에 대한 사용자 정보를 위한 후속 질의는 보다 빠르게 캐시 시스템(624)에서 검색될 수 있다. 하지만, 만약 사용자 A의 친구에 대한 사용자 정보가 다른 데이터베이스 서버(602)에 저장되어 있다면, 캐시 시스템(604)은 반드시 산개 질의의 수의 막대한 감소를 제공하지 않을 수 있다.
친구들이 하나 이상의 친구 그룹의 일부일 경향을 가지기 때문에, 친구들은 많은 공통의 친구를 가지는 강한 경향성이 있다. 친구 및 친구의 친구에 대한 사용자 정보를 수집할 때, 공통의 친구의 사용자 정보를 위한 많은 질의가 발생할 수 있다. 만약 이들 친구들이 상이한 데이터베이스 서버와 캐시 시스템에 걸쳐 무작위로 흩어져있으면, 산개 질의가 수행될 것이다.
특정 실시예에서, 캐시 시스템(604)은 동일한 캐시 시스템 내의 친구들을 클러스터링하도록 구성될 수 있고, 그러므로 캐시 집약성이 증가한다. 공통 캐시 시스템에 로컬인 친구의 수를 증가시키는 것은 요청 받은 공통의 친구에 대한 사용자 정보가 이미 사용자 정보에 대한 이전 질의에 의해 캐시되었을 확률을 증가시킬 수 있다. 이 방식으로 캐시 적중률(cache hit rate)을 증가시키는 것은 공통의 친구에 대한 사용자 정보가 상이한 데이터베이스 서버(602)에 저장되어 있더라도 산개 질의를 감소시킨다. 그러므로, 캐시 집약성과 캐시 적중률을 높이는 것은, 특히 극도로 많은 수의 노드 및 질의를 다룰 때 성능, 네트워크 트래픽의 감소, 기타 등등에 막대한 이점을 제공할 수 있다.
도 7은 일실시예에 따른 매핑 모듈을 도시한다. 매핑 모듈(104)은 파티셔닝 모듈(702), 라우팅 모듈(704), 부하 모니터링 모듈(706) 및 시간적 균형 모듈(708)을 포함하는 것으로 도시된다. 파티셔닝 모듈(702)은 그래프가 파티셔닝될 파티션의 수를 결정할 수 있다. 파티션의 수는 그래프 데이터가 분산될 물리적인 장치(예컨대, 데이터베이스 서버(602) 또는 캐시 시스템(604))의 수에 관련될 수 있다. 그 후 고유 ID 공간은 각 파티션에 대한 노드의 수에 기반하여 나누어질 수(또는 분리될 수) 있다.
예를 들어, 만약 노드로 표현되는, 10억명의 사용자의 소셜 그래프가 100개의 캐시 시스템으로 파티셔닝된다면, 사용자의 수(예컨대, 10억)는 파티션의 수(예컨대, 100)으로 나누어져 파티션 크기, 즉 파티션당 사용자의 수(예컨대, 파티션당 1000만명의 사용자)를 제공할 수 있다. 따라서, 고유 ID 공간은 파티션 크기로 나누어져, 파티션당 1000만개의 고유 ID가 나온다. 고유 ID 공간은 수적으로 연속이기 때문에, 각 파티션의 1000만개의 고유 ID는 서로 수적으로 근접한다. 그러므로, 고유 ID 공간 내의 도시와 커뮤니티의 클러스터링은 다수의 장치에 걸친 소셜 그래프의 파티셔닝에 반영된다. 나아가, 고유 ID 공간에 클러스터링될 친구의 경향성은 그래프의 장치로의 파티셔닝에 반영된다. 이 예시에서, 파티션 크기는 동일하고(예컨대, 파티션당 1000만명의 사용자), 각 장치에 동일한 수의 고유 ID의 결과를 낳는다. 다른 예시에서, 파티션 크기는 동일하지 않을 수 있고, 장치 상의 고유 ID의 수가 다양하게 될 수 있다.
라우팅 모듈(704)은 파티셔닝 모듈(702)에 대해 서술된 바와 같이, 고유 ID 공간과 파티션의 분할에 기반하여 장치에 사용자를 매핑할 수 있다. 라우팅 모듈(704)은 그 후 매핑에 따라 사용자를 장치로 라우팅할 수 있다. 예를 들어, 일부 예시에서, 애플리케이션을 위한 파티션(예컨대, 장치)의 수는 알려질 것이고, 고유 ID 공간은 서술된 바와 같이 분할되어 장치의 캐시층에 사용자를 매핑할 수 있다. 예를 들어, 고유 ID 공간의 분할은 두 장치 간에 도시 또는 커뮤니티를 분리하는 결과를 낳을 수 있다. 나아가, 일부 레벨의 커뮤니티는 클 수 있고, 따라서 모든 커뮤니티가 단일 장치에 맞지 않을 수 있다. 일실시예에서, 파티션 크기(예컨대, 파티션당 사용자의 수)는 도시 또는 커뮤니티의 집약성의 완전성의 유지에 따라 조정될 수 있다.
고유 ID 공간은 캐시 시스템에 사용자를 매핑하는데 사용될 수 있다. 고유 ID는 동일한 캐시 시스템에 친구들의 클러스터를 라우팅되게 할 수 있는데, 집약성을 매우 향상시킬 수 있고 그러므로 네트워크화된 컴퓨터 시스템에 제공되는 질의의 처리(또는 실행)에 장점을 제공한다. 질의는 임의의 타입, 예컨대 소셜 네트워킹 시스템에 제출되는 "친구의 친구" 질의일 수 있다. 질의는 질의를 실행하는데 필요한 적절한 캐시 시스템으로 안내될 수 있다. 예를 들어, 사용자 A의 친구에 대한 질의는 사용자 A의 고유 ID에 기반하여 사용자 A가 매핑된 장치로 전송될 것이다.
특정 사례에서, 기존재하는 ID(예컨대, 사용자 ID)는 이미 노드에 할당되어 데이터베이스 서버에 사용자를 매핑하는데 사용될 수 있으나, 에지 가중치 또는 가까이 연결된 노드의 바람직한 클러스터링을 고려하지 않는 방식이다. 이러한 경우, 고유 ID는 대안적인 식별자를 구성할 수 있다. 사용자 ID는 고유의 ID에 매핑될 수 있고, 고유 ID는 사용자를 캐시 시스템에 매핑하는데 사용될 수 있다. 이 방법으로, 고유 ID 공간의 장점이 캐시층(예컨대, 캐시 시스템)에서 실현되며 지속성 메모리층(예컨대, 데이터베이스 서버)의 사용자 데이터가 유지될 수 있다. 일실시예에서, 사용자 ID의 고유 ID로의 매핑은 사용자 ID가 캐시층 동작을 위해 고유 ID로 변환될 때마다 접근되는 장치에 저장될 수 있다.
본 명세서에 서술되는 고유 ID의 다른 장점은 고유 ID를 생성하기 위하여 파티션의 수가 알려질 필요가 없다는 것이다. 예를 들어, 만약 다수의 서비스가 다른 수의 파티션을 요구한다면, 동일한 고유 ID 공간이 대응하는 수의 파티션에 기반하여 나누어질 수 있다. 예를 들어, 소셜 그래프의 예시에서, 네트워크화된 컴퓨터 시스템은 데이터베이스 서버와 캐시의 지속성 메모리층(또는 티어(tier)) 및 캐시 시스템의 캐시층(또는 티어)을 포함할 수 있다. 한 캐시층 서비스는 100개의 캐시 시스템(예컨대, 100개의 파티션)에 걸쳐 구현되는 인덱스 서비스일 수 있다. 다른 캐시층 서비스는 200개의 캐시 시스템(예컨대, 200개의 파티션)에 걸쳐 구현되는 뉴스피드 서비스일 수 있다. 또 다른 캐시층 서비스는 300개의 캐시 시스템(예컨대, 300개의 파티션)에 걸쳐 구현되는 그래프 서비스일 수 있다. 이 방법으로, 지속성 메모리층은 충분히 정적으로 유지되지만, 캐시층은 동적으로 구성될 수 있다.
고유 ID에 기반하여 사용자를 라우팅하는 것은 산개 문제를 매우 향상시킬 수 있다. 만약 장치의 사용자가 유사한 데이터에 접근하는 경향이 있다면, 데이터는 데이터에 대한 최초 질의 이후에 캐시되고 동일한 데이터를 필요로 하는 후속 질의를 위해 사용가능할 것이다. "친구의 친구" 질의의 사례를 고려한다. 친구 또는 커뮤니티는 동일한 캐시 시스템에 클러스터링될 수 있다. 그러므로, 사용자 A가 그녀의 친구에 대한 질의를 제출할 때, 만약 이미 캐시에 있지 않다면, 사용자 A의 모든 친구에 대한 데이터가 캐시에 페치되고 저장된다. 만약 사용자 B가 사용자 A와 친구라면, 특히 사용자 A와 사용자 B가 같은 도시에 산다면, 사용자 A와 사용자 B는 공통으로 몇몇 친구를 가지고 있을 확률이 있다. 그러므로, 사용자 B가 그녀의 친구에 대한 캐시를 제출할 때, 사용자 A와 사용자 B의 공통의 친구에 대한 임의의 데이터가 이미 사용자 A가 질의를 제출했을 때부터 캐시되어 있을 것이다. 공통의 친구의 수가 많을수록, 더 효율적으로 된다. 나아가, 많은 수의 친구(예컨대, 5억명의 사용자, 10억명의 사용자, 기타 등등)에 적용될 때, 성능과 네트워크 트래픽의 엄청난 이득이 실현될 수 있다.
나아가, 상이한 질의에 있어 사용자를 동일한 장치로 라우팅함으로써, 사용자는 이미 캐시한 데이터의 장점을 얻을 수 있다. 예를 들어, 사용자가 소셜 네트워킹 시스템의 뉴스피드 또는 게시와 같은 데이터를 새로 고침할 때, 이전 데이터가 캐시된 동일한 장치로 질의가 전송되게 하는 것은 데이터를 획득하는 속도에 있어 막대한 향상을 제공한다.
본 명세서에 서술된 특정 예시가 사용자와 그 친구 관계에 관련될 수 있지만, 근본적인 개념 및 원리는 다른 노드와 연결에 적용될 수 있다. 본 명세서에 서술된 바와 같이, 노드는 임의의 타입일 수 있다. 나아가, 연결은 다양한 타입의 관계를 포함할 수 있다. 예를 들어, 연결은 사용자가 다른 엔티티나 사용자를 팔로우하는 "팔로우" 에지일 수 있다. 고유 ID에 기반한 장치로 노드를 라우팅하는 동일한 접근이 다른 엔티티와 단지 사람이 아닌 것으로도 확장되어, 예컨대 축구가 이집트에서 인기 있고, 크리켓이 방글라데시에서 인기 있고, 특정한 비즈니스가 미국에서 인기 있음을 결정할 수 있다. 예를 들어, 한 질의는 "비즈니스 A를 좋아하고 San Francisco에 사는 모든 사람을 보여줘"일 수 있다. 만약 소셜 네트워킹 시스템과 연관된 비즈니스 A의 웹 페이지가 그 팬들 중 다수와 동일한 장치에 있다면 보다 효율적으로 실행될 수 있다. 특히, 질의 실행은 비즈니스 A의 웹 페이지와 그 팬을 장치의 캐시층에 유지함으로써 향상될 수 있다.
사용자를 고유 ID 공간의 분할에 기반하여 장치에 매핑하는 것이 장치의 집약성을 향상시키지만, 각 장치의 부하는 달라질 수 있고, 일부 예시에서는 매우 다를 수 있다. 일실시예에서, 라우팅 모듈(704)은 사용자는 부하 고려에 기반하여 장치에 라우팅할 수 있다. 부하 모니터링 모듈(706)은 장치가 온라인인 동안 장치의 부하를 모니터링할 수 있고, 라우팅 모듈(704)와 함께 작동하여 부하 고려에 기반하여 사용자를 장치로 라우팅할 수 있다. 일실시예에서, 부하는 모니터링되어 임계치를 초과하거나 임계치 밑으로 떨어지는지 여부를 결정할 수 있다. 일부 사례에서, 주어진 시점에서의 장치의 부하량(예컨대, 최대 용량의 퍼센티지)이 모니터링된다.
일실시예에서, 초기 매핑은 고르게 분산되는 말든, 고유 ID 공간의 분할에 기반하고 그 후 라우팅 모듈(704)이 사용자를 부하 균형 고려에 기반하여 동적으로 라우팅할 수 있다. 예를 들어, 사용자에 의한 질의는 사용자에 대한 기존재하는 사용자 ID와 함께 수신될 수 있다. 기존재하는 사용자 ID의 고유 ID 공간으로의 매핑은 기존재하는 사용자 ID를 고유 ID로 변환하는데 사용될 수 있다. 샤드 번호는 그 후 파티션 크기에 기반하여 결정될 수 있는데, 양자는 아래 예시적인 식에 의해 결정될 수 있다:
파티션 크기=(사용자의 수)/(파티션의 수)
샤드 번호=(고유 ID)/(파티션의 수)
예를 들어, 22억5천만명의 사용자와 1만5천개의 파티션에 대하여, 파티션 크기는 파티션당 15만명의 사용자가 될 것이다. 임의의 단일 고유 ID를 15만으로 나누는 것은 그 후 해당하는 샤드 번호를 결정하기 위해 사용될 수 있다. 라우팅 모듈(704)는 그 후 부하 모니터링 모듈(706)에 의해 식별된 부하 균형 고려를 고려한 후 샤드 번호를 적절한 장치에 매핑할 수 있다. 샤드 번호가 장치에 매핑된 후, 질의가 장치 상에서 실행될 수 있다.
일실시예에서, 부하는 장치가 수신한 질의의 수를 추적함으로써 부분적으로 결정될 수 있다. 예를 들어, 애플리케이션이 질의를 수행함에 따라, 각 샤드가 처리하는 쿼리의 수를 가리키는 카운터를 내보낼 수 있다(예컨대, 애플리케이션 샤드 번호 100은 100개의 질의를 가지고, 애플리케이션 샤드 번호 101은 500개의 질의를 가지고, 기타 등등). 부하 모니터링 모듈(706)은 그 후 내보내진 카운터 데이터를 수신하고 라우팅 모듈(704)와 함께 작동하여, 예컨대 장치의 샤드 간에 사용자를 이동할지 여부 또는 어떻게 이동할지를 결정할 수 있다. 예를 들어, 부하 모니터링 모듈(706)은 장치가 처리중인 질의의 수가 임계치를 초과하였는지 여부를 모니터링할 수 있다. 만약 임계치를 초과했다면, 부하 모니터링 모듈(706)은 처리되는 질의의 수가 임계치 밑으로 떨어질 때까지 장치에 라우팅되는 추가적인 질의를 막을 수 있다. 이들 추가적인 질의는 장치가 처리 중인 질의의 수가 임계치 밑으로 떨어질 때까지 다른 장치에 라우팅될 수 있다. 유사하게, 부하 모니터링 모듈(706)은 장치가 저리중인 질의의 수가 임계치 밑으로 떨어지는지 여부를 모니터링할 수 있다. 만약 질의의 수가 임계치 밑으로 떨어지면, 부하 모니터링 모듈(706)은 이 장치가 질의 임계치를 초과한 장치에 라우팅되는 것을 막은 쿼리와 같은, 추가적인 질의를 수신할 수 있다고 결정할 수 있다.
일실시예에서, 부하 모니터링 모듈(706)은 장치가 과부하됐는지 여부를 결정하고, 이에 따라 사용자를 라우팅한다. 예를 들어, 사용자는 현재 과부하된 장치에 처음 매핑될 수 있다. 과부하 상태는 부하 모니터링 모듈(706)에 의해 감지되고 라우팅 모듈(704)로 통신되어, 사용자를 상이한, 부하가 덜 걸린 장치로 라우팅한다. 과부하된 장치는 그러므로 추가적인 부하가 막히고, 부하가 부족한 장치의 부하가 증가된다. 일실시예에서, 부하 모니터링 모듈(706)은 사용자가 질의를 위해 하나 이상의 장치를 필요로 하는지 결정할 수 있고, 라우팅 모듈(704)은 이에 따라 질의를 다른 장치로 라우팅할 수 있다. 질의 처리 요구와 같은, 부하 균형 고려에 기반한 한 샤드에서 다른 샤드로의 사용자의 이동은 집약성을 어느 정도 타협할 수 있다. 부하 모니터링 모듈(706)은 지속적으로 집약성과 질의 속도 간의 트레이드오프를 저울질할 수 있다.
일실시예에서, 지리적 위치는 제한된 사용 패턴을 보일 수 있다. 예를 들어, 특정 애플리케이션에 대하여, 특정 지리적 위치와 연관된 특정한 사용자는 예컨대, 법적인 이유, 사생활의 이유, 기타 등등으로 인하여 하나 이상의 장치로 라우팅되지 않을 수 있고, 사용되지 않는 컴퓨팅 자원을 생성할 수 있다. 예를 들어, 한 지역은 그 거주자 또는 시민에 사용가능한 특정한 애플리케이션을 사용하거나 허가하지 않을 수 있다. 예를 들어, 유럽 연합 및 캐나다는 그 시민을 위해 특정 애플리케이션을 허용하지 않을 수 있고, 그러므로 그 영역 내의 사용자는 그 애플리케이션에 접근권을 가지지 않을 수 있다. 애플리케이션을 위해 할당된 캐시 시스템의 사용되지 않는 샤드는 이들 사용자에게 사용되지 않을 것이다. 그러므로, 다른 지리적 위치와 연관된 다른 사용자는 장치로 라우팅되어 캐시 시스템의 사용되지 않는 샤드와 같은 사용가능한 컴퓨팅 자원을 이용할 수 있다.
일실시예에서, 금지된 애플리케이션과 연관된 지리적 위치에 대응하는 고유 ID 공간의 섹션은 고유 ID 공간에서 제거된다. 수정된 고유 ID 공간(통제된 지리적 위치에 대응하는 고유 ID가 없는)은 그 후 파티션의 수에 기반하여 나누어져(예컨대, 균등하게 또는 균등하지 않게) 사용자를 샤드 번호와 대응하는 장치에 매핑할 수 있다.
특정 실시예에서, 사용자는 지리적 위치와 강하게 상호관련되는 사용 패턴에 따라 장치에 연관될 수 있다. 상이한 지리적 위치는 상이한 사용 패턴을 보일 수 있다. 고유 ID 공간이 집약성의 최적화를 도울 수 있지만, 지리적 위치는 다양한 사용 패턴을 가질 수 있고, 상이한 기간 동안 장치 상의 다양한 부하에 이를 수 있다. 이들 부하 변동은 어떤 때에 장치에 큰 부하를 제공하고 다른 때엔 동일한 장치에 작은 부하를 제공함으로써 매우 다양할 수 있다.
시간적 균형 모듈(708)은 라우팅 모듈(704)와 함께 작동하여 사용자를 사용 패턴의 시간적 변동과 같은 사용 특성을 고려한 방식으로 장치에 라우팅할 수 있다. 예를 들어, 지리적 위치에 대한 부하는 하루 중 시간 에 따라 다양할 수 있다(예컨대, 근무 시간 대 비-근무 시간). 다른 예시에서, 부하는 또한 날에 따라서(예컨대, 휴일 대 일반일) 또는 다른 더 큰 시간 간격에 따라서(예컨대, 여름 휴가 대 농구 결승전) 다양할 수 있다. 시간적 균형 모듈(708)은 부하 모니터링 모듈(706)로부터의 데이터를 사용하여 사용 패턴을 결정하고, 사용 패턴에 기반하여, 라우팅 모듈(704)와 함께 작동하여 사용자를 다양한 장치에 라우팅하여 부하 균형을 최적화할 수 있다.
예를 들어, 시간적 균형 모듈(708)은 상호 보완적인 사용 패턴을 가지는 지리적 위치를 식별할 수 있다. 상호 보완적인 사용 패턴은 같은 위상이 아닌 지리적 위치에 의해 나타나는 사용을 말할 수 있다. 예를 들어, 상호 보완적인 사용 패턴의 한 타입은 트래픽 사용량의 피크를 가지는 제1 지리적 위치와, 동일하거나 겹치는 때에 트래픽 사용량의 골을 가지는 제2 지리적 위치를 수반할 수 있다. 유사하게, 상호 보완적인 사용 패턴의 다른 타입은 트래픽 사용량의 골을 가지는 제1 지리적 위치와, 동일하거나 겹치는 때에 트래픽 사용량의 피크를 가지는 제2 지리적 위치를 수반할 수 있다. 두 지리적 위치를 높은 트래픽과 낮은 트래픽의 큰 변동을 가지는 두 별개의 장치에 라우팅하는 대신, 시간적 균형 모듈(708)은 그들을 함께 동일한 장치(또는 장치의 클러스터)에 짝지을 수 있다. 이 방법으로, 장치는 효과적으로, 대응하는 높은 트래픽 시간 동안은 한 지리적 위치만을 주로 서비스하고, 따라서 컴퓨팅 자원의 사용을 최적화하고 장치의 부하를 균형화한다. 일실시예에서, 높은 트래픽은 트래픽이 기결정된 임계를 초과하는지 여부에 기반하여 결정될 수 있다. 유사하게, 일실시예에서, 낮은 트래픽은 트래픽이 기결정된 임계 밑으로 떨어지는지 여부에 기반하여 결정될 수 있다.
소셜 네트워킹 시스템 내에서, 지리적 위치(예컨대, 도시, 나라, 커뮤니티, 기타 등등)나 연관된 샤드는 피크 타임과 비-피크 타임 동안 소셜 네트워킹 시스템의 사용량에 큰 변동을 나타낼 수 있다. 이 패턴은 예컨대, 공통적인 지리적 영역 또는 시간대의 상이한 사용자에 의하여 일반적으로 나타날 수 있다. 예를 들어, 많은 도시, 지역, 심지어 나라가 사람들이 자는 경향이 있는 밤 동안, 낮보다 적은 트래픽을 나타낼 수 있다. 그러므로, 트래픽은 12시간 또는 다른 시간 간격으로 분류될 수 있다. 다른 예로서, 제1 지리적 위치는 하루 중 8시간 간격 동안 구별되는 사용량(예컨대, 많은 트래픽 또는 최소의 트래픽)을 나타낼 수 있고, 제2 지리적 위치는 하루 중 6시간 간격 동안 구별되는 사용량을 나타낼 수 있고, 제3 지리적 위치는 적거나 구별되지 않는 사용 패턴을 나타낼 수 있다.
사용 패턴은 특정 지리적 영역과 연관된 습관 또는 문화에 기반할 수 있다. 예를 들어, 한 지리적 위치의 사람들은 대개 소셜 네트워킹 시스템을 집에서 사용할 수 있다. 다른 지리적 위치는 대개 소셜 네트워킹 시스템을 직장에서 사용할 수 있다. 또 다른 지리적 위치가 소셜 네트워킹 시스템을 대개 주말 또는 다른 특별한 날에 사용할 수 있다.
나아가, 소셜 네트워킹 시스템의 사용자는 상이한 지리적 위치에 균등하지 않게 분포할 수 있다. 예를 들어, 미국과 유럽은 동일하거나 겹치는 기간에 걸쳐 막대한 사용 패턴을 보이는 매우 많은 수의 사용자를 가질 수 있다. 이들 두 지역의 피크 시간대는 겹칠 수 있고, 겹치는 시간대 동안 엄청난 사용량 조합을 생성할 수 있다. 따라서, 이들 지리적 위치의 사용자의 조합은 장치에 과도한 부하 변동을 일으킬 수 있다. 따라서, 일실시예에서, 각 지리적 위치가 피크 사용량을 보이는 시간 동안, 한 지리적 위치와 연관된 사용자는 과도한 부하 변동을 피하기 위하여 시간적 균형 모듈(708)에 의하여 그 시간 동안 상이한 자칭에 라우팅될 수 있다. 사용자는 피크 시간 간격 이후에는 원래의 장치로 복귀할 수 있다. 이 방식으로 사용자를 라우팅하여 과도한 부하 변동을 피하는 것은 임의의 수의 지리적 위치에 대하여 임의의 간격에 걸쳐 수행되어 부하 균형을 최적화할 수 있다. 시간적 균형 모듈(708)은 많거나 적은 사용량과 연관된 시간 간격을 식별할 수 있고 따라서 특정 지리적 위치를 동일한 장치로 그루핑하거나 묶어 부하를 최적화할 수 있다. 시간적 균형 모듈(708)은 다양한 수의 지리적 위치와 다양하게 크기가 부여된 시간 간격을 섞고 매칭하는 임의의 수의 순열을 구현하여 상이한 사용 패턴에 대하 부하 균형을 최적화할 수 있다.
시간적 균형 모듈(708)은 지리적 위치를 상호 보완적인 시간대로 묶을 수 있다. 예를 들어, 두 지리적 위치는 12시간으로 서로 상호 보완적일 수 있고, 세 지리적 위치가 8시간으로 서로 상호 보완적일 수 있는 등이다. 지리적 위치의 이 묶음은 전 세계의 지리적 위치에 대하여 다양한 조합으로 수행될 수 있다. 일부 사례에서, 시간적 균형 모듈(708)은 상이한 지리적 위치를 부하 균형의 목적으로 단위로서 취급할 수 있다.
시간적 균형 모듈(708)은 또한 부하 균형과 집약성 간의 트레이드오프를 고려할 수 있다. 예를 들어, 두 지리적 위치가 사용 패턴에 관하여 서로 상호 보완적일 수 있지만, 만약 집약성으로의 영향이 너무 크면 그들이 반드시 동일한 장치로 라우팅되지 않을 수 있다.
다양한 시스템과 기술이 부하의 변화를 고려하여 구현될 수 있다. 일실시예에서, 장치의 범용 풀(general purpose pools of machines)은 과도한 부하 요구 또는 유지 보수 등으로 인한 부하 처리 용량의 감소를 수용하도록 구현될 수 있다. 예를 들어, 만약 장치가 현재 과부하되었거나 유지 보수로 인해 작동 불가능하다면, 장치에 매핑된 질의는 일시적으로 장치가 더 이상 과부하되거나 유지 보수로 인해 작동 불가능하지 않을 때까지 장치의 범용 풀로 라우팅될 수 있다.
일실시예에서, 샤드와 연관된 장치 풀의 크기는 부하 요구 또는 예측된 부하 요구에 응답하여 동적으로 달라질 수 있다. 예를 들어, 장치 풀에 할당된 장치의 수는 높거나 낮은 부하 요구를 고려하여 각각 동적으로 증가하거나 감소할 수 있다. 일부 사례에서, 장치 풀의 크기는 예측된 1일 부하 변화에 기반하여 달라질 수 있다. 일부 사례에서, 장치 풀의 크기는 예측되지 않은 부하 급증, 예컨대 커뮤니티 응급 상황으로 인한 부하 급등에 응답하여 달라질 수 있다.
일부 사례에서, 특정 사용자, 커뮤니티 또는 샤드는 예측되지 않게 높은 부하를 유발할 수 있다. 예를 들어, 사용자는 갑작스런 전국의 관심을 받는 연예인이거나 유명 인사일 수 있고, 동시에 사용자의 계정에 대한 많은 질의를 이끌어 낼 수 있다. 사용자의 계정과 연관된 장치 또는 샤드에 가해지는 부하 요구의 갑작스럽고 과도한 증가는 지장이 될 수 있다. 사용자 또는 샤드와 연관된 장치 풀의 크기는 증가한 부하 요구를 수용하도록 동적으로 증가될 수 있다. 일실시예에서, 질의는 장치의 범용 풀로 라우팅되어 부하 요구의 완화를 도울 수 있다. 일부 사례에서, 사용자 또는 샤드와 연관된 장치 풀이 동적으로 리사이즈될 때까지 질의는 장치의 범용 풀로 라우팅된다.
일부 사례에서, 부하 요구는 사용자의 커뮤니티와 효과적으로 연결되지 않거나 연관된 고유 ID를 가지지 않는 사용자, 예컨대 익명 사용자, 친구가 없는 사용자, 로그인하지 않은 사용자, 검색 엔진 수집기, 기타 등등에 의해 생성될 수 있다. 이들 사용자는 커뮤니티 또는 고유 ID와 효과적으로 연관되지 않기 때문에, 그들이 생성하는 부하 요구는 반드시 본 명세서에 서술되는 부하 및 성능 이점의 일부에서 이득을 얻거나, 기여하지 않는다. 일실시예에서, 이러한 사용자로부터의 질의는 장치의 범용 풀, 이들 비-소셜 사용자 타입을 위한 전용 장치 풀 또는 장치 풀이나 다수의 장치 풀들 내의 전체에 걸쳐 부하 균형화된 장치 세트로 라우팅될 수 있다.
사용자와 커뮤니티, 고유 ID 또는 샤드로의 매핑은 때에 따라, 클러스터링의 변화 또는 노드 그래프가 파티셔닝되는 방법 등으로 인하여 크게 변할 수 있다. 이전 매핑에서 크게 변한 새로운 매핑을 배치하는 충격을 감소시키기 위하여, 업데이트는 점진적으로 또는 전세계적인 비-피크 시간 동안과 같이 트래픽이나 부하가 감소됐을 때 배치될 수 있다. 일실시예에서, 버전 식별자가 고유 ID, 커뮤니티 식별자 또는 샤드 식별자와 함께 현재 질의를 위하여 어떤 매핑이 이용되는지 고유하게 식별하기 위하여 사용될 수 있다.
도 8은 일실시예에 따른 부하 균형 고려에 기반하여 사용자를 장치에 매핑하는 프로세스의 예시를 도시한다. 블록(802)에서, 장치의 부하와 사용 시간이 모니터링된다. 모니터링은 동적, 예컨대 질의가 수신됨에 따라 결정될 수 있다. 예를 들어, 만약 질의가 수신되고 처음 장치(또는 가까이 연관된 복수의 장치, 예컨대 장치 풀)에 매핑되면, 장치의 현재 부하가 먼저 모니터링되어 과부하인지 결정될 수 있다. 다른 예시에서, 지리적 위치의 사용 패턴이 모니터링될 수 있다. 일실시예에서, 블록(802)은 도 7의 부하 모니터링 모듈(706)에 의해 수행될 수 있다.
블록(804)에서, 재할당됨으로써 그 부하를 향상시킬 수 있는 사용자 또는 지리적 위치가 식별된다. 이것은 높은 부하를 가지는 장치를 식별하는 것 또는 낮은 부하를 가지는 장치를 식별하는 것을 포함할 수 있다. 이 부하들은, 예컨대, 임의의 주어진 시간에 사용 트래픽의 동적인 변화에 기반하여 다양할 수 있다(예컨대, 장치가 한번에 너무 많은 질의를 가지고 있음). 부하는 또한 임의의 타입의 사용 패턴에 기반하여 식별될 수 있다. 사용 패턴은 하나 이상의 사용 기간, 예컨대 12시간, 8시간, 4시간 등에 기반하여 식별될 수 있다.
블록(806)에서, 부하 균형에 이득이 되는 사용자 또는 지리적 위치의 적절한 재할당이 결정된다. 예를 들어, 질의의 실행에 관하여, 만약 초기 매핑이 과부하된 장치에 대한 것이면, 질의는 부하가 부족한 다른 장치에 매핑될 수 있다. 다른 예로, 둘 이상의 지리적 위치의 질의가 부하의 균형을 최적화하기 위하여 그 상호 보완적인 사용 패턴에 기반하여 함께 묶일 수 있다. 지리적 위치는 다양한 수의 지리적 위치와 다양한 시간 간격을 섞고 매칭하는 임의의 수의 순열로 함께 묶여 다양한 사용 패턴에 대해 부하 균형을 최적화할 수 있다. 일실시예로, 블록(804 및 806)은 도 7의 부하 모니터링 모듈(706) 및 시간적 균형 모듈(708)에 의해 수행될 수 있다.
블록(808)에서, 사용자는 블록(806)의 재할당에 기반하여 장치에 매핑된다. 묶인 지리적 위치에 대하여, 묶인 지리적 위치의 사용자가 블록(806)에서 결정된 최적화된 구성에 따라 매핑되고 라우팅된다. 예를 들어, 반대의 사용 패턴을 가지는 두 상호 보완적인 지리적 위치가 동일한 장치에 매핑되고 라우팅될 수 있다.
도 9는 일실시예에 따른 장치(또는 가까이 연관된 복수의 장치, 예컨대 장치 풀)로 질의를 라우팅하는 프로세스의 예시를 도시한다. 도 6 내지 8에 대해 상술한 내용은 도 9의 프로세스에도 적용될 수 있다. 간결성과 명확성을 위하여, 유사한 특징 및 기능은 도 9에 대하여 여기 반복되지 않지만, 동일하게 적용가능할 수 있다.
프로세스(900)의 블록(902)에서, 질의(또는 요청)가 수신된다. 예를 들어, 시스템은 소셜 네트워킹 시스템의 사용자에 의해 시작된 질의를 수신할 수 있다. 질의는 질의와 함께 사용자에 대한 사용자 ID를 포함할 수 있다. 블록(904)에서, 고유 ID가 사용자 ID로부터 결정된다. 예를 들어, 사용자 ID로부터 고유 ID로의 매핑이 사용자 ID를 고유 ID로 변환하는데 사용될 수 있다. 블록(906)에서, 샤드 번호가 고유 ID에 기반하여 결정될 수 있다. 예를 들어, 본 명세서에 서술된 바와 같이, 샤드 번호는 파티션 크기에 기반하여 결정될 수 있다. 일실시예에서, 블록(902, 904 및 906)은 도 7의 샤드 결정 모듈(702)에 의해 수행될 수 있다.
블록(908)에서, 샤드 번호는 물리적 장치(또는 가까이 연관된 복수의 장치)에 매핑될 수 있다. 일실시예에서, 샤드 번호는 고유 ID 공간의 물리적 장치로의 균등한 분할에 기반하여 물리적 장치에 매핑된다. 일실시예에서, 일실시예에서, 샤드 번호는 고유 ID 공간의 비균등한 분할에 기반하여 물리적 장치에 매핑된다. 일실시예에서, 본 명세서에 보다 자세히 서술되는 바와 같은 부하 균형 고려 또한 샤드 번호의 물리적 장치로의 매핑에 고려될 수 있다.
블록(910)에서, 장치가 선택된다. 만약 샤드 번호가 복수의 장치, 예컨대 장치 풀에 매핑되면, 장치 중 하나가 선택된다. 블록(912)에서, 선택된 장치가 동적으로 질의를 거절하는지 여부가 결정된다. 만약 질의가 선택된 장치에 의해 거절되지 않는다면, 질의는 선택된 장치로 라우팅되고 선택된 장치에 의해 블록(914)에서 실행된다. 하지만, 만약 질의가 선택된 장치에 의해 거절되면, 블록(912)으로부터 블록(910)으로의 화살표로 표시되는 바와 같이 다른 장치가 선택될 수 있다. 예를 들어, 만약 복수의 장치에서 선택된 제1 장치가 거절되면, 복수의 장치 중 다른 장치가 선택될 수 있다. 이 선택 프로세스는 복수의 장치 중 한 장치가 질의를 수락할 때까지 계속될 수 있다. 일실시예에서, 만약 복수의 장치 중 어느 것도 선택되어 성공적으로 질의를 수신하지 못하면(예컨대, 과부하 또는 유지 보수로 인하여), 질의는 장치의 범용 풀로 라우팅될 수 있다. 만약 샤드 번호가 블록(908)에서 단일 장치로 매핑되고, 그 장치가 질의를 거절하면, 장치의 범용 풀로부터의 장치와 같은, 대체 장치가 선택되어 질의를 수신할 수 있다. 다른 실시예에서, 만약 질의가 선택된 장치에게 거절되면, 질의는 기결정된 대기 기간 이후 동일한 장치로 재전송될 수 있다. 일실시예에서, 블록(908, 910, 912 및 914)은 도 7의 라우팅 모듈(704), 부하 모니터링 모듈(706) 및 시간적 균형 모듈(708)에 의해 수행될 수 있다.
소셜 네트워킹 시스템 - 예시적인 구현예
도 10은 본 발명의 실시예에 따른, 소셜 네트워크 내에서 비디오 링크를 대체하기 위한 예시적인 시스템(1000)의 네트워크 다이어그램이다. 시스템(1000)은 하나 이상의 사용자 장치(1010), 하나 이상의 외부 시스템(1020), 소셜 네트워킹 시스템(1030), 및 네트워크(1050)를 포함한다. 일실시예로, 전술한 실시예들과 연계하여 논의된 소셜 네트워킹 시스템은 소셜 네트워킹 시스템(1030)으로 구현될 수 있다. 예시적인 목적을 위해, 도 10에 의해 도시된 시스템(1000)의 실시예는 단일 외부 시스템(1020) 및 단일 사용자 장치(1010)를 포함한다. 하지만, 다른 실시예로, 시스템(1000)은 더 많은 사용자 장치(1010) 및/또는 더 많은 외부 시스템(1020)을 포함할 수 있다. 특정 실시예로, 소셜 네트워킹 시스템(1030)은 소셜 네트워크 제공자에 의해 운영되는 한편, 외부 시스템(1020)은, 상이한 엔티티들에 의해 운영될 수 있는 점에서 소셜 네트워킹 시스템(1030)으로부터 분리되어 있다. 하지만, 다양한 실시예로, 소셜 네트워킹 시스템(1030) 및 외부 시스템(1020)은 소셜 네트워킹 시스템(1030)의 사용자들 (또는 구성원들)에게 소셜 네트워킹 서비스를 제공하기 위해 함께 동작한다. 이러한 측면에서, 소셜 네트워킹 시스템(1030)은, 외부 시스템(1020)과 같은 다른 시스템들이 인터넷을 통해 사용자에게 소셜 네트워킹 서비스 및 기능을 제공하는데 사용할 수 있는 플랫폼 또는 백본을 제공한다.
사용자 장치(1010)는 사용자로부터 입력을 수신하고 네트워크(1050)를 통해 데이터를 송수신할 수 있는 하나 이상의 컴퓨팅 장치를 포함한다. 일실시예로, 사용자 장치(1010)는 예컨대, Microsoft Windows 호환가능한 운영 시스템(OS), Apple OS X, 및/또는 리눅스 배포판을 실행하는 종래의 컴퓨터 시스템이다. 다른 실시예로, 사용자 장치(1010)는 가령 스마트폰, 태블릿, PDA(personal digital assistant), 모바일 전화 등과 같은 컴퓨터 기능을 갖는 장치일 수 있다. 사용자 장치(1010)는 네트워크(1050)를 통해 통신하도록 구성된다. 사용자 장치(1010)는 예컨대, 사용자 장치(1010)의 사용자가 소셜 네트워킹 시스템(1030)과 상호작용할 수 있게 하는 브라우저 애플리케이션과 같은 애플리케이션을 실행할 수 있다. 또 다른 실시예로, 사용자 장치(1010)는 iOS 및 ANDROID와 같은 사용자 장치(1010)의 네이티브 운영 시스템에 의해 제공되는 API(application programming interface)를 통해 소셜 네트워킹 시스템(1030)과 상호작용한다. 사용자 장치(1010)는, 유선 및/또는 무선 통신 시스템을 사용하는 로컬 영역 및/또는 광역 네트워크의 임의의 조합을 포함할 수 있는 네트워크(1050)를 통해 외부 시스템(1020) 및 소셜 네트워킹 시스템(1030)과 통신하도록 구성된다.
일실시예로, 네트워크(1050)는 표준 통신 기술 및 프로토콜을 사용한다. 따라서, 네트워크(1050)는 Ethernet, 802.11, WiMAX(worldwide interoperability for microwave access), 3G, 4G, CDMA, GSM, LTE, DSL(digital subscriber line) 등과 같은 기술을 사용하는 링크를 포함할 수 있다. 유사하게, 네트워크(1050)에서 사용되는 네트워킹 프로토콜은 MPLS(multiprotocol label switching), TCP/IP(transmission control protocol/Internet protocol), UDP(User Datagram Protocol), HTTP(hypertext transport protocol), SMTP(simple mail transfer protocol), FTP(file transfer protocol) 등을 포함할 수 있다. 네트워크(1050) 상에서 교환되는 데이터는 HTML(hypertext markup language) 및 XML(extensible markup language)을 포함하는 기술 및/또는 포맷을 사용하여 표현될 수 있다. 추가로, 모든 또는 일부 링크는 SSL(secure sockets layer), TLS(transport layer security), 및 IPsec(Internet Protocol security)와 같은 종래의 암호화 기술을 사용하여 암호화될 수 있다.
일실시예로, 사용자 장치(1010)는 브라우저 애플리케이션(1012)을 사용하여, 외부 시스템(1020) 및 소셜 네트워킹 시스템(1030)으로부터 수신된 마크업 언어 문서(1014)를 프로세싱함으로써 외부 시스템(1020) 및/또는 소셜 네트워킹 시스템(1030)으로부터의 컨텐츠를 디스플레이할 수 있다. 마크업 언어 문서(1014)는 컨텐츠 및 컨텐츠의 포맷 또는 프레젠테이션을 기술하는 하나 이상의 명령어들을 식별한다. 마크업 언어 문서(1014)에 포함된 명령어들을 실행함으로써, 브라우저 애플리케이션(1012)은 마크업 언어 문서(1014)에 의해 기술된 포맷 또는 프레젠테이션을 사용하여 식별된 컨텐츠를 디스플레이한다. 예컨대, 마크업 언어 문서(1014)는, 외부 시스템(1020) 및 소셜 네트워킹 시스템(1030)으로부터 검색된 텍스트 및/또는 이미지 데이터를 포함하는 다수의 프레임들을 갖는 웹 페이지를 생성하고 디스플레이하기 위한 명령어들을 포함한다. 다양한 실시예로, 마크업 언어 문서(1014)는 XML(extensible markup language) 데이터, XHTML(extensible hypertext markup language) 데이터, 또는 다른 마크업 언어 데이터를 포함하는 데이터 파일을 포함한다. 추가로, 마크업 언어 문서(1014)는 JSON(JavaScript Object Notation) 데이터, 패딩(padding)을 갖는 JSON(JSONP), 및 외부 시스템(1020)과 사용자 장치(1010) 사이의 데이터 상호교환을 용이하게 하는 자바스크립트 데이터를 포함할 수 있다. 사용자 장치(1010)상의 브라우저 애플리케이션(1012)은 마크업 언어 문서(1014)를 디코딩하기 위해 자바스크립트 컴파일러를 사용할 수 있다.
마크업 언어 문서(1014)는 또한, FLASH™ 또는 Unity™ 애플리케이션들, SilverLight™ 애플리케이션 프레임워크(framework) 등과 같은 애플리케이션 또는 애플리케이션 프레임워크를 포함하거나 링크할 수 있다.
일실시예로, 사용자 장치(1010)는 또한, 사용자 장치(1010)의 사용자가 소셜 네트워킹 시스템(1030)으로 로그되는지 여부를 표시하는 데이터를 포함하는 하나 이상의 쿠키(1016)를 포함하고, 이는 소셜 네트워킹 시스템(1030)으로부터 사용자 장치(1010)로 통신되는 데이터의 수정을 가능하게 할 수 있다.
외부 시스템(1020)은, 네트워크(1050)를 사용하여 사용자 장치(1010)로 통신되는 하나 이상의 웹 페이지들(1022a, 1022b)을 포함하는 하나 이상의 웹 서버들을 포함한다. 외부 시스템(1020)은 소셜 네트워킹 시스템(1030)으로부터 분리된다. 예컨대, 외부 시스템(1020)은 제1 도메인과 연관되는 한편, 소셜 네트워킹 시스템(1030)은 분리된 소셜 네트워킹 도메인과 연관된다. 외부 시스템(1020)에 포함된 웹 페이지들(1022a, 1022b)은 컨텐츠를 식별하고 식별된 컨텐츠의 포맷 또는 프레젠테이션을 특정하는 명령어들을 포함하는 마크업 언어 문서(1014)를 포함한다.
소셜 네트워킹 시스템(1030)은 복수의 사용자들을 포함하는 소셜 네트워크를 위해 소셜 네트워크의 사용자들에게 소셜 네트워크의 다른 사용자들과 통신하고 상호작용하는 능력을 제공하는 하나 이상의 컴퓨팅 장치를 포함한다. 일부 예에서, 소셜 네트워크는 그래프 즉, 에지 및 노드를 포함하는 데이터 구조로 표현될 수 있다. 데이터 베이스, 객체, 클래스, 메타 구성요소, 파일, 또는 임의의 다른 데이터 구조를 포함하지만 이에 제한되지 않는 다른 데이터 구조가 또한, 소셜 네트워크를 표현하는데 사용될 수 있다. 소셜 네트워킹 시스템(1030)은 오퍼레이터에 의해 관리되고, 유지되거나, 또는 제어될 수 있다. 소셜 네트워킹 시스템(1030)의 오퍼레이터는 사람, 자동화된 애플리케이션, 또는 컨텐츠를 관리하고, 정책을 규제하고, 소셜 네트워킹 시스템(1030) 내에서 사용 메트릭을 수집하기 위한 일련의 애플리케이션들일 수 있다. 임의의 타입의 오퍼레이터가 사용될 수 있다.
사용자들은 소셜 네트워킹 시스템(1030)에 가입할 수 있고, 이후 그들이 연결되고자 하는 소셜 네트워킹 시스템(1030)의 임의의 수의 다른 사용자들에 대한 연결을 추가할 수 있다. 본 명세서에서 사용되는 용어 "친구"는, 사용자가 소셜 네트워킹 시스템(1030)을 통해 연결, 연관, 또는 관계를 형성한 소셜 네트워킹 시스템(1030)의 임의의 다른 사용자를 의미한다. 예컨대, 일실시예로, 소셜 네트워킹 시스템(1030)에서의 사용자들이 소셜 그래프에서 노드로 표현된다면, 용어 "친구"는 2개의 사용자 노드를 직접 연결하고 그 사이에 형성되는 에지를 의미할 수 있다.
연결은 사용자에 의해 명시적으로 추가되거나 사용자의 공통의 특징(예컨대, 동일한 교육 기관의 졸업생들인 사용자들)에 기반하여 소셜 네트워킹 시스템(1030)에 의해 자동으로 생성될 수 있다. 예컨대, 제1 사용자는 구체적으로 특정의 다른 사용자를 친구로 선택한다. 소셜 네트워킹 시스템(1030)에서의 연결은 보통 양방향이지만, 그럴 필요는 없고, 따라서 용어들 "사용자" 및 "친구"는 준거 기준(frame of reference)에 따른다. 소셜 네트워킹 시스템(1030)의 사용자들 사이의 연결은 보통 양방향("쌍방향"), 또는 "상호적"이지만, 연결들은 또한, 일방적, 또는 "일방향"일 수 있다. 예컨대, Bob과 Joe가 모두 소셜 네트워킹 시스템(1030)의 사용자들이고 서로에게 연결되어있다면, Boe과 Joe는 서로의 연결들이다. 반면에, Bob이 소셜 네트워킹 시스템(1030)으로 Joe에 의해 통신되는 데이터를 열람하기 위해 Joe에게 연결하기를 희망한지만, Joe가 상호 연결을 형성하기를 희망하지 않는다면, 일방향 연결이 확립될 수 있다. 사용자들 사이의 연결은 직접적인 연결일 수 있지만, 소셜 네트워킹 시스템(1030)의 일부 실시예들은 하나 이상의 연결 레벨 또는 이격도를 통한 간접적인 연결을 허용한다.
사용자들 사이의 연결을 확립 및 관리하고 사용자들 사이의 상호작용을 허용하는 것에 추가로, 소셜 네트워킹 시스템(1030)은 사용자들에게 소셜 네트워킹 시스템(1030)에 의해 지원되는 다양한 타입의 아이템들에 대해 행위를 수행할 능력을 제공한다. 이러한 아이템들을, 소셜 네트워킹 시스템(1030)의 사용자들이 속할 수 있는 그룹들 또는 네트워크들(즉, 사람들, 엔티티들, 및 컨셉들의 소셜 네트워크), 사용자가 관심있을 수 있는 이벤트 또는 캘린더 엔트리들, 사용자가 소셜 네트워킹 시스템(1030)을 통해 사용할 수 있는 컴퓨터-기반의 애플리케이션들, 사용자가 소셜 네트워킹 시스템(1030)에 의해 제공되거나 소셜 네트워킹 시스템(1030)을 통한 서비스를 통해 아이템들을 사거나 팔 수 있도록 하는 거래들, 사용자가 소셜 네트워킹 시스템(1030) 내에서 혹은 밖에서 수행할 수 있는 광고와의 상호작용들을 포함할 수 있다. 이들은 사용자가 소셜 네트워킹 시스템(1030)에 대해 행동할 수 있는 아이템들의 몇몇 예시에 불과하며, 많은 다른 예들이 가능하다. 사용자는 소셜 네트워킹 시스템(1030)에서 또는 소셜 네트워킹 시스템(1030)과 분리되거나 네트워크(1050)를 통해 소셜 네트워킹 시스템(1030)으로 연결된 외부 시스템(1020)에서, 표현될 수 있는 어떤 것과도 상호작용할 수 있다.
소셜 네트워킹 시스템(1030)은 또한, 다양한 엔티티들을 링크할 수 있다. 예컨대, 소셜 네트워킹 시스템(1030)은 사용자가 API, 웹 서비스, 또는 다른 통신 채널을 통해 외부 시스템(1020) 또는 다른 엔티티들과 상호작용하는 것뿐만 아니라 사용자들 서로와 상호작용할 수 있게 한다. 소셜 네트워킹 시스템(1030)은 복수의 에지에 의해 상호연결된 복수의 노드를 포함하는 "소셜 그래프"를 생성하고 관리한다. 소셜 그래프에서의 각각의 노드는 다른 노드에 대해 행동할 수 있거나 및/또는 다른 노드가 행동할 수 있는 엔티티를 표현할 수 있다. 소셜 그래프는 다양한 타입의 노드들을 포함할 수 있다. 노드의 타입의 예들은 사용자들, 비-인간 엔티티들, 컨텐츠 아이템, 웹 페이지, 그룹, 활동, 메시지, 컨셉, 및 소셜 네트워킹 시스템(1030)에서 객체에 의해 표현될 수 있는 임의의 다른 것들을 포함한다. 소셜 그래프에서의 2개의 노드 사이의 에지는 2개의 노드 사이의 특정 유형의 연결 또는 연관을 표현할 수 있고, 에지는 노드 연결로부터 또는 노드들 중 하나가 다른 노드에 대해 수행하는 행위로부터 발생할 수 있다. 일부 경우에서, 노드 사이의 에지에는 가중치가 부과될 수 있다. 에지의 가중치는 노드 사이의 연결 또는 연관의 강도와 같은 에지와 연관된 속성을 표현할 수 있다. 상이한 타입의 에지에는 상이한 가중치가 제공될 수 있다. 예컨대, 한 명의 사용자가 다른 사용자를 "좋아요"할 때 생성된 에지에는 하나의 가중치가 부여될 수 있는 한편, 사용자가 다른 사용자를 친구로 삼을 때 생성된 에지에는 상이한 가중치가 부여될 수 있다.
예로서, 제1 사용자가 제2 사용자를 친구로 식별할 때, 소셜 그래프에서의 에지는 제1 사용자를 표현하는 노드와 제2 사용자를 표현하는 제2 노드를 연결하도록 생성된다. 다양한 노드가 서로 연관되고 상호작용함에 따라, 소셜 네트워킹 시스템(1030)은 관계 및 상호작용을 반영하도록 다양한 노드를 연결하는 에지들을 수정한다.
소셜 네트워킹 시스템(1030)은 또한, 소셜 네트워킹 시스템(1030)과의 사용자 상호작용을 향상시키는 사용자-생성된 컨텐츠를 포함한다. 사용자-생성된 컨텐츠는, 사용자가 소셜 네트워킹 시스템(1030)에 추가, 업로드, 전송 또는 "게시"할 수 있는 모든 것을 포함할 수 있다. 예컨대, 사용자는 사용자 장치(1010)로부터 소셜 네트워킹 시스템(1030)에 게시물을 통신한다. 게시물은 상태 업데이트 또는 다른 텍스트 데이터, 위치 정보, 사진과 같은 이미지, 비디오, 링크, 음악, 또는 다른 유사한 데이터 및/또는 미디어와 같은 데이터를 포함할 수 있다. 컨텐츠는 또한, 제3자에 의해 소셜 네트워킹 시스템(1030)에 추가될 수 있다. 컨텐츠 "아이템"들은 소셜 네트워킹 시스템(1030)에서 객체로 표현될 수 있다. 이러한 방식으로, 소셜 네트워킹 시스템(1030)의 사용자들은, 다양한 통신 채널을 통해 미디어의 다양한 타입의 텍스트 및 컨텐츠 아이템을 게시함으로써 서로와 통신하도록 장려된다. 이러한 통신은 사용자들 서로간의 상호작용을 증가시키고 사용자가 소셜 네트워킹 시스템(1030)과 상호작용하는 빈도를 증가시킨다.
소셜 네트워킹 시스템(1030)은 웹 서버(1032), API 요청 서버(1034), 사용자 프로필 스토어(1036), 연결 스토어(1038), 행위 로거(1040), 활동 로그(1042), 인증 서버(1044), 및 비디오 대체 모듈(1046)을 포함한다. 본 발명의 일실시예로, 소셜 네트워킹 시스템(1030)은 다양한 애플리케이션을 위해 추가의, 더 적은 수의, 혹은 상이한 컴포넌트들을 포함할 수 있다. 네트워크 인터페이스, 보안 메커니즘, 로드 균형기(load balancer), 장애복구 서버(failover server), 관리 및 네트워크 운영 콘솔 등과 같은 다른 컴포넌트들은 시스템의 세부사항을 불명확하게 만들지 않기 위해 도시되지 않는다.
사용자 프로필 스토어(1036)는, 사용자에 의해 선언되었거나 소셜 네트워킹 시스템(1030)에 의해 추론된 경력, 학력, 취미 또는 선호도, 위치 등과 같은 인명적, 인구학적, 및 다른 타입의 기술적 정보를 포함하는 사용자 계정에 관한 정보를 관리한다. 이 정보는 사용자 프로필 스토어(1036)에 저장되어서, 각각의 사용자가 고유하게 식별되도록 한다. 소셜 네트워킹 시스템(1030)은 또한, 연결 스토어(1038)에서의 상이한 사용자들 사이의 하나 이상의 연결을 기술하는 데이터를 저장한다. 연결 정보는 유사하거나 공통되는 경력, 그룹 멤버쉽, 취미, 또는 학력을 갖는 사용자들을 표시할 수 있다. 추가로, 소셜 네트워킹 시스템(1030)은 상이한 사용자들 사이의 사용자-정의된 연결을 포함하여, 사용자들이 다른 사용자들과의 그들의 관계를 특정할 수 있도록 한다. 예컨대, 사용자-정의된 연결은 사용자가 사용자의 실제-삶에서의 관계들, 가령 친구들, 동료들, 파트너들 등에 필적하는 다른 사용자들과의 관계를 생성할 수 있도록 한다. 사용자들은 미리 정의된 타입의 연결로부터 선택하거나 필요에 따라 그들 스스로의 연결 타입을 정의할 수 있다. 소셜 네트워킹 시스템(1030)에서의 다른 노드들과의 연결, 가령 비-인간 엔티티들, 버켓, 클러스터 센터, 이미지, 관심사, 페이지, 외부 시스템, 컨셉 등이 또한, 연결 스토어(1038)에 저장된다.
소셜 네트워킹 시스템(1030)은 사용자가 상호작용할 수 있는 객체들에 관한 데이터를 관리한다. 이 데이터를 관리하기 위해, 사용자 프로필 스토어(1036) 및 연결 스토어(1038)는 소셜 네트워킹 시스템(1030)에 의해 관리되는 객체들의 대응하는 타입의 인스턴스들을 저장한다. 각각의 객체 타입은 객체의 타입에 적절한 정보는 저장하는데 적합한 정보 필드를 가진다. 예컨대, 사용자 프로필 스토어(1036)는 사용자의 계정 및 사용자의 계정과 관련된 정보를 기술하기에 적절한 필드를 갖는 데이터 구조를 포함한다. 특정 타입의 새로운 객체가 생성될 때, 소셜 네트워킹 시스템(1030)은 대응하는 타입의 새로운 데이터 구조를 초기화하고, 고유한 객체 식별자를 그것에 할당하며, 필요에 따라 객체에 데이터를 추가한다. 이는 예컨대, 사용자가 소셜 네트워킹 시스템(1030)의 사용자가 되고, 소셜 네트워킹 시스템(1030)이 사용자 프로필 스토어(1036)에 사용자 프로필의 새로운 인스턴스를 생성하며, 고유한 식별자를 사용자 계정에 할당하고, 사용자에 의해 제공된 정보로 사용자 계정의 필드를 채우는 것을 시작할 때에 발생할 수 있다.
연결 스토어(1038)는 사용자의 다른 사용자들에 대한 연결, 외부 시스템(1020)으로의 연결 또는 다른 엔티티들로의 연결을 기술하는데 적절한 데이터 구조를 포함한다. 연결 스토어(1038)는 또한, 연결 타입을 사용자의 연결과 연관시킬 수 있고, 연결 타입은 사용자에 관한 정보에 대한 액세스를 규제하기 위해 사용자의 개인정보 설정과 함께 사용될 수 있다. 본 발명의 일실시예로, 사용자 프로필 스토어(1036) 및 연결 스토어(1038)는 연합된 데이터베이스로 구현될 수 있다.
연결 스토어(1038), 사용자 프로필 스토어(1036), 및 활동 로그(1042)에 저장된 데이터는 소셜 네트워킹 시스템(1030)이 상이한 객체들 사이의 관계를 식별하기 위해 다양한 객체 및 노드를 연결하는 에지를 식별하도록 노드를 사용하는 소셜 그래프를 생성할 수 있도록 한다. 예컨대, 제1 사용자가 소셜 네트워킹 시스템(1030)에서 제2 사용자와의 연결을 확립한다면, 사용자 프로필 스토어(1036)로부터의 제1 사용자 및 제2 사용자의 사용자 계정들은 소셜 그래프에서 노드로서 역할을 할 수 있다. 연결 스토어(1038)에 의해 저장된 제1 사용자 및 제2 사용자 사이의 연결은 제1 사용자 및 제2 사용자와 연관된 노드들 사이의 에지이다. 이 예로 계속하면, 제2 사용자는 이후, 소셜 네트워킹 시스템(1030) 내에서 제1 사용자에게 메시지를 전송할 수 있다. 저장될 수 있는 이 메시지를 전송하는 행위는, 제1 사용자 및 제2 사용자를 표현하는 소셜 그래프에서의 2개의 노드 사이의 또 다른 에지이다. 추가로, 메시지 자체는 식별될 수 있고, 제1 사용자 및 제2 사용자를 표현하는 노드들에 연결된 또 다른 노드로서 소셜 그래프에 포함될 수 있다.
다른 예로, 제1 사용자는 소셜 네트워킹 시스템(1030)에 의해 관리되는 이미지에서 (또는 대안으로, 소셜 네트워킹 시스템(1030) 외부의 다른 시스템에 의해 관리되는 이미지)에서 제2 사용자를 태그할 수 있다. 이미지는 그 자체가 소셜 네트워킹 시스템(1030)에서 노드로 표현될 수 있다. 이러한 태깅 행위는 제1 사용자 및 제2 사용자 사이의 에지를 생성할 뿐만 아니라 소셜 그래프에서 또한, 노드가 되는 각각의 사용자들 및 이미지 사이의 에지를 생성할 수 있다. 또 다른 예로, 사용자가 이벤트에 참석하는 것을 확인한다면, 사용자 및 이벤트는 사용자 프로필 스토어(1036)로부터 획득되는 노드들이며, 여기서 이벤트의 참석은 활동 로그(1042)로부터 검색될 수 있는 노드 사이의 에지이다. 소셜 그래프를 생성하고 관리함으로써, 소셜 네트워킹 시스템(1030)은 상이한 타입의 객체 및 상호작용과 그 객체들 사이의 연결을 기술하는 데이터를 포함하고, 소셜적으로 관련된(socially relevant) 정보의 풍부한 소스를 제공한다.
웹 서버(1032)는 네트워크(1050)를 통해 소셜 네트워킹 시스템(1030)을 하나 이상의 사용자 장치(1010) 및/또는 하나 이상의 외부 시스템(1020)으로 링크한다. 웹 서버(1032)는, 가령 Java, JavaScript, Flash, XML 등과 같은 다른 웹-연관 컨텐츠뿐만 아니라 웹 페이지들을 서빙한다. 웹 서버(1032)는 메일 서버 또는 소셜 네트워킹 시스템(1030)과 하나 이상의 사용자 장치(1010) 사이의 메시지를 수신하고 라우팅하기 위한 다른 메시징 기능을 포함할 수 있다. 메시지는 인스턴트 메시지, 큐잉된 메시지(예컨대, 이메일), 텍스트 및 SMS 메시지, 또는 임의의 다른 적절한 메시지 포맷일 수 있다.
API 요청 서버(1034)는, 하나 이상의 API 함수를 호출함으로써 하나 이상의 외부 시스템(1020) 및 사용자 장치(1010)가 소셜 네트워킹 시스템(1030)으로부터 액세스 정보를 호출하도록 한다. API 요청 서버(1034)는 또한, API들을 호출함으로써 외부 시스템(1020)이 소셜 네트워킹 시스템(1030)으로 정보를 전송하도록 할 수 있다. 일실시예로, 외부 시스템(1020)은 네트워크(1050)를 통해 소셜 네트워킹 시스템(1030)으로 API 요청을 전송하고, API 요청 서버(1034)는 API 요청을 수신한다. API 요청 서버(1034)는, API 요청 서버(1034)가 네트워크(1050)를 통해 외부 시스템(1020)으로 통신하는 적절한 응답을 생성하기 위해 API 요청과 연관된 API를 호출함으로써 그 요청을 프로세싱한다. 예컨대, API 요청에 응답하여, API 요청 서버(1034)는 가령 외부 시스템(1020)으로 로그된 사용자의 연결과 같은 사용자와 연관된 데이터를 수집하고, 수집된 데이터를 외부 시스템(1020)으로 통신한다. 다른 실시예로, 사용자 장치(1010)는 외부 시스템(1020)과 동일한 방식으로 소셜 네트워킹 시스템(1030)과 API들을 통해 통신한다.
행위 로거(1040)는 소셜 네트워킹 시스템(1030) 안에서의 및/또는 밖에서의 사용자 행위에 관한 통신을 웹 서버(1032)로부터 수신할 수 있다. 행위 로거(1040)는 사용자 행위에 관한 정보로 활동 로그(1042)를 채워서 소셜 네트워킹 시스템(1030)이 소셜 네트워킹 시스템(1030) 내에서 및 소셜 네트워킹 시스템(1030) 밖에서 그것의 사용자들에 의해 행해진 다양한 행위를 발견할 수 있도록 한다. 특정 사용자가 소셜 네트워킹 시스템(1030) 상의 다른 노드에 관해 행한 임의의 행위는, 활동 로그(1042) 또는 유사한 데이터베이스 또는 다른 데이터 저장소에 관리되는 정보를 통해 각각의 사용자의 계정과 연관될 수 있다. 식별되고 저장된 소셜 네트워킹 시스템(1030) 내에서 사용자에 의해 행해진 행위의 예들은 예컨대, 다른 사용자로의 연결의 추가, 다른 사용자에게 메세지를 전송, 다른 사용자로부터의 메시지를 읽기, 다른 사용자와 연관된 컨텐츠를 열람, 다른 사용자에 의해 게시된 이벤트에 참석, 이미지를 게시, 이미지를 게시하는 것의 시도, 또는 다른 사용자 또는 다른 객체와 상호작용하는 다른 행위들을 포함할 수 있다. 사용자가 소셜 네트워킹 시스템(1030) 내에서 행위를 행할 때, 행위는 활동 로그(1042)에 기록된다. 일실시예로, 소셜 네트워킹 시스템(1030)은 활동 로그(1042)를 엔트리들의 데이터베이스로서 관리한다. 행위가 소셜 네트워킹 시스템(1030) 내에서 행해질 때, 행위에 대한 엔트리는 활동 로그(1042)에 추가된다. 활동 로그(1042)는 행위 로그라고 언급될 수 있다.
추가로, 사용자 행위는 가령 소셜 네트워킹 시스템(1030)으로부터 분리된 외부 시스템(1020)과 같이 소셜 네트워킹 시스템(1030)의 외부의 엔트리 내에서 발생하는 컨셉 및 행위와 연관될 수 있다. 예컨대, 행위 로거(1040)는 웹 서버(1032)로부터 외부 시스템(1020)과의 사용자 상호작용을 기술하는 데이터를 수신할 수 있다. 이 예에서, 외부 시스템(1020)은 소셜 그래프에서의 구조화된 행위 및 객체에 따라 사용자의 상호작용을 보고한다.
사용자가 외부 시스템(1020)과 상호작용하는 행위들의 다른 예들은, 사용자가 외부 시스템(1020) 또는 다른 엔티티에 대한 관심을 표현하는 것, 사용자가 외부 시스템(1020) 또는 외부 시스템(1020) 내의 웹 페이지(1022a)를 논의하는 코멘트를 소셜 네트워킹 시스템(1030)에 게시하는 것, 사용자가 외부 시스템(1020)과 연관된 URL(Uniform Resource Locator) 또는 다른 식별자를 소셜 네트워킹 시스템(1030)에 게시하는 것, 사용자가 외부 시스템(1020)과 연관된 이벤트에 참석하는 것, 또는 외부 시스템(1020)과 관련된 사용자에 의한 임의의 다른 행위를 포함한다. 따라서, 활동 로그(1042)는 소셜 네트워킹 시스템(1030)의 사용자 및 소셜 네트워킹 시스템(1030)으로부터 분리된 외부 시스템(1020) 사이의 상호작용을 기술하는 행위들을 포함할 수 있다.
인증 서버(1044)는 소셜 네트워킹 시스템(1030)의 사용자들의 하나 이상의 개인정보 설정을 강제한다. 사용자의 개인정보 설정은 어떻게 사용자와 연관된 특정 정보가 공유될 수 있는지를 결정한다. 개인정보 설정은 사용자와 연관된 특정 정보의 명세(specification) 및 정보가 공유될 수 있는 엔티티 또는 엔티티들의 명세를 포함한다. 정보가 공유될 수 있는 엔티티들의 예들은 다른 사용자들, 애플리케이션, 외부 시스템(1020), 또는 정보에 잠재적으로 액세스할 수 있는 임의의 엔티티를 포함할 수 있다. 사용자에 의해 공유될 수 있는 정보는 가령, 프로필 사진, 사용자와 연관된 전화번호, 사용자의 연결, 연결을 추가하기, 사용자의 프로필 정보를 변경하기와 같은 사용자에 의해 행해진 행위 등과 같은 사용자 계정 정보를 포함한다.
개인정보 설정 명세가 상이한 레벨의 입상도(granularity)에서 제공될 수 있다. 예컨대, 개인정보 설정은 다른 사용자들과 공유될 특정 정보를 식별할 수 있고; 개인정보 설정은 직장 전화번호 또는 가령, 프로필 사진, 집 전화번호, 및 상태와 같은 관련된 정보의 특정 세트를 식별한다. 대안으로, 개인정보 설정은 사용자와 연관된 모든 정보에 적용될 수 있다. 특정 정보에 액세스할 수 있는 엔티티들의 세트의 명세는 또한, 다양한 레벨의 입상도에서 특정될 수 있다. 정보가 공유될 수 있는 다양한 세트의 엔티티들은 예컨대, 사용자의 모든 친구들, 친구들의 모든 친구들, 모든 애플리케이션, 또는 모든 외부 시스템(1020)을 포함할 수 있다. 일실시예는 엔티티들의 세트의 명세가 엔티티들의 목록을 포함할 수 있도록 한다. 예컨대, 사용자는 특정 정보에 액세스하는 것이 허용되는 외부 시스템(1020)의 리스트를 제공할 수 있다. 다른 실시예는 명세가, 정보에 액세스하는것이 허용되지 않은 예외들을 함께 갖는 엔티티들의 세트를 포함하도록 한다. 예컨대, 사용자는 모든 외부 시스템(1020)이 사용자의 작업 정보에 액세스할 수 있도록 하지만, 작업 정보에 액세스하는 것이 허용되지 않는 외부 시스템(1020)의 리스트를 특정할 수 있다. 특정 실시예들은 특정 정보를 액세스하는 것이 허용되지 않는 예외들의 리스트를 "차단 리스트"라고 할 수 있다. 사용자에 의해 특정된 차단 리스트에 속하는 외부 시스템(1020)은 개인정보 설정에 특정된 정보를 액세스하는 것으로부터 차단된다. 정보의 명세의 입상도 및 정보가 공유되는 엔티티들의 명세의 입상도의 다양한 조합이 가능하다. 예컨대, 모든 개인 정보는 친구들과 공유될 수 있는 한편, 모든 작업 정보는 친구의 친구들과 공유될 수 있다.
인증 서버(1044)는 사용자와 연관된 특정 정보가 사용자의 친구들, 외부 시스템(1020), 및/또는 다른 애플리케이션과 엔티티들에 의해 액세스될 수 있는지 여부를 결정하는 로직을 포함한다. 외부 시스템(1020)은 가령 사용자의 직장 전화번호와 같은 사용자의 더 개인적이고 민감한 정보에 액세스하기 위해 인증 서버(1044)로부터의 인증이 필요할 수 있다. 사용자의 개인정보 설정에 기반하여, 인증 서버(1044)는, 다른 사용자, 외부 시스템(1020), 애플리케이션, 또는 다른 엔티티가 사용자에 의해 행해진 행위에 관한 정보를 포함하는 사용자와 연관된 정보에 액세스하는 것이 허용되는지 여부를 결정한다.
소셜 네트워킹 시스템(1030)은 클러스터링 모듈(1046)을 포함할 수 있다. 클러스터링 모듈(1046)은 고유 ID를 생성하고 소셜 그래프의 노드에 할당할 수 있다. 나아가, 클러스터링 모듈(1046)은 고유 ID를 이용하여 소셜 네트워킹 시스템(1030)에 걸쳐 소셜 그래프를 파티셔닝할 수 있다. 고유 ID 공간은 사용자를 소셜 네트워킹 시스템(1030)의 장치(예컨대, 데이터베이스 서버 또는 캐싱 시스템)에 사용자를 매핑하는데 사용될 수 있다. 클러스터링 모듈(1046)은 소셜 네트워킹 시스템(1030)의 사용자를 매핑에 기반하여 장치로 라우팅할 수 있다. 클러스터링 모듈(1046)은 사용자를 부하 균형 고려, 예컨대 트래픽 사용 패턴 또는 장치가 과부하이거나 부하가 부족한지 여부에 기반하여 사용자를 매핑하거나 라우팅할 수 있다. 일실시예에서, 클러스터링 모듈(1046)은 도 1의 클러스터링 모듈(1046)로 구현될 수 있다.
하드웨어 구현
전술한 프로세스 및 특징들은 광범위하게 다양한 네트워크 및 컴퓨팅 환경에서 광범위하게 다양한 기계 및 컴퓨터 시스템 구조에 의해 구현될 수 있다. 도 11은 본 발명의 실시예에 따른, 본 명세서에 기술된 하나 이상의 실시예들을 구현하도록 사용될 수 있는 컴퓨터 시스템(1100)의 예시를 도시한다. 컴퓨터 시스템(1100)은 컴퓨터 시스템(1100)이 본 명세서에 기술된 프로세스 및 특징들을 수행하도록 야기하는 명령어들의 세트들을 포함한다. 컴퓨터 시스템(1100)은 다른 기계들에 연결(예컨대, 네트워크화)될 수 있다. 네트워크화된 배치에서, 컴퓨터 시스템(1100)은 클라이언트-서버 네트워크 환경에서의 서버 기계 또는 클라이언트 기계의 용량으로 또는 피어-투-피어 (또는 분산형) 네트워크 환경에서의 피어 기계로서 동작할 수 있다. 본 발명의 일실시예로, 컴퓨터 시스템(1100)은 본 명세서에 서술되는 소셜 네트워킹 시스템의 컴포넌트일 수 있다. 본 발명의 일실시예로, 컴퓨터 시스템(1100)은 소셜 네트워킹 시스템(1030)의 전부 또는 일부를 구성하는 많은 수의 서버들 중 하나의 서버일 수 있다.
컴퓨터 시스템(1100)은, 본 명세서에 기술된 프로세스 및 특징에 관련되고, 컴퓨터-판독가능한 매체에 저장된 프로세서(1102), 캐시(1104), 및 하나 이상의 실행가능한 모듈 및 드라이버를 포함한다. 추가로, 컴퓨터 시스템(1100)은 고성능 입력/출력(I/O) 버스(1106) 및 표준 I/O 버스(1108)를 포함한다. 호스트 브리지(1110)는 프로세서(1102)를 고성능 I/O 버스(1106)에 연결하는 한편, I/O 버스 브리지(1112)는 2개의 버스들(1106, 1108)을 서로 연결한다. 시스템 메모리(1114) 및 하나 이상의 네트워크 인터페이스(1116)는 고성능 I/O 버스(1106)에 연결된다. 컴퓨터 시스템(1100)은 비디오 메모리 및 비디오 메모리에 연결된 디스플레이 장치(도시되지 않음)를 더 포함할 수 있다. 대용량 저장소(1118) 및 I/O 포트(1120)는 표준 I/O 버스(1108)에 연결된다. 컴퓨터 시스템(1100)은 선택적으로 키보드, 포인팅 장치, 디스플레이 장치, 또는 표준 I/O 버스(1108)에 연결된 다른 입력/출력 장치들(도시되지 않음)을 포함할 수 있다. 전체적으로, 이러한 구성요소들은, 캘리포니아 산타 클라라의 인텔사에 의해 제조된 x86-호환 프로세서, 및 캘리포니아 서니데일의 AMD(Advanced Micro Devices), Inc.에 의해 제조된 x86-호환 프로세서뿐만 아니라 임의의 다른 적절한 프로세서에 기반하는 컴퓨터 시스템을 포함하지만 이에 제한되지 않는 컴퓨터 하드웨어 시스템의 넓은 카테고리를 표현하도록 의도되었다.
운영 시스템은, 소프트웨어 애플리케이션(도시되지 않음)으로 오가는 데이터의 입력 및 출력을 포함하는 컴퓨터 시스템(1100)의 동작을 관리하고 제어한다. 운영 시스템은 시스템상에 실행되는 소프트웨어 애플리케이션과 시스템의 하드웨어 컴포넌트들 사이의 인터페이스를 제공한다. 가령 LINUX 운영 시스템, 캘리포니아 쿠퍼티노의 Apple Computer Inc.로부터 이용가능한 Apple Macintosh 운영 시스템, UNIX 운영 시스템, Microsoft® Windows® 운영 시스템, BSD 운영 시스템 등과 같은 임의의 적절한 운영 시스템이 이용될 수 있다. 다른 구현도 가능하다.
컴퓨터 시스템(1100)의 구성요소들은 아래에서 더 상세하게 기술된다. 특히, 네트워크 인터페이스(1116)는 컴퓨터 시스템(1100) 및 가령 Ethernet(예컨대, IEEE 802.3) 네트워크, 백플레인(backplane) 등과 같은 임의의 광범위의 네트워크 사이의 통신을 제공한다. 대용량 저장소(1118)는 앞서 식별된 각각의 컴퓨팅 시스템들에 의해 구현되는 상기 프로세스들 및 특징들을 수행하는 프로그래밍 명령어들 및 데이터를 위한 영구적인 저장소를 제공하는 한편, 시스템 메모리(1114)(예컨대, DRAM)는 프로세서(1102)에 의해 실행될 때 데이터 및 프로그래밍 명령어들을 위한 임시적인 저장소를 제공한다. I/O 포트(1120)는, 컴퓨터 시스템(1100)에 연결될 수 있는 추가 주변 장치들 사이의 통신을 제공하는 하나 이상의 직렬 및/또는 병렬 통신 포트일 수 있다.
컴퓨터 시스템(1100)은 다양한 시스템 구조들을 포함할 수 있고, 컴퓨터 시스템(1100)의 다양한 컴포넌트들은 재정렬될 수 있다. 예컨대, 캐시(1104)는 프로세서(1102)를 갖는 온-칩일 수 있다. 대안으로, 캐시(1104) 및 프로세서(1102)는 프로세서(1102)가 "프로세서 코어"로 불리는 "프로세서 모듈"로 함께 패킹(pack)될 수 있다. 더욱이, 본 발명의 특정 실시예들은 상기의 컴포넌트들 전부를 요구하지도 않고 포함하지도 않을 수 있다. 예컨대, 표준 I/O 버스(1108)에 연결된 주변 장치들은 고성능 I/O 버스(1106)에 연결될 수 있다. 추가로, 일부 실시예로, 단일 버스만이 존재할 수 있고, 컴퓨터 시스템(1100)의 컴포넌트들은 단일 버스에 연결될 수 있다. 더욱이, 컴퓨터 시스템(1100)은 가령 추가적인 프로세서, 저장 장치, 또는 메모리와 같은 추가 컴포넌트들을 포함할 수 있다.
일반적으로, 본 명세서에 기술된 프로세스 및 특징들은 운영 시스템 또는 특정 애플리케이션, 컴포넌트, 프로그램, 객체, 모듈 또는 "프로그램"으로 불리는 일련의 명령어들의 일부로서 구현될 수 있다. 예컨대, 하나 이상의 프로그램들은 본 명세서에 기술된 특정 프로세스들을 실행하는데 사용될 수 있다. 프로그램들은 전형적으로 하나 이상의 프로세서에 의해 읽혀지고 실행될 때 컴퓨터 시스템(1100)이 본 명세서에 기술된 프로세스 및 특징들을 실행하는 동작들을 수행하도록 야기하는 하나 이상의 명령어들을 컴퓨터 시스템(1100)에서 다양한 메모리 및 저장 장치에서 포함할 수 있다. 본 명세서에 기술된 프로세스 및 특징들은 소프트웨어, 펌웨어, 하드웨어(예컨대, 애플리케이션 고유의 집적 회로(application specific integrated circuit; ASIC), 또는 이들의 임의의 조합에서 구현될 수 있다.
하나의 구현예로, 본 명세서에 기술된 프로세스 및 특징들은, 컴퓨터 시스템(1100)에 의해 실행되는 일련의 실행가능한 모듈로서 분산형 컴퓨팅 환경에서 개별적으로 또는 집합적으로 구현될 수 있다. 전술한 모듈들은 하드웨어, 컴퓨터-판독가능한 매체 (또는 기계-판독가능한 매체), 또는 이들 모두의 조합에 의해 실현될 수 있다. 예컨대, 모듈은 가령, 프로세서(1102)와 같은 하드웨어 시스템에서의 프로세서에 의해 실행되는 복수의 또는 일련의 명령어들을 포함할 수 있다. 초기에, 일련의 명령어들은 가령, 대용량 저장소(1118)와 같은 저장 장치에 저장될 수 있다. 하지만, 일련의 명령어들은 임의의 적절한 컴퓨터-판독가능한 저장 매체에 저장될 수 있다. 더욱이, 일련의 명령어들은 로컬에서 저장될 필요가 없으며, 네트워크 인터페이스(1116)를 통해 가령 네트워크상의 서버와 같은 원격 저장 장치로부터 수신될 수 있다. 명령어들은 가령 대용량 저장소(1118)와 같은 저장 장치로부터 시스템 메모리(1114)로 복사되고, 이후 프로세서(1102)에 의해 액세스되고 실행된다. 다양한 구현예에서, 모듈 또는 모듈들은 프로세서나 복수의 프로세서들에 의하여 하나 또는 복수의 위치, 예컨대 병렬 프로세싱 환경의 복수의 서버에서 실행될 수 있다.
컴퓨터-판독가능한 매체의 예들은, 가령 휘발성 및 비-휘발성 메모리 장치와 같은 기록 가능한 타입의 매체; 고체 상태 메모리(solid state memory; SSD); 플로피 및 다른 제거가능한 디스크; 하드 디스크 드라이브, 자기 매체; 광학 디스크(예컨대, CD ROMS(Compact Disk Read-Only Memory), DVDs(Digital Versatile Disks)); 다른 유사한 비-일시적 (또는 일시적), 실체적 (또는 비-실체적) 저장 매체; 또는 본 명세서에 기술되는 임의의 하나 이상의 프로세스 및 특징을 수행하는 컴퓨터 시스템(1100)에 의해 실행하기 위한 일련의 명령어들을 저장하고, 인코딩하고, 운반하는데 적절한 임의의 타입의 매체를 포함하지만, 이에 제한되지 않는다.
설명하기 위한 목적을 위해, 발명의 설명의 완전한 이해를 제공하도록 다수의 구체적인 세부사항들이 언급된다. 하지만, 본 명세서의 실시예들은 이러한 구체적인 세부사항들 없이도 실행될 수 있음이 통상의 기술자에게 자명해질 것이다. 일부 예에서, 모듈, 구조, 프로세스, 특징, 및 장치는 발명의 설명을 불명확하게 하는 것을 피하기 위해 블록 다이어그램의 형태로 도시된다. 다른 예에서, 기능적 블록 다이어그램 및 흐름 다이어그램은 데이터 및 로직의 흐름을 표현하도록 도시된다. 블록 다이어그램 및 흐름 다이어그램의 컴포넌트들(예컨대, 모듈, 블록, 구조, 장치, 특징 등)은 본 명세서에 명시적으로 기술되고 도시된 것과 다른 방식으로 다양하게 조합되고, 분리되고, 제거되고, 재정렬되고, 대체될 수 있다.
본 명세서에서의 "일실시예", "실시예", "다른 실시예", "일련의 실시예", "일부 실시예", "다양한 실시예" 등에 대한 언급은, 실시예와 연계되어 기술된 특정의 특징, 설계, 구조, 또는 특성이 본 명세서의 적어도 하나의 실시예에 포함되는 것을 의미한다. 본 명세서에서의 다양한 위치에서 가령, "일실시예로" 또는 "실시예로"와 같은 구절이 나타나는 것은 동일한 실시예를 언급하거나 혹은 다른 실시예들과 상호 배타적이며 분리된 또는 대안적 실시예들을 필연적으로 언급하는 것은 아니다. 더욱이, "실시예" 등에 대한 명시적인 언급이 있는지와 무관하게, 다양하게 조합될 수 있고 일부 실시예들에 포함될 수 있는 다양한 특징들이 기술되지만, 이들은 또한, 다른 실시예들에서 다양하게 생략된다. 유사하게, 일부 실시예들에 대한 선호사항 또는 요구사항일 수 있지만 다른 실시예들에서는 그렇지 않을 수 있는 다양한 특징들이 기술된다.
본 명세서에 사용되는 용어는 원칙적으로 가독성 및 훈시적 목적을 위해서 선택되었으며, 발명의 대상을 묘사하거나 제한하기 위해 선택된 것은 아니다. 따라서, 본 발명의 범위는, 본 발명의 상세한 설명에 의해 제한되는 것이 아니며, 본 출원이 기초로 하는 제출되는 청구범위에 의해 정의되는 것으로 의도되었다. 그러므로, 본 발명의 실시예들의 개시내용은 이하의 청구범위에서 정의되는 본 발명의 범위를 제한하는 것이 아니라 본 발명의 범위의 예시가 되도록 의도되었다.

Claims (20)

  1. 컴퓨터 시스템에 의하여, 복수의 노드와 연관된 분류를 식별하는 단계;
    컴퓨터 시스템에 의하여, 분류 간의 에지 가중치에 기반하여 분류를 제1 레벨 커뮤니티로 그루핑하는 단계;
    컴퓨터 시스템에 의하여, 제1 레벨 커뮤니티 간의 에지 가중치에 기반하여 제1 레벨 커뮤니티를 제2 레벨 커뮤니티로 그루핑하는 단계;
    컴퓨터 시스템에 의하여, 분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 기반하여 복수의 노드의 정렬된 리스트를 생성하는 단계; 및
    컴퓨터 시스템에 의하여, 복수의 노드의 정렬된 리스트에 고유 식별자(ID)를 순차적으로 할당하는 단계를 포함하는 컴퓨터 구현 방법.
  2. 청구항 1에 있어서,
    복수의 노드는 소셜 네트워킹 시스템의 사용자와 연관되는 컴퓨터 구현 방법.
  3. 청구항 1에 있어서,
    복수의 노드는 사람, 비-인격체, 단체, 컨텐츠, 이벤트, 웹 페이지, 통신, 객체 또는 컨셉 중 적어도 하나와 연관되는 컴퓨터 구현 방법.
  4. 청구항 1에 있어서,
    분류는 복수의 노드와 연관된 적어도 하나의 속성을 나타내는 컴퓨터 구현 방법.
  5. 청구항 4에 있어서,
    적어도 하나의 속성은 지리적 위치를 포함하는 컴퓨터 구현 방법.
  6. 청구항 1에 있어서,
    복수의 노드 중 노드 간의 연결은 에지 가중치와 연관되는 컴퓨터 구현 방법.
  7. 청구항 6에 있어서,
    에지 가중치는 연결의 수에 기반하는 컴퓨터 구현 방법.
  8. 청구항 6에 있어서,
    에지 가중치는 연결의 강도에 기반하는 컴퓨터 구현 방법.
  9. 청구항 6에 있어서,
    연결은 복수의 노드 중 노드 간의 공유된 특성을 나타내는 컴퓨터 구현 방법.
  10. 청구항 9에 있어서,
    에지 가중치는 공유된 특성을 설명하는 컴퓨터 구현 방법.
  11. 청구항 10에 있어서,
    제1 공유된 특성은 제2 공유된 특성과 다르게 가중치화되는 컴퓨터 구현 방법.
  12. 청구항 1에 있어서,
    복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 제2 레벨 커뮤니티로 정렬하는 단계를 포함하는 컴퓨터 구현 방법.
  13. 청구항 1에 있어서,
    복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 제1 레벨 커뮤니티로 정렬하는 단계를 포함하는 컴퓨터 구현 방법.
  14. 청구항 1에 있어서,
    복수의 노드의 정렬된 리스트를 생성하는 단계는 복수의 노드를 분류로 정렬하는 단계를 포함하는 컴퓨터 구현 방법.
  15. 청구항 1에 있어서,
    공유된 특성을 가지는 노드들은 공유된 특성을 가지지 않는 노드들에 할당된 고유 ID보다 더 수적으로 근접한 고유 ID를 할당받는 컴퓨터 구현 방법.
  16. 청구항 1에 있어서,
    반복적으로 각 저레벨 커뮤니티 간의 에지 가중치에 기반하여 저레벨 커뮤니티를 고레벨 커뮤니티로 그루핑하는 단계; 및
    고레벨 커뮤니티에 더 기반하여 복수의 노드의 정렬된 리스트를 생성하는 단계를 더 포함하는 컴퓨터 구현 방법.
  17. 청구항 1에 있어서,
    복수의 노드와 연관된 기존재하는 ID를 고유 ID로 매핑하는 단계를 더 포함하는 컴퓨터 구현 방법.
  18. 청구항 1에 있어서,
    분류를 제1 레벨 커뮤니티로 그루핑하는 단계는:
    커뮤니티 내의 연결의 수 또는 연결의 강도 중 적어도 하나를 최대화하는 단계; 및
    커뮤니티 간의 연결의 수 또는 연결의 강도 중 적어도 하나를 최소화하는 단계를 포함하는 컴퓨터 구현 방법.
  19. 적어도 하나의 프로세서, 및
    명령어를 저장하는 메모리를 포함하는 시스템으로서, 명령어는 적어도 하나의 프로세서가:
    복수의 노드와 연관된 분류를 식별하고;
    분류 간의 에지 가중치에 기반하여 분류를 제1 레벨 커뮤니티로 그루핑하고;
    제1 레벨 커뮤니티 간의 에지 가중치에 기반하여 제1 레벨 커뮤니티를 제2 레벨 커뮤니티로 그루핑하고;
    분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 기반하여 복수의 노드의 정렬된 리스트를 생성하고; 및
    복수의 노드의 정렬된 리스트에 고유 식별자(ID)를 순차적으로 할당하도록 명령하도록 구성된 시스템.
  20. 컴퓨터-실행가능한 명령어를 저장하는 컴퓨터 저장 매체로서, 컴퓨터-실행가능한 명령어는, 실행 시, 컴퓨터 시스템이:
    복수의 노드와 연관된 분류를 식별하는 단계;
    분류 간의 에지 가중치에 기반하여 분류를 제1 레벨 커뮤니티로 그루핑하는 단계;
    제1 레벨 커뮤니티 간의 에지 가중치에 기반하여 제1 레벨 커뮤니티를 제2 레벨 커뮤니티로 그루핑하는 단계;
    분류, 제1 레벨 커뮤니티 및 제2 레벨 커뮤니티에 기반하여 복수의 노드의 정렬된 리스트를 생성하는 단계; 및
    복수의 노드의 정렬된 리스트에 고유 식별자(ID)를 순차적으로 할당하는 단계를 포함하는 컴퓨터-구현 방법을 수행하도록 하는 컴퓨터 저장 매체.
KR1020167011320A 2013-10-07 2014-02-14 클러스터링에 기반한 매핑과 라우팅을 위한 시스템 및 방법 KR20160065923A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/047,830 US9836517B2 (en) 2013-10-07 2013-10-07 Systems and methods for mapping and routing based on clustering
US14/047,830 2013-10-07
PCT/US2014/016582 WO2015053806A1 (en) 2013-10-07 2014-02-14 Systems and methods for mapping and routing based on clustering

Publications (1)

Publication Number Publication Date
KR20160065923A true KR20160065923A (ko) 2016-06-09

Family

ID=52777825

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167011320A KR20160065923A (ko) 2013-10-07 2014-02-14 클러스터링에 기반한 매핑과 라우팅을 위한 시스템 및 방법

Country Status (9)

Country Link
US (1) US9836517B2 (ko)
JP (1) JP6310071B2 (ko)
KR (1) KR20160065923A (ko)
CN (1) CN105793845B (ko)
AU (1) AU2014332532B2 (ko)
CA (1) CA2926293A1 (ko)
IL (1) IL244780A0 (ko)
MX (1) MX369047B (ko)
WO (1) WO2015053806A1 (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2524075A (en) * 2014-03-14 2015-09-16 Ibm Advanced result cache refill
US10409920B1 (en) * 2014-05-23 2019-09-10 EMC IP Holding Company LLC Data services for tiered memory
US9875259B2 (en) * 2014-07-22 2018-01-23 Oracle International Corporation Distribution of an object in volatile memory across a multi-node cluster
US10002148B2 (en) 2014-07-22 2018-06-19 Oracle International Corporation Memory-aware joins based in a database cluster
US10191948B2 (en) * 2015-02-27 2019-01-29 Microsoft Technology Licensing, Llc Joins and aggregations on massive graphs using large-scale graph processing
JP6511951B2 (ja) * 2015-05-14 2019-05-15 富士ゼロックス株式会社 情報処理装置及びプログラム
US10067974B2 (en) 2015-05-29 2018-09-04 Oracle International Corporation Loading and reloading an in-memory copy of a database object without blocking concurrent updates to the database object
JP6511971B2 (ja) * 2015-06-05 2019-05-15 富士ゼロックス株式会社 情報処理装置及びプログラム
US10810179B2 (en) * 2015-09-25 2020-10-20 Microsoft Technology Licensing, Llc Distributed graph database
US10025867B2 (en) * 2015-09-29 2018-07-17 Facebook, Inc. Cache efficiency by social graph data ordering
CN105654321A (zh) * 2016-02-05 2016-06-08 腾讯科技(深圳)有限公司 建立关联关系的方法及装置
KR20180002122A (ko) * 2016-06-28 2018-01-08 엔에이치엔페이코 주식회사 광고 상품 제공 방법 및 시스템
CN106097023B (zh) * 2016-07-01 2018-03-27 腾讯科技(深圳)有限公司 一种数据处理方法及装置
US10460418B2 (en) * 2017-02-10 2019-10-29 Microsoft Technology Licensing, Llc Buffer index format and compression
US10938878B2 (en) 2017-05-16 2021-03-02 Red Hat, Inc. Separate cache servers for storing objects in different dedicated size ranges
CN107562829B (zh) * 2017-08-22 2020-09-29 上海幻电信息科技有限公司 数据访问方法及设备
US11573927B1 (en) 2018-10-31 2023-02-07 Anaplan, Inc. Method and system for implementing hidden subscriptions in a distributed computation system
US11481378B1 (en) 2018-10-31 2022-10-25 Anaplan, Inc. Method and system for servicing query requests using document-based metadata
US11475003B1 (en) 2018-10-31 2022-10-18 Anaplan, Inc. Method and system for servicing query requests using dataspaces
US11281683B1 (en) 2018-10-31 2022-03-22 Anaplan, Inc. Distributed computation system for servicing queries using revisions maps
US11580105B2 (en) 2018-10-31 2023-02-14 Anaplan, Inc. Method and system for implementing subscription barriers in a distributed computation system
US11354324B1 (en) * 2018-10-31 2022-06-07 Anaplan, Inc. Method and system for servicing query requests using revisions maps
KR102409160B1 (ko) * 2019-11-14 2022-06-14 한양대학교 산학협력단 복수개의 커뮤니티를 포함하는 네트워크에서 커뮤니티 재구성 방법 및 이를 위한 전자 장치
CN112949321B (zh) * 2021-04-21 2022-04-01 海南大学 面向意图计算与推理的dikw模型构建方法及装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1481346B1 (en) * 2002-02-04 2012-10-10 Cataphora, Inc. A method and apparatus to visually present discussions for data mining purposes
US7409362B2 (en) 2004-12-23 2008-08-05 Diamond Review, Inc. Vendor-driven, social-network enabled review system and method with flexible syndication
EP1964014A1 (en) * 2005-12-21 2008-09-03 Michael G. Tokman Method of identifying clusters and connectivity between clusters
JP4745993B2 (ja) * 2007-02-28 2011-08-10 日本電信電話株式会社 意識体系構築装置および意識体系構築プログラム
CN101026802B (zh) * 2007-03-16 2012-10-17 华为技术有限公司 一种信息推送方法与装置
US20090030932A1 (en) * 2007-07-27 2009-01-29 Ralph Harik Methods for detecting and remedying missed opportunities in a social network
US20090132561A1 (en) * 2007-11-21 2009-05-21 At&T Labs, Inc. Link-based classification of graph nodes
US8688595B2 (en) * 2008-03-31 2014-04-01 Pursway Ltd. Analyzing transactional data
US20100161369A1 (en) 2008-12-23 2010-06-24 International Business Machines Corporation Application of relationship weights to social network connections
CN101998395B (zh) * 2009-08-27 2013-12-04 华为技术有限公司 鉴权矢量获取方法、归属服务器和网络系统
US20120051589A1 (en) * 2010-08-24 2012-03-01 Honeywell International Inc. method for clustering multi-modal data that contain hard and soft cross-mode constraints
EP2721510A4 (en) * 2011-06-16 2015-03-25 Radiumone Inc CONSTRUCTION OF A SOCIAL DIAGRAM WITH PARTICULAR USE BETWEEN OPEN WEB USERS
KR101919102B1 (ko) * 2011-07-25 2018-11-15 삼성전자주식회사 Euv 빔 생성 장치
KR101363609B1 (ko) 2011-10-25 2014-03-03 주식회사 이노스파크 사회적 관계정보 관리 시스템 및 관리 방법
EP2595111A1 (en) 2011-11-07 2013-05-22 Gface GmbH Computer Implemented Method of Displaying Contact Nodes in an Online Social Network, Computer Systems and Computer Readable Medium Thereof
US9104681B2 (en) * 2011-12-27 2015-08-11 Nhn Corporation Social network service system and method for recommending friend of friend based on intimacy between users
US8510380B2 (en) 2012-01-09 2013-08-13 Facebook, Inc. Creating and sharing interest lists in a social networking system
US9286391B1 (en) * 2012-03-19 2016-03-15 Amazon Technologies, Inc. Clustering and recommending items based upon keyword analysis

Also Published As

Publication number Publication date
JP2016536675A (ja) 2016-11-24
IL244780A0 (en) 2016-04-21
AU2014332532B2 (en) 2019-09-19
MX369047B (es) 2019-10-17
CN105793845A (zh) 2016-07-20
US20150100574A1 (en) 2015-04-09
AU2014332532A1 (en) 2016-05-05
CN105793845B (zh) 2019-10-25
US9836517B2 (en) 2017-12-05
CA2926293A1 (en) 2015-04-16
MX2016004369A (es) 2016-10-13
WO2015053806A1 (en) 2015-04-16
JP6310071B2 (ja) 2018-04-11

Similar Documents

Publication Publication Date Title
JP6310071B2 (ja) クラスタリングに基づくマッピングおよびルーティングのためのシステムおよび方法
US9705801B2 (en) Systems and methods for mapping and routing based on clustering
US20190188220A1 (en) Systems and methods for clustering items associated with interactions
US9934323B2 (en) Systems and methods for dynamic mapping for locality and balance
US9900223B2 (en) Systems and methods for adding users to a networked computer system
US20190281125A1 (en) Systems and methods for smart publishing
US10574775B2 (en) Systems and methods to optimize news feed access
US20140040152A1 (en) Methods and systems for fake account detection by clustering
US11755673B1 (en) Systems and methods for recommending pages
US10585966B2 (en) Systems and methods for accessing content
US20180157733A1 (en) Systems and methods for generating content
US9842157B2 (en) Systems and methods for classifying computing devices based on device attributes
EP2858013A1 (en) Systems and methods for identification based on clustering
US20180097697A1 (en) Systems and methods for providing adaptive experimentation of contextual configurations in a social networking system
US11663477B2 (en) Systems and methods for generating music recommendations
EP3547645B1 (en) System, method and computer-readable storage medium for prefetching content
US20190095841A1 (en) Systems and methods for ranking pages based on page-to-page engagement graphs associated with a social networking system

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application