KR101818710B1 - 그래프 질의 로직 - Google Patents

그래프 질의 로직 Download PDF

Info

Publication number
KR101818710B1
KR101818710B1 KR1020157008062A KR20157008062A KR101818710B1 KR 101818710 B1 KR101818710 B1 KR 101818710B1 KR 1020157008062 A KR1020157008062 A KR 1020157008062A KR 20157008062 A KR20157008062 A KR 20157008062A KR 101818710 B1 KR101818710 B1 KR 101818710B1
Authority
KR
South Korea
Prior art keywords
data
query
data item
graph
items
Prior art date
Application number
KR1020157008062A
Other languages
English (en)
Other versions
KR20150052162A (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 KR20150052162A publication Critical patent/KR20150052162A/ko
Application granted granted Critical
Publication of KR101818710B1 publication Critical patent/KR101818710B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/53Querying
    • G06F16/532Query formulation, e.g. graphical querying
    • 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
    • G06F17/30277
    • 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
    • G06F16/24564Applying rules; Deductive queries
    • 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/282Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes
    • 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/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • G06F17/30587
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

일실시예로, 본 발명의 방법은 계층형 포맷에 배열된 하나 이상의 노드를 각각 포함하는 하나 이상의 그래프를 저장하는 단계; 그래프에서 하나 이상의 특정한 데이터 아이템을 요청하는 질의에 접근하는 단계; 그래프로부터 특정한 데이터 아이템을 검색하는 단계; 계층형 포맷으로 특정한 데이터 아이템을 배열하는 단계; 및 질의에 응답하여 특정한 데이터 아이템을 출력하는 단계를 포함하며, 각각의 노드는 하나 이상의 데이터 아이템을 표현하고, 질의는 계층형 포맷을 가진 언어로 표현된다.

Description

그래프 질의 로직{GRAPH QUERY LOGIC}
본 명세서는 일반적으로 정보 저장, 검색 및 처리를 포함하는 정보 관리에 관한 것이다.
데이터 또는 정보는 특정한 포맷에 따라 구조화되고 저장될 수 있다. 이후에, 특정한 조각의 저장된 데이터 또는 정보는 저장소로부터 검색될 수 있다. 저장된 데이터 또는 정보를 검색하는 실제 수단은 데이터 또는 정보를 구조화하고 저장하는데 사용되는 특정한 포맷에 따라 다를 수 있다. 예컨대, 데이터가 특정한 데이터 조각을 검색하도록 표로 나타낸 포맷에 따라(예컨대, 열, 행 및 셀을 가지는 표에서) 구조화되고 저장된다면, 소정의 데이터 조각이 저장되는 특정한 열, 행 또는 셀을 식별하는 것이 필요할 수 있다.
본 명세서는 일반적으로 정보 저장, 검색 및 처리를 포함하는 정보 관리에 관한 것이다.
특정 실시예로, 데이터 아이템은 구조화되고 하나 이상의 계층형 그래프에 저장될 수 있으며, 이때 각각의 그래프는 계층으로 배열되는 임의의 수의 노드를 포함할 수 있다. 관계는 대응하는 노드로 표현되는 데이터 아이템 중에 존재하는 관계를 반영할 수 있는 그래프 내 특정 노드 사이에 존재할 수 있다. 그 결과, 그래프의 구조는 그 그래프에 포함된 개별 데이터 아이템 사이의 관계를 반영할 수 있다.
특정 실시예로, 그래프에 저장된 데이터에 대하여 그래프에 질의하고 그래프로부터 특정한 데이터 아이템을 검색하기 위한 응용 프로그래밍 인터페이스(API)가 제공될 수 있다. 게다가, 그래프에 저장되는 특정한 데이터 아이템에 대한 질의는 계층형 구조를 가진 언어로 표현될 수 있다. 또한, 검색된 데이터 아이템은 계층형 구조에 구조화된다.
특정 실시예로, API는 임의의 수의 버전을 가질 수 있다. API의 각각의 버전과 관련되는 임의의 수의 질의 스키마(query schemas)가 있을 수 있다. 질의 스키마는 그래프에서 이용할 수 있는 다양한 데이터 타입 및 각기 다른 타입의 데이터가 그래프로부터 검색될 수 있는 방법을 포함할 수 있다. 질의 스키마는 각기 다른 버전의 API를 테스트하고 검증하는데 사용될 수 있다.
특정 실시예로, 그래프에 저장된 데이터 아이템은 다양한 데이터 타입을 가질 수 있다. 애플리케이션은 API로부터 반환되는 데이터 아이템의 데이터 구조 및 데이터 타입에 대해 API에 질의할 수 있다.
본 발명의 내용 중에 포함되어 있다.
도 1은 계층형 구조를 가지는 예시적인 그래프를 도시한다.
도 2는 계층형 그래프로부터 특정한 데이터 아이템을 검색하기 위한 예시적인 방법을 도시한다.
도 3은 스키마를 기초로 응용 프로그래밍 인터페이스의 버전을 검증하기 위한 예시적인 방법을 도시한다.
도 4는 내성 질의를 기초로 계층형 그래프로부터 데이터 아이템을 검색하기 위한 예시적인 방법을 도시한다.
도 5는 예시적인 컴퓨터 시스템을 도시한다.
특정 실시예로, 데이터는 계층형 구조를 각각 가지는 임의의 수의 그래프에 구조화되고 저장될 수 있다. 각각의 그래프는 계층으로 배열되는 임의의 수의 노드를 포함할 수 있다. 즉, 그래프에는 임의의 수의 레벨이 있을 수 있고, 각각의 레벨에는 임의의 수의 노드가 있을 수 있다. 각각의 노드는 몇몇의 특정한 데이터 아이템을 표현할 수 있거나 이를 저장하는데 사용될 수 있다. 관계는 이런 대응하는 노드로 표현되는 특정한 데이터 아이템 사이의 관계를 반영할 수 있는 그래프 내 특정한 노드 사이에 존재할 수 있다. 그 결과, 그래프의 구조는 그 그래프에 포함되는 개별 데이터 아이템 사이의 관계를 반영할 수 있다. 특정 실시예로, 데이터 아이템은 다양한 타입을 가질 수 있다.
특정 실시예로, 그래프에 저장된 데이터에 대하여 그래프에 질의하고 그래프로부터 특정한 데이터 아이템을 검색하기 위한 응용 프로그래밍 인터페이스(API)가 제공될 수 있다. 특정 실시예로, 그래프에 저장되는 특정한 데이터 아이템에 대한 질의는 계층형 구조를 가진 언어로 표현될 수 있다. 따라서, 질의 그 자체는 계층형 구조를 가진다. 특정 실시예로, 질의로 특정되는 바와 같이 소정의 데이터 아이템이 그래프에서 발견되면, 데이터 아이템 또는 더 상세하게는 이런 데이터 아이템을 표현하거나 포함하는 노드가 그 질의에 응답하여 그래프로부터 검색된다. 또한, 검색된 데이터 아이템은 계층형 구조로 구조화된다.
특정 실시예로, API는 임의의 수의 버전을 가질 수 있다. 예로서, 때때로, API는 더 오래된 버전에서 더 새로운 버전으로 업데이트될 수 있다. 또 다른 예로서, 각기 다른 플랫폼(예컨대, 모바일, 데스크톱, 웹-기반)에 대해 개발된 각기 다른 버전의 API가 있을 수 있다. 특정 실시예로, 각각의 버전의 API와 관련된 임의의 수의 질의 스키마가 있을 수 있다. 질의 스키마는 그래프에서 이용할 수 있는 다양한 데이터 타입 및 각기 다른 타입의 데이터가 그래프로부터 검색될 수 있는 방법을 포함할 수 있다
특정 실시예로, 정확히 작동하는 것으로 알려진 API의 제1 버전을 고려하면, API의 제2 버전은 제2 버전도 또한 정확히 작동함을 보장하기 위해 제1 및 제2 버전과 각각 관련되는 질의 스키마를 사용하여 테스트될 수 있다. API의 제2 버전과관련된 질의 스키마는 예컨대 제1 버전과 관련된 질의 스키마에 존재하는 모든 데이터 타입이 또한 제2 버전과 관련된 질의 스키마에 존재하며 제2 버전과 관련된 질의 스키마를 사용하여 그래프로부터 다양한 타입의 데이터를 질의하고 검색하면 제1 버전과 관련된 질의 스키마를 사용하는 것과 동일한 결과를 산출함을 보장하기 위해, 제1 버전과 관련된 질의 스키마와 비교될 수 있다.
특정 실시예로, 그래프에 저장되는 데이터 아이템은 다양한 데이터 타입을 가질 수 있다. 애플리케이션은 API로부터 반환되는 데이터 아이템의 데이터 구조 및 데이터 타입에 대해 API에 질의할 수 있다. 특정 실시예로, 애플리케이션은 특정한 데이터 타입에 대한 내성 질의(introspection query)(예컨대, 특정한 데이터 타입의 데이터 구조나 컨텐츠를 진단하는 요청)를 생성할 수 있다. 애플리케이션은 내성 질의를 API로 제출할 수 있고 그래프로부터 특정한 데이터 타입의 데이터 구조를 검색할 수 있다. 애플리케이션은 내성 질의로 검색되는 데이터 구조를 기초로 그래프로부터 특정한 데이터 타입을 가진 데이터 아이템을 요청하는 데이터 질의를 구축할 수 있다.
도 1은 계층형 구조를 가진 예시적인 그래프(100)를 도시한다. 그래프(100)는 임의의 수의 레벨의 계층으로 배열되는 임의의 수의 노드를 포함할 수 있다. 계층의 각각의 레벨에는 하나 이상의 노드가 있을 수 있다. 다양한 타입의 관계는 계층의 구조에 반영될 수 있는 특정한 노드 사이에 존재할 수 있다. 예컨대, 부모-자식 관계가 2개의 특정한 노드 사이에 존재할 수 있다. 도 1에서, 노드(110A)는 노드들(110B, 110C 및 110D)의 부모일 수 있다; 반대로, 노드들(110B, 110C 및 110D)은 각각 노드(110A)의 자식일 수 있다. 일반적으로 노드는 임의의 수의 자식 또는 부모를 가질 수 있음을 유의하자. 또 다른 예로서, 형제 관계가 2개의 특정 노드 사이에 존재할 수 있다. 도 1에서, 노드들(110B, 110C 및 110D)은 그들이 공통의 부모 노드(110A)를 공유하기 때문에 형제일 수 있다. 제3의 예로서, 연결관계가 2개의 특정 노드 사이에 존재할 수 있다. 도 1에서, 연결관계가 노드들(110A 및 110E) 사이에 존재한다.
특정 실시예로, 데이터는 가령 그래프(100)와 같은 계층형 그래프에 구조화되고 저장될 수 있다. 그래프 내 각각의 노드는 몇몇의 특정한 데이터 아이템을 표현하거나 포함할 수 있다. 그래프의 구조는 노드 사이의 관계 및 그에 따라 이런 노드로 표현되거나 이에 포함되는 특정한 데이터 아이템 사이의 관계를 반영한다.
특정 실시예로, 소셜 네트워킹 시스템과 관련된 데이터 또는 정보는 임의의 수의 계층형 그래프에 저장될 수 있다. 소셜 네트워킹 시스템과 관련되는 다양한 타입의 데이터가 있을 수 있고, 특정한 데이터 아이템은 특정한 노드로 표현되거나 이에 포함될 수 있다. 예컨대, 일부의 노드는 소셜 네트워킹 시스템의 개별 사용자를 표현할 수 있다. 2개의 이런 노드는 2개의 해당 사용자가 소셜 네트워킹 시스템에서 "친구"라면 연결될 수 있다. 일부의 노드는 특정 사용자가 수행한 (예컨대, 온라인 또는 오프라인) 활동을 표현할 수 있다. 사용자를 표현하는 노드와 그 사용자가 수행한 활동을 표현하는 노드가 연결될 수 있다. 게다가, 사용자를 표현하는 노드는 그 사용자가 수행한 활동을 표현하는 노드의 부모로 간주되며, 사용자와 활동 사이의 관계(즉, 사용자가 활동을 수행한다)를 반영한다. 일부의 노드는 특정한 사용자와 관련되는 컨텐츠(예컨대, 이미지, 비디오, 게시물, 메시지, 피드)를 표현할 수 있다. 노드 및 그 자식 노드는 사진 앨범 및 그 사진 앨범에 각각 속하는 특정한 사진을 표현할 수 있다. 이 경우, 사진 앨범을 표현하는 노드와 그 사진 앨범에 속하는 이미지를 표현하는 각각의 노드 사이의 연결이 존재할 수 있다. 또 다른 노드 및 그 자식 노드는 사용자 및 그 사용자에 의해 각각 업로드된 사진 앨범을 표현할 수 있다.
특정 실시예로, 데이터(예컨대, 소셜 네트워킹 시스템과 관련된 데이터)를 포함하는 그래프는 특정한 데이터 아이템이 원할 때마다 그래프로부터 검색될 수 있도록 (예컨대, 데이터 스토어 또는 메모리에) 저장될 수 있다. 특정 실시예로, 그래프에 저장된 데이터에 대해 그래프에 질의하고 그래프로부터 특정한 데이터 아이템을 검색하기 위한 API가 제공될 수 있다.
도 2는 계층형 그래프로부터 특정한 데이터 아이템을 검색하기 위한 예시적인 방법을 도시한다. 특정 실시예로, 데이터는 계층형 그래프에 저장되며, 이때 그래프 내 각각의 노드는 하나 이상의 특정한 데이터 아이템을 포함하거나 표현한다고 가정하자. 사용자는 API를 사용하여 이런 계층형 그래프에 저장된 특정한 데이터 아이템을 질의할 수 있다.
특정 실시예로, 도 2에 도시된 방법은 단계 210에서 시작하며, 이때 사용자는 계층형 그래프로부터 검색되는 특정한 데이터 아이템을 식별하는 질의를 송신할 수 있다. 예컨대, 질의는 사용자 장치(예컨대, 모바일이나 비-모바일 사용자 장치)로부터 적절한 컴퓨터 또는 통신 연결(예컨대, 무선이나 유선 연결)을 통해 그래프를 관리하는 컴퓨팅 시스템(예컨대, 서버)으로 송신될 수 있다. 특정 실시예로, 적절한 API 호출이 질의를 서버로 송신하도록 사용자 장치에 의해 호출(invoke)될 수 있다.
특정 실시예로, 질의는 계층형 구조를 가진 언어로 표현될 수 있다. 게다가, 특정 실시예로, 언어는 기정의된 구문(syntax)을 가질 수 있다. 다음은 예시적인 질의를 나타낸다.
me() {
id,
name,
my_objects.first(10) {
nodes {
actors {id, name, profile_pic_image},
message {text, ranges}
with {id, name, profile_pic_image},
application {id, name, profile_pic_image},
explicit_place {id, name, location {latitude, longitude}},
attachments {
id,
image,
owner,
message,
created_time,
modified_time,
feedback {
like_sentence, likers {count}, comments {count}
}
}
}
}
}
이 예에서, "me"는 질의를 제출하는 사용자이고; "id"는 객체와 관련된 고유 식별자(예컨대, 사용자 또는 데이터 아이템)이다. 이 예시적인 질의는 특정한 타입 "my_objects"의 처음 10개(first 10)의 데이터 아이템을 요청한다. 이 예시적인 질의가 도시하는 바와 같이, 질의는 계층형 구조를 가진다. 계층의 최상의 레벨은 "me"이다. "me"에 내포된 제2의 레벨에는 "id", "name" 및 "my_objects"가 있다. "my_objects"에 내포된 제3의 레벨에는 "nodes"가 있는 등이다.
특정 실시예로, 단계 220에서, 질의에서 특정되는 데이터 아이템은 그룹들로부터 검색될 수 있다. 더 상세하게, 특정된 데이터 아이템을 표현하거나 포함하는 노드는 그룹으로부터 식별될 수 있고 데이터 아이템은 이런 노드로부터 검색될 수 있다. 특정한 데이터 아이템은 그들의 고유 식별자, 그들의 데이터 타입 또는 임의의 다른 애플리케이션 수단(예컨대, 하나 이상의 기준을 만족하는 데이터 아이템)에 의해 질의에서 식별될 수 있다.
특정 실시예로, 데이터 아이템은 특정한 데이터 타입을 가질 수 있다. 예컨대, 하나의 타입의 데이터 아이템은 "사용자"일 수 있다; 다른 타입의 데이터 아이템은 "메시지 게시물"일 수 있다; 제3의 타입의 데이터 아이템은 "이미지"일 수 있다; 기타 등등이다. 본 명세서는 임의의 적용가능한 데이터 타입을 고려한다. 특정 실시예로, 새로운 데이터 타입이 필요에 따라 (예컨대, 시스템 관리자 또는 사용자나 제3의 개발자에 의해) 정의되고 추가될 수 있다. 이런 데이터 타입의 정의는 API 및 그래프에 대한 스키마를 형성할 수 있다. 특정 데이터 타입의 정의는 그 타입의 데이터 아이템이 그래프로부터 어떻게 질의되고 검색될 수 있는지를 명시할 수 있다. 다음은 "node"라고 하는 데이터 타입의 예시적인 정의를 나타낸다. 이 정의는 데이터 타입 "node"를 설명하며 스키마에 포함될 수 있다.
final class NodeInterface extends InterfaceDefinition {
public function getTypeName() {
return 'node';
}
protected function fields(FieldDefiner $field_def) {
return array(
'id' => $field_def->string(),
'url' => $field_def->url(),
);
}
public function getDescription() {
return 'An object which itself can be queried from the graph.';
}
protected function fieldDescriptions() {
return array(
'id' => 'The unique ID representing this object. Supply to the 'node()' root expression to retrieve this object directly.',
'url' => 'The unique URL representing this object which can be accessed via a web browser. For example, the url for a 'user' would be his or her profile page.',
);
}
}
이 예시적인 데이터 타입에 대해, 그 정의로 정의되는 바와 같이, 타입의 이름은 "node"이다. 타입의 필드는 "id" 및 "url"을 포함한다. 또한, 데이터 필드 그 자체 및 각각의 그 필드의 설명이 또한 (예컨대, API 코드의 일부로서) 그 정의에 포함될 수 있다.
특정 실시예로, 사용자는 적절한 API 호출을 호출하여 그 데이터 타입에 관한 정보에 대해 스키마에 정의되는 특정한 데이터 타입을 질의할 수 있다. 예컨대, "node"에 대해 질의하기 위해, 사용자는 가령:
type(node) {name, description, fields {name, description}}
와 같은 질의를 제출할 수 있다. 이 질의는 타입 "node" 자체의 이름과 설명뿐 아니라 필드 타입 "node"의 이름과 설명을 요청한다. 이 질의는 다음의 응답으로 이어질 수 있다:
{
"node": {
"name": "node",
"description": "An object which itself can be queried from the graph.",
"fields": [
{
"name": "id",
"description": "The unique ID representing this object. Supply to the 'node()' root expression to retrieve this object directly."
}
{
"name": "url",
"description": "The unique URL representing this object which can be accessed via a web browser. For example, the url for a 'user' would be his or her profile page."
}
]
}
}
이 응답은 상술한 "node"의 정의에 정의되는 바와 같이 타입 "node" 및 각각의 그 필드(즉, "id" 및 "url")의 이름 및 설명을 포함한다. 게다가, 이 응답은 질의의 계층형 구조에 상응하는 계층형 구조로 또한 배열된다.
이 예가 나타내는 바와 같이, 특정 실시예로, 특정한 데이터 타입을 설명하는 정보가 그 데이터 타입의 설명에 포함될 수 있다. 데이터 타입의 설명은 API를 사용하여 데이터 아이템을 질의하는 것과 유사하게 API를 사용하여 질의될 수 있다. 이런 점에서, API는 자체-문서화(self-documenting)된다. 즉, 데이터 타입의 문서화가 그 정의의 일부로서 스키마에 포함된다.
특정 실시예로, 계층형 그래프에 저장된 데이터 아이템의 일부나 전부와 관련된 개인정보 보호가 있을 수 있다. 데이터 아이템은 단지 특정한 사용자 리스트에 의해서만 접근될 수 있고 다른 사용자들에 의해서는 그렇지 못할 수 있다. 예컨대, 사용자가 사진(즉, 데이터 아이템)을 게시할 때, 사용자는 그 사진이 단지 소셜 친구에 의해서만 열람될 수 있다고 명시할 수 있다. 이 경우, 그 사용자와 친구가 아닌 다른 사용자들은 그 특정 사진에 접근할 권한이 없다.
특정 실시예로, 질의에 응답하여 데이터 아이템을 검색할 때, 특정한 데이터 아이템과 관련된 개인정보 보호가 참작된다. 예로서, 질의를 통해 제1 사용자가 가장 최근에 제2 사용자(예컨대, 제1 사용자의 친구)가 게시한 10개의 메시지를 요청한다고 가정하자. 그 질의에 응답하여 제1 사용자에 대한 이런 메시지를 검색할 때, 제2 사용자가 게시한 각각의 메시지는 제1 사용자가 그 메시지에 접근할 권한이 있는지를 결정하도록 분석될 수 있다. (예컨대, 제2 사용자에 의해 특정되는 바와 같이) 제2 사용자가 가장 최근에 게시한 10개의 메시지 중에서 3개는 제3 사용자에 의해서만 열람될 수 있는 한편, 그 중 7개는 제1 사용자를 포함하는 모든 사용자에 의해 열람될 수 있다고 가정하자. 이 경우, 제1 사용자의 질의에 응답하여 단지 7개의 메시지만이 검색된다. 제3 사용자에 의해서만 열람될 수 있는 3개의 메시지는 제1 사용자가 이 특정 메시지를 열람할 권한이 없기 때문에 제1 사용자에 대해 검색되지 않는다. 대신에, 제1 사용자의 질의에 의해 요청되는 바대로 10개의 메시지를 보완하기 위해, 제1 사용자가 열람할 권한이 있는, (예컨대, 역 시계열 순서로 식별되는) 제2 사용자가 게시한 3개의 약간 오래된 메시지가 검색되고 7개의 메시지와 결합된다. 반면에, 제3 사용자가 제2 사용자에 의해 가장 최근에 게시된 10개의 메시지를 요청한다면, 가장 새로운 모든 10개의 메시지가 제3 사용자의 질의에 응답하여 검색될 수 있는데, 이는 제3 사용자가 이들 모든 메시지를 열람할 권한이 있기 때문이다. 이 예가 나타내는 바와 같이, 데이터 아이템과 관련된 개인정보 보호로 인해, 2명의 사용자가 동일한 질의를 제출할 때, 이들은 응답으로 각기 다른 결과를 수신할 수 있다.
특정 실시예로, 다수의 데이터 아이템을 검색하는 것이 일련의 질의에 응답하여 수행될 수 있다. 이는 가령 모바일 장치와 같은 특정 타입의 사용자 장치에 대한 성능을 향상시키는데 유용할 수 있다. 예로서, 사용자가 그의 소셜 친구 모두가 가장 최근에 게시한 100개의 사진을 검색하고 열람하고자 한다고 가정하자. 100개의 사진에 대해 하나의 질의를 제출하는 대신에, 사용자는 일련의 10개의 질의를 제출할 수 있는데, 이때 각각의 질의는 한 번에 10개의 사진을 요청한다. 이 방식으로, 사용자는 다른 사진들이 검색되고 사용자의 장치로 송신되고 있는 동안 몇몇의 사진들을 열람하기 시작할 수 있다. 또한, (100개의 사진 모두를 함께 열람하는 것과는 반대로) 사용자는 한꺼번에 몇몇 사진들을 그리고 다음번에 다른 사진들을 열람할 수 있다.
특정 실시예로, 사용자가 제출한 질의 및 그 응답이 기록될 수 있다. 상기 예에서, 사용자가 그 친구들에 의해 가장 최근에 게시된 10개의 사진에 대한 제1 질의를 제출하는 경우, 사용자들이 접근가능한 10개의 가장 최근의 사진은 그래프로부터 검색되고 사용자에게 송신될 수 있다. 또한, 10개의 사진 또는 사용자에게 송신되는 10개의 사진 중 마지막 하나가 기록될 수 있다. 이후, 사용자가 또 다른 10개의 사진에 대한 제2 질의를 제출하는 경우, 사용자들이 접근가능한 이전 10개의 사진 이후로부터 역시계열순으로 시작하는 제2의 10개의 가장 최근의 사진이 그래프로부터 검색되고 사용자에게 송신될 수 있다. 다시 한번, 사용자에게 지금 송신되는 10개의 사진 중 마지막 하나가 기록될 수 있다. 사용자가 또 다른 10개의 사진에 대한 제3 질의를 제출하는 경우, 사용자들이 접근가능한 이전 10개의 사진 이후로부터 역시계열순으로 시작하는 제3의 10개의 가장 최근의 사진이 그래프로부터 검색되고 사용자에게 송신될 수 있는 등이다. 이 방식으로, 데이터 검색 프로세스는 사용자에 대한 페이지 배열(pagination)을 자동으로 다룬다.
단계 230에서, 검색된 데이터 아이템은 계층형 포맷에 따라 구조화되고 질의를 제출하는 사용자에게 송신될 수 있다. 때때로, 요청된 데이터 아이템을 표현하거나 포함하는 노드는 각기 다른 그래프에 속할 수 있다. 이 경우, 데이터 아이템은 적절한 그래프 내 적절한 노드로부터 검색될 수 있고 하나의 계층형 구조에 배열될 수 있다.
특정 실시예로, 출력된 데이터 아이템의 계층형 구조는 질의의 계층형 구조에 상응할 수 있다. 질의가 타입 "node" 그 자체의 이름과 설명 및 이어지는 "node" 타입의 필드의 이름과 설명을 요청하는 상기 예에 나타난 바와 같이, 출력된 데이터 아이템은 계층형 구조로 배열된다. 한 레벨에는 타입 "node"가 있다. "node"에 내포된 다음 레벨에는 타입 "node"의 이름, 설명 및 필드가 있다. "fields"에 내포된 그 다음 레벨에는 타입 "node" 내 각각의 필드의 이름과 설명이 있다. 출력된 데이터 아이템의 배열은 질의의 배열에 해당한다.
특정 실시예로, 개별 데이터 타입의 정의는 하나 이상의 스키마를 형성할 수 있다. 이 정의는 API에 포함될 수 있으며, 따라서 그 데이터 아이템은 그 정의를 기초로 질의되고 검색될 수 있다. 흔히, 각기 다른 버전의 API가 있을 수 있다. 예컨대, 때때로, API는 더 오래된 버전에서 더 새로운 버전으로 업데이트될 수 있다. 각기 다른 버전의 API는 각각의 버전이 해당 플랫폼에 특히 적합한 코드를 포함하도록 각기 다른 플랫폼(예컨대, 모바일 대 비-모바일, 각기 다른 운영 시스템)에 대하여 구현될 수 있다.
특정 실시예로, 스키마는 특정 버전의 API를 테스트하고 검증하는데 사용될 수 있다. 도 3은 스키마를 사용하여 API의 버전을 검증하기 위한 예시적인 방법을 도시한다. 정확히 작동하는 것으로 알려진 API의 제1 버전이 있다고 가정하자. 하나 이상의 스키마는 API의 제1 버전과 관련될 수 있으며, 이 스키마는 이용가능한 모든 데이터 타입(예컨대, 계층형 그래프에 저장된 데이터 아이템이 속하는 데이터 타입)의 정의를 포함할 수 있다. 게다가, API의 제2 버전이 이용가능해진다고 가정하자.
단계 310에서, API의 제1 버전과 관련된 스키마가 기록될 수 있다. 이후, API의 제2 버전이 (예컨대, 테스트용 및 검증용으로) 그룹으로부터 데이터 아이템을 검색하는데 사용될 수 있다. 특정 실시예로, 단계 320에서, API의 제2 버전과 관련된 스키마는 예컨대 제1 버전과 관련된 스키마에서 데이터 타입의 모든 정의가 또한 제2 버전과 관련된 스키마에서 발견되거나, 제2 버전과 관련된 스키마에서 발견된 특정 데이터 타입의 정의가 제1 버전과 관련된 스키마에서 발견된 것과 동일하거나, 특정한 질의에 응답하여 데이터 아이템을 검색하도록 API의 제2 버전을 사용하는 것이 제1 버전을 사용하는 것과 동일한 결과를 낳음(즉, 제1 버전과 관련된 스키마에 따라 표현되는 질의 및 동일한 데이터 아이템에 대한 제2 버전과 관련된 스키마에 따라 표현되는 질의가 동일한 결과를 낳음)을 보장하도록 제1 버전과 관련된 스키마와 비교될 수 있다.
API의 제2 버전이 스키마를 기초로 정확히 작동한다면, 제2 버전이 공표될 수 있다. 그렇지 않으면, 제2 버전의 오류(예컨대, 누락 데이터 타입 정의 또는 부정확한 데이터 타입 정의)는 제2 버전이 공표될 수 있기 전에 먼저 보정되어야 한다.
상술한 바와 같이, 계층형 그래프에 저장된 데이터 아이템은 다양한 데이터 타입을 가질 수 있다. 흔히, 애플리케이션(또는 애플리케이션의 코드를 작성하는 프로그래머)은 데이터베이스(예컨대, 계층형 그래프)로부터 특정 타입의 데이터 아이템을 질의하고 검색하기(또는 검색된 데이터 아이템의 데이터 타입을 검증하기) 전에 특정한 데이터 타입의 정의를 필요로 할 수 있다. 특정 실시예는 내성 질의를 기초로 계층형 그래프로부터 데이터 아이템을 검색할 수 있다. 특정 실시예는 특정 데이터 타입의 데이터 구조를 검색하도록 그래프의 API로 내성 질의를 제출할 수 있다. 이후, 특정 실시예는 내성 질의에 의해 검색된 데이터 구조를 기초로 특정 데이터 타입의 데이터 아이템에 대한 데이터 질의를 API로 제출할 수 있다. 또한, 특정 실시예는 응답의 데이터 구조를 검색된 데이터 구조와 비교함으로써 데이터 질의에 대한 응답을 검증할 수 있다.
도 4는 내성 질의를 기초로 계층형 그래프로부터 데이터 아이템을 검색하기 위한 예시적인 방법을 도시한다. 특정 실시예로, 도 4에 도시된 방법은 단계 410에서 시작할 수 있으며, 이때 애플리케이션은 특정 데이터 타입의 데이터 구조를 요청하는 제1 질의(내성 질의)를 송신할 수 있다. 특정 실시예로, 단계 420에서, 애플리케이션은 그래프로부터 특정 데이터 타입의 데이터 구조를 검색할 수 있다. 예컨대, 내성 질의는 사용자의 클라이언트 장치에 의해 호스팅되는 애플리케이션에 의해 적절한 컴퓨터 또는 통신 연결(예컨대, 무선이나 유선 연결)을 통해 그래프를 관리하는 하나 이상의 컴퓨팅 시스템(예컨대, 서버)으로 송신될 수 있다. 특정 실시예로, 적절한 API 호출은 서버로 내성 질의를 송신하고 서버로부터 결과를 검색하도록 애플리케이션에 의해 호출될 수 있다. 특정 실시예로, 특정 데이터 타입의 데이터 구조를 요청하는 질의는 계층형 구조를 가진 언어로 표현될 수 있다. 게다가, 특정 실시예로, 언어는 기정의된 구문을 가질 수 있다. 다음은 예시적인 내성 질의를 나타낸다:
type(my_objects){name, type{fields{name, fields}}}
이 질의는 (접두사 "type"으로 표시되는 바와 같이) "my_objects"인 데이터 타입의 이름 및 필드를 요청한다. 또한, 이 질의는 만일 있다면 데이터 타입 "my_objects"의 필드의 하나 이상의 자식 데이터 구조의 이름 및 필드를 요청한다. 검색된 데이터 구조(즉, 내성 질의에 대한 응답)는 JSON(JavaScript Object Notation) 포맷으로 표현될 수 있다. 예컨대, 이 질의는 다음의 응답으로 이어질 수 있다:
{
"my_objects": {
"name": "my_objects",
"fields": [
{
"name": "id",
"name": "comment_count",
"actors": {
"name": "actors",
"field": [
{
"name": "id",
"name": "friends"
}
]
}
}
]
}
}
이 응답은 데이터 타입 "my_objects"의 이름 및 각각의 그 필드의 이름(즉, "id", "comment_count" 및 "actors")을 포함한다. 또한, 이 응답은 필드 "actors"의 각각의 필드의 이름(즉, "id" 및 "friends")을 포함한다. 즉, 데이터 타입 "my_objects"는 최상위 레벨에서 "name", "id", "comment_count" 및 "actors"를 포함하는 계층형 데이터 구조를 가지는 한편, "id" 및 "friends"는 제2 레벨에서 "actors"에 내포된다.
특정 실시예로, 단계 430에서, 애플리케이션은 특정한 데이터 타입을 가진 하나 이상의 특정한 데이터 아이템을 요청하는 제2 질의(데이터 질의)를 생성할 수 있다. 특정 실시예로, 데이터 질의는 특정된 데이터 타입의 검색된 데이터 구조에 상응하는 포맷으로 표현될 수 있다. 다음은 예시적인 데이터 질의를 도시한다:
me() {
id,
my_objects.first(3) {
id,
comment_count,
actors{id, friends}
}
}
이 예에서, 애플리케이션은 고유 식별자 "id"를 가진 사용자 "me"로부터의 요청을 기초로 질의를 제출할 수 있다. 상기 질의는 특정한 데이터 타입 "my_objects"의 처음 3개의 데이터 아이템을 요청한다. 이 질의는 특정된 데이터 타입 "my_objects"의 검색된 데이터 구조에 상응하는 계층형 포맷으로 표현된다: 이 질의는 최상위의 레벨에서 "id", "comment_count" 및 "actors"의 결과를 요청하고, 제2 레벨에서 "actors"에 내포된 "id" 및 "friends"의 결과를 요청한다.
일부의 실시예로, 애플리케이션은 특정된 데이터 타입 "my_objects"의 검색된 데이터 구조 내 모든 필드가 아닌 일부의 필드를 가진 제2 질의(데이터 질의)를 생성할 수 있다. 다음은 또 다른 예시적인 데이터 질의를 나타낸다:
me() {
id,
my_objects.first(3) {
id,
actors{id, friends}
}
}
이 질의는 최상위의 레벨에서 "id" 및 "actors"의 결과를 요청하고, 제2 레벨에서 "actors"에 내포된 "id" 및 "friends"의 결과를 요청한다. 특정된 데이터 타입 "my_objects"의 검색된 데이터 구조의 최상위의 레벨에서의 필드 "comment_count"가 질의에서 생략된다. 특정 실시예로, 단계 440에서, 애플리케이션은 그래프로부터 특정한 데이터 아이템을 검색할 수 있다. 검색된 데이터 아이템은 JSON 포맷으로 표현될 수 있다. 예컨대, 이 질의는 다음의 응답으로 이어질 수 있다:
{
{
"id": "0123",
"actors":
{
"id": "012345",
"friends": "John, Mary, Bob"
}
}
{
"id": "2345",
"actors":
{
"id": "254069",
"profile_pic_img": "https://www.example.com/9876.jpg"
}
}
{
"id": "6789",
"actors":
{
"id": "502839",
"friends": "Susan, Charlie, Liza, Katie, Brandon"
}
}
}
이 응답은 각각 "0123", "2345" 및 "6789"인 "id"의 3개의 결과들을 포함한다.
데이터 질의가 응답의 데이터 구조를 완전히 설명하면, 특정 실시예는 (특정한 데이터 타입의 검색된 데이터 구조를 기초로 하는) 데이터 질의의 데이터 구조에 대한 응답을 검증할 수 있다. 특정 실시예로, 애플리케이션은 특정한 데이터 타입의 검색된 데이터 구조를 기초로 검색된 데이터 아이템을 검증할 수 있다. 애플리케이션은 재귀적 파싱 알고리즘(recursive parsing algorithm)으로 검색된 데이터 아이템을 검사함으로써 검색된 데이터 아이템을 특정한 데이터 타입의 검색된 데이터 구조와 비교할 수 있다. 예컨대, 애플리케이션은 "0123" 및 "6789"의 "id"를 가진 상기 결과는 검색된 데이터 구조와 일치하는 데이터 구조를 가진다: 최상위 레벨에 "id" 및 "actors"가 있는 한편, 제2 레벨에서 "actors"에 "id" 및 "friends"가 내포된다. 애플리케이션은 "2345"의 "id"를 가진 상기 결과가 검색된 데이터 구조와 일치하는 데이터 구조를 가지지 않다고 결정할 수 있다. "2345"의 "id"를 가진 결과는 그 데이터 구조의 최상위 레벨에 "id" 및 "actors"를 가지나, 그 데이터 구조의 제2 레벨에서는 "actors"에 내포된 "id" 및 "profile_pic_img"를 가진다. "2345"의 "id"를 가진 결과는 예기치 않은 데이터 구조를 가지는 오류의 결과일 수 있기 때문에, 애플리케이션은 "2345"의 "id"를 가진 결과를 버릴 수 있다. 또한, 애플리케이션은 특정한 데이터 타입의 하나 이상의 데이터 아이템을 그래프로부터 검색하도록 다른 데이터 질의를 API로 제출할 수 있다.
적절한 경우, 특정 실시예는 도 4의 방법의 단계들을 반복할 수 있다. 게다가, 본 명세서는 특정한 순서로 발생하는 것으로서 도 4의 방법의 특정 단계들을 기술하고 도시하지만, 본 명세서는 임의의 적절한 순서로 발생하는 도 4의 방법의 임의의 적절한 단계들을 고려한다. 더욱이, 본 명세서는 도 4의 방법의 특정 단계를 수행하는 특정 구성요소, 장치 또는 시스템을 기술하고 도시하지만, 본 명세서는 도 4의 방법의 임의의 적절한 단계를 수행하는 임의의 적절한 구성요소, 장치 또는 시스템의 임의의 적절한 조합을 고려한다.
특정 실시예는 하나 이상의 컴퓨터 시스템에서 구현될 수 있다. 도 5는 예시적인 컴퓨터 시스템(500)을 도시한다. 특정 실시예로, 하나 이상의 컴퓨터 시스템들(500)은 본 명세서에 기술되거나 도시된 하나 이상의 방법들의 하나 이상의 단계들을 수행한다. 특정 실시예로, 하나 이상의 컴퓨터 시스템들(500)은 본 명세서에 기술되거나 도시된 기능을 제공한다. 특정 실시예로, 하나 이상의 컴퓨터 시스템들(500)에서 실행하는 소프트웨어는 본 명세서에 기술되거나 도시된 하나 이상의 방법들의 하나 이상의 단계들을 수행하거나, 본 명세서에 기술되거나 도시된 기능을 제공한다. 특정 실시예는 하나 이상의 컴퓨터 시스템들(500)의 하나 이상의 부분들을 포함한다.
본 명세서는 임의의 적절한 수의 컴퓨터 시스템(500)을 고려한다. 본 명세서는 임의의 적절한 물리적 형태를 취하는 컴퓨터 시스템(500)을 고려한다. 예로서 제한 없이, 컴퓨터 시스템(500)은 임베디드 컴퓨터 시스템, 시스템-온-칩(SOC), 단일-보드 컴퓨터 시스템(SBC)(예컨대, 컴퓨터-온-모듈(COM) 또는 시스템-온-모듈(SOM)), 데스크톱 컴퓨터 시스템, 랩톱 또는 노트북 컴퓨터 시스템, 상호작용형 키오스크(kiosk), 메인 프레임, 컴퓨터 시스템 메쉬(mesh), 모바일 전화, 개인 정보 단말기(PDA), 서버 또는 이들의 2 이상의 조합일 수 있다. 적절한 경우, 컴퓨터 시스템(500)은 하나 이상의 컴퓨터 시스템(500)들을 포함할 수 있거나; 일체형 또는 분산형일 수 있거나; 다수의 위치에 걸쳐 있거나; 다수의 기계에 걸쳐 있거나; 하나 이상의 네트워크에 하나 이상의 클라우드 성분을 포함할 수 있는 클라우드에 상주할 수 있다. 적절한 경우, 하나 이상의 컴퓨터 시스템(500)은 본 명세서에 기술되거나 도시되는 하나 이상의 방법의 하나 이상의 단계를 실질적으로 공간적 또는 시간적 제한 없이 실행할 수 있다. 예로서 제한 없이, 하나 이상의 컴퓨터 시스템(500)은 본 명세서에 기술되거나 도시되는 하나 이상의 방법의 하나 이상의 단계를 실시간으로 또는 일괄 모드로 실행할 수 있다. 적절한 경우, 하나 이상의 컴퓨터 시스템(500)은 본 명세서에 기술되거나 도시되는 하나 이상의 방법의 하나 이상의 단계를 다른 시기에 또는 다른 위치에서 실행할 수 있다.
특정 실시예로, 컴퓨터 시스템(500)은 프로세서(502), 메모리(504), 저장소(506), 입력/출력(I/O) 인터페이스(508), 통신 인터페이스(510) 및 버스(512)를 포함한다. 본 명세서가 특정 배열로 특정한 수의 특정 구성요소를 갖는 특정 컴퓨터 시스템을 기술하고 도시하지만, 본 명세서는 임의의 적절한 구성으로 임의의 적절한 수의 임의의 적절한 구성요소를 갖는 임의의 적절한 컴퓨터 시스템을 고려한다.
특정 실시예로, 프로세서(502)는 가령 컴퓨터 프로그램을 구성하는 명령어와 같은 명령어를 실행하기 위한 하드웨어를 포함한다. 예로서 제한 없이, 명령어를 실행하기 위해, 프로세서(502)는 내부 레지스터, 내부 캐시, 메모리(504) 또는 저장소(506)로부터 명령어를 검색(또는 페치(fetch))할 수 있고; 명령어를 디코딩하고 실행한 후; 하나 이상의 결과를 내부 레지스터, 내부 캐시, 메모리(504) 또는 저장소(506)에 기록할 수 있다. 특정 실시예로, 프로세서(502)는 데이터용, 명령어용 또는 주소용 하나 이상의 내부 캐시를 포함할 수 있다. 본 명세서는 적절한 경우 임의의 적절한 수의 임의의 적절한 내부 캐시들을 포함하는 프로세서(502)를 고려한다. 예로서 제한 없이, 프로세서(502)는 하나 이상의 명령어 캐시들, 하나 이상의 데이터 캐시들 및 하나 이상의 변환 색인 버퍼(translation lookaside buffers, TLBs)를 포함할 수 있다. 명령어 캐시에 저장된 명령어들은 메모리(504)나 저장소(506) 내 명령어들의 사본일 수 있고, 명령어 캐시는 프로세서(502)에 의한 이런 명령어들의 검색 속도를 높일 수 있다. 데이터 캐시 내의 데이터는 프로세서(502)에서 실행하는 다음 명령들에 의해 접근하거나 메모리(504)나 저장소(506)로 기록하기 위해 프로세서(502)에서 실행되는 이전 명령들의 결과; 또는 다른 적절한 데이터를 동작하는데 프로세서(502)에서 실행하는 명령어를 위한 메모리(504)나 저장소(506) 내의 데이터의 사본일 수 있다. 데이터 캐시는 프로세서(502)에 의한 판독 또는 기록 동작의 속도를 높일 수 있다. TLB들은 프로세서(502)에 의한 가상 주소 변환의 속도를 높일 수 있다. 특정 실시예로, 프로세서(502)는 데이터용, 명령어용 또는 주소용 하나 이상의 내부 레지스터를 포함할 수 있다. 본 명세서는 적절한 경우 임의의 적절한 수의 임의의 적절한 내부 레지스터들을 포함하는 프로세서(502)를 고려한다. 적절한 경우, 프로세서(502)는 하나 이상의 산술 논리 유닛(ALUs)을 포함할 수 있거나; 멀티-코어 프로세서일 수 있거나; 하나 이상이 프로세서들(502)을 포함할 수 있다. 본 명세서가 특정 프로세서를 기술하고 도시하지만, 본 명세서는 임의의 적절한 프로세서를 고려한다.
특정 실시예로, 메모리(504)는 프로세서(502)가 실행하는 명령어 또는 프로세서(502)가 운영하는 데이터를 저장하기 위한 메인 메모리를 포함한다. 예로서 제한 없이, 컴퓨터 시스템(500)은 저장소(506)나 또 다른 소스(가령, 예컨대 또 다른 컴퓨터 시스템(500))에서 메모리(504)로 명령어를 로딩할 수 있다. 이후, 프로세서(502)는 메모리(504)에서 내부 레지스터나 내부 캐시로 명령어를 로딩할 수 있다. 명령어를 실행하기 위해, 프로세서(502)는 내부 레지스터나 내부 캐시로부터 명령어를 검색하고 이들을 디코딩할 수 있다. 명령어의 실행 중 또는 실행 후, 프로세서(502)는 (중간 결과 또는 최종 결과일 수 있는) 하나 이상의 결과를 내부 레지스터나 내부 캐시로 기록할 수 있다. 이후, 프로세서(502)는 하나 이상의 이런 결과를 메모리(504)에 기록할 수 있다. 특정 실시예로, 프로세서(502)는 (저장소(506) 또는 다른 곳과는 대조적으로) 하나 이상의 내부 레지스터나 내부 캐시에서 또는 메모리(504)에서 단지 명령어만을 실행하며, (저장소(506) 또는 다른 곳과는 대조적으로) 하나 이상의 내부 레지스터나 내부 캐시에서 또는 메모리(504)에서 단지 데이터만을 운영한다. (주소 버스 및 데이터 버스를 각각 포함할 수 있는) 하나 이상의 메모리 버스는 프로세서(502)를 메모리(504)로 연결할 수 있다. 하기에 기술되는 바와 같이, 버스(512)는 하나 이상의 메모리 버스를 포함할 수 있다. 특정 실시예로, 하나 이상의 메모리 관리 유닛(MMUs)은 프로세서(502)와 메모리(504) 사이에 상주하며, 프로세서(502)에 의해 요청되는 메모리(504)로의 접근을 용이하게 한다. 특정 실시예로, 메모리(504)는 랜덤 액세스 메모리(RAM)를 포함한다. 적절한 경우, 이런 RAM은 휘발성 메모리일 수 있다. 적절한 경우, 이런 RAM은 동적 RAM(DRAM) 또는 정적 RAM(SRAM)일 수 있다. 게다가, 적절한 경우, 이런 RAM은 단일 포트형 또는 다중-포트형 RAM일 수 있다. 본 명세서는 임의의 적절한 RAM을 고려한다. 적절한 경우, 메모리(504)는 하나 이상의 메모리(504)를 포함할 수 있다. 본 명세서가 특정 메모리를 기술하고 도시하지만, 본 명세서는 임의의 적절한 메모리를 고려한다.
특정 실시예로, 저장소(506)는 데이터용 또는 명령어용 대용량 저장소를 포함한다. 예로서 제한 없이, 저장소(506)는 HDD, 플로피 디스크 드라이브, 플래시 메모리, 광디스크, 자기-광학 디스크, 자기 테이프, 범용 직렬 버스(USB) 드라이브 또는 이들의 2 이상의 조합을 포함할 수 있다. 적절한 경우, 저장소(506)는 착탈식 또는 비-착탈식(또는 고정) 매체를 포함할 수 있다. 적절한 경우, 저장소(506)는 컴퓨터 시스템(500)의 내부 또는 외부에 있을 수 있다. 특정 실시예로, 저장소(506)는 비휘발성, 고체-상태(solid-state) 메모리이다. 특정 실시예로, 저장소(506)는 읽기 전용 메모리(ROM)를 포함한다. 적절한 경우, 이런 ROM은 마스크-프로그램화된 ROM, 프로그램가능 ROM(PROM), 소거가능 PROM(EPROM), 전기적 소거가능 PROM(EEPROM), 전기적 변경가능 ROM(EAROM), 플래시 메모리 또는 이들의 2 이상의 조합일 수 있다. 본 명세서는 임의의 적절한 물리적 형태를 취하는 대용량 저장소(506)를 고려한다. 적절한 경우, 저장소(506)는 프로세서(502)와 저장소(506) 사이의 통신을 용이하게 하는 하나 이상의 저장소 제어 유닛을 포함할 수 있다. 적절한 경우, 저장소(506)는 하나 이상의 저장소(506)를 포함할 수 있다. 본 명세서가 특정 저장소를 기술하고 도시하지만, 본 명세서는 임의의 적절한 저장소를 고려한다.
특정 실시예로, I/O 인터페이스(508)는 컴퓨터 시스템(500)과 하나 이상의 I/O 장치 사이의 통신을 위한 하나 이상의 인터페이스를 제공하는 하드웨어, 소프트웨어 또는 이들 모두를 포함한다. 적절한 경우, 컴퓨터 시스템(500)은 하나 이상의 이들 I/O 장치를 포함할 수 있다. 하나 이상의 이들 I/O 장치는 사람과 컴퓨터 시스템(500) 사이의 통신을 가능하게 할 수 있다. 예로서 제한 없이, I/O 장치는 키보드, 키패드, 마이크로폰, 모니터, 마우스, 프린터, 스캐너, 스피커, 스틸 카메라(still camera), 스타일러스(stylus), 태블릿, 터치 스크린, 트랙볼(trackball), 비디오 카메라, 또 다른 적절한 I/O 장치 또는 이들의 2 이상의 조합을 포함할 수 있다. I/O 장치는 하나 이상의 센서를 포함할 수 있다. 본 명세서는 임의의 적절한 I/O 장치 및 이에 대한 적절한 I/O 인터페이스(508)를 고려한다. 적절한 경우, I/O 인터페이스(508)는 프로세서(502)가 하나 이상의 이들 I/O 장치를 구동할 수 있도록 하는 하나 이상의 장치 또는 소프트웨어 드라이버를 포함할 수 있다. 적절한 경우, I/O 인터페이스(508)는 하나 이상의 I/O 인터페이스(508)를 포함할 수 있다. 본 명세서가 특정 I/O 인터페이스를 기술하고 도시하지만, 본 명세서는 임의의 적절한 I/O 인터페이스를 고려한다.
특정 실시예로, 통신 인터페이스(510)는 컴퓨터 시스템(500)과 하나 이상의 다른 컴퓨터 시스템(500)이나 하나 이상의 네트워크 사이의 통신(가령, 예컨대 패킷-기반 통신)을 위한 하나 이상의 인터페이스를 제공하는 하드웨어, 소프트웨어 또는 이들 모두를 포함한다. 예로서 제한 없이, 통신 인터페이스(510)는 이더넷이나 다른 유선-기반 네트워크로 통신하기 위한 네트워크 인터페이스 제어장치(NIC)나 네트워크 어댑터 또는 가령 WI-FI 네트워크와 같이 무선 네트워크로 통신하기 위한 무선 NIC(WNIC)나 무선 어댑터를 포함할 수 있다. 본 명세서는 임의의 적절한 네트워크 및 이에 대한 임의의 적절한 통신 인터페이스(510)를 고려한다. 예로서 제한 없이, 컴퓨터 시스템(500)은 애드 혹 네트워크(ad hoc network), 개인 영역 네트워크(PAN), 근거리 네트워크(LAN), 광역 네트워크(WAN), 대도시 네트워크(MAN), 인터넷의 하나 이상의 부분 또는 2 이상의 이런 네트워크들의 조합으로 통신할 수 있다. 하나 이상의 이런 네트워크의 하나 이상의 부분은 유선 또는 무선일 수 있다. 예로서, 컴퓨터 시스템(500)은 무선 PAN(WPAN)(가령, 예컨대 BLUETOOTH WPAN), WI-FI 네트워크, WI-MAX 네트워크, 셀룰러폰 네트워크(가령, 예컨대 GSM(Global System for Mobile Communication) 네트워크), 다른 적절한 무선 네트워크 또는 2 이상의 이런 네트워크들의 조합으로 통신할 수 있다. 적절한 경우, 컴퓨터 시스템(500)은 임의의 이들 네트워크에 대한 임의의 적절한 통신 인터페이스(510)를 포함할 수 있다. 적절한 경우, 통신 인터페이스(510)는 하나 이상의 통신 인터페이스(510)를 포함할 수 있다. 본 명세서가 특정 통신 인터페이스를 기술하고 도시하지만, 본 명세서는 임의의 적절한 통신 인터페이스를 고려한다.
특정 실시예로, 버스(512)는 컴퓨터 시스템(500)의 구성요소를 서로 연결하는 하드웨어, 소프트웨어 또는 이들 모두를 포함한다. 예로서 제한 없이, 버스(512)는 AGP(Accelerated Graphics Port)이나 다른 그래픽 버스, EISA(Enhanced Industry Standard Architecture) 버스, FSB(front-side bus), HT(HYPERTRANSPORT) 인터커넥트, ISA(Industry Standard Architecture) 버스, INFINIBAND 인터커넥트, LPC(low-pin-count) 버스, 메모리 버스, MCA(Micro Channel Architecture) 버스, PCI(Peripheral Component Interconnect) 버스, PCIe(PCI-Express) 버스, SATA(serial advanced technology attachment) 버스, VLB(Video Electronics Standard Association local) 버스, 또 다른 적절한 버스 또는 2 이상의 이런 버스의 조합을 포함할 수 있다. 적절한 경우, 버스(512)는 하나 이상의 버스(512)를 포함할 수 있다. 본 명세서가 특정 버스를 기술하고 도시하지만, 본 명세서는 임의의 적절한 버스나 인터커넥트를 고려한다.
본 명세서에서, 컴퓨터-판독가능한 비-일시적 저장매체는 반도체-기반 또는 다른 집적회로(IC)(가령, 예컨대 FPGA(field-programmable gate array) 또는 ASIC(application-specific IC)), 하드 디스크 드라이브("HDD"), 하이브리드 하드 디스크(HHD), 광학 디스크, 광학 디스크 드라이브(ODD), 자기-광학 디스크, 자기-광학 드라이브, 플로피 디스크, 플로피 디스크 드라이브(FDD), 자기 테이프, 홀로그래픽 저장매체, 고체-상태 드라이브(SSD), RAM-드라이브, SECURE DIGITAL 카드, SECURE DIGITAL 드라이브, 다른 적절한 컴퓨터-판독가능한 비-일시적 저장매체 또는, 적절한 경우, 이들의 적절한 조합을 포함할 수 있다. 본 명세서는 임의의 적절한 저장소를 구현하는 하나 이상의 컴퓨터-판독가능한 저장매체를 고려한다. 특정 실시예로, 컴퓨터-판독가능한 저장매체는 프로세서(502)의 하나 이상의 부분(가령, 예컨대, 하나 이상의 내부 레지스터나 캐시), 메모리(504)의 하나 이상의 부분, 저장소(506)의 하나 이상의 부분 또는 적절한 경우 이들의 조합을 구현한다. 특정 실시예로, 컴퓨터-판독가능한 저장매체는 RAM 또는 ROM을 구현한다. 특정 실시예로, 컴퓨터-판독가능한 저장매체는 휘발성 또는 지속성 메모리를 구현한다. 특정 실시예로, 하나 이상의 컴퓨터-판독가능한 저장매체는 소프트웨어를 이용한다. 본 명세서에서, 소프트웨어에 대한 언급은 하나 이상의 애플리케이션, 바이트코드(bytecode), 하나 이상의 컴퓨터 프로그램, 하나 이상의 실행가능한 것들, 하나 이상의 명령어, 로직, 기계어, 하나 이상의 스크립트 또는 소스 코드를 포함할 수 있으며, 적절한 경우 그 역도 또한 같다. 특정 실시예로, 소프트웨어는 하나 이상의 애플리케이션 프로그래밍 인터페이스(APIs)를 포함한다. 본 명세서는 임의의 적절한 프로그래밍 언어 또는 프로그래밍 언어들의 조합으로 기록되거나 표현되는 임의의 적절한 소프트웨어를 고려한다. 특정 실시예로, 소프트웨어는 소스 코드 또는 객체 코드로 표현된다. 특정 실시예로, 소프트웨어는 예컨대 C, Perl 또는 이들의 적절한 확장형과 같은 고차원(higher-level) 프로그래밍 언어로 표현된다. 특정 실시예로, 소프트웨어는 가령 어셈플리 언어(또는 기계어)와 같은 저차원(lower-level) 프로그래밍 언어로 표현된다. 특정 실시예로, 소프트웨어는 JAVA, C 또는 C++로 표현된다. 특정 실시예로, 소프트웨어는 하이퍼텍스트 마크업 언어(HTML), 확장형 마크업 언어(XML) 또는 다른 적절한 마크업 언어로 표현된다.
본 명세서에서, 컴퓨터-판독가능한 비-일시적 저장매체나 저장매체들은 하나 이상의 반도체 기반 또는 다른 집적회로(ICs)(가령, 예컨대 FPGAs(field-programmable gate arrays) 또는 ASICs(application-specific ICs)), 하드 디스크 드라이브(HDDs), 하이브리드 하드 디스크(HHDs), 광학 디스크, 광학 디스크 드라이브(ODDs), 자기-광학 디스크, 자기-광학 드라이브, 플로피 디스켓, 플로피 디스크 드라이브(FDDs), 자기 테이프, 고체-상태 드라이브(SSDs), RAM-드라이브, SECURE DIGITAL 카드나 드라이브, 임의의 다른 적절한 컴퓨터-판독가능한 비-일시적 저장매체 또는, 적절한 경우, 2 이상의 이들의 임의의 적절한 조합을 포함할 수 있다. 적절한 경우, 컴퓨터-판독가능한 비-일시적 저장매체는 휘발성, 비-휘발성 또는 휘발성과 비-휘발성의 조합일 수 있다.
본 명세서에서, "또는"은 명시적으로 다르게 지시하거나 문맥상 달리 지시되지 않는 한, 포괄적인 것이며 배타적인 것이 아니다. 따라서, 본 명세서에서 "A 또는 B"는 명시적으로 다르게 지시하거나 문맥상 달리 지시되지 않는 한, "A, B 또는 둘 모두"를 의미한다. 게다가, "및"은 명시적으로 다르게 지시하거나 문맥상 달리 지시되지 않는 한, 공동 및 별개 모두이다. 따라서, 본 명세서에서 "A 및 B"는 명시적으로 다르게 지시하거나 문맥상 달리 지시되지 않는 한, "A 및 B가 공동이든 별개이든 상관없이 모두"를 의미한다.
본 명세서는 당업자가 이해할 수 있는 본 명세서의 예시적인 실시예들에 대한 모든 변화, 치환, 변형, 대체 및 변경을 포함한다. 게다가, 본 명세서는 특정 컴포넌트, 구성요소, 기능, 동작 또는 단계를 포함하는 것으로 본 명세서의 각각의 실시예들을 기술하고 도시하지만, 임의의 이런 실시예들은 당업자가 이해할 수 있는 본 명세서에 어디든 기술되거나 도시되는 임의의 컴포넌트, 구성요소, 기능, 동작 또는 단계의 임의의 조합이나 치환을 포함할 수 있다. 게다가, 첨부된 청구범위에서 특정 기능을 수행하도록 설계되거나, 배치되거나, 할 수 있거나, 구성되거나, 할 수 있게 하거나, 동작할 수 있거나, 동작하는 장치나 시스템 또는 장치나 시스템의 구성요소에 대한 언급은 장치, 시스템 또는 구성요소가 그렇게 설계되거나, 배치되거나, 할 수 있거나, 구성되거나, 가능하거나, 동작할 수 있거나 동작하는 한, 장치, 시스템, 구성요소, 그 또는 그러한 특정 기능이 활성화되었는지, 턴온 되었는지, 잠금 해제되었는지 여부를 포함한다.

Claims (18)

  1. 계층형 포맷으로 배열된 하나 이상의 노드를 각각 포함하고 소셜 네트워킹 시스템과 관련된 하나 이상의 그래프를 저장하는 단계;
    제1 데이터 타입의 정의를 요청하고 제1 계층형 포맷을 가진 언어로 표현되는 제1 질의를 포함하는 API 호출을 제3자 시스템으로부터 수신하는 단계;
    (1) 제1 데이터 타입에 대한 이름, (2) 제1 데이터 타입에 대한 설명 및 (3) 제1 데이터 타입의 하나 이상의 필드 각각에 대한 필드의 이름과 설명을 포함하는, 제1 데이터 타입의 정의를 제1 질의에 응답하여 제3자 시스템으로 송신하는 단계;
    제1 데이터 타입과 관련된 하나 이상의 데이터 아이템을 요청하는 제2 질의를 제3자 시스템으로부터 수신하는 단계;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 단계;
    검색된 데이터 아이템이 제1 데이터 타입과 관련되는지를 결정하여 검색된 데이터 아이템을 검증하는 단계;
    제2 계층형 포맷으로 제1 데이터 타입의 요청된 데이터 아이템을 배열하는 단계; 및
    제2 계층형 포맷으로 배열된 제1 데이터 타입의 요청된 데이터 아이템을 제2 질의에 응답하여 제3자 시스템으로 송신하는 단계를 포함하며,
    하나 이상의 노드는 하나 이상의 데이터 아이템을 각각 표현하고,
    각각의 데이터 아이템은 복수의 데이터 타입 중 특정 데이터 타입인 컴퓨터-구현 방법.
  2. 제 1 항에 있어서,
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 단계는:
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 표현하는 하나 이상의 특정한 노드를 식별하는 단계; 및
    특정한 노드로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 단계를 포함하는 컴퓨터-구현 방법.
  3. 제 1 항에 있어서,
    제1 질의 및 제2 질의는 사용자에 의해 제출되고;
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 데이터 아이템들을 요청하고;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 단계는 반복적으로 하나 이상의 데이터 아이템들이 위치할 때까지,
    그래프로부터 기준을 만족하는 데이터 아이템을 위치시키는 단계;
    사용자가 데이터 아이템에 접근할 권한이 있는지를 결정하는 단계;
    사용자가 데이터 아이템에 접근할 권한이 있다면, 출력되는 데이터 아이템들 중 하나로서 데이터 아이템을 포함하는 단계; 및
    사용자가 데이터 아이템에 접근할 권한이 없다면, 데이터 아이템을 버리는 단계를 포함하는 컴퓨터-구현 방법.
  4. 제 1 항에 있어서,
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 제1 데이터 아이템들을 요청하며;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 단계는:
    그래프로부터 기준을 만족하는 하나 이상의 데이터 아이템들을 식별하는 단계; 및
    식별되는 하나 이상의 데이터 아이템들 중 마지막 하나를 기록하는 단계를 포함하는 컴퓨터-구현 방법.
  5. 제 4 항에 있어서,
    기준을 만족하는 하나 이상의 제2 데이터 아이템들을 요청하는 제3 질의에 접근하는 단계;
    제2 질의에 응답하여 하나 이상의 제1 데이터 아이템들 중 마지막 하나가 식별된 후 시작하여 그래프로부터 기준을 만족하는 하나 이상의 제2 데이터 아이템들을 식별하는 단계;
    계층형 포맷으로 하나 이상의 제2 데이터 아이템들을 배열하는 단계; 및
    제3 질의에 응답하여 하나 이상의 제2 데이터 아이템들을 출력하는 단계를 더 포함하며, 제3 질의는 계층형 포맷을 가진 언어로 표현되는 컴퓨터-구현 방법.
  6. 계층형 포맷으로 배열된 하나 이상의 노드를 각각 포함하고 소셜 네트워킹 시스템과 관련된 하나 이상의 그래프를 저장하고;
    제1 데이터 타입의 정의를 요청하고 제1 계층형 포맷을 가진 언어로 표현되는 제1 질의를 포함하는 API 호출을 제3자 시스템으로부터 수신하며;
    (1) 제1 데이터 타입에 대한 이름, (2) 제1 데이터 타입에 대한 설명 및 (3) 제1 데이터 타입의 하나 이상의 필드 각각에 대한 필드의 이름과 설명을 포함하는 제1 데이터 타입의 정의를 제1 질의에 응답하여 제3자 시스템으로 송신하고;
    제1 데이터 타입과 관련된 하나 이상의 데이터 아이템을 요청하는 제2 질의를 제3자 시스템으로부터 수신하며;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하고;
    검색된 데이터 아이템이 제1 데이터 타입과 관련되는지를 결정하여 검색된 데이터 아이템을 검증하며;
    계층형 포맷으로 제1 데이터 타입의 요청된 데이터 아이템을 배열하고;
    제2 계층형 포맷으로 배열된 제1 데이터 타입의 요청된 데이터 아이템을 제2 질의에 응답하여 제3자 시스템으로 송신하도록 실행시 동작하는 소프트웨어를 수록한 하나 이상의 컴퓨터-판독가능한 비-일시적 저장매체로서,
    하나 이상의 노드는 하나 이상의 데이터 아이템을 각각 표현하고,
    각각의 데이터 아이템은 복수의 데이터 타입 중 특정 데이터 타입인 컴퓨터-판독가능한 비-일시적 저장매체.
  7. 제 6 항에 있어서,
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은:
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 표현하는 하나 이상의 특정한 노드를 식별하고;
    특정한 노드로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것을 포함하는 컴퓨터-판독가능한 비-일시적 저장매체.
  8. 제 6 항에 있어서,
    제1 질의 및 제2 질의는 사용자에 의해 제출되고;
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 데이터 아이템들을 요청하고;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은 반복적으로 하나 이상의 데이터 아이템들이 위치할 때까지,
    그래프로부터 기준을 만족하는 데이터 아이템을 위치시키고;
    사용자가 데이터 아이템에 접근할 권한이 있는지를 결정하며;
    사용자가 데이터 아이템에 접근할 권한이 있다면, 출력되는 데이터 아이템들 중 하나로서 데이터 아이템을 포함하고;
    사용자가 데이터 아이템에 접근할 권한이 없다면, 데이터 아이템을 버리는 것을 포함하는 컴퓨터-판독가능한 비-일시적 저장매체.
  9. 제 6 항에 있어서,
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 제1 데이터 아이템들을 요청하며;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은:
    그래프로부터 기준을 만족하는 하나 이상의 데이터 아이템들을 식별하며;
    식별되는 하나 이상의 데이터 아이템들 중 마지막 하나를 기록하는 것을 포함하는 컴퓨터-판독가능한 비-일시적 저장매체.
  10. 제 9 항에 있어서,
    상기 소프트웨어는:
    기준을 만족하는 하나 이상의 제2 데이터 아이템들을 요청하는 제3 질의에 접근하고;
    제2 질의에 응답하여 하나 이상의 제1 데이터 아이템들 중 마지막 하나가 식별된 후 시작하여 그래프로부터 기준을 만족하는 하나 이상의 제2 데이터 아이템들을 식별하며;
    계층형 포맷으로 하나 이상의 제2 데이터 아이템들을 배열하고;
    제3 질의에 응답하여 하나 이상의 제2 데이터 아이템들을 출력하도록 실행시 또한 동작하며,
    제3 질의는 계층형 포맷을 가지는 언어로 표현되는 컴퓨터-판독가능한 비-일시적 저장매체.
  11. 하나 이상의 프로세서; 및
    프로세서와 연결되고 프로세서에 의해 실행가능한 명령어를 포함하는 메모리를 포함하는 시스템으로서,
    상기 프로세서는:
    계층형 포맷으로 배열된 하나 이상의 노드를 각각 포함하고 소셜 네트워킹 시스템과 관련된 하나 이상의 그래프를 저장하고;
    제1 데이터 타입의 정의를 요청하고 제1 계층형 포맷을 가진 언어로 표현되는 제1 질의를 포함하는 API 호출을 제3자 시스템으로부터 수신하며;
    (1) 제1 데이터 타입에 대한 이름, (2) 제1 데이터 타입에 대한 설명 및 (3) 제1 데이터 타입의 하나 이상의 필드 각각에 대한 필드의 이름과 설명을 포함하는, 제1 데이터 타입의 정의를 제1 질의에 응답하여 검색하고;
    제1 데이터 타입과 관련된 하나 이상의 데이터 아이템을 요청하는 제2 질의를 제3자 시스템으로부터 수신하며;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하고;
    검색된 데이터 아이템이 제1 데이터 타입과 관련되는지를 결정하여 검색된 데이터 아이템을 검증하며;
    계층형 포맷으로 제1 데이터 타입의 요청된 데이터 아이템을 배열하고;
    제2 계층형 포맷으로 배열된 제1 데이터 타입의 요청된 데이터 아이템을 제2 질의에 응답하여 제3자 시스템으로 송신하는 명령어를 실행할 때 동작하며,
    하나 이상의 노드는 하나 이상의 데이터 아이템을 각각 표현하고,
    각각의 데이터 아이템은 복수의 데이터 타입 중 특정 데이터 타입인 시스템.
  12. 제 11 항에 있어서,
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은:
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 표현하는 하나 이상의 특정한 노드를 식별하고;
    특정한 노드로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것을 포함하는 시스템.
  13. 제 11 항에 있어서,
    제1 질의 및 제2 질의는 사용자에 의해 제출되고;
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 데이터 아이템들을 요청하고;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은 반복적으로 하나 이상의 데이터 아이템들이 위치할 때까지,
    그래프로부터 기준을 만족하는 데이터 아이템을 위치시키고;
    사용자가 데이터 아이템에 접근할 권한이 있는지를 결정하며;
    사용자가 데이터 아이템에 접근할 권한이 있다면, 출력되는 데이터 아이템들 중 하나로서 데이터 아이템을 포함하고;
    사용자가 데이터 아이템에 접근할 권한이 없다면, 데이터 아이템을 버리는 것을 포함하는 시스템.
  14. 제 11 항에 있어서,
    제2 질의는 하나 이상의 기준을 만족하는 하나 이상의 제1 데이터 아이템들을 요청하며;
    그래프로부터 제1 데이터 타입의 요청된 데이터 아이템을 검색하는 것은:
    그래프로부터 기준을 만족하는 하나 이상의 데이터 아이템들을 식별하며;
    식별되는 하나 이상의 데이터 아이템들 중 마지막 하나를 기록하는 것을 포함하는 시스템.
  15. 제 14 항에 있어서,
    상기 프로세서는:
    기준을 만족하는 하나 이상의 제2 데이터 아이템들을 요청하는 제3 질의에 접근하고;
    제2 질의에 응답하여 하나 이상의 제1 데이터 아이템들 중 마지막 하나가 식별된 후 시작하여 그래프로부터 기준을 만족하는 하나 이상의 제2 데이터 아이템들을 식별하며;
    계층형 포맷으로 하나 이상의 제2 데이터 아이템들을 배열하고;
    제3 질의에 응답하여 하나 이상의 제2 데이터 아이템들을 출력하는 명령어를 실행할 때 또한 동작하며,
    제3 질의는 계층형 포맷을 가지는 언어로 표현되는 시스템.
  16. 삭제
  17. 삭제
  18. 삭제
KR1020157008062A 2012-08-31 2013-08-28 그래프 질의 로직 KR101818710B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/601,769 US9646028B2 (en) 2012-08-31 2012-08-31 Graph query logic
US13/601,769 2012-08-31
PCT/US2013/056940 WO2014036054A1 (en) 2012-08-31 2013-08-28 Graph query logic

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187000586A Division KR101985717B1 (ko) 2012-08-31 2013-08-28 그래프 질의 로직

Publications (2)

Publication Number Publication Date
KR20150052162A KR20150052162A (ko) 2015-05-13
KR101818710B1 true KR101818710B1 (ko) 2018-01-16

Family

ID=50184267

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020187000586A KR101985717B1 (ko) 2012-08-31 2013-08-28 그래프 질의 로직
KR1020157008062A KR101818710B1 (ko) 2012-08-31 2013-08-28 그래프 질의 로직

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020187000586A KR101985717B1 (ko) 2012-08-31 2013-08-28 그래프 질의 로직

Country Status (7)

Country Link
US (2) US9646028B2 (ko)
JP (2) JP6200505B2 (ko)
KR (2) KR101985717B1 (ko)
AU (2) AU2013308885B2 (ko)
CA (2) CA2882360C (ko)
IL (2) IL237334A (ko)
WO (1) WO2014036054A1 (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015733B2 (en) 2012-08-31 2015-04-21 Facebook, Inc. API version testing based on query schema
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
US9405855B2 (en) * 2014-03-27 2016-08-02 Sap Ag Processing diff-queries on property graphs
US11475320B2 (en) 2016-11-04 2022-10-18 Microsoft Technology Licensing, Llc Contextual analysis of isolated collections based on differential ontologies
US10481960B2 (en) 2016-11-04 2019-11-19 Microsoft Technology Licensing, Llc Ingress and egress of data using callback notifications
US10452672B2 (en) 2016-11-04 2019-10-22 Microsoft Technology Licensing, Llc Enriching data in an isolated collection of resources and relationships
US10885114B2 (en) 2016-11-04 2021-01-05 Microsoft Technology Licensing, Llc Dynamic entity model generation from graph data
US10614057B2 (en) 2016-11-04 2020-04-07 Microsoft Technology Licensing, Llc Shared processing of rulesets for isolated collections of resources and relationships
US10402408B2 (en) 2016-11-04 2019-09-03 Microsoft Technology Licensing, Llc Versioning of inferred data in an enriched isolated collection of resources and relationships
US10445319B2 (en) * 2017-05-10 2019-10-15 Oracle International Corporation Defining subgraphs declaratively with vertex and edge filters
US11036797B2 (en) 2017-10-12 2021-06-15 Adtran, Inc. Efficient storage and utilization of a hierarchical data set
US10963514B2 (en) 2017-11-30 2021-03-30 Facebook, Inc. Using related mentions to enhance link probability on online social networks
US11604968B2 (en) 2017-12-11 2023-03-14 Meta Platforms, Inc. Prediction of next place visits on online social networks
US10129705B1 (en) 2017-12-11 2018-11-13 Facebook, Inc. Location prediction using wireless signals on online social networks
KR101977107B1 (ko) * 2018-11-26 2019-05-10 (주)시큐레이어 Lucene 데이터베이스에 대한 쿼리를 분석하여 계층형 구조의 UI로 표현하는 방법 및 장치
KR101949827B1 (ko) * 2018-11-29 2019-02-19 (주)시큐레이어 Lucene 데이터베이스에 이용하기 위한 쿼리를 사용자가 용이하게 생성하도록 하기 위한 사용자 인터페이스를 제공하는 방법 및 장치
RU2704873C1 (ru) * 2018-12-27 2019-10-31 Общество с ограниченной ответственностью "ПЛЮСКОМ" Система и способ управления базами данных (субд)
US11379526B2 (en) 2019-02-08 2022-07-05 Intuit Inc. Disambiguation of massive graph databases
US11429669B2 (en) 2019-08-06 2022-08-30 Twitter, Inc. Managing query subscription renewals in a messaging platform
US11741084B2 (en) * 2019-09-27 2023-08-29 Autodesk, Inc. High frequency data management (HFDM)
US11113267B2 (en) * 2019-09-30 2021-09-07 Microsoft Technology Licensing, Llc Enforcing path consistency in graph database path query evaluation
US11381601B2 (en) 2020-01-15 2022-07-05 International Business Machines Corporation Customizable dynamic GraphQL API management platform
US11416526B2 (en) * 2020-05-22 2022-08-16 Sap Se Editing and presenting structured data documents

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153412A1 (en) 2008-12-15 2010-06-17 Robert Mavrov User Interface and Methods for Building Structural Queries
US20110137902A1 (en) 2009-12-08 2011-06-09 Akhil Wable Search and Retrieval of Objects in a Social Networking System
US20120110560A1 (en) 2010-10-27 2012-05-03 Microsoft Corporation Data type provider for a web semantic store

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5201046A (en) * 1990-06-22 1993-04-06 Xidak, Inc. Relational database management system and method for storing, retrieving and modifying directed graph data structures
US5970496A (en) 1996-09-12 1999-10-19 Microsoft Corporation Method and system for storing information in a computer system memory using hierarchical data node relationships
US6377953B1 (en) 1998-12-30 2002-04-23 Oracle Corporation Database having an integrated transformation engine using pickling and unpickling of data
US6571232B1 (en) 1999-11-01 2003-05-27 Sun Microsystems, Inc. System and method for browsing database schema information
JP3607182B2 (ja) * 2000-08-25 2005-01-05 日本電信電話株式会社 文書情報抽出装置、方法、及びそのプログラムを記録した記録媒体
US6654734B1 (en) * 2000-08-30 2003-11-25 International Business Machines Corporation System and method for query processing and optimization for XML repositories
JP2002091991A (ja) * 2000-09-20 2002-03-29 Intec Web & Genome Informatics Corp 遺伝子ネットワーク研究支援システム及び方法
US8924408B2 (en) * 2001-09-28 2014-12-30 International Business Machines Corporation Automatic generation of database invocation mechanism for external web services
AU2002334721B2 (en) * 2001-09-28 2008-10-23 Oracle International Corporation An index structure to access hierarchical data in a relational database system
EP1324216A1 (en) 2001-12-28 2003-07-02 Deutsche Thomson-Brandt Gmbh Machine for classification of metadata
US9043365B2 (en) 2002-02-26 2015-05-26 International Business Machines Corporation Peer to peer (P2P) federated concept queries
US7734844B2 (en) 2003-08-19 2010-06-08 General Dynamics Advanced Information Systems, Inc. Trusted interface unit (TIU) and method of making and using the same
US7844639B2 (en) * 2003-11-24 2010-11-30 Ebay Inc. Backward compatibility in database schemas
US7818759B2 (en) 2003-11-24 2010-10-19 Ebay Inc. API and business language schema design framework for message exchanges
US7694315B2 (en) 2004-02-13 2010-04-06 Microsoft Corporation Schema-based machine generated programming models
US7496912B2 (en) 2004-02-27 2009-02-24 International Business Machines Corporation Methods and arrangements for ordering changes in computing systems
US7702725B2 (en) * 2004-07-02 2010-04-20 Hewlett-Packard Development Company, L.P. Digital object repositories, models, protocol, apparatus, methods and software and data structures, relating thereto
US20060206479A1 (en) * 2005-03-10 2006-09-14 Efficient Frontier Keyword effectiveness prediction method and apparatus
JP2006260053A (ja) 2005-03-16 2006-09-28 Mitsubishi Electric Corp 特定サブルーチン検索システムおよびこれに用いるプログラム
US9129038B2 (en) * 2005-07-05 2015-09-08 Andrew Begel Discovering and exploiting relationships in software repositories
US7512633B2 (en) 2005-07-13 2009-03-31 International Business Machines Corporation Conversion of hierarchically-structured HL7 specifications to relational databases
JP2007156845A (ja) * 2005-12-05 2007-06-21 Toshiba Corp データ検索装置、データ検索方法、およびプログラム
US7702685B2 (en) * 2006-01-20 2010-04-20 Microsoft Corporation Querying social networks
JP2007257550A (ja) * 2006-03-24 2007-10-04 Nippon Telegr & Teleph Corp <Ntt> センサデータ関連情報送受信装置
US20080016023A1 (en) 2006-07-17 2008-01-17 The Mathworks, Inc. Storing and loading data in an array-based computing environment
US20080028375A1 (en) 2006-07-26 2008-01-31 International Business Machines Corporation Validator-driven architecture of an xml parsing and validating solution
US8769485B2 (en) 2006-12-04 2014-07-01 Tibco Software, Inc. Data parallelism and parallel operations in stream processing
US20090024590A1 (en) 2007-03-15 2009-01-22 Sturge Timothy User contributed knowledge database
AU2008229623A1 (en) 2007-03-16 2008-09-25 Pr Software Pty Limited An internet mediated booking and distribution system
US8005848B2 (en) 2007-06-28 2011-08-23 Microsoft Corporation Streamlined declarative parsing
US7958154B2 (en) 2007-08-29 2011-06-07 International Business Machines Corporation Apparatus, system, and method for command manager support for pluggable data formats
US8972377B2 (en) * 2007-10-25 2015-03-03 International Business Machines Corporation Efficient method of using XML value indexes without exact path information to filter XML documents for more specific XPath queries
US9760612B2 (en) 2008-02-26 2017-09-12 Ab Initio Technology, Llc Graphic representations of data relationships
JP2009217635A (ja) * 2008-03-11 2009-09-24 Canon Inc 検索条件作成方法、検索条件作成装置及びプログラム
US8082220B2 (en) * 2008-04-17 2011-12-20 Elbit Systems Ltd. Computing solutions to problems using dynamic association between abstract graphs
CN101571863B (zh) 2008-04-29 2012-03-28 国际商业机器公司 用于可变模式的xml文档的xml查询方法和系统
US20090313270A1 (en) 2008-06-17 2009-12-17 Microsoft Corporation Semantic frame store
US8032707B2 (en) 2008-09-15 2011-10-04 Microsoft Corporation Managing cache data and metadata
US8321834B2 (en) 2008-09-25 2012-11-27 International Business Machines Corporation Framework for automatically merging customizations to structured code that has been refactored
US20100241644A1 (en) * 2009-03-19 2010-09-23 Microsoft Corporation Graph queries of information in relational database
EP2433200B1 (en) 2009-05-21 2020-02-26 Salesforce.Com, Inc. System, method and computer program product for versioning components of an application
JP5314504B2 (ja) * 2009-06-01 2013-10-16 日本電信電話株式会社 検索装置、検索プログラムおよび検索方法
US20110004692A1 (en) * 2009-07-01 2011-01-06 Tom Occhino Gathering Information about Connections in a Social Networking Service
US9126120B2 (en) * 2009-09-30 2015-09-08 Zynga Inc. Apparatuses, methods and systems for a virtual security camera
US8195691B2 (en) 2009-12-18 2012-06-05 Microsoft Corporation Query-based tree formation
US8341193B2 (en) 2010-01-12 2012-12-25 Microsoft Corporation Data versioning through data transformations
US9015733B2 (en) 2012-08-31 2015-04-21 Facebook, Inc. API version testing based on query schema
JP5526947B2 (ja) * 2010-03-31 2014-06-18 富士通株式会社 検索プログラム、検索装置および検索方法
US8504490B2 (en) * 2010-04-09 2013-08-06 Microsoft Corporation Web-scale entity relationship extraction that extracts pattern(s) based on an extracted tuple
JP5490632B2 (ja) * 2010-06-28 2014-05-14 日立アロカメディカル株式会社 診断レポート検索装置
US8786597B2 (en) * 2010-06-30 2014-07-22 International Business Machines Corporation Management of a history of a meeting
US10146777B2 (en) * 2011-05-25 2018-12-04 Facebook, Inc. Synchronous display of personal and contact-shared contact information
US9177168B2 (en) * 2012-03-19 2015-11-03 Alcatel Lucent Method of modifying access control for web services using query languages
US9609374B2 (en) * 2012-06-27 2017-03-28 Rovi Guides, Inc. System and methods for automatically obtaining cost-efficient access to a media content collection
US20140067781A1 (en) 2012-08-31 2014-03-06 Scott W. Wolchok Graph Query Language API Querying and Parsing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100153412A1 (en) 2008-12-15 2010-06-17 Robert Mavrov User Interface and Methods for Building Structural Queries
US20110137902A1 (en) 2009-12-08 2011-06-09 Akhil Wable Search and Retrieval of Objects in a Social Networking System
US20120110560A1 (en) 2010-10-27 2012-05-03 Microsoft Corporation Data type provider for a web semantic store

Also Published As

Publication number Publication date
US20170212914A1 (en) 2017-07-27
JP6200505B2 (ja) 2017-09-20
IL237334A0 (en) 2015-04-30
JP6498735B2 (ja) 2019-04-10
IL254805A0 (en) 2017-12-31
KR20150052162A (ko) 2015-05-13
CA2973850A1 (en) 2014-03-06
CA2882360C (en) 2017-09-12
AU2017219167B2 (en) 2019-05-09
AU2013308885B2 (en) 2017-07-20
AU2017219167A1 (en) 2017-09-21
CA2882360A1 (en) 2014-03-06
US10671661B2 (en) 2020-06-02
KR20180007004A (ko) 2018-01-19
IL237334A (en) 2017-10-31
JP2015531941A (ja) 2015-11-05
AU2013308885A1 (en) 2015-03-12
WO2014036054A1 (en) 2014-03-06
US20140067850A1 (en) 2014-03-06
JP2018010664A (ja) 2018-01-18
US9646028B2 (en) 2017-05-09
KR101985717B1 (ko) 2019-06-05

Similar Documents

Publication Publication Date Title
KR101818710B1 (ko) 그래프 질의 로직
KR101761229B1 (ko) 질의 스키마에 기반한 api 버전의 테스트
AU2013308884B2 (en) Graph query language API querying and parsing

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant