KR20130096767A - 그래프 데이터용 합성 용어 인덱스 - Google Patents

그래프 데이터용 합성 용어 인덱스 Download PDF

Info

Publication number
KR20130096767A
KR20130096767A KR1020137020043A KR20137020043A KR20130096767A KR 20130096767 A KR20130096767 A KR 20130096767A KR 1020137020043 A KR1020137020043 A KR 1020137020043A KR 20137020043 A KR20137020043 A KR 20137020043A KR 20130096767 A KR20130096767 A KR 20130096767A
Authority
KR
South Korea
Prior art keywords
document identifier
index
identifier
data
destination
Prior art date
Application number
KR1020137020043A
Other languages
English (en)
Other versions
KR101419828B1 (ko
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 KR20130096767A publication Critical patent/KR20130096767A/ko
Application granted granted Critical
Publication of KR101419828B1 publication Critical patent/KR101419828B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • 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/24Querying
    • G06F16/245Query processing
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24575Query processing with adaptation to user needs using context
    • 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/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9535Search customisation based on user profiles and personalisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)
  • Measurement And Recording Of Electrical Phenomena And Electrical Characteristics Of The Living Body (AREA)

Abstract

본 발명은 그래프 데이터용 인덱싱 시스템에 관한 것이다. 특정한 구현으로, 인덱싱 시스템은 역정규화 및 복제 인덱스 기능을 제공하여 쿼리 성능을 향상시킨다.

Description

그래프 데이터용 합성 용어 인덱스{COMPOSITE TERM INDEX FOR GRAPH DATA}
본 발명은 일반적으로 데이터베이스에 관한 것이며, 더 상세하게는 그래프 데이터 구조용 데이터 인덱싱 시스템에 관한 것이다.
컴퓨터 사용자들은 가령 인터넷과 같은 공중 네트워크뿐만 아니라 사설 네트워크를 포함하는 다양한 근거리 및 광역 컴퓨터 네트워크를 통해 방대한 양의 정보에 접근하고 정보를 공유할 수 있다. 통상, 사용자의 컴퓨팅 장치에 설치되는 웹 브라우저는 예컨대 관련 URLs(uniform resource locators)에 의해 식별되는 다양한 네트워크 서버에 위치한 정보로의 접근 및 정보와의 상호작용을 용이하게 한다. 사용자-생성 컨텐츠의 공유를 가능하게 하는 종래의 접근방법은 가령 소셜 네트워킹 웹사이트와 같은 다양한 정보 공유 기술 또는 플랫폼을 포함한다. 이런 웹사이트는 다른 사용자에 의해 생성되거나 맞춤화된 웹 페이지를 사용자에게 보여줄 수 있는 애플리케이션용 플랫폼을 포함하거나, 플랫폼과 연결되거나, 플랫폼을 제공할 수 있는데, 여기서 다른 사용자에 의한 가시성 및 이런 페이지와의 상호작용은 일부 특징적인 규정 세트(set of rules)에 의해 통제된다.
이런 소셜 네트워킹 정보 및 일반적인 대부분의 정보는 통상 관계형 데이터베이스(relational databases)에 저장된다. 일반적으로, 관계형 데이터베이스는 관계들의 모음(흔히 '테이블(tables)'이라 함)이다. 관계형 데이터베이스는 한 세트의 수학적 용어를 사용하며, 구조화 질의어(Structured Query Language, SQL) 데이터베이스 용어를 사용할 수 있다. 예컨대, 관계는 동일한 속성을 갖는 한 세트의 튜플(tuples)로 정의될 수 있다. 튜플은 보통 객체 및 그 객체에 대한 정보를 나타낸다. 관계는 보통 행들 및 열들로 체계화된 테이블로 기술된다. 일반적으로, 속성에 의해 참조되는 모든 데이터는 동일한 도메인에 있으며 동일한 제약을 따른다.
관계형 모델은 관계의 튜플들이 특정한 순서를 가지지 않으며, 결국 튜플들이 속성에 순서를 부과하지 않도록 지정한다. 애플리케이션은 튜플을 식별하고 속성을 식별하며 관계들을 결합시키는 동작을 사용하는 쿼리를 지정함으로써 데이터에 접근한다. 관계들은 변경될 수 있으며, 새로운 튜플이 명시적인 값을 공급하거나 쿼리로부터 도출될 수 있다. 마찬가지로, 업데이트하거나 삭제하기 위해, 튜플은 쿼리를 식별할 수 있다. 관계의 각 튜플은 (하나 이상의) 속성값의 일부 결합으로 고유하게 식별될 필요가 있다. 이런 결합을 기본 키(primary key)라고 한다. 관계형 데이터베이스에서, 모든 데이터는 관계를 통해 저장되고 접근된다. 데이터를 저장하는 관계는 일반적으로 테이블로 구현되거나 일컬어진다.
관계형 데이터베이스 관리 시스템에서 구현되는 바와 같이, 관계형 데이터베이스는 예컨대, 재무 기록, 제조 및 수송 정보(manufacturing and logistical information), 인사 데이터(personnel data) 및 다른 애플리케이션을 위해 사용되는 데이터베이스의 정보 저장용으로 지배적인 선택이 되어왔다. 컴퓨터 전력이 증가함에 따라, 초기에 관계형 데이터베이스를 비실용적으로 만들었던 관계형 데이터베이스의 비효율성이 종래의 애플리케이션에 대한 사용의 용이함보다 더 중요해졌다. 3개의 주된 오픈 소스 구현은 MySQL, PostgreSQL 및 SQLite이다. MySQL은 다중 사용자에게 다수의 데이터베이스로의 접근을 제공하는 서버로서 작동하는 관계형 데이터베이스 관리 시스템(RDBMS)이다. 대중적인 LAMP 소프트웨어 스택에서 두문자어 "M"은 MySQL을 말한다. 웹 애플리케이션과의 사용용으로 MySQL의 선호도(popularity)는 PHP(LAMP에서 "P")의 선호도와 밀접하게 연관된다. 여러 높은-트래픽 웹사이트는 데이터 저장 및 사용자 데이터의 로깅(logging)을 위해 MySQL을 사용한다.
데이터베이스 인덱스는 데이터베이스 테이블 상에서 데이터 검색 동작의 속도를 향상시키는 데이터 구조이다. 데이터베이스 인덱스는 데이터베이스 테이블의 하나 이상의 열을 사용하여 생성될 수 있으며, 빠른 랜덤 룩업(lookups) 및 순서화된 기록의 효율적인 접근 모두에 대한 기초를 제공한다. (인덱스는 테이블이 배열되는 바에 따라 보통 키-필드(key-fields)만을 포함하며, 테이블 내 모든 다른 세부사항은 배제하기 때문에) 인덱스를 저장하는데 필요한 디스크 공간은 일반적으로 테이블에 요구되는 공간보다 작으며, 테이블의 데이터가 너무 커서 메모리에 저장할 수 없는 테이블에 대하여 메모리에 인덱스를 저장할 가능성을 준다. 인덱스는 다양한 데이터 구조를 사용하여 구현될 수 있다. 대중적인 인덱스는 균형 트리(balanced trees), B+ 트리 및 해시(hashes)를 포함한다.
그래프는 객체의 적어도 일부 쌍들이 링크로 연결되는 한 세트의 객체의 추상적인 표현이다. 상호연결된 객체는 흔히 노드라고 하며, 노드를 연결하는 링크는 에지(edges)라고 일컬어진다. 그러나, 그래프 구조에서 데이터의 모델링은 확장성(scalability) 및 성능에서의 문제를 부여한다. 그래프 구조의 순회를 요구하는 쿼리는 많은 데이터베이스 룩업을 필요로 할 수 있다. 일반적으로 높은 확장형 시스템은 캐싱 및 인덱싱에 의존하여 쿼리 응답 시간 및 전체적인 성능을 향상시킨다.
본 발명은 그래프 데이터용 인덱싱 시스템에 대한 방법, 장치 및 시스템을 제공한다.
특정한 구현으로, 인덱싱 시스템은 역정규화(denormalization) 및 복제 인덱스 기능(replica index functionality)을 제공하여 쿼리 성능을 향상시킨다. 이하에서, 본 명세서의 이런 특징과 다른 특징, 태양 및 이점이 상세한 설명 및 하기의 도면과 함께 상세히 기술된다.
본 발명의 내용 중에 포함되어 있다.
도 1은 본 발명의 한 구현에 따라 예시적인 인덱싱 시스템 구조를 도시한다.
도 2는 예시적인 컴퓨터 시스템 구조를 도시한다.
도 3은 예시적인 네트워크 환경을 제공한다.
도 4는 새로운 객체를 그래프 및 합성 인덱스에 추가하기 위한 예시적인 방법을 도시하는 흐름도를 나타낸다.
이제, 본 발명은 첨부도면에 도시된 바와 같이 본 발명의 몇몇 실시예들을 참조하여 상세히 기술된다. 하기의 상세한 설명에서는, 본 명세서의 완전한 이해를 제공하기 위해 많은 특정한 세부사항이 제시된다. 그러나, 본 명세서는 특정한 세부사항들의 일부 또는 전부 없이도 실행될 수 있다는 점이 당업자에게 명백하다. 다른 예에서, 본 명세서를 불필요하게 모호하지 않게 하기 위해, 잘 알려진 공정 단계 및/또는 구조는 상세히 기술되지 않았다. 또한, 본 명세서는 특정한 실시예들과 함께 기술되나, 이런 설명이 본 명세서를 기술된 실시예들로 제한하려는 의도는 아니라는 점을 이해해야 한다. 이에 반해, 상세한 설명은 첨부된 청구항들에 의해 정의되는 바와 같이 본 명세서의 기술사상 및 범위 내에 포함될 수 있는 대안들, 변형들 및 균등물을 포함하도록 의도된다.
특정한 구현으로, 본 발명은 데이터 객체 및 데이터 객체들 사이의 연관성에 대한 유연한 검색 능력을 제공하는 데이터베이스 인덱스 기반구조(infrastructure)에 관한 것이다. 특정 실시예는 그래프 내 에지들이 연결하는 노드들 사이의 연관 및 관계를 정의하는 노드 및 에지를 포함하는 그래프로 모델링된 정보를 저장 및 제공하기 위한 인덱싱 시스템에 관한 것이다. 특정 실시예로, 그래프는 소셜 그래프이거나 소셜 그래프를 포함하며, 인덱싱 시스템은 통합 소셜 네트워크 환경을 가능하게 하는 더 큰 네트워킹 시스템, 기반구조 또는 플랫폼의 일부이다. 본 명세서에서, 소셜 네트워크 환경은 소셜 그래프 정보를 포함하는 소셜 그래프의 관점에서 기술될 수 있다. 실제로, 본 명세서의 특정 실시예는 소셜 네트워크 환경에 의해 또는 소셜 네트워크 환경용으로 저장된 데이터의 대부분 또는 전부가 소셜 그래프로 표현될 수 있다는 점을 필요로 하거나, 활용하거나, 이용한다. 특정 실시예는 본 명세서에 기술된 바와 같이, 기하급수적으로 증가하는 소셜 네트워크 환경의 다수의 사용자들에 맞게 효율적으로, 지능적으로 및 성공적으로 조정(scale)될 수 있는 비용-효과적인 기반구조를 제공한다.
특정 실시예로, 본 명세서에 기술되는 분산형 인덱싱 시스템 및 백엔드(backend) 기반구조는 하나 이상의: 스케일(scale)에서의 낮은 대기시간, 요청 당 낮은 비용, 개발자용 프레임워크의 사용 용이성, 본 명세서에서 예로서 기술되는 바와 같이 소셜 그래프의 연관(에지) 및 객체(노드) 모두를 포함하는 결합형 쿼리를 가능하게 하는 기반구조, 저장된 객체 및 연관에 대한 유연하고 표현적인(expressive) 쿼리 모델을 제공하는 기반구조, 및 PHP로부터 직접 호출하기 용이한 기반구조를 제공한다. 추가로, 본 명세서에서 사용되는 바와 같이, "또는"은 "또는"뿐만 아니라 "및"을 의미할 수 있다, 즉 명시적으로 언급되거나 함축적으로 암시되는 것이 아니면, "또는"이 반드시 "및"을 제외하는 것은 아니다.
특정 실시예는 다중 네트워크 주소화 시스템을 포함하는, 가령 인터넷과 같은 광역 네트워크 환경에서 동작할 수 있다. 도 3은 다양한 예시적인 실시예들이 동작할 수 있는 예시적인 네트워크 환경을 도시한다. 네트워크 클라우드(60)는 일반적으로 본 명세서에 기술된 시스템 및 호스트가 통신할 수 있는 하나 이상의 상호연결된 네트워크를 나타낸다. 네트워크 클라우드(60)는 패킷-기반 광역 네트워크(가령 인터넷), 사설 네트워크, 무선 네트워크, 위성 네트워크, 셀룰러 네트워크, 무선호출(paging) 네트워크 등을 포함할 수 있다. 도 3이 도시하는 바와 같이, 특정 실시예는 소셜 네트워킹 시스템(20)과 하나 이상의 클라이언트 장치(30)를 포함하는 네트워크 환경에서 동작할 수 있다. 클라이언트 장치(30)는 네트워크 서비스 제공자, 무선 반송파 또는 임의의 다른 적합한 수단을 통해 네트워크 환경으로 동작가능하게 연결된다.
일예의 실시예에서, 소셜 네트워킹 시스템(20)은 본 명세서에 기술된 바와 같이 사용자들이 서로 통신하거나 상호작용하며 가령 사용자 프로파일과 같은 컨텐츠에 접근할 수 있도록 해주는 컴퓨팅 시스템을 포함한다. 소셜 네트워킹 시스템(20)은 다양한 예시적인 실시예에서 하나 이상의 물리적 서버(22) 및 데이터 스토어(24)를 포함하는 네트워크 주소화 시스템이다. 하나 이상의 물리적 서버(22)는 예로써, 한 세트의 라우터 및/또는 네트워킹 스위치(26)를 통해 컴퓨터 네트워크(60)와 동작가능하게 연결된다. 예시적인 실시예로, 하나 이상의 물리적 서버(22)에 의해 호스팅되는 기능은 웹 또는 HTTP 서버, FTP 서버뿐만 아니라, 제한 없이, 공통 게이트웨이 인터페이스(CGI) 스크랩트를 사용하여 구현되는 웹 페이지와 애플리케이션, PHP 하이퍼-텍스트 전처리기(PHP), 액티브 서버 페이지(ASP), 하이퍼 텍스트 마크업 언어(HTML), 확장형 마크업 언어(XML), 자바, 자바스크립트, 비동기 자바스크립트와 XML(AJAX) 등을 포함할 수 있다.
물리적 서버(22)는 소셜 네트워킹 시스템(20)의 동작에 관한 기능을 호스트할 수 있다. 예로써, 소셜 네트워킹 시스템(20)은 하나 이상의 클라이언트 장치(30)에서 하나 이상의 사용자들이 정보를 열람 및 포스트할 뿐만 아니라 웹사이트를 통해 서로 통신할 수 있도록 해주는 웹사이트를 호스트할 수 있다. 서버(22)가 예컨대 소셜 네트워킹 시스템(20)을 호스팅하는 많은 서버들뿐만 아니라 다른 컨텐츠 분배 서버, 데이터 스토어 및 데이터베이스를 포함할 수 있지만, 이하에서, 서버들(22)은 서버(22)라고 한다. 데이터 스토어(24)는 디지털 데이터 객체로서 소셜 네트워킹 시스템의 동작과 관련되고 동작가능하게 해주는 컨텐츠 및 데이터를 저장할 수 있다. 특정한 구현으로, 데이터 객체는 데이터 파일, 데이터베이스 또는 레코드에 통상 저장되거나 포함되는 디지털 정보의 아이템이다. 컨텐츠 객체는 텍스트(예컨대, ASCII, SGML, HTML), 이미지(예컨대, jpeg, tif 및 gif), 그래픽(벡터-기반 또는 비트맵), 오디오, 비디오(예컨대, mpeg) 또는 다른 멀티미디어, 및 이들의 조합을 포함하는 많은 형태를 취할 수 있다. 또한, 컨텐츠 객체 데이터는 실행가능한 코드 객체(예컨대, 브라우저 윈도우 또는 프레임 내의 실행가능한 게임), 팟캐스트(podcast) 등을 포함할 수 있다. 논리적으로, 데이터 스토어(24)는 하나 이상의 물리적 시스템에 저장된 논리적으로 관계된 레코드 또는 파일의 통합 모음으로서 정보를 관리하는, 가령 관계형 데이터베이스 및 객체-지향형 데이터베이스와 같은 하나 이상의 다양한 별개의 통합된 데이터베이스에 해당한다. 구조적으로, 데이터 스토어(24)는 하나 이상의 많은 계층의 데이터 저장 및 관리 시스템을 통상 포함할 수 있다. 특정 실시예로, 데이터 스토어(24)는 가령 하나 이상의 데이터베이스 서버, 대량 저장 미디어, 미디어 라이브러리 시스템, 저장 영역 네트워크, 데이터 저장 클라우드 등과 같은 구성요소를 포함하는 임의의 적합한 물리적 시스템(들)에 의해 구현될 수 있다. 일예의 실시예에서, 데이터 스토어(24)는 하나 이상의 서버, 데이터베이스(예컨대, MySQL) 및/또는 데이터 웨어하우스(warehouses)를 포함할 수 있다.
데이터 스토어(24)는 서로 다른 소셜 네트워킹 시스템(20) 사용자 및/또는 클라이언트 장치(30)와 관련된 데이터를 포함할 수 있다. 특정 실시예로, 소셜 네트워킹 시스템(20)은 시스템(20)의 각각의 사용자에 대한 사용자 프로파일을 관리한다. 사용자 프로파일은 소셜 네트워크의 사용자를 기술하는 데이터를 포함하는데, 이런 데이터는 예컨대, 적절한 이름(사람의 이름, 중간 이름 및 성, 상표명 및/또는 비즈니스 엔티티의 회사명 등), 가령 경력, 학력, 취미나 선호도, 지리적 위치 및 추가적인 설명적 데이터와 같은 인명 정보, 인구학적 정보 및 다른 유형의 설명적 정보를 포함할 수 있다. 예로써, 사용자 프로파일은 사용자의 생일, 관계 상태, 거주 도시 등을 포함할 수 있다. 시스템(20)은 다른 사용자들 사이의 하나 이상의 관계를 기술하는 데이터를 더 저장할 수 있다. 관계 정보는 유사하거나 공통의 경력, 그룹 회원(membership), 취미 또는 학력을 갖는 사용자들을 표시할 수 있다. 또한, 사용자 프로파일은 다른 사용자들에 의한 사용자의 정보로의 접근을 통제하는 개인정보 설정을 포함할 수 있다.
클라이언트 장치(30)는 일반적으로 컴퓨터 네트워크에서 (예컨대, 원격으로) 통신하기 위한 기능을 포함하는 컴퓨터 또는 컴퓨팅 장치이다. 클라이언트 장치(30)는 다른 적합한 컴퓨팅 장치들 가운데, 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿, 개인 정보 단말기(PDA), 차량 내외 항법시스템, 스마트폰이나 다른 셀룰러폰 또는 모바일폰, 또는 모바일 게임장치일 수 있다. 클라이언트 장치(30)는 가령 웹 브라우저(예컨대, 마이크로소프트 윈도우 인터넷 익스플로러, 모질라 파이어폭스, 애플 사파리, 구글 크롬 및 오페라 등)와 같은 하나 이상의 클라이언트 애플리케이션을 실행하여 컴퓨터 네트워크를 통해 컨텐츠에 접근하고 컨텐츠를 열람할 수 있다. 특정한 구현으로, 클라이언트 애플리케이션은 클라이언트 장치(30)의 사용자가 가령 소셜 네트워킹 시스템(20)에 의해 호스팅된 자원과 같이 검색되는 특정 네트워크 자원의 주소로 들어갈 수 있도록 해준다. 이들 주소는 URL(Uniform Resource Locators)일 수 있다. 또한, 일단 페이지나 다른 자원이 검색되었다면, 클라이언트 애플리케이션은 사용자가 다른 자원으로의 하이퍼링크를 "클릭"하는 경우 다른 페이지나 레코드로의 접근을 제공할 수 있다. 예로써, 이런 하이퍼링크는 웹 페이지 내에 위치할 수 있으며, 사용자가 또 다른 페이지의 URL에 들어가고 그 페이지를 검색하는 자동화 방식을 제공할 수 있다.
도 1은 도 3에 도시된 소셜 네트워킹 시스템(20)의 백 엔드 기능을 구현할 수 있는 네트워킹 시스템, 아키텍처 또는 기반구조(100)(이하, 네트워킹 시스템(100)이라 한다)의 예시적인 실시예를 도시한다. 특정 실시예로, 네트워킹 시스템(100)은 네트워킹 시스템(100)의 사용자들이 네트워킹 시스템(100)에 의해 제공되는 소셜 네트워킹 서비스를 통해 서로 간에 그리고 제 3 자와 상호작용할 수 있도록 해준다. 예컨대, 원격 사용자 컴퓨팅 장치(예컨대, 개인용 컴퓨터, 넷북, 멀티미디어 장치, 셀룰러폰(특히 스마트폰) 등)에서 사용자들은 웹 브라우저 또는 다른 사용자 클라이언트 애플리케이션을 통해 네트워킹 시스템(100)에 접근하여, 정보를 열람하거나 정보를 저장 또는 업데이트하거나 정보를 통신하거나 다른 사용자들, 제 3 자 웹사이트, 웹 페이지 또는 웹 애플리케이션과 상호작용하도록 네트워킹 시스템(100)에 의해 적어도 부분적으로 호스팅되거나 접근가능한 웹사이트, 웹 페이지 또는 웹 애플리케이션에 접근하거나, 네트워킹 시스템(100)에 의해 저장되거나 호스팅되거나 접근가능한 다른 정보에 접근할 수 있다. 특정 실시예로, 하기에 더 상세히 기술되는 바와 같이, 네트워킹 시스템(100)은 사용자, 개념, 토픽 및 다른 정보(데이터)를 나타내는 그래프 노드뿐만 아니라, 그래프 노드 사이의 관계를 연결하거나 정의하는 그래프 에지를 포함하는 그래프를 관리한다.
도 1을 참조하면, 특정 실시예로, 네트워킹 시스템(100)은 네트워킹 시스템(100)의 사용자들에게 그리고 사용자들로부터 정보를 통신하는 다수의 클라이언트 또는 웹 서버(104)(이하, 클라이언트 서버(104))를 포함한다. 예컨대, 원격 사용자 컴퓨팅 장치에서 사용자들은 부하 분산기(load balancers)를 통해 클라이언트 서버(104) 또는 네트워크와 서비스 제공자의 임의의 적합한 조합을 통해 다른 적합한 시스템과 통신할 수 있다. 클라이언트 서버(104)는 데이터를 검색하여 사용자 요청에 응답하기 위한 구조화된 문서를 생성하기 위해 본 명세서에 기술된 인덱스 및 데이터베이스 시스템을 쿼리(query)할 수 있다. 또한, 네트워킹 시스템(100)은 하나 이상의 인덱스 서버(106)를 포함하는 인덱스 층, 하나 이상의 캐시 서버를 포함하는 캐시 층(108) 및 하나 이상의 데이터베이스 서버와 관련 데이터베이스 관리 기능(110)을 포함하는 데이터베이스 층을 포함할 수 있다. 데이터베이스(110)는 다른 쿼리 유형을 다루기 위한 다른 캐시 층들을 자체 포함할 수 있는 일반적으로 데이터베이스 시스템을 내포한다.
클라이언트 서버(104)들 각각은 캐시 층(108)과 통신한다. 캐시 층(108)은 하나 이상의 분산형 캐시 클러스터 또는 링으로서 구현될 수 있다. 하나의 구현으로, 캐시 층(108)은 라이트-스루/리드-스루(write-thru/read-thru) 캐시 층이며, 모든 리드 및 라이트가 캐시 층을 순회한다. 하나의 구현으로, 캐시 층은 관련 정보를 관리하며, 따라서 이런 정보에 대한 쿼리를 다룰 수 있다. 다른 쿼리가 실행용 데이터베이스(110)로 통과된다. 특정 실시예로, 데이터베이스(110)는 관계형 데이터베이스이다. 데이터베이스(110)는 MySQL 및/또는 무엇보다도 예컨대 HAYSTACK, CASSANDRA와 같은 임의의 적합한 관계형 데이터베이스 관리 시스템으로 구현될 수 있다. 특정 실시예로, 캐시 층(108)은 데이터베이스(110)의 임의의 적합한 구현과 연동되도록 동작하는 플러그-인을 포함할 수 있다. 하나의 구현으로, 플러그-인은 하나 이상의 테이블 또는 플랫 파일(flat files)을 포함하는 관계형 데이터베이스용으로 적합한 쿼리 및 명령에 대한 그래프 노드 및 그래프 에지로서 캐시 층에 저장된 데이터를 변환하는 것과 같은, 다양한 변환(translation) 동작을 수행한다.
특정 실시예로, 네트워킹 시스템(100)에 의해 저장된 정보는 데이터베이스(110) 및 캐시 층(108) 내에 저장된다. 특정 실시예로, 각각의 데이터베이스(110) 내에 저장된 정보는 관계형으로(relationally)(예컨대, MySQL을 통해 객체 및 테이블로서) 저장되는 반면, 동일한 정보는 그래프 노드 및 노드들 사이의 연관 또는 연결(본 명세서에서는 그래프 에지라고 함)을 포함하는 그래프의 형태로 캐시 층에 의해 저장된다.
특정 실시예로, 각각의 그래프 노드나 객체는 그래프에서 그래프 노드를 고유하게 식별하는 고유 식별자(ID)(이하, 노드 ID라고 함)를 지정받는다; 즉, 각 노드 ID는 전역적으로(globally) 고유하다. 하나의 구현으로, 각 노드 ID는 64-비트 식별자이다. 하나의 구현으로, 샤드(shard)는 노드 ID 공간의 세그먼트를 할당받는다.
특정 실시예로, 그래프는 가령 사용자, 페이지, 이벤트, 월 포스트(wall post), 코멘트, 사진, 비디오, 배경 정보, 개념, 관심사 및 노드로 표현하기에 유용한 임의의 다른 요소와 같은 다양한 다른 노드 유형을 관리할 수 있다. 에지 유형은 노드 사이의 연관에 해당하며, 친구, 팔로어(followers), 구독자, 팬, 좋아요(또는 관심의 다른 표시), 월 포스트, 코멘트, 링크, 제안, 추천 및 노드들 사이의 연관의 다른 유형을 포함할 수 있다. 하나의 구현으로, 그래프의 일부는 소셜 네트워크 환경의 개별 사용자에 각각 해당하는 사용자 노드를 포함하는 소셜 그래프일 수 있다. 또한, 소셜 그래프는 가령 특정 개념을 각각 다루거나 특정 개념에 관한 개념 노드뿐만 아니라 소셜 네트워크 환경의 사용자들 사이에서 일시적이거나 아닐 수 있는 현재 관심사의 특정 토픽을 각각 다루거나 특정 토픽에 관한 토픽 노드와 같은 다른 노드를 포함할 수 있다. 특정 실시예로, 각 노드는 소셜 네트워크 환경에서 호스팅되거나 접근가능한 해당 웹 페이지("프로파일 페이지")를 가지거나, 해당 웹 페이지를 나타내거나 해당 웹 페이지에 의해 표시된다. 예로써, 사용자 노드는 해당 사용자가 컨텐츠를 추가하고 진술(declarations)하며 그밖에 그 또는 그녀 자신의 의사를 표현할 수 있는 해당 사용자 프로파일 페이지를 가질 수 있다. 예로써, 하기에 기술되는 바와 같이, 예컨대 사용자 프로파일 페이지, 개념 프로파일 페이지 또는 토픽 프로파일 페이지와 같은 소셜 네트워크 환경에서 호스팅되거나 접근가능한 다양한 웹 페이지는 사용자들이 컨텐츠를 포스트하거나, 상태 업데이트를 포스트하거나, 메시지를 포스트하거나, 사용자나 다른 사용자들에 의해 제시된 다른 포스트에 대한 코멘트를 포함하는 코멘트를 포스트하거나, 관심사를 진술하거나, 임의의 상술한 포스트뿐만 아니라 페이지 및 특정 컨텐츠에 대해 (하기에 기술되는) "좋아요"를 진술하거나, 그밖에 그들 자신을 표현하거나 다양한 행위를 수행할 수 있도록 해준다 (이하, 이들 사용자 행위 및 다른 사용자 행위는 일괄하여 "포스트(posts)" 또는 "사용자 행위"라고 할 수 있다). 일부 실시예로, 포스팅은 개별 프로파일 페이지, 다른 사용자 프로파일 페이지, 개념 프로파일 페이지, 토픽 페이지 또는 다른 웹 페이지나 웹 애플리케이션을 통해, 가령 미디어 컨텐츠(예컨대 사진, 비디오, 음악, 텍스트 등), URLs(uniform resource locators) 및 다른 노드와 같은 추가의 컨텐츠를 연결(linking)하거나 참조(referencing)하는 것을 포함할 수 있다. 이후, 이런 포스트, 진술 또는 행위는 인증한 사용자뿐만 아니라 다른 사용자들에 의해 열람될 수 있다. 특정 실시예로, 소셜 그래프는 소셜 그래프에서 해당 노드 쌍 사이의 연결을 각각 정의하거나 나타내는 복수의 에지를 더 포함한다. 상술한 바와 같이, 컨텐츠의 각 아이템은 다른 노드와 연결된 그래프 내의 노드일 수 있다.
방금 설명한 바와 같이, 다양한 예시적인 실시예에서, 하나 이상의 설명된 웹 페이지 또는 웹 애플리케이션은 소셜 네트워크 환경 또는 소셜 네트워킹 서비스와 관련된다. 본 명세서에서 사용되는 바와 같이, "사용자"는 개인(사람인 사용자), 엔티티(예컨대, 기업, 비즈니스 또는 제 3 자 애플리케이션) 또는 이런 소셜 네트워크 환경과 또는 환경에서 상호작용하거나 통신하는 (예컨대, 개인 또는 엔티티의) 그룹일 수 있다. 본 명세서에서 사용되는 바와 같이, "등록 사용자"는 소셜 네트워크 환경 내 공식적으로 등록된 사용자를 말한다(일반적으로, 본 명세서에 기술되는 사용자들 및 사용자 노드들은 오직 등록된 사용자들을 말하지만, 이는 다른 실시예에서 반드시 필요조건인 것은 아니다; 즉, 다른 실시예로, 본 명세서에 기술되는 사용자들 및 사용자 노드들은 본 명세서에 기술되는 소셜 네트워크 환경에 등록되지 않은 사용자들을 말할 수 있다). 특정 실시예로, 각 사용자는 소셜 네트워크 환경에 의해 저장되거나 호스팅되거나 접근가능하며, 다른 사용자들의 전부 또는 선택된 부분집합에 의해 열람가능한 해당 "프로파일" 페이지를 갖는다. 일반적으로, 사용자는 그들 자신의 개별 프로파일 페이지의 전부나 일부에 대한 관리 권한뿐만 아니라, 잠재적으로 예컨대 홈 페이지, 웹 애플리케이션 호스팅 페이지 및 다른 가능성을 포함하는 특정 사용자에 의해 또는 특정 사용자용 다른 페이지에 대한 관리 권한을 갖는다. 본 명세서에서 사용되는 바와 같이, "인증 사용자"는 사용자가 관리 권한을 가지는 해당 프로파일 페이지에서 주장되는 사용자로서 소셜 네트워크 환경에 의해 인증된 사용자, 또는 대안으로 상기 주장되는 사용자의 적합하게 신임된 대리인을 말한다.
2명의 사용자 또는 2개의 개념 사이의 연결은 소셜 네트워크 환경의 사용자 또는 개념 사이의 정의된 관계를 나타낼 수 있으며, 사용자, 개념, 이벤트 또는 관련을 맺은 소셜 네트워크 환경의 다른 노드에 해당하는 노드들 사이의 에지로써 소셜 네트워크 환경의 적절한 데이터 구조에서 논리적으로 정의될 수 있다. 본 명세서에서 사용되는 바와 같이, "친구관계(friendship)"는 가령 정의된 소셜 관계와 같이 소셜 네트워크 환경의 한 쌍의 사용자들 사이의 연관을 말한다. 본 명세서에서 사용되는 바와 같이, "친구"는 또 다른 사용자가 연결, 친구관계, 연관 또는 관계를 형성하여 2명의 사용자 사이에 에지가 생성되도록 하는 소셜 네트워크 환경의 임의의 사용자를 말한다. 예로써, 2명의 등록 사용자는 예컨대 다른 사용자에 대한 친구관계 요청을 전송하거나 전송되도록 한 후 그 사용자가 그 요청을 받아들이거나 거절할 수 있도록 하여 친구관계를 위해 2명의 사용자 중 하나가 다른 한 명을 선택함으로써, 명시적으로 서로 친구가 될 수 있다. 대안으로, 친구관계 또는 다른 연결은 자동으로 확립될 수 있다. 이런 소셜 친구관계는 다른 사용자들이, 특히 등록 사용자 중 하나 또는 모두와 친구인 사람들이 알아볼 수 있다. 또한, 등록 사용자의 친구는 등록 사용자의 프로파일 또는 다른 페이지에 있는 컨텐츠, 특히 사용자-생성 또는 사용자-선언 컨텐츠에 대한 접근 특권을 증가시킨다. 그러나, 소셜 그래프에서 사용자 간에 확립된 친구 연결을 갖는 2명의 사용자가 반드시 실생활(소셜 네트워킹 환경 외부)에서 (종래의 의미의) 친구이어야 하는 것은 아님을 유의해야 한다. 예컨대, 일부 구현에서, 사용자는 비즈니스 또는 다른 비-인격 엔티티일 수 있으며, 따라서 단어의 통상의 의미로 사람인 사용자와 친구가 될 수는 없다.
본 명세서에서 사용되는 바와 같이, "팬(fan)"은 특정 사용자, 웹 페이지, 웹 애플리케이션 또는 소셜 네트워크 환경에서 접근가능한 다른 웹 컨텐츠의 지지자 또는 팔로어인 사용자를 말한다. 특정 실시예로, 사용자가 특정 웹 페이지의 팬(특정 웹 페이지의 "팬들")인 경우, 사용자는 다른 등록 사용자에 대한 팬으로서 또는 열람하는 일반 공중으로서 그 페이지에 리스트될 수 있다. 추가로, 사용자의 아바타 또는 프로파일 사진이 그 페이지에(또는 하기에 기술되는 임의의 페이지에서/페이지 상에서) 나타날 수 있다. 본 명세서에서 사용되는 바와 같이, "좋아요(like)"는 즉, 사용자, 특히 등록 또는 인증 사용자가 그 또는 그녀가 좋아하거나, 지지하거나 즐기는 팬이거나, 긍정적인 견해를 갖는다고 선언하거나 명시한, 가령, 예로써 제한 없이, 포스트, 코멘트, 관심, 링크, 하나의 미디어(예컨대, 사진, 사진 앨범, 비디오, 노래 등), 개념, 엔티티 또는 페이지, 및 다른 가능성과 같은 임의의 무엇을 말한다(일부 구현으로 사용자는 소셜 네트워크 시스템 또는 환경에 의해 호스팅되거나 접근가능한 임의의 페이지 상의 임의의 무엇에게 또는 무엇에 대해 실제로 좋아요를 표시하거나 선언할 수 있다). 일실시예로, "좋아요"를 표시 또는 선언하거나 사용자가 어떤 것의 "팬"이라고 표시 또는 선언하는 것은 소셜 네트워킹 환경에서 동등하게 처리되거나 정의될 수 있으며, 교환하여 사용될 수 있다; 마찬가지로, 자신을 가령 개념 또는 개념 프로파일 페이지와 같은 어떤 것의 "팬"이라고 선언하거나, 자신이 그것을 "좋아한다"고 선언하는 것은 소셜 네트워킹 환경에서 동등하게 정의될 수 있으며 본 명세서에서 교환하여 사용될 수 있다. 추가로, 본 명세서에서 사용되는 바와 같이, "관심사(interest)"는 가령 사용자의 프로파일 페이지에 제시되는 사용자-선언 관심사와 같은 사용자-선언 관심사를 말한다. 본 명세서에서 사용되는 바와 같이, "바램(want)"은 사용자가 원하는 실제의 무엇을 말한다. 상술한 바와 같이, "개념(concept)"은 사용자가 예로써, 스포츠, 스포츠 팀, 음악 장르, 음악 작곡가, 취미, 비즈니스(기업), 엔티티, 그룹, 유명인사, 등록 사용자가 아닌 사람, 또는 심지어 이벤트, 일부 실시예에서는 또 다른 사용자(예컨대, 비-인증된 사용자) 등과 같은 것에 대한 관심, 그것에 대한 좋아요 또는 그것과의 관계를 선언하거나 명시할 수 있는 실제의 무엇을 말한다. 예로써, 하나 이상의 복수의 사용자들(예컨대, Jerry Rice 외의 사용자들)에 의해 생성되고 운영되는, 유명한 프로 풋볼 선수인 "Jerry Rice"에 대한 개념 노드 및 개념 프로파일 페이지가 있을 수 있는 한편, 소셜 그래프는 Jerry Rice 그 자신(또는 Jerry Rice의 신임되거나 위임받은 대리인)에 의해 생성되고 운영되는 Jerry Rice에 대한 사용자 노드 및 사용자 프로파일 페이지를 추가로 포함한다.
예시적인 그래프 구조에서, 데이터 객체는 복수의 속성을 포함한다. 이런 속성은 이름-값 속성일 수 있다. 예컨대, 사람에 해당하는 데이터 객체는 다음의 속성을 포함할 수 있다.
{
"id":12345, # 64bit FBid
"type": person, # can be a type integer or a string name
"created": 1253665137,
"name": "Papa Smurf",
"username": "papa_smurf",
"gender": "male",
"emails": ["psmurf@facebook.com","papasmurf@gmail.com"]
}
데이터 객체 식별자(id)는 객체가 생성될 때 할당되는 64-비트 값일 수 있다. 데이터 객체의 속성은 하나 이상의 인덱스 서버(106)에 의해 관리되는 검색 인덱스에서 구문분석되거나 관리될 수 있다. 예컨대, 새로운 데이터가 생성될 때, 용어 생성기 모듈은 상술한 데이터 객체로부터 하기의 용어를 생성할 수 있다:
type:person
created:1253665137
name:papa
name:smurf
username:papa_smurf
gender:male
emails:psmurf@facebook.com
emails:papasmurf@gmail.com
문서 식별자(docid)는 (가령 32-비트 카운터 또는 클럭 값과 같은) 타임 스탬프 및 해당 데이터 객체의 데이터 객체 식별자(id)를 포함할 수 있다. 용어들은 해당 문서 식별자(docid)와 관련하여 하나 이상의 인덱스에 저장될 수 있다. 예컨대, 예시적인 검색 인덱스에서, 문서 식별자(docids)는 모든 포스팅 리스트가 역 시계열적으로(reverse chronologically) 배열되도록, 객체 ID 및 "생성된(created)" 타임 스탬프로부터 생성된다(개념상, 문서 식별자(docids)는 "(32비트):OBid(64비트)로 생성"된다). (생성된) 타임 스탬프는 데이터 객체가 처음 생성될 때의 시간에 해당한다. 다른 구현으로, 타임 스탬프는 소정의 데이터 객체가 마지막으로 수정되었던 시간에 해당할 수 있다. 하나의 구현으로, 인덱스에 대한 문서 식별자(docid)는 소정의 검색의 결과가 생성 시간에 의해 역 시계열적으로 배열될 수 있도록 구성된다. 예컨대, 이런 방식을 기초로, 'name:smurf type:person'의 검색은 사람과 관련된 데이터 객체가 생성되는 시간에 의해 역 시계열적으로 배열되어, "smurf"란 이름(name)을 갖는 모든 사람을 반환(return)할 것이다. 다른 실시예로, 몇몇 다른 기반으로 객체를 배열하고자 한다면, 임의의 32-비트 정렬 키(sort key)는 타임 스탬프의 자리에 사용될 수 있다.
객체들 사이의 연관(에지)은 개념상 "에지 객체(edge objects)"라고 하는 데이터 객체로 모델링되고 저장될 수 있다. 따라서, 인덱스는 가령 사람과 같은 데이터 객체에 해당하는 엔트리 및 에지 관계에 해당하는 다른 객체를 저장하여, 소셜 네트워크나 다른 그래프-관련 정보의 검색을 용이하게 함으로써, 시스템 성능을 증가시킬 수 있다. 하기의 데이터 객체는 상기 사람 객체(id 12345)와 음악 그룹(Coldplay)에 해당하는 또 다른 데이터 객체(id 67890) 사이의 "팬" 타입의 연관에 해당한다.
{
"id": 92821,
"type": connection.fan,
"created": 1253665248,
"source": 12345, # Papa Smurf
"dest": 67890 # Coldplay
}
에지는 소스(source) 및 목적지(destination) 객체와 관련된 검색 인덱스에서 특수한 용어를 생성할 수 있다. 예컨대, 검색 쿼리 connection.fan.to(67890)는 모든 Coldplay(docid 67890) 팬들과 관련된 문서 식별자를 반환할 것이다. 마찬가지로, 검색 쿼리 connection.fan.from(12345)은 사람(id 12345)이 팬 연관(fan association)를 확립했던 모든 데이터 객체에 대한 문서 식별자를 반환한다. 이런 구문(syntax)을 사용하여, 애플리케이션은 친구들 또는 connection.from(12345)type:status인 쿼리와 사람의 다른 연결로부터 모든 상태(status) 업데이트를 찾을 수 있다.
추가의 예로써, 하기의 검색 쿼리는 또한 Coldplay 팬들: connection.friend.from(12345) connection.fan.to(67890)인 사람(id 12345)의 친구들 모두를 반환한다. 속성을 가지고 또 다른 객체에 대한 데이터 객체 "포인트(point)"를 직접적으로 만드는 것이 가능하기 때문에, 연관의 특정 타입이 별개의 에지 객체 없이 생성될 수 있다. 예컨대, 상태 메시지와 사용자 사이의 "소유자(owner)" 에지 객체를 갖는 대신에, 상태 객체는 예컨대:
{
"id": 5834639,
"type": "status.message",
"text": "doing nothing",
"owner": 12345,
}
와 같이, 생성하는 사용자에 해당하는 데이터 객체의 값을 갖는 소유자 속성을 포함할 수 있다.
하나의 구현으로, 인덱스 서버(106)는 쿼리 작성(query composition)을 통해 그래프 순회(graph traversal)을 위한 단순 구문(simple syntax)을 지원한다. 예컨대, 하기의 검색 쿼리는 친구들 중 사람(id 12345)의 친구들 모두를 반환할 것이다:connection.friend.from(connection.friend.from(12345)). 이런 경우, 인덱스 서버는 먼저 내부 쿼리 connection.friend.from(12345)를 실행한다. 이후, 내부 쿼리에 의해 반환된 문서 식별자는 전체 표현이 그 사람의 모든 친구들에 대한 connection.from 용어들의 논리합(OR)으로 확장되도록 외부 접두어(prefix)에 적용된다.
이런 쿼리 작성 구문은 매우 다양한 쿼리를 구성하는데 사용될 수 있다. 예컨대, 하기의 검색은 스탠포드(Stanford) 네트워크에서 사람(id 12345)의 친구들을 식별하는 태그를 갖는 모든 사진을 반환할 것이다:connection.tag.from(connection.friend.from(12345) network:stanford) type:photo. 내부 쿼리 구문은 단지 에지만이 아닌 임의의 특성에 적용될 수 있다. 예컨대, "작가(author)"가 상태 메시지의 속성이라고 가정하면, 하기의 검색은 사람(id 12345)의 친구들로부터 모든 상태 메시지를 반환할 것이다: author(connection.friend.from(12345)) type:status. 추가로, 하기의 검색 쿼리는 Papa란 이름의 사람으로부터의 모든 상태 메시지를 반환할 것이다: author(name:papa type:person) type:status. 게다가, 하기의 검색 쿼리는 역 시계열적인 순서로 사람(id 12345)에 대한 생성된 친구 연결을 반환한다: source(connection.friend.from(12345)) type:connection.
인덱스 서버(106)는 클라이언트 프로세스(104)가 가령 데이터베이스(110)나 캐시 층(108)과 같은 데이터 스토어에 저장된 해당 데이터 객체로 접근하는데 사용할 수 있는 쿼리에 응답하여, 문서 식별자를 반환한다. 하나의 구현으로, 상술한 바와 같이, 용어 생성기 모듈은 데이터 객체의 속성으로부터 검색 인덱스에 대한 용어를 생성한다. 용어 생성기는 객체를 입력으로 간주하고 어느 용어가 그 데이터 객체에 대해 인덱싱되어야 하는지를 표시하는 한 세트의 (문서 식별자(docid), 용어(term)) 쌍을 출력한다. 하나의 구현으로, 용어 생성기 모듈 타입 또는 행동은 삽입되는 객체의 타입을 기초로 선택된다. 예컨대, 훈시적인 목적으로 용어 생성기 모듈이 하기의 에지 객체를 처리하도록 호출되었다고 가정하자:
{
"id": 92821,
"type": "connection.fan",
"created": 1253665248,
"source": 12345, # Papa Smurf
"dest": 67890 # Coldplay
}
연결 용어 생성기 모듈은 인덱스로의 삽입(insertion)을 위해 하기의 용어를 생성할 것이다:
(92821, "type:connection.fan") # Edge document
(92821, "source:12345")
(92821, "dest:67890")
(12345, "connection.fan.to:67890") # Papa Smurf's document
(12345, "connection.to:67890")
(67890, "connection.fan.from:12345") # Coldplay's document
(67890, "connection.from:12345")
도 4는 본 발명의 구현에 따라 구성된 시스템에서 새로운 객체를 생성하고 이들을 저장하는 것에 관한 예시적인 방법을 제시한다. 도 4에 도시된 바와 같이, 새로운 객체에 대해, 객체 생성 프로세스는 생성된 타임 스탬프 (created) 요소 및 객체 식별자 요소(상술한 내용 참조)를 포함할 수 있는 새로운 문서 식별자(docid)를 생성한다(402). 이후, 하나 이상의 용어 생성기 모듈은 객체의 타입을 기초로 문서 식별자(docid)-용어(term) 쌍을 생성하도록 호출(invoke)된다(404). 이후, 객체 생성 프로세스는 인덱스 서버(106)에 의해 관리되는 하나 이상의 인덱스로 문서 식별자(docid)-용어(term) 쌍을 삽입하고(406), 객체를 데이터베이스(110)에 기록한다(408). 몇몇의 구현으로, 각각의 문서 식별자(docid)-용어(term) 쌍은 소정의 인덱스에서 별개의 엔트리로 관리될 수 있다. 다른 구현으로, 문서 식별자(docid)-용어(term) 쌍의 docid는 동일한 용어를 갖는 기존의 인덱스 엔트리에 추가될 수 있다. 예컨대, Coldplay(docid 67890)의 새로운 팬에 해당하는 객체의 문서 식별자(예컨대, docid 12345)는 "connection.to:67890" 및/또는 "connection.fan.to:67890"인 용어를 갖는 하나 이상의 기존의 인덱스 엔트리에 추가될 수 있다.
용어 생성기 모듈은 업데이트될 수 있으며, 모든 새로운 객체는 용어 생성기로부터 새로운 용어를 인덱싱할 것이다. 또한, 업데이트 프로세스는 모든 예전 객체가 새로운 용어로 업데이트되도록 맵리듀스(MapReduce) 작업으로 매일 전체 인덱스를 재생성할 수도 있다. 인덱스 재구성(rebuilding)이 역정규화(denormalization)를 통해 성능을 향상시키기 위한 메커니즘으로 사용될 수 있다. 많은 저장 시스템은 성능을 향상시키기 위해 애플리케이션 레벨에서 데이터의 역정규화를 필요로 한다. 용어 생성기는 역정규화 결정이 더 동적으로 이루어지도록 하며 쿼리 패턴이 변화함에 따라 이들 결정으로의 변화를 용이하게 한다. 게다가, 역정규화 구성으로의 변화는 하부 데이터(underlying data)가 데이터베이스(110)에 지속적으로 저장되는 방식으로의 변화를 필요로 하지 않는다. 예컨대, 페이지 생성 스크립트(home.php)가 하기의 검색을 빈번히 실행하여 친구로부터 상태 메시지를 얻는다고 가정하자: author(connection.from(UID)) type:status. 쿼리 용량 및 타입:상태(type:status) 포스팅 리스트의 크기로 인해 성능이 문제가 된다면, 용어 생성기 모듈은 그 결과가 단일의 더 작은 포스팅 리스트 또는 인덱스에 있도록 하기 위해, 상태 메시지에 대해 작가와 타입의 합성 용어를 출력하도록 추가되거나 업데이트될 수 있다. 예컨대, 용어 생성기 모듈은 가령:
{
"id": 321224,
"type": "status",
"created": 1253665137,
"message": "...",
"author": 12345
}
와 같이, 상태 객체에 대한 추가적인 용어를 추가하도록 구성될 수 있다. 용어 생성기 모듈은 추가적인 용어:(321224, "status:author:12345")를 출력하도록 업데이트될 수 있다. 페이지 생성 스크립트는 쿼리가 status:author(connection.from(UID))로 표현되도록 업데이트될 수 있다. 또한, 하기에 더 상세히 기술되는 바와 같이, 한 세트의 복제 인덱스(replica indexes)는 추가적인 성능 향상을 위해 특정 용어에 대하여 생성될 수 있다. 이런 방식의 한 가지의 특별한 이점은 역정규화 결정이 쉽게 변경될 수 있으며, 애플리케이션 레벨에서 발생할 필요가 없다는 점이다. 이것은 개발자가 개념상 가장 논리적인 방법으로 데이터를 저장할 수 있다는 것을 의미한다. 쿼리 성능은 이들 애플리케이션-레벨 결정과는 상대적으로 독립된 방식으로 조정될 수 있으며, 애플리케이션을 더 무결하고, 이해하기 쉬우며, 시간에 따라 업데이트하기 용이하도록 해준다.
하나의 구현으로, 검색 인덱스는 문서 식별자(docid)에 의해 샤딩(sharded)된다. 예컨대, 도 1에 도시된 바와 같이, 인덱스 층은 루트(root) 서버(106a) 및 복수의 리프(leaf) 서버(106b)를 포함하는 인덱스 서버의 계층 구성에 의해 구현될 수 있다. 하나의 구현으로, 각 리프 서버(106b)는 하나 이상의 샤드(shards)로 할당된다. 또 다른 구현으로, 클러스터 또는 링 토폴로지가 사용될 수 있다. 디폴트로, 검색은 병렬로 모든 샤드에 쿼리를 송신하고, 그 결과를 믹서 또는 루트 인덱스 서버(106a)에서 병합하여 실행될 수 있다. 하나의 구현으로, 샤드는 문서 식별자 공간의 세그먼트에 할당된다. 특정 실시예로, 각 문서 식별자(docid)는 (예컨대, 산술적으로 또는 수학적 함수를 통해) 고유의 해당 샤드 ID와 맵핑한다. 따라서, 특정 용어(예컨대, "connection.fan.from:12345")는 Coldplay 객체(docid 67890)에 해당하는 하나의 샤드 및 사람(docid 12345)이 또한 "팬" 연결을 확립했던 다른 객체에 해당하는 다른 샤드에서 관리될 수 있다. 하나의 구현으로, 인덱스 서버(106) 각각은 그들이 관리를 담당하는 한 세트의 샤드 ID(들)에 할당된다. 이런 할당은 시스템으로부터 인덱스 서버(106)를 추가하거나 제거하도록 조정될 수 있다.
모든 쿼리를 모든 샤드에 송신하는 것은 계산적으로 비용이 많이 들 수 있으며, 시스템의 전체 쿼리 레이트(query rate)를 제한할 수 있다. 하나의 구현으로, 인덱스 서버(106)에 의해 구현되는 인덱스 층은 인덱스 시스템에서 단지 용어들의 부분집합만을 인덱싱하는 특별한 복제 인덱스를 지원한다. 예컨대, 메인 인덱스 또는 마스터 인덱스 이외에, 인덱스 층은 하나 이상의 특정 쿼리 타입용으로 형성된 하나 이상의 추가적인 복제 인덱스를 포함할 수 있다. 예컨대, connection.from(*) 쿼리가 시스템 내에서 매우 일반적인 쿼리라고 가정하자. 본 명세서에 기술된 인덱싱 시스템은 모든 connection.from 용어가 단지 이들 용어만을 포함하는 추가적인 복제 인덱스에 복제되도록 구성될 수 있다. 하기의 명령어는 이런 복제 인덱스의 생성을 가능하게 하는 예시적인 애플리케이션 프로그래밍 인터페이스를 나타낸다.
replicas = {
"connection.from:*":[...], # Devoted connection replica
"email:*":[...], # Email search replica
"*":[...], # Main replicas
}
인덱스 서버(106)가 쿼리를 실행하는 경우, 인덱스 서버는 검색을 충족시킬 수 있는 가장 작은 복제 인덱스를 선택한다. 예컨대, connection.from(12345) 쿼리는 connection.from 복제 인덱스 전용인 인덱스 서버로 전달될 것이다. 반면에, 가령 connection.from(12345) type:page와 같은 더 포괄적이거나 더 광범위한 검색은 양쪽 용어를 모두 지원하는 메인 인덱스 또는 또 다른 복제 인덱스 상에서 실행될 것이다. 그러나, 특정 쿼리에 대한 성능을 향상시키도록 용어로 샤딩하는 것에 반대할 이론적 이유는 없다. 이런 설계의 이점은 시스템이 모든 쿼리를 지원할 수 있으며 가장 중요한 쿼리에 대해 최적의 처리량(throughput) 및 성능으로 조정될 수 있다는 점이다. 일단 쿼리가 충분히 공통화된다면, 관리자는 그 계층의 쿼리만을 충족시키는 한 세트의 복제를 생성함으로써, 시스템을 쿼리 레이트가 증가하도록 조정할 수 있다. 이는 네트워크 애플리케이션이 요구되는 어떤 쿼리든 실행하도록 먼저 구성될 수 있다는 점에서 애플리케이션 개발을 간소화한다. 애플리케이션을 개시하기 전에, 복제 인덱스는 애플리케이션 개발 동안 생성된 쿼리의 구조를 기초로 성능을 향상시키도록 생성될 수 있다.
도 2는 서버(22a, 22b)를 구현하는데 사용될 수 있는 예시적인 컴퓨팅 시스템 아키텍처를 도시한다. 일실시예로, 하드웨어 시스템(1000)은 프로세서(1002), 캐시 메모리(1004) 및 유형의 컴퓨터 판독가능한 매체에 저장되고 본 명세서에 기술된 기능에 관한 하나 이상의 실행가능한 모듈과 드라이버를 포함한다. 추가로, 하드웨어 시스템(1000)은 고성능 입력/출력(I/O) 버스(1006) 및 표준 I/O 버스(1008)를 포함한다. 호스트 브릿지(1010)는 프로세서(1002)와 고성능 I/O 버스(1006)를 연결하는 반면, I/O 버스 브릿지(1012)는 2개의 버스(1006 및 1008)를 서로 연결한다. 시스템 메모리(1014) 및 하나 이상의 네트워크/통신 인터페이스(1016)는 버스(1006)에 연결된다. 하드웨어 시스템(1000)은 비디오 메모리(미도시) 및 비디오 메모리에 연결된 디스플레이 장치를 더 포함할 수 있다. 대용량 저장소(1018) 및 I/O 포트(1020)가 버스(1008)에 연결된다. 하드웨어 시스템(1000)은 키보드와 포인팅 장치 및 버스(1008)에 연결된 디스플레이 장치(미도시)를 선택적으로 포함할 수 있다. 일괄적으로, 이들 구성요소들은 캘리포니아, 산타 클라라의 인텔(Intel)사에 의해 제조된 x86-호환가능 프로세서와 캘리포니아, 서니베일의 AMD(Advanced Micro Devices)사에 의해 제조된 x86-호환가능 프로세서 및 임의의 다른 적합한 프로세서에 기반한 범용 컴퓨터 시스템을 포함하나 이에 제한되지 않는, 컴퓨터 하드웨어 시스템의 광범위한 카테고리를 나타내는 것으로 의도된다.
하드웨어 시스템(1000)의 구성요소는 하기에 더 상세히 기술된다. 특히, 네트워크 인터페이스(1016)는 하드웨어 시스템(1000)과 가령 이더넷(Ethernet)(예컨대, IEEE 802.3) 네트워크, 백플레인(backplane) 등과 같은 임의의 광범위한 네트워크 사이의 통신을 제공한다. 대용량 저장소(1018)는 서버(22a, 22b)에서 구현되는 상술한 기능을 실행하기 위한 데이터 및 프로그래밍 명령어의 영구 저장을 제공하는 반면, 시스템 메모리(1014)(예컨대, DRAM)는 프로세서(1002)에 의해 실행될 경우의 데이터 및 프로그래밍 명령어의 일시 저장을 제공한다. I/O 포트(620)는 하드웨어 시스템(100)에 연결될 수 있는 추가적인 주변 장치들 사이의 통신을 제공하는 하나 이상의 직렬 및/또는 병렬 통신 포트이다.
하드웨어 시스템(1000)은 다양한 시스템 아키텍처를 포함할 수 있으며, 하드웨어 시스템(1000)의 다양한 구성요소는 재배열될 수 있다. 예컨대, 캐시(1004)는 프로세서(1002)에 내장(on-chip)될 수 있다. 대안으로, 캐시(1004) 및 프로세서(1002)는 "프로세서 모듈"로 함께 패킹될 수 있으며, 이때 프로세서(1002)를 "프로세서 코어"라고 한다. 게다가, 본 발명의 특정 실시예는 상기 구성요소 모두를 필요로 하지 않거나 포함하지 않을 수 있다. 예컨대, 표준 I/O 버스(1008)와 연결되는 주변 장치는 고성능 I/O 버스(1006)로 연결될 수 있다. 또한, 일부 실시예로, 단일 버스만 존재할 수 있으며, 이때 하드웨어 시스템(1000)의 구성요소는 단일 버스에 연결된다. 게다가, 하드웨어 시스템(1000)은 추가의 프로세서, 저장장치 또는 메모리와 같은 추가적인 구성요소를 포함할 수 있다.
하나의 구현으로, 본 명세서에 기술된 실시예의 동작은 분산형 컴퓨팅 환경에서 개별적으로 또는 일괄적으로 하드웨어 시스템(1000)에 의해 운영되는 일련의 실행가능한 모듈로 구현된다. 특정 실시예로, 한 세트의 소프트웨어 모듈 및/또는 드라이버는 네트워크 통신 프로토콜 스택, 브라우징과 다른 컴퓨팅 기능, 최적화 프로세스 등을 구현한다. 상술한 기능형 모듈은 하드웨어, 컴퓨터 판독가능한 매체에 저장된 실행가능한 모듈 또는 이 둘의 조합에 의해 실현될 수 있다. 예컨대, 기능형 모듈은 가령 프로세서(1002)와 같은 하드웨어 시스템의 프로세서에 의해 실행되는 복수의 또는 일련의 명령어를 포함할 수 있다. 초기에, 일련의 명령어는 가령 대용량 저장소(1018)와 같은 저장장치에 저장될 수 있다. 그러나, 일련의 명령어는 가령 디스켓, CD-ROM, ROM, EEPROM 등과 같은 임의의 적합한 저장 매체에 유형으로 저장될 수 있다. 게다가, 일련의 명령어는 국부적으로 저장될 필요는 없으며, 네트워크/통신 인터페이스(1016)를 통해 가령 네트워크상의 서버와 같은 원격 저장장치로부터 수신될 수 있다. 명령어는 가령 대용량 저장소(1018)와 같은 저장장치로부터 메모리(1014)로 복사된 후 프로세서(1002)에 의해 접근되고 실행된다.
운영 시스템은 소프트웨어 애플리케이션(미도시)으로의 및 소프트웨어 애플리케이션으로부터의 데이터의 입력 및 출력을 포함하는, 하드웨어 시스템(1000)의 동작을 관리 및 제어한다. 운영 시스템은 시스템상에서 실행되는 소프트웨어 애플리케이션과 시스템의 하드웨어 구성요소 사이의 인터페이스를 제공한다. 가령, 리눅스(LINUX) 운영 시스템, 캘리포니아, 쿠퍼티노의 애플 컴퓨터(Apple Computer)사로부터 이용가능한 애플 매킨토시(Apple Macintosh) 운영 시스템, 유닉스(UNIX) 운영 시스템, 마이크로소프트(r) 윈도우(r) 운영 시스템, BSD 운영 시스템 등과 같은 임의의 적합한 운영 시스템이 사용될 수 있다. 물론, 다른 구현도 가능하다. 예컨대, 본 명세서에 기술된 닉네임 생성 기능은 펌웨어(firmware)에서 또는 애플리케이션 주문형 집적회로(application specific integrated circuit) 상에서 구현될 수 있다.
게다가, 상술한 구성요소 및 동작은 저장 매체에 저장된 명령어들로 구성될 수 있다. 명령어는 프로세싱 시스템에 의해 검색되고 실행될 수 있다. 명령어의 일부 예는 소프트웨어, 프로그램 코드 및 펌웨어이다. 저장 매체의 일부 예는 메모리 장치, 테이프(tape), 디스크, 집적회로 및 서버이다. 명령어는 프로세싱 시스템이 본 발명과 부합하여 동작하도록 프로세싱 시스템에 의해 실행되는 경우 동작한다. "프로세싱 시스템"이란 용어는 단일 프로세싱 장치 또는 내부-동작형 프로세싱 장치의 그룹을 말한다. 프로세싱 장치의 일부 예는 집적회로들 및 논리 회로부(logic circuitry)이다. 당업자에게 명령어, 컴퓨터 및 저장 매체는 자명하다.
본 명세서는 당업자가 이해할 수 있는 본 명세서의 예시적인 실시예에 대한 모든 변화, 치환, 변형, 대체 및 변경을 포함한다. 마찬가지로, 적절한 경우에, 첨부된 청구항들은 당업자가 이해할 수 있는 본 명세서의 예시적인 실시예에 대한 모든 변화, 치환, 변형, 대체 및 변경을 포함한다. 예로써, 본 발명의 실시예들이 소셜 네트워킹 웹사이트와 연결되어 동작하는 것으로 기술되었으나, 본 발명은 웹 애플리케이션을 지원하고 연관성(association) 그래프로서 데이터를 모델링하는 임의의 통신 시설과 연결되어 사용될 수 있다. 게다가, 일부 실시예로, "웹 서비스" 및 "웹-사이트"란 용어는 교환하여 사용될 수 있으며, 서버로 직접 API를 호출하는, 가령 모바일 장치(예컨대, 셀룰러폰, 스마트폰, 개인용 GPS, 개인용정보단말기(personal digital assistance), 개인용 게임장치 등)와 같은 장치상의 커스텀(custom) API 또는 일반 API를 추가적으로 나타낼 수 있다.

Claims (20)

  1. 하나 이상의 메모리 장치에 저장되며, 복수의 인덱스 엔트리들을 포함하는 인덱스를 포함하는 장치로서,
    각각의 엔트리는 용어 및 문서 식별자를 포함하고,
    인덱스 엔트리들 중 적어도 하나는 문서 식별자 및 합성 용어를 포함하며,
    합성 용어는 2 이상의 데이터 객체 속성을 포함하고,
    문서 식별자 각각은 복수의 데이터 객체들 중 한 데이터 객체에 해당하며,
    하나 이상의 인덱스 서버는:
    하나 이상의 속성값을 포함하는 쿼리에 접근하고;
    쿼리에 부합하는 하나 이상의 데이터 객체를 식별하도록 하나 이상의 속성값에 대해 인덱스를 검색하며;
    쿼리에 부합하는 하나 이상의 식별된 데이터 객체에 해당하는 객체 식별자를 반환하도록 각각 동작하는 장치.
  2. 제 1 항에 있어서,
    복수의 데이터 객체 속성을 포함하는 데이터 객체에 접근하고;
    상기 데이터 객체를 구문 분석하여 데이터 객체에 대한 하나 이상의 인덱스 엔트리를 생성하도록 동작하는 용어 생성기를 더 포함하는 장치.
  3. 제 2 항에 있어서,
    용어 생성기는 한 세트의 문서 식별자-용어 쌍들을 출력하도록 동작하며,
    상기 세트에서 쌍들의 타입은 데이터 객체의 해당 객체 타입을 기초로 하고,
    용어들 중 적어도 하나는 복수의 객체 속성을 포함하는 합성 용어인 장치.
  4. 제 1 항에 있어서,
    데이터 객체들 중 적어도 하나는 에지 객체(edge objects)를 포함하며,
    상기 에지 객체는 소스 식별자, 목적지 식별자 및 에지 타입 식별자를 포함하는 장치.
  5. 제 3 항에 있어서,
    문서 식별자-용어 쌍들은 에지 객체의 문서 식별자 및 연결 타입을 식별하는 용어를 포함하는 하나 이상의 에지 타입 쌍을 포함하며,
    소스 쌍은 에지 객체의 문서 식별자 및 소스 데이터 객체를 식별하는 용어를 포함하며,
    목적지 쌍은 에지 객체의 문서 식별자 및 목적지 데이터 객체를 식별하는 용어를 포함하는 장치.
  6. 제 3 항에 있어서,
    문서 식별자-용어 쌍들은:
    소스 객체의 문서 식별자 및 에지 객체의 연결 타입과 목적지 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 하나 이상의 연결 타입 및 소스 쌍, 소스 객체의 문서 식별자 및 연결과 목적지 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 및 소스 쌍, 목적지 객체의 문서 식별자 및 에지 객체의 연결 타입과 소스 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 타입 및 목적지 쌍, 및 목적지 객체의 문서 식별자 및 연결과 소스 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 및 목적지 쌍을 포함하는 장치.
  7. 제 1 항에 있어서,
    상기 문서 식별자는 객체 식별자와 타임 스탬프(time stamp)를 포함하는 장치.
  8. 제 1 항에 있어서,
    상기 인덱스는 하나 이상의 복제 인덱스를 포함하는 장치.
  9. 제 1 항에 있어서,
    상기 인덱스는 문서 식별자 공간의 일부에 각각 할당되는 복수의 샤드(shards)를 포함하는 장치.
  10. 하나 이상의 메모리 장치에 저장되며, 복수의 인덱스 엔트리들을 포함하는 인덱스를 관리하는 단계를 포함하는 방법으로서,
    각각의 엔트리는 용어 및 문서 식별자를 포함하고,
    인덱스 엔트리들 중 적어도 하나는 문서 식별자 및 합성 용어를 포함하며,
    합성 용어는 2 이상의 데이터 객체 속성을 포함하고,
    문서 식별자 각각은 복수의 데이터 객체들 중 한 데이터 객체에 해당하며,
    하나 이상의 인덱스 서버는:
    하나 이상의 속성값을 포함하는 쿼리에 접근하는 단계;
    쿼리에 부합하는 하나 이상의 데이터 객체를 식별하도록 하나 이상의 속성값에 대해 인덱스를 검색하는 단계; 및
    쿼리에 부합하는 하나 이상의 식별된 데이터 객체에 해당하는 객체 식별자를 반환하는 단계를 포함하는 방법.
  11. 제 10 항에 있어서,
    복수의 데이터 객체 속성들을 포함하는 데이터 객체에 접근하고; 상기 데이터 객체를 구문 분석하여 데이터 객체에 대한 하나 이상의 인덱스 엔트리를 생성하는 용어 생성기를 더 포함하는 방법.
  12. 제 11 항에 있어서,
    한 세트의 문서 식별자-용어 쌍들을 출력하는 용어 생성기를 더 포함하며,
    상기 세트에서 쌍들의 타입은 데이터 객체의 해당 객체 타입을 기초로 하고,
    용어들 중 적어도 하나는 복수의 객체 속성을 포함하는 합성 용어인 방법.
  13. 제 10 항에 있어서,
    데이터 객체들 중 적어도 하나는 에지 객체를 포함하며,
    상기 에지 객체는 소스 식별자, 목적지 식별자 및 에지 타입 식별자를 포함하는 방법.
  14. 제 12 항에 있어서,
    문서 식별자-용어 쌍들은 에지 객체의 문서 식별자 및 연결 타입을 식별하는 용어를 포함하는 하나 이상의 에지 타입 쌍을 포함하며,
    소스 쌍은 에지 객체의 문서 식별자 및 소스 데이터 객체를 식별하는 용어를 포함하며,
    목적지 쌍은 에지 객체의 문서 식별자 및 목적지 데이터 객체를 식별하는 용어를 포함하는 방법.
  15. 제 12 항에 있어서,
    문서 식별자-용어 쌍들은:
    소스 객체의 문서 식별자 및 에지 객체의 연결 타입과 목적지 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 하나 이상의 연결 타입 및 소스 쌍, 소스 객체의 문서 식별자 및 연결과 목적지 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 및 소스 쌍, 목적지 객체의 문서 식별자 및 에지 객체의 연결 타입과 소스 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 타입 및 목적지 쌍, 및 목적지 객체의 문서 식별자 및 연결과 소스 객체의 문서 식별자를 식별하는 합성 용어를 포함하는 연결 및 목적지 쌍을 포함하는 방법.
  16. 제 10 항에 있어서,
    상기 문서 식별자는 객체 식별자와 타임 스탬프를 포함하는 방법.
  17. 제 10 항에 있어서,
    상기 인덱스는 하나 이상의 복제 인덱스를 포함하는 방법.
  18. 제 10 항에 있어서,
    상기 인덱스는 문서 식별자 공간의 일부에 각각 할당되는 복수의 샤드를 포함하는 방법.
  19. 하나 이상의 프로세서가:
    하나 이상의 속성값을 포함하는 쿼리에 접근하고;
    쿼리에 부합하는 하나 이상의 데이터 객체를 식별하도록 하나 이상의 속성값에 대해 인덱스를 검색하며;
    쿼리에 부합하는 하나 이상의 식별된 데이터 객체에 해당하는 객체 식별자를 반환하도록 작동하는 명령어를 포함하는 비-일시적 컴퓨터 판독가능한 매체로서,
    상기 인덱스는 하나 이상의 메모리 장치에 저장되고 복수의 인덱스 엔트리들을 포함하며,
    각각의 엔트리는 용어 및 문서 식별자를 포함하고,
    인덱스 엔트리들 중 적어도 하나는 문서 식별자 및 합성 용어를 포함하며,
    합성 용어는 2 이상의 데이터 객체 속성을 포함하고,
    문서 식별자 각각은 복수의 데이터 객체들 중 한 데이터 객체에 해당하는 비-일시적 컴퓨터 판독가능한 매체.
  20. 제 19 항에 있어서,
    상기 명령어는
    하나 이상의 프로세서가:
    복수의 데이터 객체 속성을 포함하는 데이터 객체에 접근하고;
    상기 데이터 객체를 구문 분석하여 데이터 객체에 대한 하나 이상의 인덱스 엔트리를 생성하도록 더 작동하는 비-일시적 컴퓨터 판독가능한 매체.
KR1020137020043A 2010-12-30 2011-11-30 그래프 데이터용 합성 용어 인덱스 KR101419828B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201061428615P 2010-12-30 2010-12-30
US61/428,615 2010-12-30
US13/228,312 US8527497B2 (en) 2010-12-30 2011-09-08 Composite term index for graph data
US13/228,312 2011-09-08
PCT/US2011/062603 WO2012091844A1 (en) 2010-12-30 2011-11-30 Composite term index for graph data

Publications (2)

Publication Number Publication Date
KR20130096767A true KR20130096767A (ko) 2013-08-30
KR101419828B1 KR101419828B1 (ko) 2014-07-16

Family

ID=46383463

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137020043A KR101419828B1 (ko) 2010-12-30 2011-11-30 그래프 데이터용 합성 용어 인덱스

Country Status (10)

Country Link
US (4) US8527497B2 (ko)
EP (1) EP2659402B1 (ko)
JP (4) JP5451954B1 (ko)
KR (1) KR101419828B1 (ko)
CN (2) CN103348344B (ko)
AU (3) AU2011353034B2 (ko)
BR (1) BR112013016926A2 (ko)
CA (4) CA2823146C (ko)
MX (3) MX350594B (ko)
WO (1) WO2012091844A1 (ko)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8516063B2 (en) 2010-02-12 2013-08-20 Mary Anne Fletcher Mobile device streaming media application
US8527497B2 (en) * 2010-12-30 2013-09-03 Facebook, Inc. Composite term index for graph data
US8832111B2 (en) * 2010-12-30 2014-09-09 Facebook, Inc. Distributed cache for graph data
US8863153B2 (en) * 2011-09-13 2014-10-14 Sap Se Situational recommendations in heterogenous system environment
KR20130049111A (ko) * 2011-11-03 2013-05-13 한국전자통신연구원 분산 처리를 이용한 포렌식 인덱스 방법 및 장치
US8682932B2 (en) 2012-02-16 2014-03-25 Oracle International Corporation Mechanisms for searching enterprise data graphs
US8700673B2 (en) * 2012-02-16 2014-04-15 Oracle International Corporation Mechanisms for metadata search in enterprise applications
US8484208B1 (en) 2012-02-16 2013-07-09 Oracle International Corporation Displaying results of keyword search over enterprise data
US8935255B2 (en) * 2012-07-27 2015-01-13 Facebook, Inc. Social static ranking for search
US8825711B2 (en) * 2012-08-13 2014-09-02 Magnet Systems, Inc. Managing cross-correlated data
JP5959405B2 (ja) * 2012-10-30 2016-08-02 株式会社Uacj アルミニウム合金箔
US9576007B1 (en) 2012-12-21 2017-02-21 Google Inc. Index and query serving for low latency search of large graphs
US8935271B2 (en) * 2012-12-21 2015-01-13 Facebook, Inc. Extract operator
US9659043B2 (en) * 2013-02-07 2017-05-23 Enigma Technologies, Inc. Data system and method
US9171063B2 (en) * 2013-03-13 2015-10-27 Facebook, Inc. Short-term hashes
US9712608B2 (en) * 2013-03-14 2017-07-18 Microsoft Technology Licensing, Llc Elastically scalable document-oriented storage services
US9910887B2 (en) 2013-04-25 2018-03-06 Facebook, Inc. Variable search query vertical access
US9223898B2 (en) 2013-05-08 2015-12-29 Facebook, Inc. Filtering suggested structured queries on online social networks
US10977229B2 (en) 2013-05-21 2021-04-13 Facebook, Inc. Database sharding with update layer
US10983973B2 (en) * 2013-05-21 2021-04-20 Facebook, Inc. Database sharding with incorporated updates
US9483568B1 (en) * 2013-06-05 2016-11-01 Google Inc. Indexing system
CN104714952B (zh) * 2013-12-11 2018-07-06 航天信息股份有限公司 一种数据库的多重查询方法
CN104714973A (zh) * 2013-12-17 2015-06-17 航天信息股份有限公司 一种处理查询语句的方法和装置
US9652554B2 (en) * 2013-12-26 2017-05-16 Facebook, Inc. Systems and methods for adding users to a networked computer system
US8954441B1 (en) * 2014-01-02 2015-02-10 Linkedin Corporation Graph-based system and method of information storage and retrieval
US20150229715A1 (en) * 2014-02-13 2015-08-13 Linkedin Corporation Cluster management
US9842152B2 (en) 2014-02-19 2017-12-12 Snowflake Computing, Inc. Transparent discovery of semi-structured data schema
CN103810300B (zh) * 2014-03-10 2017-08-01 北京国双科技有限公司 用于非索引覆盖的数据查询方法和装置
US9977810B2 (en) * 2014-08-21 2018-05-22 Dropbox, Inc. Multi-user search system with methodology for personal searching
US9183303B1 (en) 2015-01-30 2015-11-10 Dropbox, Inc. Personal content item searching system and method
US9384226B1 (en) 2015-01-30 2016-07-05 Dropbox, Inc. Personal content item searching system and method
US10037388B2 (en) * 2015-04-27 2018-07-31 Microsoft Technology Licensing, Llc Fast querying of social network data
US10127230B2 (en) 2015-05-01 2018-11-13 Microsoft Technology Licensing, Llc Dynamic content suggestion in sparse traffic environment
US10007879B2 (en) 2015-05-27 2018-06-26 International Business Machines Corporation Authoring system for assembling clinical knowledge
US9514247B1 (en) 2015-10-28 2016-12-06 Linkedin Corporation Message passing in a distributed graph database
US20170228409A1 (en) * 2016-02-08 2017-08-10 Red Hat, Inc. In-memory journaling
US10180992B2 (en) * 2016-03-01 2019-01-15 Microsoft Technology Licensing, Llc Atomic updating of graph database index structures
US10599656B1 (en) 2016-03-04 2020-03-24 Twitter, Inc. Indexing and data storage for realtime and contemporaneous content suggestions
CN105930506A (zh) * 2016-05-10 2016-09-07 乐视控股(北京)有限公司 对象检索方法和对象存储系统
US10540332B2 (en) 2016-08-03 2020-01-21 Microsoft Technology Licensing, Llc Efficient denormalization of data instances
US10366368B2 (en) 2016-09-22 2019-07-30 Microsoft Technology Licensing, Llc Search prioritization among users in communication platforms
US10754859B2 (en) 2016-10-28 2020-08-25 Microsoft Technology Licensing, Llc Encoding edges in graph databases
CN108093020B (zh) * 2016-11-23 2020-12-18 阿里巴巴集团控股有限公司 数据处理方法及装置
US10445321B2 (en) 2017-02-21 2019-10-15 Microsoft Technology Licensing, Llc Multi-tenant distribution of graph database caches
US11461318B2 (en) 2017-02-28 2022-10-04 Microsoft Technology Licensing, Llc Ontology-based graph query optimization
US10565197B2 (en) 2017-03-02 2020-02-18 International Business Machines Corporation Search performance using smart bitmap operations
US10445370B2 (en) 2017-06-09 2019-10-15 Microsoft Technology Licensing, Llc Compound indexes for graph databases
US10671671B2 (en) 2017-06-09 2020-06-02 Microsoft Technology Licensing, Llc Supporting tuples in log-based representations of graph databases
US10628492B2 (en) 2017-07-20 2020-04-21 Microsoft Technology Licensing, Llc Distributed graph database writes
EP3682338A4 (en) 2017-09-12 2021-05-26 Services Pétroliers Schlumberger DATA SEARCH, ENRICHMENT AND CONSUMPTION TECHNIQUES USING EXPLORATION AND / OR PRODUCTION ENTITY RELATIONSHIPS
US10963514B2 (en) 2017-11-30 2021-03-30 Facebook, Inc. Using related mentions to enhance link probability on online social networks
US10129705B1 (en) 2017-12-11 2018-11-13 Facebook, Inc. Location prediction using wireless signals on online social networks
US11604968B2 (en) 2017-12-11 2023-03-14 Meta Platforms, Inc. Prediction of next place visits on online social networks
US10983997B2 (en) 2018-03-28 2021-04-20 Microsoft Technology Licensing, Llc Path query evaluation in graph databases
CN108549644A (zh) * 2018-04-12 2018-09-18 苏州大学 面向神经机器翻译的省略代词翻译方法
US20210382953A1 (en) * 2018-07-16 2021-12-09 YE Ventures, LLC Methods and systems for adjusting self-tuning personalization engines in near real-time
US11030242B1 (en) * 2018-10-15 2021-06-08 Rockset, Inc. Indexing and querying semi-structured documents using a key-value store
CN109063215B (zh) * 2018-10-16 2020-10-30 成都四方伟业软件股份有限公司 数据检索方法及装置
CN111831878B (zh) * 2019-04-22 2023-09-15 百度在线网络技术(北京)有限公司 构建价值索引关系的方法、索引系统及索引装置
US11567995B2 (en) 2019-07-26 2023-01-31 Microsoft Technology Licensing, Llc Branch threading in graph databases
US11113267B2 (en) 2019-09-30 2021-09-07 Microsoft Technology Licensing, Llc Enforcing path consistency in graph database path query evaluation
CN114741570A (zh) * 2022-01-20 2022-07-12 浙江大华技术股份有限公司 图数据库的查询方法、索引创建方法及相关设备
US20240176788A1 (en) * 2022-11-30 2024-05-30 Intuit Inc. Dataset ranking based on composite score

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05313971A (ja) * 1992-05-13 1993-11-26 Mitsubishi Electric Corp リレーショナル・データベースにおけるキーワード管理方式
JP3132606B2 (ja) * 1993-02-25 2001-02-05 日本電気株式会社 関連情報変換装置
US5524240A (en) * 1994-05-24 1996-06-04 Panasonic Technologies, Inc. Method and apparatus for storage and retrieval of handwritten information
JPH0944521A (ja) * 1995-07-25 1997-02-14 Fuji Xerox Co Ltd インデックス作成装置および文書検索装置
JPH09198395A (ja) * 1996-01-16 1997-07-31 Fuji Xerox Co Ltd 文書検索装置
JP2965018B2 (ja) * 1997-11-17 1999-10-18 日本電気株式会社 ハイパーメディアシステムにおける検索情報表示方法と検索情報表示装置
JP3347088B2 (ja) * 1999-02-12 2002-11-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 関連情報検索方法およびシステム
JP4042295B2 (ja) * 2000-04-14 2008-02-06 富士ゼロックス株式会社 キーワード抽出ルール精製支援装置、記憶媒体及びキーワード抽出ルール精製支援方法
WO2002084431A2 (en) * 2001-04-11 2002-10-24 International Business Machines Corporation Simplifying and manipulating k-partite graphs
US20040024755A1 (en) * 2002-08-05 2004-02-05 Rickard John Terrell System and method for indexing non-textual data
JP2004272831A (ja) * 2003-03-12 2004-09-30 Ricoh Co Ltd キーワード抽出装置、プログラム、及び記録媒体
KR20060011828A (ko) * 2003-04-03 2006-02-03 더블린 시티 유니버시티 멀티미디어 데이터를 인덱싱 및 검색하기 위한 형상 매칭방법
EP1649388A1 (en) * 2003-07-21 2006-04-26 Koninklijke Philips Electronics N.V. Method of searching in a collection of documents
US7779345B2 (en) * 2003-07-30 2010-08-17 Aol Inc. Reverse mapping method and apparatus for form filling
JP2005210384A (ja) 2004-01-22 2005-08-04 Konica Minolta Medical & Graphic Inc 画像処理方法および画像処理装置ならびに画像処理プログラム
JP2006185412A (ja) * 2004-12-03 2006-07-13 Kazusa Dna Kenkyusho 情報処理装置、情報処理方法及びそのプログラム
US7526486B2 (en) * 2006-05-22 2009-04-28 Initiate Systems, Inc. Method and system for indexing information about entities with respect to hierarchies
US7752243B2 (en) * 2006-06-06 2010-07-06 University Of Regina Method and apparatus for construction and use of concept knowledge base
US10185779B2 (en) * 2008-03-03 2019-01-22 Oath Inc. Mechanisms for content aggregation, syndication, sharing, and updating
JP4286905B2 (ja) * 2006-12-14 2009-07-01 パナソニック株式会社 レンズおよびその製造方法
US7702620B2 (en) * 2007-03-29 2010-04-20 International Business Machines Corporation System and method for ranked keyword search on graphs
US7693813B1 (en) * 2007-03-30 2010-04-06 Google Inc. Index server architecture using tiered and sharded phrase posting lists
US8166021B1 (en) 2007-03-30 2012-04-24 Google Inc. Query phrasification
JP4930153B2 (ja) * 2007-03-30 2012-05-16 富士通株式会社 文書検索システム、文書番号部分列取得装置、および文書検索方法
US7702614B1 (en) 2007-03-30 2010-04-20 Google Inc. Index updating using segment swapping
US7925655B1 (en) 2007-03-30 2011-04-12 Google Inc. Query scheduling using hierarchical tiers of index servers
US8086594B1 (en) 2007-03-30 2011-12-27 Google Inc. Bifurcated document relevance scoring
US8166045B1 (en) 2007-03-30 2012-04-24 Google Inc. Phrase extraction using subphrase scoring
US7904461B2 (en) * 2007-05-01 2011-03-08 Google Inc. Advertiser and user association
JP5075653B2 (ja) * 2008-01-21 2012-11-21 株式会社日立製作所 データベース管理方法、データベース管理装置、データベース管理プログラム、及び、データベースシステム
JP2009176044A (ja) * 2008-01-24 2009-08-06 Nippon Telegr & Teleph Corp <Ntt> 文書検索方法及び装置及びプログラム及びコンピュータ読取可能な記録媒体
KR100936198B1 (ko) * 2008-03-21 2010-01-11 인하대학교 산학협력단 소셜 네트워크 분석 시스템
CN101770459B (zh) * 2008-12-31 2013-10-09 华为技术有限公司 一种推荐好友的方法和设备
US8438173B2 (en) * 2009-01-09 2013-05-07 Microsoft Corporation Indexing and querying data stores using concatenated terms
EP2380094A1 (en) * 2009-01-16 2011-10-26 Sanjiv Agarwal Dynamic indexing while authoring
US20100198844A1 (en) * 2009-01-30 2010-08-05 Thales-Raytheon Systems Company, LLC Automatic Code Generation
DE112010000947T5 (de) * 2009-03-02 2012-06-14 Borys Evgenijovich Panchenko Verfahren zur völlig modifizierbaren Framework-Datenverteilung im Data-Warehouse unter Berücksichtigung der vorläufigen etymologischen Separation der genannten Daten
US20100241580A1 (en) * 2009-03-19 2010-09-23 Tagged, Inc. System and method of selecting a relevant user for introduction to a user in an online environment
US8185544B2 (en) * 2009-04-08 2012-05-22 Google Inc. Generating improved document classification data using historical search results
US8239364B2 (en) * 2009-12-08 2012-08-07 Facebook, Inc. Search and retrieval of objects in a social networking system
US8185558B1 (en) * 2010-04-19 2012-05-22 Facebook, Inc. Automatically generating nodes and edges in an integrated social graph
US8572129B1 (en) * 2010-04-19 2013-10-29 Facebook, Inc. Automatically generating nodes and edges in an integrated social graph
US8180804B1 (en) * 2010-04-19 2012-05-15 Facebook, Inc. Dynamically generating recommendations based on social graph information
US8832111B2 (en) * 2010-12-30 2014-09-09 Facebook, Inc. Distributed cache for graph data
US8527497B2 (en) 2010-12-30 2013-09-03 Facebook, Inc. Composite term index for graph data

Also Published As

Publication number Publication date
US9223899B2 (en) 2015-12-29
JP2016189214A (ja) 2016-11-04
CA2972316A1 (en) 2012-07-05
MX2013007685A (es) 2013-12-02
CN103348344A (zh) 2013-10-09
US9576060B2 (en) 2017-02-21
KR101419828B1 (ko) 2014-07-16
EP2659402B1 (en) 2021-01-06
JP2014507706A (ja) 2014-03-27
CA2848100A1 (en) 2012-07-05
JP2014096164A (ja) 2014-05-22
AU2017201389A1 (en) 2017-03-23
JP6174762B2 (ja) 2017-08-02
CN107092666B (zh) 2018-06-15
US20160048600A1 (en) 2016-02-18
EP2659402A4 (en) 2016-08-03
JP5964808B2 (ja) 2016-08-03
CA2823146A1 (en) 2012-07-05
CN103348344B (zh) 2017-05-03
US20120215785A1 (en) 2012-08-23
CA2928937C (en) 2017-08-15
EP2659402A1 (en) 2013-11-06
JP6326532B2 (ja) 2018-05-16
MX355952B (es) 2018-05-07
MX350594B (es) 2017-09-11
US9934329B2 (en) 2018-04-03
US20140006412A1 (en) 2014-01-02
AU2016200896B2 (en) 2016-11-24
BR112013016926A2 (pt) 2020-10-27
AU2011353034B2 (en) 2013-10-10
CA2823146C (en) 2014-07-15
AU2016200896A1 (en) 2016-03-03
WO2012091844A1 (en) 2012-07-05
CA2972316C (en) 2018-10-16
US20170154124A1 (en) 2017-06-01
JP5451954B1 (ja) 2014-03-26
AU2017201389B2 (en) 2018-03-08
CA2848100C (en) 2016-07-12
CN107092666A (zh) 2017-08-25
US8527497B2 (en) 2013-09-03
JP2017211999A (ja) 2017-11-30
CA2928937A1 (en) 2012-07-05
AU2011353034A1 (en) 2013-07-18

Similar Documents

Publication Publication Date Title
KR101419828B1 (ko) 그래프 데이터용 합성 용어 인덱스
KR101640185B1 (ko) 그래프 데이터용 분산형 캐시
AU2013270511B2 (en) Composite term index for graph data

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170616

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190710

Year of fee payment: 6