KR20220100791A - 그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들 - Google Patents

그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들 Download PDF

Info

Publication number
KR20220100791A
KR20220100791A KR1020217040825A KR20217040825A KR20220100791A KR 20220100791 A KR20220100791 A KR 20220100791A KR 1020217040825 A KR1020217040825 A KR 1020217040825A KR 20217040825 A KR20217040825 A KR 20217040825A KR 20220100791 A KR20220100791 A KR 20220100791A
Authority
KR
South Korea
Prior art keywords
path
matrix
expression
node
query
Prior art date
Application number
KR1020217040825A
Other languages
English (en)
Other versions
KR102615661B1 (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 KR20220100791A publication Critical patent/KR20220100791A/ko
Application granted granted Critical
Publication of KR102615661B1 publication Critical patent/KR102615661B1/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/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/9032Query formulation
    • G06F16/90324Query formulation using system suggestions
    • G06F16/90328Query formulation using system suggestions using search space presentation or visualization, e.g. category or range presentation and selection
    • 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/904Browsing; Visualisation therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터베이스 질의를 해결하기 위한 방법, 시스템들, 및 매체들이 제공되고, 방법, 시스템들, 및 매체들은: 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하는 것; 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하는 것; 가장 긴 경로 길이를 가지는 경로를 선택하는 것; 경로에 대한 대수적 표현식을 구축하는 것; 솔루션을 제공하기 위하여 행렬-행렬 승산을 이용하여 대수적 표현식을 푸는 것; 및 솔루션에 기초하여 질의에 대해 응답하는 것을 포함한다.

Description

그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들
관련 출원에 대한 상호-참조
이 출원은 2019년 6월 27일자로 출원된 미국 특허 출원 제16/454,993호, 2019년 5월 13일자로 출원된 미국 특허 가출원 제62/847,211호, 및 2019년 5월 29일자로 출원된 미국 특허 가출원 제62/854,316호의 이익을 주장하고, 이 출원들의 각각은 이로써 그 전체적으로 본 명세서에서 참조로 편입된다.
개시된 발명 요지는 그래프 데이터베이스 질의(graph database query)들을 해결하기 위한 방법들, 시스템들, 및 매체들에 관한 것이다.
그래프들은 상이한 객체(object)들 또는 엔티티(entity)들 사이의 관계들을 모델링할 수 있고 표시할 수 있는 수학적 구조들이다. 예를 들어, 그래프는 에지(edge)들에 의해 서로에 접속되는 상이한 노드들을 포함할 수 있다. 각각의 노드는 객체 또는 엔티티를 표현할 수 있는 반면, 각각의 에지는 그것이 접속하는 객체들 및/또는 엔티티들 사이의 관계를 표현할 수 있다. 에지는 비지향될 수 있거나(예컨대, 에지에 의해 표현된 방향성 관계가 없음), 에지는 방향성일 수 있고(예컨대, 2 개의 노드들 사이의 접속과 연관된 방향이 있음), 그러므로, 출발지 노드 및 목적지 노드를 가질 수 있다.
그래프들은 그래프 데이터베이스에서 저장될 수 있다. 특성 그래프 데이터베이스(property graph database)는 스키마리스 접속된 데이터(schema-less connected data)의 저장 및 취출(retrieval)을 위하여 최적화될 수 있다. 데이터 포인트(data point)는 그래프 내의 노드로서 표현될 수 있다. 노드는 노드를 설명하는 임의적인 속성-세트(attribute-set)에 추가적으로, 다수의 라벨들과 연관될 수 있다. 예를 들어, 유형 "개인"의 노드는 속성들 {"Surname", "Given name", 및 "Age"}을 가질 수 있다.
에지들은 그 유형을 특정하는 "관계-유형"과 연관될 수 있다. 예를 들어, 에지는 출발지 노드에 의해 식별된 개인이 목적지 노드에 의해 식별된 국가를 방문하였다는 것을 표시하는 관계-유형 "방문(Visit)"을 가질 수 있다. 추가적으로, 에지는 속성-세트를 가질 수 있다. 예를 들어, 관계-유형 "방문(Visit)"을 갖는 에지는 속성들 {"Purpose", "Length"}을 가질 수 있다.
에지들은 그래프 데이터베이스에서 행렬로서 저장될 수 있다. 예를 들어, 방향성 에지는 노드 i를 노드 j에 접속할 수 있다. 이러한 경우에, 노드 i는 출발지 노드인 반면, 노드 j는 목적지 노드이다. 이 접속은 포지션 [i, j]에서의 그래프 행렬을 1로 설정함으로써 주목될 수 있다. 행렬 행(row)들은 출발지 노드들을 표현하기 위하여 이용될 수 있는 반면, 행렬 열(column)들은 목적지 노드들을 표현하거나, 또는 그 반대이다.
이하는 3 개의 노드들(노드 0, 노드 1, 및 노드 2)을 갖는 그래프를 표현하는 행렬의 예이다:
Figure pct00001
이 예에서, 노드 0은 노드 2에 접속되고, 노드 1은 노드 2에 접속되고, 노드 2는 노드 1에 접속된다. 이 행렬은 인접 행렬(adjacency matrix)로서 지칭될 수 있다. 즉, 그것은 접속 유형에 관계 없이, 그래프 내의 모든 접속들을 표현하는 2진 행렬이다.
일부 그래프 행렬들은 라벨 행렬(label matrix)들일 수 있다. 라벨 행렬은 주어진 라벨을 가지는 노드들이 식별되는, 주어진 라벨에 대한 대각 2진 행렬일 수 있다. 예를 들어, 라벨 "L"을 표현하는 라벨 행렬에서, "L"로서 라벨이 붙여진 노드 i는 포지션 [i, i]에서 1에 의해 표현될 수 있다. 이하는 라벨 행렬의 예이다:
Figure pct00002
도시된 바와 같이, 이 라벨 행렬은 노드 0 및 노드 2가 라벨 "L"을 가진다는 것을 표시한다.
일부 그래프 행렬들은 관련성 행렬(relation matrix)일 수 있다. 관련성 행렬은 주어진 관련성-유형을 가지는 에지들이 식별되는, 주어진 관련성-유형에 대한 2진 행렬일 수 있다. 예를 들어, 관련성-유형 "R"을 표현하는 관련성 행렬에서, 노드 i를 노드 j에 접속하는 관련성-유형 "R"의 에지는 포지션 [i, j]에서 1에 의해 표현될 수 있다. 이하는 관련성 행렬의 예이다:
Figure pct00003
도시된 바와 같이, 이 관련성 행렬은 노드 0이 관련성-유형 R의 에지를 통해 노드 1에 접속된다는 것을 표시한다.
그래프에 관한 데이터는 질의 언어를 이용하여 그래프 데이터베이스로부터 취출될 수 있다. 예를 들어, OpenCypher와 같은 질의 언어는 그래프 데이터베이스로부터 데이터를 취출하기 위하여 이용될 수 있다. 더 상세하게, 질의는 다음의 포맷을 가질 수 있다:
MATCH (a)-[:X]->(b)-[]->(c)<-[:Z]-(d) RETURN c
이 포맷에서: "( )"는 노드를 표현하고; "[ ]"는 에지를 표현한다.
노드들 및 에지들의 둘 모두는 가명(alias) 및 라벨을 배정받을 수 있다. 노드는 다음의 포맷을 가질 수 있다: (Alias: Label). 에지는 다음의 포맷을 가질 수 있다: [Alias: Label]. 경로는 에지들을 갖는 노드들을 체이닝(chaining) 함으로써 형성될 수 있다. 예를 들어, 유형 R의 에지를 이용하여 노드 B에 접속되는 노드 A는 다음으로서 표현될 수 있다: (A)-[:R]->(B).
접속은 좌측에서 우측 화살표 또는 우측에서 좌측 화살표의 어느 하나를 이용하여 특정될 수 있다. 화살표는 에지 방향이 중요하지 않을 때에 생략될 수 있다. 다음은 예들이다:
(A)-[:R]->(B) - A는 B에 접속된다.
(A)<-[:R]-(B) - B는 A에 접속된다.
(A)-[:R]-(B) - A 및 B는 접속된다.
더 상세한 예로서, 누군가가 그래프에서의 매 개인에 대하여, 그 친구들이 어느 국가들을 방문하였는지를 발견하기를 원하였을 경우에, 다음과 같은 질의가 이용될 수 있다:
MATCH (p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)
RETURN p, c
그러나, 이러한 질의는 시간-민감성 및 자원-집약적일 수 있다. 예를 들어, 이러한 질의는 그래프의 많은 상이한 에지들을 통한 선형 횡단을 요구할 수 있고, 이것은 질의에 대한 응답을 반환하는 것을 시간-집약적으로 할 수 있다.
따라서, 그래프 데이터베이스 질의들을 해결하기 위한 새로운 방법들, 시스템들, 및 매체들을 제공하는 것이 바람직하다.
일부 실시예들에 따르면, 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들이 제공된다. 일부 실시예들에서, 데이터베이스 질의를 해결하기 위한 방법들이 제공되고, 방법들은: 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하는 단계; 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하는 단계; 가장 긴 경로 길이를 가지는 경로를 선택하는 단계; 경로에 대한 대수적 표현식(algebraic expression)을 구축하는 단계; 솔루션(solution)을 제공하기 위하여 행렬-행렬 승산을 이용하여 대수적 표현식을 푸는 단계; 및 솔루션에 기초하여 질의에 대해 응답하는 단계를 포함한다.
일부 실시예들에서, 데이터베이스 질의를 해결하기 위한 시스템들이 제공되고, 시스템들은: 메모리; 메모리에 결합되고, 집합적으로: 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하고; 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하고; 가장 긴 경로 길이를 가지는 경로를 선택하고; 경로에 대한 대수적 표현식을 구축하고; 솔루션을 제공하기 위하여 행렬-행렬 승산을 이용하여 대수적 표현식을 풀고; 그리고 솔루션에 기초하여 질의에 대해 응답하도록 구성된 적어도 하나의 하드웨어 프로세서를 포함한다.
일부 실시예들에서, 프로세서에 의해 실행될 때, 프로세서로 하여금, 데이터베이스 질의를 해결하기 위한 방법을 수행하게 하는 컴퓨터-실행가능 명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체들이 제공되고, 방법은: 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하는 단계; 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하는 단계; 가장 긴 경로 길이를 가지는 경로를 선택하는 단계; 경로에 대한 대수적 표현식을 구축하는 단계; 솔루션을 제공하기 위하여 행렬-행렬 승산을 이용하여 대수적 표현식을 푸는 단계; 및 솔루션에 기초하여 질의에 대해 응답하는 단계를 포함한다.
개시된 발명 요지의 다양한 목적들, 특징들, 및 장점들은 다음의 도면들과 관련하여 고려될 때, 개시된 발명 요지의 다음의 상세한 설명을 참조하여 더 완전히 인식될 수 있고, 유사한 참조 번호들은 유사한 엘리먼트들을 식별한다.
도 1은 개시된 발명 요지의 일부 실시예들에 따라, 그래프 데이터베이스 질의들을 해결하기 위한 프로세스의 예를 도시한다.
도 2는 개시된 발명 요지의 일부 실시예들에 따라, 그래프 데이터베이스 질의들을 해결하기 위한 프로세스의 또 다른 예를 도시한다.
도 3은 개시된 발명 요지의 일부 실시예들에 따라, 질의 그래프들로부터 대수적 표현식들을 생성하기 위한 프로세스의 예를 도시한다.
도 4는 개시된 발명 요지의 일부 실시예들에 따라, 그래프의 경로에 대한 대수적 표현식을 생성하기 위한 프로세스의 예를 도시한다.
도 5는 개시된 발명 요지의 일부 실시예들에 따라, 대수적 표현식들을 하위표현식들로 분해하기 위한 프로세스의 예를 도시한다.
도 6은 개시된 발명 요지의 일부 실시예들에 따른 그래프의 예시의 예이다.
도 7은 개시된 발명 요지의 일부 실시예들에 따라, 그래프 데이터베이스 질의들을 해결하기 위하여 본 명세서에서 설명된 메커니즘들의 구현을 위하여 적당한 예시적인 시스템의 개략도를 도시한다.
도 8은 개시된 발명 요지의 일부 실시예들에 따라, 도 7의 서버 및/또는 사용자 디바이스에서 이용될 수 있는 하드웨어의 상세한 예를 도시한다.
다양한 실시예들에 따르면, 그래프 데이터베이스 질의들을 해결하는 (방법들, 시스템들, 및 매체들을 포함할 수 있는) 메커니즘들이 제공된다.
일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 그래프 데이터베이스에 관련되는 질의에 대응하는 결과들을 신속하게 식별하고 이러한 결과들을 반환하기 위하여 이용될 수 있다. 예를 들어, 일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 노드들 사이에서 임의의 적당한 수의 에지들을 가지는 임의의 적당한 수의 노드들 사이의 특정한 그래프 내의 횡단을 표시하는 질의를 수신할 수 있다. 일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 수신된 질의를 일련의 행렬-행렬 승산들로 변환할 수 있고, 여기서, 각각의 행렬은 특정한 유형의 관계에 대응하는 에지가 2 개의 노드들 사이에서 존재하는지 여부와 같은, 2 개의 노드들 사이의 관계들을 식별한다.
예를 들어, 그래프가 상이한 사람이 상이한 국가들을 방문하였는지 여부를 표시하는 사례에서, 본 명세서에서 설명된 메커니즘들은 행렬 R로 노드들 및 에지들을 표현할 수 있고, 여기서, 행렬 R의 행들은 상이한 사람을 표시하고, 행렬 R의 열들은 국가들을 표시하고, 행렬 R의 각각의 엘리먼트(즉, 엘리먼트 Ri,j)는 개인 i가 국가 j를 방문하였는지 여부를 표시한다. 일부 실시예들에서, 다양한 노드들 및 에지들을 걸친 다수의 횡단들을 표현하는 질의는 그 다음으로, 도 1과 관련하여 이하에서 더 상세하게 설명된 바와 같이, M = R1*R2*...Rj과 같은 행렬-행렬 승산에 의해 표현될 수 있다.
일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 행렬-행렬 승산들에 기초하여 수신된 질의에 대응하는 결과들의 세트를 식별할 수 있다.
더 상세한 예로서, 누군가가 그래프에서의 매 개인에 대하여, 그 친구들이 어느 국가들을 방문하였는지를 발견하기를 원하였을 경우에, 다음과 같은 질의가 이용될 수 있다:
MATCH (p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)
RETURN p, c
일부 실시예들에서, 이 질의에 답변하기 위하여, 다음의 표현식이 구성될 수 있고 평가될 수 있다:
P*F*P*V*C,
여기서, P는 그래프에서의 모든 개인 노드들을 표기하는 라벨 행렬이고, F는 유형 친구의 각각의 에지를 설명하는 관련성 행렬이고, V는 유형 방문의 각각의 에지를 설명하는 관련성 행렬이고, C는 그래프에서의 모든 국가 노드들을 표기하는 라벨 행렬이다.
일부 실시예들에서, 데이터베이스에서의 모든 행렬들은 동일한 차원들이도록 요구될 수 있다(예컨대, N x N 정방 행렬(square matrix)들).
일부 실시예들에서, 각각의 행렬 행 및 각각의 행렬 열은 연관된 "도메인(domain)"을 가질 수 있다. 행렬 행 도메인은 행렬 행들이 무엇을 표현하는지를 표시할 수 있고, 행렬 열 도메인은 행렬 열들이 무엇을 표현하는지를 표시할 수 있다(예컨대, V의 행들은 사람을 표현하는 반면, V의 열들은 국가들을 표현한다).
일부 실시예들에서, 승산을 수행할 때, 도메인들이 의미가 통하고 정렬되는 것을 확실히 하는 것이 중요하고: 좌측-측부 피연산자(operand)의 열 도메인은 우측-측부 피연산자의 행 도메인과 일치해야 한다. 예를 들어, 다음의 수학식을 고려한다:
Figure pct00004
C의 행 도메인은 A의 행 도메인과 일치하고, C의 열 도메인은 B의 열 도메인과 일치한다.
일부 실시예들에서, 가장 좌측 피연산자 행 도메인은 "고착되어" 있고, 매 중간 승산에 대하여 변경되지 않을 것이다. 오히려, 그것은 최종적인 결과까지 계속 이어질 것이다. 다른 한편으로, 일부 실시예들에서, 열 도메인은 우측 피연산자의 열 도메인에 대한 매 중간 승산에 대하여 설정된다.
친구 관련성이 개인 노드들을 오직 접속할 것이라는 것을 가정하는 것이 합리적이지만, 이것은 그러하지 않을 수 있다. 그러므로, 위의 표현식 "P*F*P*V*C"에서, F는 양쪽 측부들로부터 P에 의해 승산된다(즉, "P*F*P"). 좌측의 행렬 M을 대각 행렬 D에 의해 승산하는 것은 간단하게 M의 행들을 필터링하여, D[i, i]가 1인 각각의 행 i를 유지하고, D[j, j]가 0인 각각의 행 j를 클리어(clear)한다. 동일한 필터링은 대각 행렬에 의해 우측의 M과 승산할 때에 M의 열들에 적용된다. 따라서, F를 양쪽 측부들로부터 P에 의해 승산하는 것(즉, "P*F*P")은 P에서 열거된 사람을 오직 도시하기 위하여 P*F*P의 결과를 필터링한다. 따라서, 예를 들어, P가 P'에서 식별된 사람의 더 큰 그룹(예컨대, 도시에서의 모든 사람)의 서브세트(예컨대, 도시에서의 회사의 피고용인들)일 경우에, P*F*P는 친구들이 동료 피고용인들을 가지는 사람을 오직 도시하는 반면, P*F*P'는 피고용인들의 도시에서의 모든 친구들을 도시할 것이다.
행렬-행렬 승산이 연상적(associative)이므로, 표현식 "P*F*P*V*C"은 다음과 같이 "(P*F*P)*(V*C)"로서 분할될 수 있다:
Figure pct00005
RESULT 행렬에서 상부 행 (0)을 주시하면, ID 0(행 도메인)을 갖는 개인은 ID들 0, 1, 및 2를 갖는 국가들(열 도메인)을 방문한 일부 친구들(행렬은 이들이 누군인지를 표시하지 않음)을 가진다는 것을 알 수 있다. 이 예는 행렬-행렬 승산이 정보를 상실한다는 것을 예시한다.
위의 예에서, 결과-세트가 트리플렛(triplet)들로 이루어지도록, 질의가 또한 친구들 리스트를 반환할 것을 데이터베이스에 요청한 것으로 추정한다: (Person, Friend, Country). 다음의 질의가 이용될 수 있다:
MATCH (p:Person)-[:friend]->(f:Person)-[:visit]->(c:Country)
RETURN p, f, c
이 질의에 대해 응답하기 위하여, 원래의 표현식은 2 개의 표현식들로 분해될 수 있고 함께 결부(tie)될 수 있다:
P*F*P
V*C
2 개의 표현식들을 함께 결부시키기 위하여, 중간 대각 행렬이 일부 실시예들에서 구성될 수 있다. 대각 행렬은 결과 행렬(result matrix)의 열들에서의 노드들이 도달가능한지를 표시할 수 있다. 예를 들어, 바로 위의 질의에 대하여, 대각 행렬 f가 구성될 수 있다. 이 대각 행렬에서, 개인 i가 P*F*P에서 도달가능한 것으로서 표시될 경우에, f[i, i]는 1과 동일하다. 따라서, 예를 들어, P*F*P를 표현하는 다음의 행렬을 고려한다:
Figure pct00006
개인은 그 개인에 대응하는 열이 그 안의 어디에서든지 1을 가질 경우에 도달가능한 것으로서 이 행렬에서 표시될 수 있다. 즉, f의 대각선은 다음과 같이 P*F*P의 대응하는 열에서의 값들의 논리적 OR이다:
Figure pct00007
f는 그 다음으로, 제2 표현식에 대한 가장 좌측 피연산자로서 부착될 수 있어서, 다음과 같이 필터로서 작동할 수 있다:
f*V*C
이 표현식을 평가할 시에, C에서의 어느 국가들이 f에서 식별된 친구들에 의해 방문되었는지가 결정될 수 있다.
일부 실시예들에서, 중간 행렬들은 이들이 최종적인 결과-세트들(예컨대, RETURN 조항들)에서, 필터 기준들(예컨대, WHERE 조항들)에서, 그래프 수정들(예컨대, CREATE, SET, UPDATE 조항들)에서, 및/또는 데이터베이스의 임의의 다른 적당한 특성, 특징, 질의 등에서 언급되기 때문에 발생할 수 있다.
일부 실시예들에서, 메커니즘들은 질의 내에 포함된 결과들 조항이 최종적인 행렬 승산 곱(matrix multiplication product) M에서 표현되는 노드들을 표시하는지 여부, 또는 대안적으로, 결과들 조항 내에 포함된 노드들이 R1*R2과 같은 중간 행렬 곱들에서 표시되는지를 결정할 수 있다. 일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 질의에서 표시된 기준들을 만족시키는 결과들 조항에서 표시된 노드들을 식별하기 위하여 일련의 행렬 승산들을 통해 뒤로 횡단할 수 있다.
일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 그래프 데이터베이스들의 표현 및 분석을 위하여 유용한 특정한 데이터 구조를 생성하기 위하여 이용될 수 있다. 예를 들어, 일부 실시예들에서, 본 명세서에서 설명된 데이터 구조(들)를 이용하여 그래프 데이터베이스를 표현함으로써, 본 명세서에서 설명된 메커니즘들은 그래프 내의 다수의(예컨대, 10 개, 20 개, 및/또는 임의의 다른 적당한 수의) 횡단들을 수반하는 복잡한 질의들을 포함하는 질의들이 신속하게 해결되는 것을 허용할 수 있다. 예를 들어, 일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 도 1의 106과 관련하여 이하에서 더 상세하게 설명된 바와 같이, 데이터 구조 분석의 개별적인 컴포넌트들을 병렬로 프로세싱함으로써 그래프 데이터베이스 질의에 대한 결과를 반환하는 것과 연관된 속력을 증가시킬 수 있다. 일부 실시예들에서, 본 명세서에서 설명된 메커니즘들은 그러므로, 그래프 데이터베이스가 더 신속하게 그리고 더 효율적으로 동작하는 것을 허용할 수 있음으로써, 그래프 데이터베이스에 관련된 질의들을 저장하고 프로세싱하는 디바이스에 의한 전력 소비를 감소시킬 수 있다.
도 1로 돌아가면, 개시된 발명 요지의 일부 실시예들에 따라 이용될 수 있는 그래프 데이터베이스 질의들을 해결하기 위한 프로세스의 예(100)가 도시된다. 일부 실시예들에서, 프로세스(100)의 블록들은 임의의 적당한 디바이스 상에서 수행될 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, 그래프 데이터베이스는 데스크톱 컴퓨터 또는 랩톱 컴퓨터와 같은 사용자 디바이스 상에서 저장될 수 있고, 프로세스(100)의 블록들은 사용자 디바이스에 의해 실행될 수 있다. 또 다른 예로서, 일부 실시예들에서, 그래프 데이터베이스는 서버 상에서 저장될 수 있고, 프로세스(100)의 블록들은 서버에 의해 실행될 수 있다.
프로세스(100)는 그래프 데이터베이스에 관련된 질의를 수신함으로써 102에서 시작할 수 있다. 임의의 적당한 질의는 임의의 적당한 방식으로 수신될 수 있고, 임의의 적당한 내용을 가질 수 있다. 상이한 사람 사이의 관계들을 표시하는 그래프에 관련된 질의 예는 다음일 수 있다: "MATCH (p: Person)-[:friend]->(f:Person) RETURN p". 이 예에서, 질의는 "Person"으로서 라벨이 붙여진 노드들이 반환되어야 한다는 것과, 추가적으로, 각각의 반환된 Person 노드가 "Friend" 관계를 또 다른 개인에게 표시하는 에지와 접속되어야 한다는 것을 표시할 수 있다. 일부 실시예들에서, 수신된 질의는 임의의 적당한 수의 반환된 노드들을 요청할 수 있다는 것에 주목한다. 추가적으로, 일부 실시예들에서, 수신된 질의는 노드들 사이의 임의의 적당한 수의 (예컨대, 1 개, 2 개, 5 개, 10 개, 및/또는 임의의 다른 적당한 수의) 접속들 또는 에지들을 특정할 수 있다. 예를 들어, 위의 예에서 설명된 질의는 하나의 Friend 에지에 의해 접속된 2 개의 Person 노드들 사이의 관계를 설명한다. 또 다른 예로서, 질의는 임의의 적당한 에지들(예컨대, 교우관계, 동료들, 급우들, 및/또는 임의의 다른 적당한 에지들 또는 접속들의 유형들)에 의해 접속된 임의의 적당한 수의 개인 노드들(예컨대, 2 개, 3 개, 5 개, 및/또는 임의의 다른 적당한 수) 사이의 관계를 설명할 수 있다. 위의 예보다 더 많은 노드들 및 더 많은 에지들을 포함하는 질의들의 예들은 이하에서 주어진다.
일부 실시예들에서, 위에서 도시된 예시적인 질의 내에 포함된 바와 같은 조항 "RETURN p"은 "결과 조항" 및/또는 "반환 조항"으로서 지칭될 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, "RETURN p"는 특정한 데이터베이스 질의 언어들로 된 "반환 조항"으로서 지칭될 수 있다.
104에서, 프로세스(100)는 질의를, 평가될 수 있는 표현식으로 변환할 수 있다. 일부 실시예들에서, 질의는 그래프의 노드들 및 에지들을 각각 표현하는 임의의 적당한 수의 행렬들을 이용하여 질의를 표현하는 표현식으로 변환될 수 있다. 일부 실시예들에서, 프로세스(100)는 질의를, 임의의 적당한 기법 또는 기법들의 조합을 이용하여 그래프의 노드들 및 에지들을 표현하는 행렬들을 이용하는 표현식으로 변환할 수 있다. 예를 들어, 일부 실시예들에서, 질의는 (node Ni)-[edge Rj]->(node Nk) 트리플렛을 표현하기 위하여 행렬 Rj을 이용함으로써 행렬 표현식으로 변환될 수 있다. 일부 이러한 실시예들에서, Rj의 각각의 행은 노드 Ni를 표현할 수 있고, Rj의 각각의 열은 노드 Nk를 표현할 수 있다. 102와 관련하여 위에서 주어진 예시적인 질의를 계속하면, 질의는 Person p에 대응하는 행들 및 Person f에 대응하는 열들을 가지는 행렬 R로 변환될 수 있다.
일부 실시예들에서, 2 개 이상의 에지들의 횡단의 표현을 포함하는 질의는 행렬 승산으로서 표현될 수 있고, 여기서, 표현식에서의 각각의 행렬은 위에서 설명된 바와 같이, 트리플렛에 대응한다. 예를 들어, 질의가 "(N0)-[R0]->(N1)-[R1]->(N2)...-[Ri]->(Ni)"와 같은, 그래프에서의 다수의 노드들에 걸쳐 횡단을 포함하는 예에서, 횡단은 행렬 승산: R0*R1*...*Ri으로 변환될 수 있고, 여기서, 각각의 R 행렬은 대응하는 에지들에 의해 관련된 노드들을 표현한다. 더 상세한 예로서, 행렬 R0은 노드들 N0에 대응하는 행들 및 노드들 N1에 대응하는 열들을 가질 수 있고, 여기서, 노드들 N0을 노드들 N1에 접속하는 에지들은 임의의 적당한 유형의 접속에 관련될 수 있다. 노드 N0이 관계 에지 R0를 통해 노드 N1에 관련되는 위에서 도시된 예시적인 질의에서, 행렬 R0은 관계 R0에 의해 표시된 특정한 유형의 관계(예컨대, 2 명의 사람 사이의 교우관계, 및/또는 임의의 다른 적당한 유형의 관계)를 통해 노드들 N1에 접속되는 노드들 N0을 표시할 수 있다는 것에 주목한다. 대안적으로, 질의가 "(N0)-[]->(N1)"인, 즉, 특정한 관계가 질의에서 특정되지 않는 사례에서, 노드들 N0 및 N1 사이의 관계를 표현하는 행렬은 관계 불가지적(relationship agnostic)일 수 있다.
추가적으로, 일반적으로, 본 명세서에서 설명된 바와 같이, 노드들 사이의 관계들 및/또는 접속들을 표현하는 행렬은 행렬의 행들에 의해 출발지 노드들, 그리고 행렬의 열들에 의해 싱크 노드들 또는 목적지 노드들을 표시할 수 있다는 것에 주목한다. 일부 실시예들에서, 이 유형의 행렬 표기(matrix notation)는 행 순서로서 지칭될 수 있다. 그러나, 일부 실시예들에서, 노드들 사이의 관계들 및/또는 접속들을 표현하는 행렬은 행렬의 열들에 의해 출발지 노드들, 그리고 행렬의 행들에 의해 싱크 노드들 또는 목적지 노드들을 표시할 수 있고, 이것은 열 순서로서 지칭될 수 있다. 일부 실시예들에서, 본 명세서에서 설명된 기법들은 행렬이 행 순서 또는 열 순서를 이용하여 구조화되는지 여부에 관계 없이 구현될 수 있다는 것에 주목한다.
106에서, 프로세스(100)는 변환된 질의로부터 기인하는 표현식을 평가할 수 있다. 일부 실시예들에서, 프로세스(100)는 임의의 적당한 기법(들)을 이용하여 표현식을 평가할 수 있다. 예를 들어, 표현식이 위에서 설명된 바와 같이, R0*R1*...*Ri와 같은 행렬들의 승산을 포함하는 사례에서, 프로세스(100)는 R0*R1*...*Ri의 곱인 결과 행렬 M을 계산할 수 있다. 일부 실시예들에서, 행렬 승산은 임의의 적당한 방식으로 수행될 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, 행렬 승산은 연상적이므로, 승산의 상이한 컴포넌트들은 개별적으로 연산될 수 있다. 더 상세한 예로서, 행렬 승산 R0*R1*...*Ri이 주어지면, R0*R1은 Ri-1*Ri로부터 별도로 계산될 수 있다. 추가적으로 또는 대안적으로, 일부 실시예들에서, 개별적인 컴포넌트들은 병렬로 계산될 수 있다. 일부 실시예들에서, 개별적인 행렬 승산들은 계산들의 속력을 증가시키기 위하여, 그래픽 프로세싱 유닛(Graphics Processing Unit)(GPU)과 같은 임의의 적당한 유형의 프로세서, 및/또는 임의의 다른 적당한 유형의 프로세서를 이용하여 연산될 수 있다.
M = R0*R1*...*Ri과 같은 행렬 승산은 임의의 적당한 유형의 정보를 표현할 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, M의 행들은 노드들 N0을 표현할 수 있고, M의 열들은 노드들 Ni을 표현할 수 있고, 여기서, Ni 엔티티들은 그래프 내의 i 도약(hop)들 또는 횡단들을 이용하여 그래프를 횡단함으로써 N0 엔티티들로부터 도달될 수 있는 노드들일 수 있다. 일부 실시예들에서, 각각의 중간 행렬 승산(예컨대, R0*R1, Ri -1*Ri, 및/또는 임의의 다른 적당한 중간 승산)에 대하여, 결과적인 곱은 최초 컴포넌트의 행 도메인을 유지할 수 있고, 매 승산 Rx*Rx+1에 대하여, 열들 도메인은 Rx +1에 의해 표현된 열 도메인으로 변경될 수 있다. 즉, 중간 승산은 그래프의 X 도약들 또는 횡단들을 수행함으로써 N0로부터 도달될 수 있는 유형 Nx +1의 노드들을 정의할 수 있다.
추가적으로, 일부 실시예들에서, 행렬-행렬 승산 내의 매 중간 승산은 (예컨대, 행렬 차원들, 및/또는 임의의 다른 적당한 규칙들)에 관련된) 행렬 승산 규칙들을 만족시켜야 한다는 것에 주목한다. 예를 들어, 일부 실시예들에서, 승산 Rx*Rx+1에 대하여, 행렬 Rx에서의 열들의 수는 행렬 Rx +1에서의 행들의 수와 동일해야 한다. 일부 실시예들에서, 프로세스(100)는 행렬 승산들이 행렬 승산 규칙들을 만족시킨다는 것을 보장하기 위하여 특정한 그래프를 표현하는 각각의 행렬의 차원을 저장할 수 있다.
106에서, 프로세스(100)는 행렬-행렬 승산 표현식의 평가로부터의 임의의 적당한 행렬들을 저장할 수 있다. 예를 들어, 행렬 승산 M = R0*R1*...*Ri인 사례에서, 프로세스(100)는 최종적인 승산 결과 M 뿐만 아니라, R0*R1, Ri -1*Ri, 및/또는 임의의 다른 적당한 중간 행렬 곱들과 같은 임의의 적당한 중간 행렬들을 저장할 수 있다. 일부 실시예들에서, 프로세스(100)는 임의의 적당한 정보에 기초하여, 저장되어야 할 중간 행렬 곱들을 식별할 수 있다. 예를 들어, 일부 실시예들에서, 프로세스(100)는 108과 관련하여 이하에서 더 상세하게 설명된 바와 같이, 102에서 수신된 질의에서 요청된 특정한 결과에 기초하여, 저장되어야 할 중간 행렬 곱들을 식별할 수 있다.
108에서, 프로세스(100)는 106과 관련하여 위에서 설명된 바와 같이, 106에서 수행된 행렬 승산 및/또는 임의의 중간 행렬 승산 곱들에 기초하여, 102에서 수신된 질의에 대응하는 결과를 결정할 수 있다. 일부 실시예들에서, 프로세스(100)는 102에서 수신된 질의 내에서 특정된 반환 조항에 기초하여, 횡단된 경로를 따르는, 고려되어야 하는 노드들을 식별할 수 있다. 예를 들어, 102와 관련하여 위에서 설명된 질의 예(예컨대, "MATCH (p: Person)-[:friend]->(f:Person) RETURN p")를 계속하면, 프로세스(100)는 노드 p를, 질의에 응답하여 반환되어야 하는 노드로서 식별할 수 있다. 이 예에서, R1의 행들이 Person p 노드들에 대응하고 R1의 열들이 Person f 노드들에 대응하는 M = R1의 대응하는 행렬에 대하여, 행렬 M은 질의에 의해 특정된 결과를 반환하도록 요구된 정보의 전부를 포함한다는 것에 주목한다. 즉, 행렬 M은 행렬 M의 행들에 의해 원점 노드들(예컨대, Person p), 그리고 행렬 M의 열들에 의해 싱크 노드들(예컨대, Person f)을 특정한다. 그러므로, 이 사례에서, 반환 결과는 행렬 M으로부터 직접적으로 프로세스(100)에 의해 획득될 수 있다.
추가적으로 또는 대안적으로, 다수의 횡단들을 표시하고 및/또는 중간 횡단들로부터 도달되는 노드들을 표시하는 반환 조항을 갖는 질의의 예에서, 프로세스(100)는 중간 행렬 곱들을 이용하여 102에서 수신된 질의에 대응하는 결과들을 결정할 수 있다. 예를 들어, "MATCH (p: Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country) RETURN c, v"와 같은 예시적인 질의로, 결과 조항 "RETURN c, v"은 싱크 노드 v가 반환되어야 하고, 추가적으로, 중간 노드 c가 반환되어야 한다는 것을 특정한다. 즉, 프로세스(100)는 이하에서 설명된 바와 같이, 행렬 승산 R = R0*R1*...*Ri으로부터 결과 v를 식별할 수 있고, 중간 행렬 곱으로부터 결과 c를 식별할 수 있다.
일부 실시예들에서, 프로세스(100)는 위의 질의를 행렬 승산 M = F*V*P으로서 표현할 수 있다. 일부 실시예들에서, F는 교우관계 에지들을 표현하는 행렬일 수 있고, 여기서, 행렬 F의 행들 및 열들의 둘 모두는 개인 노드들(예컨대, 교우관계 에지에 의해 접속되는 개인들)에 대응한다. 일부 실시예들에서, V는 방문 에지들을 표현하는 행렬일 수 있고, 여기서, 행렬 V의 행들은 개인 노드들을 표현하고, 행렬 V의 열들은 방문된 국가들(예컨대, 특정한 국가들을 방문한 개인들)을 표현한다. 일부 실시예들에서, 행렬 P는 국가들 사이의 평화 관계들을 표현하는 행렬일 수 있고, 여기서, 행렬 P의 행들 및 열들의 둘 모두는 국가 노드들(예컨대, 서로 평화적인 국가들)에 대응한다. 그러므로, 행렬 M은 원점 개인 노드들(예컨대, 행렬 M의 행들)을 싱크 국가 노드들(예컨대, 행렬 M의 열들)에 접속하는 행렬을 표현할 수 있다. 그러나, 질의 결과가 방문한 국가들이 반환되어야 한다는 것을 표시하므로, 그리고 행렬 M이 방문한 국가들을 직접적으로 표시하지 않으므로, 행렬 M은 질의에서 표시되는 요청된 결과들의 전부를 식별하기 위하여 직접적으로 이용될 수 없다.
일부 실시예들에서, 프로세스(100)는 결과 조항에 의해 특정된 노드에 대응하는 중간 행렬(예컨대, 표현식 M = R1*R2*...*Ri로부터의 R 행렬)을 식별함으로써, 원점 노드들도 아니고 질의에 대응하는 싱크 노드들(즉, 행렬 M에서 표현되지 않는 노드)도 아닌 결과 조항에서 특정된 노드들을 식별할 수 있다. 일부 실시예들에서, 프로세스(100)는 그 다음으로, 결과 조항에서 특정된 노드들을 식별하기 위하여 이용될 수 있는 중간 행렬 곱을 연산할 수 있다. 예를 들어, 위에서 제시된 예시적인 질의 "MATCH (p: Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country) RETURN c, v"에서, 프로세스(100)는 F*V와 동일할 수 있는 중간 행렬 X를 구성할 수 있다. 이 경우에, 중간 행렬 X는 친구들에 의해 방문된 국가들을 표현하는 열들을 가질 수 있다. 프로세스(100)는 그 다음으로, 행렬 X의 열 k가 적어도 1을 포함할 경우에, T[k, k] = 1이 되도록, 전이 행렬(transitional matrix) T를 구성할 수 있다. 즉, 행렬 T는 대각 행렬일 수 있다. 일부 실시예들에서, 프로세스(100)는 그 다음으로, 전이 행렬 T를 행렬 P에 의해 승산할 수 있다. 일부 실시예들에서, 행렬 T*P의 행들은 방문된 국가들을 표시할 수 있고, 열들 T*P은 친구들에 의해 방문된 것보다 서로 평화적인 국가들을 표시할 수 있다. 일부 실시예들에서, 행렬 T*P은 그 다음으로, 질의의 결과 조항에서 표시된 노드들 c 및 v를 식별하기 위하여 이용될 수 있다.
일부 실시예들에서, 질의가 "MATCH (p: Person)-[:friend]->(f:Person)-[:visit]->(c:Country)-[:peace]-(v:Country) RETURN p, c, v"인 사례에서, 프로세스(100)는 노드들 p, c, 및 v를 식별하기 위하여 후방추적(backtracking) 또는 역방향 횡단을 이용할 수 있다. 예를 들어, 이 예를 계속하면, 프로세스(100)는 제1 중간 행렬 p->c = [0, 0, 1; 1, 0, 0; 0, 0, 0] 및 제2 중간 행렬 c->v= [0, 0, 1; 0, 0, 0; 0, 1, 0]을 구성할 수 있다. 일부 실시예들에서, 제1 중간 행렬 p->c은 원점 노드들 p 내지 친구들에 의해 방문된 국가들 사이의 접속들을 표시할 수 있고, 제2 중간 행렬 c->v은 방문된 국가들과, 방문된 국가들이 평화적인 다른 국가들 사이의 접속들을 표시할 수 있다. 일부 실시예들에서, 프로세스(100)는 행들 차원에서 방문된 국가들, 및 방문된 국가들이 열들 차원에서 평화적인 국가들을 표시하는, 1인 열들을 식별하기 위하여, 제2 중간 행렬 c->v을 분석함으로써 시작할 수 있다. 제2 중간 행렬 c->v의 예에서, 프로세스(100)는 그러므로, 엘리먼트들 [1, 3] 및 [3, 2]을 식별할 수 있다. 엘리먼트 [1, 3]로 시작하면, 프로세스(100)는 그 다음으로, 뒤로 횡단할 수 있고, 제1 열에서 1인 제1 중간 행렬 p->c에서의 엘리먼트들을 식별하기 위하여, 제1 중간 행렬 p->c의 제1 열(즉, 엘리먼트 [1, 3]의 행에 대응함)을 스캐닝할 수 있다. 프로세스(100)는 그 다음으로, 제1 중간 행렬 p->c의 엘리먼트 [2, 1]를 식별할 수 있다. 그러므로, 프로세스(100)는 p=2, c=1, 및 v=3의 제1 결과 세트를 식별할 수 있다. 일부 실시예들에서, 중간 행렬들 p->c 및 c->v는 위에서 설명된 바와 같이, 하나 이상의 전이 행렬들을 이용하는 것과 같이, 임의의 적당한 기법(들)을 이용하여 생성될 수 있다는 것에 주목한다.
일부 실시예들에서, 프로세스(100)는 그 다음으로, 루프백(loop back) 할 수 있고, 제2 중간 행렬 c->v의 제2 식별된 엘리먼트 [3, 2]에 대한 유사한 분석을 수행할 수 있다. 특히, 프로세스(100)는 제1 중간 행렬 p->c의 제3 열 내에서 1인 제1 중간 행렬 p->c에서의 엘리먼트들을 식별하기 위하여, 제1 중간 행렬 p->c의 제3 열(즉, 엘리먼트 [3, 2]의 행 엘리먼트에 대응함)을 스캐닝할 수 있다. 프로세스(100)는 그 다음으로, 제1 중간 행렬 p->c의 엘리먼트 [1, 3]를 식별할 수 있다. 그러므로, 프로세스(100)는 p=1, c=3, 및 v=2의 제2 결과 세트를 식별할 수 있다. 일부 실시예들에서, 전체 결과 세트는 {p=2, c=1, 및 v=3; p=1, c=3, 및 v=2}일 수 있다. 즉, 일부 실시예들에서, 전체 결과 세트는 제2 중간 행렬 c->v에서 원래 식별된 엘리먼트들, 엘리먼트들 [1, 3] 및 [3, 2]에 대응하는 모든 노드들을 포함할 수 있다.
110에서, 프로세스(100)는 102에서 수신된 질의에서 표시된 결과들 조항에 대응하는 결과를 식별할 수 있고 이러한 결과를 반환할 수 있다. 예를 들어, 결과들 조항이 국가 c 및 방문된 노드 v가 반환되어야 한다는 것을 표시한 위에서 설명된 예에서, 프로세스(100)는 블록(108)에서 식별된 값들에 대응하는 국가 c를 식별할 수 있다. 더 상세한 예로서, 블록(108)에서 위에서 설명된 바와 같이, 전체 결과 세트는 c=1 및 c=3의 국가 값들을 포함한다. 일부 실시예들에서, 프로세스(100)는 값들 c=1 및 c=3에 대응하는 국가들의 명칭들, 예를 들어, "United States," "Mexico," "Canada," 및/또는 임의의 다른 적당한 국가들을 식별할 수 있다. 일부 실시예들에서, 프로세스(100)는 그 다음으로, 루프 스루(loop through) 할 수 있고, 각각의 식별된 노드 값과 연관된 특정 정보를 식별할 수 있다. 일부 실시예들에서, 프로세스(100)는 결과(들)를 임의의 적당한 방식으로, 예를 들어, 102에서 질의를 제출하기 위하여 이용되었던 사용자 인터페이스에서 반환할 수 있다.
도 2로 돌아가면, 개시된 발명 요지의 일부 실시예들에 따라 이용될 수 있는 그래프 데이터베이스 질의들을 해결하기 위한 프로세스의 또 다른 예(200)가 도시된다. 일부 실시예들에서, 프로세스(200)의 블록들은 임의의 적당한 디바이스 상에서 수행될 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, 그래프 데이터베이스는 데스크톱 컴퓨터 또는 랩톱 컴퓨터와 같은 사용자 디바이스 상에서 저장될 수 있고, 프로세스(200)의 블록들은 사용자 디바이스에 의해 실행될 수 있다. 또 다른 예로서, 일부 실시예들에서, 그래프 데이터베이스는 서버 상에서 저장될 수 있고, 프로세스(200)의 블록들은 서버에 의해 실행될 수 있다.
프로세스(200)는 그래프 데이터베이스에 관련된 질의를 수신함으로써 202에서 시작할 수 있다. 임의의 적당한 질의는 임의의 적당한 방식으로 수신될 수 있고, 임의의 적당한 내용을 가질 수 있다. 상이한 사람 사이의 관계들을 표시하는 그래프에 관련된 질의 예는 다음일 수 있다: "MATCH (p: Person)-[:friend]->(f:Person) RETURN p". 이 예에서, 질의는 "Person"으로서 라벨이 붙여진 노드들이 반환되어야 한다는 것과, 추가적으로, 각각의 반환된 Person 노드가 "Friend" 관계를 또 다른 개인에게 표시하는 에지와 접속되어야 한다는 것을 표시할 수 있다. 일부 실시예들에서, 수신된 질의는 임의의 적당한 수의 반환된 노드들을 요청할 수 있다는 것에 주목한다. 추가적으로, 일부 실시예들에서, 수신된 질의는 노드들 사이의 임의의 적당한 수의 (예컨대, 1 개, 2 개, 5 개, 10 개, 및/또는 임의의 다른 적당한 수의) 접속들 또는 에지들을 특정할 수 있다. 예를 들어, 위의 예에서 설명된 질의는 하나의 Friend 에지에 의해 접속된 2 개의 Person 노드들 사이의 관계를 설명한다. 또 다른 예로서, 질의는 임의의 적당한 에지들(예컨대, 교우관계, 동료들, 급우들, 및/또는 임의의 다른 적당한 에지들 또는 접속들의 유형들)에 의해 접속된 임의의 적당한 수의 개인 노드들(예컨대, 2 개, 3 개, 5 개, 및/또는 임의의 다른 적당한 수) 사이의 관계를 설명할 수 있다. 위의 예보다 더 많은 노드들 및 더 많은 에지들을 포함하는 질의들의 예들은 위에서 주어진다.
일부 실시예들에서, 위에서 도시된 예시적인 질의 내에 포함된 바와 같은 조항 "RETURN p"은 "결과 조항" 및/또는 "반환 조항"으로서 지칭될 수 있다는 것에 주목한다. 예를 들어, 일부 실시예들에서, "RETURN p"는 특정한 데이터베이스 질의 언어들로 된 "반환 조항"으로서 지칭될 수 있다.
다음으로, 204에서, 프로세스(200)는 질의로부터 추상 구문 트리(abstract syntax tree)(AST)를 형성할 수 있다. 이 AST는 임의의 적당한 방식으로 형성될 수 있고, 일부 실시예들에서 임의의 적당한 내용을 가질 수 있다.
다음으로, 206에서, 프로세스(200)는 AST로부터 질의 그래프를 생성할 수 있다. 이 질의 그래프는 임의의 적당한 방식으로 형성될 수 있고, 일부 실시예들에서 임의의 적당한 내용을 가질 수 있다. 예를 들어, 일부 실시예들에서, 질의 그래프는 질의 검색 패턴들에 의해 형성된 그래프를 표현하는 그래프 객체 G = {V, E}를 포함할 수 있다. 이 그래프 객체에서, V는 질의에 의해 검색되어야 할 노드들의 세트를 정의할 수 있고, E는 질의에 의해 검색되어야 할 에지들의 세트를 정의할 수 있다. 일부 실시예들에서, 질의 그래프는 인접-리스트(adjacency-list)들을 이용할 수 있다.
예를 들어, 다수의 검색 패턴들을 특정하는 다음의 질의를 고려한다:
MATCH (A)-[X]->(B)
MATCH (B)-[Y]->(C)<-[Z]-(), (D) RETURN C,D
질의 검색 패턴들은 다음과 같이 그래프에 의해 표현될 수 있다:
G = {V, E}
V = {A, B, C, D, anon0}
E = {AXB, BYC, anon0ZC}
208에서, 프로세스(200)는 다음으로, 질의 그래프로부터 대수적 표현식을 생성할 수 있다. 대수적 표현식은 임의의 적당한 방식으로 형성될 수 있고, 일부 실시예들에서 임의의 적당한 내용을 가질 수 있다. 예를 들어, 일부 실시예들에서, 대수적 표현식은 피연산자들의 리스트일 수 있고, 여기서, 각각의 피연산자는 행렬(예컨대, exp = [A, B, C])이다. 일부 실시예들에서, 피연산자들의 리스트에 추가적으로, 표현식은 표현식 행 도메인을 표현하는 출발지 노드에 대한 포인터들, 및 표현식 열 도메인을 표현하는 목적지 노드에 대한 포인터를 모두 유지할 수 있다. 예를 들어, 일부 실시예들에서, 표현식은 다음의 포맷을 가질 수 있다:
Exp = {src, dest, [operands]}
도 3으로 돌아가면, 일부 실시예들에 따라, 도 2의 208에서 질의 그래프로부터 대수적 표현식을 생성하기 위하여 이용될 수 있는 프로세스(300)가 도시된다. 예시된 바와 같이, 프로세스(300)는 질의 그래프를 그 접속된 컴포넌트들(CC)로 분할함으로써 302에서 시작한다. 질의 그래프의 접속된 컴포넌트는 그래프의 임의의 적당한 부분일 수 있다. 예를 들어, 일부 실시예들에서, 각각의 접속된 컴포넌트는 데카르트 곱 연산(cartesian product operation)에 의해 더 이후에 병합될 분리 검색 패턴(disjoint search pattern)일 수 있다. 더 상세하게, 예를 들어, 다음의 질의를 고려한다:
MATCH (A)-[E]->(B), (C)-[X]->(D)
이 질의에 대한 질의 그래프는 다음일 수 있다:
G = {V, E}
V = {A,B,C,D}
E = {AEB, CXD}
이 질의 그래프에 대한 2 개의 접속된 컴포넌트들이 있다:
CC0 = V{A,B}, E = {AEB}
CC1 = V{C,D}, E = {CXD}
다음으로, 304에서, 최초/다음 접속된 컴포넌트를 선택할 수 있다. 이 선택은 임의의 적당한 방식으로 행해질 수 있다. 예를 들어, 일부 실시예들에서, 더 큰 접속된 컴포넌트들이 먼저 선택되도록, 이 선택은 접속된 컴포넌트의 크기에 기초할 수 있다.
다음으로, 306에서, 선택된 접속된 컴포넌트에 대하여, 프로세스(300)는 그 접속된 컴포넌트 내의 가장 긴 경로의 길이(length of the longest path)(LPL)를 결정할 수 있다. 경로는 일부 실시예들에서, 에지들의 리스트로서 정의될 수 있다. LPL은 노드를 재방문하지 않으면서 횡단된 에지들의 수의 측면에서 가장 긴 경로이고, 따라서, 경로는 사이클(예컨대, [AD, DA], [AB, BC, CA])을 포함하지 않는다. 일부 실시예들에서, 길이 LPL의 다수의 상이한 경로들이 있을 수 있다는 것에 주목한다.
예를 들어, 도 6의 그래프를 고려한다. 도시된 바와 같이, 가장 긴 경로 길이는 2 개이고, 길이 2의 6 개의 상이한 경로들이 있다: [[DA, AB], [DA, AC], [CA, AD], [CA, AB], [BA, AD], 및 [BA, AC]].
에지 방향은 LPL을 연산할 때에 무시되는데, 그 이유는 반전된 에지에 의해 표현된 행렬을 전치(transpose)함으로써 역방향으로 그래프를 횡단하는 것이 가능하기 때문이라는 것에 주목한다.
다음으로, 308에서, 길이 LPL의 경로가 탐사될 수 있는 노드들의 리스트가 결정된다. 예를 들어, 도 6의 그래프의 LPL 경로에 대한 노드들의 리스트는 노드들 [D, B, C]을 포함할 수 있다.
310에서, 프로세스(300)는 다음으로, 길이 LPL의 경로 P를 취출할 수 있다. 임의의 적당한 경로가 취출될 수 있다. 도 6의 예시적인 그래프를 계속하면, 다음의 경로(또는 임의의 다른 적당한 경로)가 일부 실시예들에서 취출될 수 있다: [DA, AB].
다음으로, 312에서, 프로세스(300)는 경로에 대한 대수적 표현식을 구축할 수 있다. 이 대수적 표현식은 일부 실시예들에서, 임의의 적당한 방식으로 구축될 수 있다. 예를 들어, 도 4로 돌아가면, 대수적 표현식은 프로세스(400)를 이용하여 구축될 수 있다.
도시된 바와 같이, 프로세스(400)는 i를 경로에서의 제1 에지로 설정하고 비어 있는 표현식을 생성함으로써 402에서 시작할 수 있다.
다음으로, 404에서, 프로세스(400)는 현재의 에지가 반전되는지를 결정할 수 있다. 이 결정은 임의의 적당한 방식으로 행해질 수 있다. 예를 들어, 프로세스는 현재의 에지의 출발지 노드가 (존재할 경우에) 이전의 에지의 목적지 노드와 동일한 것으로 결정할 수 있다. 이전의 에지가 있고, 현재의 에지의 출발지 노드가 이전의 에지의 목적지 노드와 동일하지 않을 경우에, 현재의 에지는 반전되는 것으로 결정될 수 있고, 출발지 노드는 (제1이 아니라) 에지에서의 제2 노드인 것으로 결정될 수 있고, 목적지 노드는 (제2가 아니라) 에지에서의 제1 노드인 것으로 결정될 수 있다.
다음으로, 406에서, 현재의 에지 E(i)에 대하여, 프로세스(400)는 E의 출발지 노드가 라벨이 붙여지는지를 결정할 수 있고, 그러한 경우에, E의 출발지 노드에 의해 표현된 라벨 행렬을 얻을 수 있고, 이러한 라벨 행렬을 표현식의 가장 우측 피연산자로서 추가할 수 있다.
408에서, 프로세스(400)는 다음으로, E(i)의 관계 유형에 의해 표현된 행렬 M을 취출할 수 있고, E(i)가 반전될 경우에 행렬 M을 전치시킬 수 있다.
다음으로, 410에서, 프로세스(400)는 M(즉, M이 408에서 전치되었을 경우에, 전치된 M)을 표현식의 가장 우측 피연산자로서 추가할 수 있다.
다음으로, 412에서, 프로세스(400)는 i가 N(경로 상에서의 최후 에지)과 동일한지를 결정할 수 있다. 그렇지 않을 경우에, 프로세스(400)는 i를 증분시키기 위하여 414로 분기할 수 있고, 그 다음으로, 404로 루프백할 수 있다.
그렇지 않을 경우에, 프로세스(400)는 E(i)의 목적지 노드가 라벨이 붙여지는지를 416에서 결정할 수 있고, 그러한 경우에, E(i)의 목적지 노드에 의해 표현된 라벨 행렬을 얻을 수 있고, 이러한 라벨 행렬을 표현식의 가장 우측 피연산자로서 추가할 수 있다.
최종적으로, 418에서, 프로세스(400)는 구성된 표현식 출발지 노드를 경로의 제1 노드로 설정할 수 있고, 구성된 표현식 목적지 노드를 경로의 최후 노드로 설정할 수 있다.
다음의 예시적인 경로를 고려한다: P = [DA, CA]. 노드 D에서 시작하면, 에지 DA를 통해 A로 도약하고, 그 다음으로, 반전된 에지 CA를 통해 A로부터 C로 간다.
402에서 시작하면, 프로세스(400)는 i를 에지 DA로 설정할 수 있고, 비어 있는 대수적 표현식: exp = {}을 생성할 수 있다.
다음으로, 404에서, 프로세스(400)는 에지 DA가 반전되지 않은 것으로 결정할 수 있다.
다음으로, 406에서, 프로세스(400)는 에지 DA의 출발지 노드 D가 Ld로서 라벨이 붙여지는 것으로 결정할 수 있고, 행렬 Ld를 표현식: exp = {Ld}에 추가할 수 있다.
408에서, 프로세스(400)는 행렬 DA를 취출할 수 있고, 현재의 에지가 반전되지 않는다는 것과, 그러므로, 행렬 DA가 전치될 필요가 없는 것으로 결정할 수 있다.
다음으로, 410에서, 프로세스(400)는 행렬 DA를 표현식: exp = {Ld * DA}로 추가할 수 있다.
다음으로, 프로세스(400)는 현재의 에지가 412에서 경로의 최후 에지가 아닌 것으로 결정할 수 있고, 414에서 i를 증분시킬 수 있고, 404로 루프백할 수 있다.
404로 다시 복귀할 시에, 프로세스(400)는 에지 CA가 반전되는 것으로 결정할 수 있는데, 그 이유는 에지가 제1 에지가 아니고, 에지 CA의 출발지 노드는 에지 DA의 목적지 노드와 일치하지 않기 때문이다. 따라서, 그것은 출발지 노드를 A로, 그리고 목적지 노드를 C로 설정할 수 있다.
다음으로, 406에서, 프로세스(400)는 노드 A가 라벨이 붙여지지 않는 것으로 결정할 수 있고, 그러므로, 임의의 라벨 행렬을 표현식에 추가하지 않을 수 있다.
다음으로, 408에서, 프로세스(400)는 행렬 CA를 취출할 수 있고 행렬 CA를 전치시킬 수 있는데, 그 이유는 그것이 404에서 결정하는 바와 같이 반전되기 때문이다.
410에서, 프로세스(400)는 다음으로, 전치된 행렬 CA를 표현식: exp = {Ld * DA * Transpose(CA)}에 추가할 수 있다.
다음으로, 412에서, 프로세스(400)는 에지 CA가 경로에서 최후 에지인 것으로 결정할 수 있고, 그러므로, 416으로 분기할 수 있다.
416에서, 프로세스(400)는 에지 CA의 목적지 노드(C)가 Lc로서 라벨이 붙여지는 것으로 결정할 수 있고, 그러므로, 라벨 행렬 Lc를 표현식: exp = {Ld * DA * Transpose(CA) * Lc}에 추가할 수 있다.
최종적으로, 418에서, 프로세스(400)는 표현식의 출발지 및 목적지 노드들을 업데이팅할 수 있다: exp = { src = D dest = C operands = [Ld, DA, Transpose(CA), Lc] }.
도 3으로 돌아가면, 프로세스(400)가 완료된 후에, 314에서, 프로세스(300)는 현재의 접속된 컴포넌트로부터 경로 P의 에지들을 제거할 수 있다. 현재의 접속된 컴포넌트로부터 경로 P의 에지들을 제거하는 것의 결과로서 (인입하거나 인출하는) 에지들을 가지지 않는 경로 P에서의 임의의 노드는 또한, 현재의 접속된 컴포넌트로부터 제거될 수 있다.
도 6의 예시적인 그래프를 주시하면, 경로 [DA, CA]를 제거한 후에, 그래프는 다음으로 된다: G { V = {A,B} E = {BA} }. 노드들 D 및 C의 둘 모두는 이들에 접속된 에지들의 전부가 프로세싱되었을 때에 제거되었다. 노드 A는 그것이 여전히 에지(BA)를 가질 때에 남아 있다.
314에서 에지들 및 노드들을 제거한 후에, 프로세스(300)는 현재의 접속된 컴포넌트에서 임의의 경로들이 더 있는지를 결정한다. 그러한 경우에, 프로세스는 다음 LPL 경로를 프로세싱하기 위하여 304로 루프백 할 수 있다. 그렇지 않을 경우에, 프로세스(300)는 그래프에서 임의의 접속된 컴포넌트들이 더 있는지를 결정하기 위하여 318로 진행할 수 있다. 그러한 경우에, 프로세스(300)는 다음 접속된 컴포넌트를 선택하기 위하여 304로 루프백 할 수 있다. 그렇지 않을 경우에, 프로세스(300)는 종료될 수 있다.
일부 실시예들에서, 중간 엔티티들(노드들이든지 또는 에지들이든지)이 행렬-행렬 승산으로 인해 상실되지 않는 것을 확실히 하기 위하여, 위에서 형성된 표현식들을 하위표현식들로 분해하는 것이 바람직할 수 있다. 그래프 엔티티(즉, 노드 또는 에지)는 그것이 때때로 질의 내에서 참조될 경우에 중간적인 것으로 고려될 수 있다. 예를 들어, 다음의 질의를 고려한다:
MATCH (A)-[X]->(I)-[Y]->(Z) RETURN I
[X]*[Y]가 연산되었을 경우에, I를 취출하는 것은 가능하지 않을 것이다.
일부 실시예들에서, 중간치들이 상실되지 않는 것을 확실히 하기 위하여, 대수적 표현식들은 중간치들에 대해 검사될 수 있고, 이러한 것이 존재할 경우에, 표현식은 중간치가 표현식의 출발지 노드 또는 목적지 노드(행/열 도메인)의 어느 하나가 되도록 하위표현식들로 분해될 수 있다.
도 2로 돌아가면, 대수적 표현식들은 일부 실시예들에서, 프로세스(200)의 210에서 하위표현식들로 분해될 수 있다. 일부 실시예들에서, 블록(210)은 프로세스(200)로부터 생략될 수 있다. 임의의 적당한 프로세스는 일부 실시예들에서, 대수적 표현식을 하위표현식들로 분해하기 위하여 이용될 수 있다. 예를 들어, 일부 실시예들에서, 도 5의 프로세스(500)는 대수적 표현식들을 하위표현식들로 분해하기 위하여 이용될 수 있다.
도 5로 돌아가면, 프로세스(500)는 표현식 (exp) 및 표현식이 502에서 구성되었던 경로 P를 수신함으로써 시작할 수 있다.
다음으로, 504에서, 프로세스(500)는 카운터(counter) i를 0으로 설정할 수 있다.
다음으로, 506에서, 프로세스(500)는 새로운 비어 있는 대수적 표현식 AE(i) = { }을 생성할 수 있다.
508에서, 프로세스(500)는 다음으로, 경로 P에서 제1 중간 엔티티(intermediate entity)(IE)를 발견할 수 있다. IE는 일부 실시예들에서, 노드 또는 에지 중의 어느 하나일 수 있다.
다음으로, 510에서, 프로세스(500)는 원래의 표현식 (exp)에서 IE의 대표 피연산자(IO)를 위치시킬 수 있다. 예를 들어, IO는 일부 실시예들에서, 각각 노드 또는 에지에 대응하는 라벨 행렬 또는 관련성 행렬일 수 있다.
다음으로, 512에서, 프로세스(500)는 가장 좌측 피연산자로부터 시작하여 계속해서 피연산자 IO까지 표현식 (exp)의 피연산자들의 전부를 복사할 수 있고, 이들을 AE(i) 내에 둘 수 있다.
514에서, 프로세스(500)는 다음으로, 표현식 (exp)로부터 AE(i)를 제거할 수 있고, 경로 P로부터 모든 스캐닝된 엔티티들(노드들 및 에지들)을 제거할 수 있다.
다음으로, 518은 경로 P에서 임의의 남아 있는 중간 엔티티들(즉, 경로 P는 행해지지 않음)이 있는지 여부를 결정할 수 있다. 경로 P가 행해지지 않은 경우에, 프로세스(500)는 518에서 i를 증분시킬 수 있고, 다음 중간 엔티티를 프로세싱하기 위하여 506으로 루프백 할 수 있다. 그렇지 않을 경우에, 프로세스는 표현식 (exp)이 비어 있는지 여부를 520에서 결정할 수 있다. 그렇지 않을 경우에, 프로세스는 새로운 대수적 표현식 AE(i+1)을 생성할 수 있고, 그것을 표현식 (exp)과 동일하게 설정할 수 있다: AE(i+1) = exp.
예를 들어, 위의 예시적인 표현식 [X]*[Y], X 행/열 도메인들 (A,I), 및 Y 행/열 도메인들 (I,Z)을 고려한다. I를 상실하지 않는 것이 바람직하다는 것을 상기한다.
프로세스(500)는 표현식 [X]*[Y], 및 표현식이 구성된 경로 P ((A)-[X]->(I)-[Y]->(Z))를 수신함으로써 502에서 시작할 수 있다.
다음으로, 504에서, 프로세스(500)는 i를 0으로 설정할 수 있다.
다음으로, 506에서, 프로세스(500)는 새로운 비어 있는 대수적 표현식: AE(0) = { }을 생성할 수 있다.
508에서, 프로세스(500)는 경로 P에서 제1 중간 엔티티(IE)를 발견한다. 이 경우에, 제1 중간 엔티티는 [X]이다.
다음으로, 510에서, 프로세스(500)는 표현식 (exp)에서 IE의 대표 피연산자(IO)를 발견할 수 있다. 이 경우에, IO는 [X]이다.
다음으로, 512에서, 프로세스(500)는 [X]를 AE(0)에 추가할 수 있다: AE(0) = {X}.
514에서, 프로세스(500)는 그 다음으로, 표현식 (exp)으로부터 ([X]와 동일한) AE(0)를 제거할 수 있고, 경로 P로부터 스캐닝된 엔티티들을 제거할 수 있다.
다음으로, 516에서, 프로세스(500)는 임의의 중간 엔티티들이 더 있는지(즉, 경로 P가 행해진 것인지 여부)를 결정할 수 있다. 이 예에서, 임의의 중간 엔티티들이 더 없으므로, 프로세스(500)는 520으로 분기하고, 520에서, 프로세스(500)는 표현식 (exp)이 비어 있지 않은 것(그것은 [Y}를 포함함)으로 결정한다. 따라서, 522에서, 프로세스(500)는 AE(1)={Y}를 설정한다.
프로세스(500)는 그 다음으로, 524에서 종료된다.
도 2로 다시 돌아가면, 210에서 임의의 표현식들을 하위표현식들로 분해한 후에, 프로세스(200)는 212에서, 표현식들 및/또는 하위표현식들을 평가할 수 있다. 표현식들 및/또는 하위표현식들은 임의의 적당한 방식으로 평가될 수 있다. 예를 들어, 일부 실시예들에서, 임의의 적당한 하드웨어 프로세서는 표현식들 및/또는 하위표현식들에서 식별된 임의의 적당한 행렬들의 내용들에 기초하여 행렬-행렬 승산을 수행할 수 있다.
최종적으로, 214에서, 프로세스(200)는 202에서 수신된 질의에서 표시된 결과들 조항에 대응하는 결과를 식별할 수 있고 이러한 결과를 반환할 수 있다.
도 7로 돌아가면, 개시된 발명 요지의 일부 실시예들에 따라 이용될 수 있는 그래프 데이터베이스 질의들을 해결하기 위한 하드웨어의 예(700)가 도시된다. 예시된 바와 같이, 하드웨어(700)는 서버(702), 통신 네트워크(704), 및/또는 사용자 디바이스들(708 및 710)과 같은 하나 이상의 사용자 디바이스들(706)를 포함할 수 있다.
서버(702)는 정보, 데이터, 데이터베이스들, 및/또는 프로그램들을 저장하기 위한 임의의 적당한 서버(들)일 수 있다. 예를 들어, 일부 실시예들에서, 서버(702)는 그래프 상의 노드들과 에지들 사이의 관계들을 표시하는 그래프 데이터베이스를 저장할 수 있다. 일부 실시예들에서, 서버(702)는 도 1 내지 도 6과 관련하여 위에서 설명된 바와 같이, 그래프 데이터베이스에 관련된 질의들에 대해 응답할 수 있다. 일부 실시예들에서, 서버(702)는 생략될 수 있다.
통신 네트워크(704)는 일부 실시예들에서, 하나 이상의 유선 및/또는 무선 네트워크들의 임의의 적당한 조합일 수 있다. 예를 들어, 통신 네트워크(704)는 인터넷, 인트라넷, 광역 네트워크(wide-area network)(WAN), 로컬 영역 네트워크(local-area network)(LAN), 무선 네트워크, 디지털 가입자 선로(digital subscriber line)(DSL) 네트워크, 프레임 중계기 네트워크, 비동기식 전송 모드(asynchronous transfer mode)(ATM) 네트워크, 가상적 사설 네트워크(virtual private network)(VPN), 및/또는 임의의 다른 적당한 통신 네트워크 중의 임의의 하나 이상을 포함할 수 있다. 사용자 디바이스들(706)은 하나 이상의 통신 링크들(예컨대, 통신 링크들(712)에 의해, 하나 이상의 통신 링크들(예컨대, 통신 링크들(714))을 통해 서버(702)에 링크될 수 있는 통신 네트워크(704)에 접속될 수 있다. 통신 링크들은 네트워크 링크들, 다이얼업 링크(dial-up link)들, 무선 링크들, 하드-와이어드(hard-wired) 링크들, 임의의 다른 적당한 통신 링크들, 또는 이러한 링크들의 임의의 적당한 조합과 같은, 사용자 디바이스들(706)과 서버(702) 사이에서 데이터를 통신하기 위하여 적당한 임의의 통신 링크들일 수 있다.
사용자 디바이스들(706)은 그래프 데이터베이스를 저장하고 및/또는 질의들을, 그래프 데이터베이스를 저장하는 서버(702)로 송신하기 위하여 적당한 임의의 하나 이상의 사용자 디바이스들을 포함할 수 있다. 예를 들어, 일부 실시예들에서, 사용자 디바이스들(706)은 이동 전화, 태블릿 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 및/또는 임의의 다른 적당한 유형의 사용자 디바이스를 포함할 수 있다.
서버(702)는 하나의 디바이스로서 예시되지만, 서버(702)에 의해 수행된 기능들은 일부 실시예들에서, 임의의 적당한 수의 디바이스들을 이용하여 수행될 수 있다. 예를 들어, 일부 실시예들에서, 다수의 디바이스들은 서버(702)에 의해 수행된 기능들을 구현하기 위하여 이용될 수 있다.
2 개의 사용자 디바이스들(708 및 710)은 도면을 과다하게 복잡하게 하는 것을 회피하기 위하여 도 7에서 도시되지만, 임의의 적당한 수의 사용자 디바이스들, 및/또는 임의의 적당한 유형들의 사용자 디바이스들이 일부 실시예들에서 이용될 수 있다.
서버(702) 및 사용자 디바이스들(706)은 일부 실시예들에서, 임의의 적당한 하드웨어를 이용하여 구현될 수 있다. 예를 들어, 일부 실시예들에서, 디바이스들(702 및 706)은 임의의 적당한 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 예를 들어, 이동 전화는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 임의의 이러한 범용 컴퓨터 또는 특수 목적 컴퓨터는 임의의 적당한 하드웨어를 포함할 수 있다. 예를 들어, 도 8의 예시적인 하드웨어(800)에서 예시된 바와 같이, 이러한 하드웨어는 하드웨어 프로세서(802), 메모리 및/또는 스토리지(804), 입력 디바이스 제어기(806), 입력 디바이스(808), 디스플레이/오디오 드라이버들(810), 디스플레이 및 오디오 출력 회로부(812), 통신 인터페이스(들)(814), 안테나(816), 및 버스(818)를 포함할 수 있다.
하드웨어 프로세서(802)는 일부 실시예들에서, 마이크로프로세서, 마이크로제어기, 디지털 신호 프로세서(들), 전용 로직 및/또는 범용 컴퓨터 또는 특수 목적 컴퓨터의 기능을 제어하기 위한 임의의 다른 적당한 회로부와 같은 임의의 적당한 하드웨어 프로세서를 포함할 수 있다. 일부 실시예들에서, 하드웨어 프로세서(802)는 서버(702)와 같은 서버의 메모리 및/또는 스토리지에서 저장된 서버 프로그램에 의해 제어될 수 있다. 예를 들어, 일부 실시예들에서, 서버 프로그램은 하드웨어 프로세서(802)로 하여금, 그래프 데이터베이스에 관련된 수신된 질의를 표현식으로 변환하게 하고, 표현식을 평가하게 하고, 질의에 대응하는 정보를 반환하게 하고, 및/또는 임의의 다른 적당한 기능들을 수행하게 할 수 있다. 일부 실시예들에서, 하드웨어 프로세서(802)는 사용자 디바이스(706)의 메모리 및/또는 스토리지(804)에서 저장된 컴퓨터 프로그램에 의해 제어될 수 있다. 예를 들어, 컴퓨터 프로그램은 하드웨어 프로세서(802)로 하여금, 그래프 데이터베이스에 관련된 질의를, 그래프 데이터베이스를 저장하는 서버로 송신하게 하고, 도 1 내지 도 6과 관련하여 위에서 설명된 기법들을 이용하여 사용자 디바이스(706) 상에서 저장되는 그래프 데이터베이스에 관련된 질의에 대해 응답하게 하고, 및/또는 임의의 다른 적당한 기능들을 수행하게 할 수 있다.
메모리 및/또는 스토리지(804)는 일부 실시예들에서, 프로그램들, 데이터, 및/또는 임의의 다른 적당한 정보를 저장하기 위한 임의의 적당한 메모리 및/또는 스토리지일 수 있다. 예를 들어, 메모리 및/또는 스토리지(804)는 랜덤 액세스 메모리, 판독-전용 메모리, 플래시 메모리, 하드 디스크 스토리지, 광학 매체들, 및/또는 임의의 다른 적당한 메모리를 포함할 수 있다.
입력 디바이스 제어기(806)는 일부 실시예들에서, 하나 이상의 입력 디바이스들(808)로부터의 입력을 제어하고 수신하기 위한 임의의 적당한 회로부일 수 있다. 예를 들어, 입력 디바이스 제어기(806)는 터치스크린으로부터, 키보드로부터, 하나 이상의 버튼들로부터, 음성 인식 회로로부터, 마이크로폰으로부터, 카메라로부터, 광학 센서로부터, 가속도계로부터, 온도 센서로부터, 근접장 센서로부터, 압력 센서로부터, 인코더로부터, 및/또는 임의의 다른 유형의 입력 디바이스로부터 입력을 수신하기 위한 회로부일 수 있다.
디스플레이/오디오 드라이버들(810)은 일부 실시예들에서, 하나 이상의 디스플레이/오디오 출력 디바이스들(812)로의 출력을 제어하고 구동하기 위한 임의의 적당한 회로부일 수 있다. 예를 들어, 디스플레이/오디오 드라이버들(810)은 터치스크린, 평판-패널 디스플레이, 음극선관 디스플레이, 프로젝터, 스피커 또는 스피커들, 및/또는 임의의 다른 적당한 디스플레이 및/또는 프리젠테이션 디바이스들을 구동하기 위한 회로부일 수 있다.
통신 인터페이스(들)(814)는 하나 이상의 통신 네트워크들(예컨대, 컴퓨터 네트워크(704))과 인터페이싱하기 위한 임의의 적당한 회로부일 수 있다. 예를 들어, 인터페이스(들)(814)는 네트워크 인터페이스 카드 회로부, 무선 통신 회로부, 및/또는 임의의 다른 적당한 유형의 통신 네트워크 회로부를 포함할 수 있다.
안테나(816)는 일부 실시예들에서, 통신 네트워크(예컨대, 통신 네트워크(704))와 무선으로 통신하기 위한 임의의 적당한 하나 이상의 안테나들일 수 있다. 일부 실시예들에서, 안테나(816)는 생략될 수 있다.
버스(818)는 일부 실시예들에서, 2 개 이상의 컴포넌트들(802, 804, 806, 810, 및 814) 사이에서 통신하기 위한 임의의 적당한 메커니즘일 수 있다.
임의의 다른 적당한 컴포넌트들은 일부 실시예들에 따라 하드웨어(800) 내에 포함될 수 있다.
일부 실시예들에서, 도 1 내지 도 5의 프로세스들의 위에서 설명된 블록들의 적어도 일부는 도면에서 도시되고 도면과 관련하여 설명된 순서 및 시퀀스로 제한되지 않는 임의의 순서 또는 시퀀스로 실행되거나 수행될 수 있다. 또한, 도 1 내지 도 5의 위의 블록들의 일부는 레이턴시(latency) 및 프로세싱 시간들을 감소시키기 위하여, 적절한 경우에 실질적으로 동시에 또는 병렬로 실행되거나 수행될 수 있다. 추가적으로 또는 대안적으로, 도 1 내지 도 5의 프로세스들의 위에서 설명된 블록들의 일부는 생략될 수 있다.
일부 실시예들에서, 임의의 적당한 컴퓨터 판독가능 매체들은 본 명세서에서의 기능들 및/또는 프로세스들을 수행하기 위한 명령들을 저장하기 위하여 이용될 수 있다. 예를 들어, 일부 실시예들에서, 컴퓨터 판독가능 매체들은 일시적 또는 비-일시적일 수 있다. 예를 들어, 비-일시적 컴퓨터 판독가능 매체들은 (하드 디스크들, 플로피 디스크들, 및/또는 임의의 다른 적당한 자기적 매체들과 같은) 자기적 매체들의 비-일시적 형태들, (컴팩트 디스크들, 디지털 비디오 디스크들, 블루-레이 디스크들, 및/또는 임의의 다른 적당한 광학 매체들과 같은) 광학 매체들의 비-일시적 형태들, (플래시 메모리, 전기적 프로그래밍가능 판독-전용 메모리(electrically programmable read-only memory)(EPROM), 전기적 소거가능 프로그래밍가능 판독-전용 메모리(electrically erasable programmable read-only memory)(EEPROM), 및/또는 임의의 다른 적당한 반도체 매체들과 같은) 반도체 매체들의 비-일시적 형태들, 송신 동안에 순간적이지 않거나 영속성의 임의의 외관을 가지지 않는 임의의 적당한 매체들, 및/또는 임의의 적당한 유형의 매체들과 같은 매체들을 포함할 수 있다. 또 다른 예로서, 일시적 컴퓨터 판독가능 매체들은 네트워크들 상의, 와이어들, 전도체들, 광섬유들, 회로들, 송신 동안에 순간적이지 않거나 영속성의 임의의 외관을 가지지 않는 임의의 적당한 매체들, 및/또는 임의의 적당한 비유형의 매체들에서의 신호들을 포함할 수 있다.
일부 실시예들에서 이용될 수 있는 질의들의 예들은 Cypher 질의 언어로 본 명세서에서 제공되지만, 임의의 적당한 질의 언어가 일부 실시예들에서 이용될 수 있다. 예를 들어, 일부 실시예들에서, Graphql, Cypher, OpenCypher, Sparql, Gremlin, 및/또는 임의의 다른 적당한 질의 언어 중의 임의의 하나 이상이 이용될 수 있다.
따라서, 그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들이 제공된다.
발명은 상기한 예시적인 실시예들에서 설명되고 예시되었지만, 본 개시내용은 오직 예로서 행해졌고, 발명의 구현예의 세부사항들에서의 수 많은 변경들은 뒤따르는 청구항들에 의해 오직 제한되는 발명의 사상 및 범위로부터 이탈하지 않으면서 행해질 수 있다는 것이 이해된다. 개시된 실시예들의 특징들은 다양한 방식들로 조합될 수 있고 재배열될 수 있다.

Claims (21)

  1. 데이터베이스 질의를 해결하기 위한 방법으로서,
    상기 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하는 단계;
    상기 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하는 단계;
    상기 가장 긴 경로 길이를 가지는 경로를 선택하는 단계;
    상기 경로에 대한 대수적 표현식(algebraic expression)을 구축하는 단계;
    솔루션(solution)을 제공하기 위하여 행렬-행렬 승산을 이용하여 상기 대수적 표현식을 푸는 단계; 및
    상기 솔루션에 기초하여 상기 질의에 대해 응답하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 질의 그래프를, 상기 접속된 컴포넌트를 포함하는 복수의 접속된 컴포넌트들로 분할하는 단계를 더 포함하는, 방법.
  3. 제1항에 있어서, 상기 접속된 컴포넌트는 분리 검색 패턴(disjoint search pattern)인, 방법.
  4. 제1항에 있어서, 상기 접속된 컴포넌트는 상기 질의 그래프에서의 임의의 다른 접속된 컴포넌트 이상의 길이를 가지는 것에 의해 식별되는, 방법.
  5. 제1항에 있어서, 상기 가장 긴 경로 길이는 상기 질의 그래프에 대한 임의의 다른 경로 길이보다 더 큰 경로 길이이고, 상기 경로 길이는 노드를 재방문하지 않으면서, 상기 질의 그래프에서 횡단된 연속적 에지들의 카운트(count)인, 방법.
  6. 제1항에 있어서, 상기 경로에 대한 상기 대수적 표현식을 구축하는 단계는:
    비어 있는 표현식을 생성하는 단계;
    상기 경로 상의 각각의 에지에 대하여:
    상기 에지가 반전될 경우에, 상기 경로에 대한 출발지 노드의 지정 및 상기 경로에 대한 목적지 노드의 지정을 교체하는 단계;
    상기 출발지 노드가 라벨이 붙여질 경우에, 상기 출발지 노드에 의해 표현된 라벨 행렬(label matrix)을 얻고, 상기 라벨 행렬을 상기 표현식의 가장 우측 피연산자(operand)로서 추가하는 단계;
    상기 출발지 노드에 의해 표현된 표현 유형 행렬을 취출하는 단계;
    상기 에지가 반전될 경우에, 상기 표현 유형 행렬을 전치시키는 단계; 및
    상기 표현 유형 행렬을 상기 표현식의 가장 우측 피연산자로서 추가하는 단계;
    상기 경로의 최후 에지에 대하여, 상기 최후 노드의 목적지 노드가 라벨이 붙여질 경우에, 상기 목적지 노드의 라벨 행렬을 표현식의 가장 우측 피연산자에 추가하는 단계; 및
    상기 표현식의 출발지 노드를 상기 경로의 제1 노드로, 그리고 상기 표현식의 목적지 노드를 상기 경로의 최후 노드로 설정하는 단계를 포함하는, 방법.
  7. 제1항에 있어서, 상기 접속된 컴포넌트로부터, 경로의 에지들 및 상기 경로에서 에지들을 갖지 않는 임의의 노드들을 제거하는 단계를 더 포함하는, 방법.
  8. 데이터베이스 질의를 해결하기 위한 시스템으로서,
    메모리;
    상기 메모리에 결합된 적어도 하나의 하드웨어 프로세서 - 상기 적어도 하나의 하드웨어 프로세서는:
    상기 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하고;
    상기 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하고;
    상기 가장 긴 경로 길이를 가지는 경로를 선택하고;
    상기 경로에 대한 대수적 표현식을 구축하고;
    솔루션을 제공하기 위하여 행렬-행렬 승산을 이용하여 상기 대수적 표현식을 풀고; 그리고
    상기 솔루션에 기초하여 상기 질의에 대해 응답하도록 집합적으로 구성됨 -
    를 포함하는, 시스템.
  9. 제8항에 있어서, 상기 적어도 하나의 프로세서는 또한, 상기 질의 그래프를, 상기 접속된 컴포넌트를 포함하는 복수의 접속된 컴포넌트들로 분할하도록 집합적으로 구성되는, 시스템.
  10. 제8항에 있어서, 상기 접속된 컴포넌트는 분리 검색 패턴인, 시스템.
  11. 제8항에 있어서, 상기 접속된 컴포넌트는 상기 질의 그래프에서의 임의의 다른 접속된 컴포넌트 이상의 길이를 가지는 것에 의해 식별되는, 시스템.
  12. 제8항에 있어서, 상기 가장 긴 경로 길이는 상기 질의 그래프에 대한 임의의 다른 경로 길이보다 더 큰 경로 길이이고, 상기 경로 길이는 노드를 재방문하지 않으면서, 상기 질의 그래프에서 횡단된 연속적 에지들의 카운트인, 시스템.
  13. 제8항에 있어서,
    상기 경로에 대한 상기 대수적 표현식을 구축하는 것은:
    비어 있는 표현식을 생성하는 것;
    상기 경로 상의 각각의 에지에 대하여:
    상기 에지가 반전될 경우에, 상기 경로에 대한 출발지 노드의 지정 및 상기 경로에 대한 목적지 노드의 지정을 교체하는 것;
    상기 출발지 노드가 라벨이 붙여질 경우에, 상기 출발지 노드에 의해 표현된 라벨 행렬을 얻고, 상기 라벨 행렬을 상기 표현식의 가장 우측 피연산자로서 추가하는 것;
    상기 출발지 노드에 의해 표현된 표현 유형 행렬을 취출하는 것;
    상기 에지가 반전될 경우에, 상기 표현 유형 행렬을 전치시키는 것; 및
    상기 표현 유형 행렬을 상기 표현식의 가장 우측 피연산자로서 추가하는 것;
    상기 경로의 최후 에지에 대하여, 상기 최후 노드의 목적지 노드가 라벨이 붙여질 경우에, 상기 목적지 노드의 라벨 행렬을 표현식의 가장 우측 피연산자에 추가하는 것; 및
    상기 표현식의 출발지 노드를 상기 경로의 제1 노드로, 그리고 상기 표현식의 목적지 노드를 상기 경로의 최후 노드로 설정하는 것을 포함하는, 시스템.
  14. 제8항에 있어서, 상기 적어도 하나의 프로세서는 또한, 상기 접속된 컴포넌트로부터, 경로의 에지들 및 상기 경로에서 에지들을 갖지 않는 임의의 노드들을 제거하도록 집합적으로 구성되는, 시스템.
  15. 프로세서에 의해 실행될 때, 상기 프로세서로 하여금, 데이터베이스 질의를 해결하기 위한 방법을 수행하게 하는 컴퓨터-실행가능 명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체로서,
    상기 방법은:
    상기 데이터베이스 질의에 대응하는 질의 그래프에서 접속된 컴포넌트를 식별하는 단계;
    상기 접속된 컴포넌트에 대한 가장 긴 경로 길이를 결정하는 단계;
    상기 가장 긴 경로 길이를 가지는 경로를 선택하는 단계;
    상기 경로에 대한 대수적 표현식을 구축하는 단계;
    솔루션을 제공하기 위하여 행렬-행렬 승산을 이용하여 상기 대수적 표현식을 푸는 단계; 및
    상기 솔루션에 기초하여 상기 질의에 대해 응답하는 단계
    를 포함하는, 비-일시적 컴퓨터-판독가능 매체.
  16. 제15항에 있어서, 상기 방법은, 상기 질의 그래프를, 상기 접속된 컴포넌트를 포함하는 복수의 접속된 컴포넌트들로 분할하는 단계를 더 포함하는, 비-일시적 컴퓨터-판독가능 매체.
  17. 제15항에 있어서, 상기 접속된 컴포넌트는 분리 검색 패턴인, 비-일시적 컴퓨터-판독가능 매체.
  18. 제15항에 있어서, 상기 접속된 컴포넌트는 상기 질의 그래프에서의 임의의 다른 접속된 컴포넌트 이상의 길이를 가지는 것에 의해 식별되는, 비-일시적 컴퓨터-판독가능 매체.
  19. 제15항에 있어서, 상기 가장 긴 경로 길이는 상기 질의 그래프에 대한 임의의 다른 경로 길이보다 더 큰 경로 길이이고, 상기 경로 길이는 노드를 재방문하지 않으면서, 상기 질의 그래프에서 횡단된 연속적 에지들의 카운트인, 비-일시적 컴퓨터-판독가능 매체.
  20. 제15항에 있어서, 상기 경로에 대한 상기 대수적 표현식을 구축하는 단계는:
    비어 있는 표현식을 생성하는 단계;
    상기 경로 상의 각각의 에지에 대하여:
    상기 에지가 반전될 경우에, 상기 경로에 대한 출발지 노드의 지정 및 상기 경로에 대한 목적지 노드의 지정을 교체하는 단계;
    상기 출발지 노드가 라벨이 붙여질 경우에, 상기 출발지 노드에 의해 표현된 라벨 행렬을 얻고, 상기 라벨 행렬을 상기 표현식의 가장 우측 피연산자로서 추가하는 단계;
    상기 출발지 노드에 의해 표현된 표현 유형 행렬을 취출하는 단계;
    상기 에지가 반전될 경우에, 상기 표현 유형 행렬을 전치시키는 단계; 및
    상기 표현 유형 행렬을 상기 표현식의 가장 우측 피연산자로서 추가하는 단계;
    상기 경로의 최후 에지에 대하여, 상기 최후 노드의 목적지 노드가 라벨이 붙여질 경우에, 상기 목적지 노드의 라벨 행렬을 표현식의 가장 우측 피연산자에 추가하는 단계; 및
    상기 표현식의 출발지 노드를 상기 경로의 제1 노드로, 그리고 상기 표현식의 목적지 노드를 상기 경로의 최후 노드로 설정하는 단계를 포함하는, 비-일시적 컴퓨터-판독가능 매체.
  21. 제15항에 있어서, 상기 방법은, 상기 접속된 컴포넌트로부터, 경로의 에지들 및 상기 경로에서 에지들을 갖지 않는 임의의 노드들을 제거하는 단계를 더 포함하는, 비-일시적 컴퓨터-판독가능 매체.
KR1020217040825A 2019-05-13 2020-04-06 그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들 KR102615661B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201962847211P 2019-05-13 2019-05-13
US62/847,211 2019-05-13
US201962854316P 2019-05-29 2019-05-29
US62/854,316 2019-05-29
US16/454,993 US10621235B1 (en) 2019-05-13 2019-06-27 Methods, systems, and media for resolving database queries using algebraic expressions using matrix-matrix multiplication
US16/454,993 2019-06-27
PCT/IL2020/050413 WO2020230116A1 (en) 2019-05-13 2020-04-06 Methods, systems, and media for resolving graph database queries

Publications (2)

Publication Number Publication Date
KR20220100791A true KR20220100791A (ko) 2022-07-18
KR102615661B1 KR102615661B1 (ko) 2023-12-20

Family

ID=70223447

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217040825A KR102615661B1 (ko) 2019-05-13 2020-04-06 그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들

Country Status (8)

Country Link
US (3) US10621235B1 (ko)
EP (1) EP3970030A4 (ko)
KR (1) KR102615661B1 (ko)
CN (1) CN114127705B (ko)
AU (1) AU2020276417A1 (ko)
CA (1) CA3140362C (ko)
IL (1) IL288050B1 (ko)
WO (1) WO2020230116A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102614051B1 (ko) 2023-07-17 2023-12-14 (주)인포시즈 그래프 데이터베이스를 이용한 이상 징후 탐지 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램
KR102615660B1 (ko) 2023-07-17 2023-12-19 (주)인포시즈 그래프 데이터베이스에 기반한 데이터 관계 추적 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210303574A1 (en) * 2020-03-31 2021-09-30 Paul Geoffrey Brown Matrix-related operations in relational databases systems including massively parallel processing systems

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130232171A1 (en) * 2011-07-13 2013-09-05 Linkedln Corporation Method and system for semantic search against a document collection
US20160335371A1 (en) * 2015-05-15 2016-11-17 General Electric Company System and method for querying graphs distributed over multiple machines

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2710548B2 (ja) * 1993-03-17 1998-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション データを検索する方法およびブール代数文表現と図形表現を互いに変換する方法
JP2002351898A (ja) * 2001-05-23 2002-12-06 Internatl Business Mach Corp <Ibm> グラフ構造データの処理方法、処理システムおよびプログラム
US7082433B2 (en) * 2002-07-20 2006-07-25 Microsoft Corporation Translation of object queries involving inheritence
US7103613B2 (en) * 2003-05-14 2006-09-05 International Business Machines Corporation Object oriented query root leaf inheritance to relational join translator method, system, article of manufacture, and computer program product
US7991755B2 (en) * 2004-12-17 2011-08-02 International Business Machines Corporation Dynamically ranking nodes and labels in a hyperlinked database
US7580918B2 (en) * 2006-03-03 2009-08-25 Adobe Systems Incorporated System and method of efficiently representing and searching directed acyclic graph structures in databases
US7739267B2 (en) * 2006-03-10 2010-06-15 International Business Machines Corporation Classification and sequencing of mixed data flows
US7991769B2 (en) * 2006-07-07 2011-08-02 Yahoo! Inc. System and method for budgeted generalization search in hierarchies
US8671091B2 (en) * 2006-08-02 2014-03-11 Hewlett-Packard Development Company, L.P. Optimizing snowflake schema queries
US7984012B2 (en) * 2006-11-02 2011-07-19 D-Wave Systems Inc. Graph embedding techniques
US7844608B2 (en) * 2006-12-15 2010-11-30 Yahoo! Inc. Clustered query support for a database query engine
JP5278535B2 (ja) * 2009-03-19 2013-09-04 富士通株式会社 データベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法
US8364629B2 (en) * 2009-07-02 2013-01-29 Palo Alto Research Center Incorporated Depth-first search for target value problems
US8515975B1 (en) * 2009-12-07 2013-08-20 Google Inc. Search entity transition matrix and applications of the transition matrix
KR101296683B1 (ko) * 2011-03-23 2013-08-14 연세대학교 산학협력단 데이터 스트림에서의 다중 조인 질의 처리를 위한 2 페이즈 수행 방법
US8825651B1 (en) * 2011-06-30 2014-09-02 Crimson Corporation Determining a group of related products on a computing device
US9158847B1 (en) * 2011-07-19 2015-10-13 Kyndi Inc. Cognitive memory encoding networks for fast semantic indexing storage and retrieval
JP5866922B2 (ja) * 2011-09-22 2016-02-24 富士ゼロックス株式会社 検索装置及びプログラム
US8645339B2 (en) * 2011-11-11 2014-02-04 International Business Machines Corporation Method and system for managing and querying large graphs
US20130173653A1 (en) * 2011-12-30 2013-07-04 Microsoft Corporation Path composition for planning
US9411890B2 (en) * 2012-04-04 2016-08-09 Google Inc. Graph-based search queries using web content metadata
US9053210B2 (en) * 2012-12-14 2015-06-09 Microsoft Technology Licensing, Llc Graph query processing using plurality of engines
US9348947B2 (en) * 2013-07-26 2016-05-24 Helynx, Inc. Systems and methods for visualizing and manipulating graph databases
US9286396B2 (en) * 2013-07-26 2016-03-15 Microsoft Technology Licensing, Llc Query expansion and query-document matching using path-constrained random walks
US20150169758A1 (en) * 2013-12-17 2015-06-18 Luigi ASSOM Multi-partite graph database
WO2015100549A1 (zh) * 2013-12-30 2015-07-09 华为技术有限公司 一种图数据查询方法及装置
EP3029607A1 (en) * 2014-12-05 2016-06-08 PLANET AI GmbH Method for text recognition and computer program product
WO2016095216A1 (en) * 2014-12-19 2016-06-23 Microsoft Technology Licensing, Llc. Graph processing in database
US20160328443A1 (en) * 2015-05-06 2016-11-10 Vero Analytics, Inc. Knowledge Graph Based Query Generation
US10007852B2 (en) * 2015-05-29 2018-06-26 Bae Systems Information And Electronic Systems Integration Inc. Methods and apparatuses for performing object tracking using graphs
US10061715B2 (en) * 2015-06-02 2018-08-28 Hong Kong Baptist University Structure-preserving subgraph queries
US10810257B2 (en) * 2015-08-27 2020-10-20 Oracle International Corporation Fast processing of path-finding queries in large graph databases
US9330138B1 (en) * 2015-09-18 2016-05-03 Linkedin Corporation Translating queries into graph queries using primitives
JP2019515403A (ja) * 2016-04-11 2019-06-06 ケーピーアイティ テクノロジーズ リミテッド 診断のためのグラフデータベースおよびシステム健康モニタリング
US11068459B2 (en) * 2016-05-27 2021-07-20 Dynactionize N.V. Computer implemented and computer controlled method, computer program product and platform for arranging data for processing and storage at a data storage engine
US20180336202A1 (en) * 2017-05-18 2018-11-22 0934781 B.C. Ltd System and method to represent documents for search in a graph
US11023526B2 (en) * 2017-06-02 2021-06-01 International Business Machines Corporation System and method for graph search enhancement
US10268646B2 (en) * 2017-06-06 2019-04-23 Facebook, Inc. Tensor-based deep relevance model for search on online social networks
CN108874954A (zh) * 2018-06-04 2018-11-23 深圳市华傲数据技术有限公司 一种数据库查询的优化方法、介质及设备
US11016965B2 (en) * 2019-01-22 2021-05-25 International Business Machines Corporation Graphical user interface for defining atomic query for querying knowledge graph databases

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130232171A1 (en) * 2011-07-13 2013-09-05 Linkedln Corporation Method and system for semantic search against a document collection
US20160335371A1 (en) * 2015-05-15 2016-11-17 General Electric Company System and method for querying graphs distributed over multiple machines

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102614051B1 (ko) 2023-07-17 2023-12-14 (주)인포시즈 그래프 데이터베이스를 이용한 이상 징후 탐지 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램
KR102615660B1 (ko) 2023-07-17 2023-12-19 (주)인포시즈 그래프 데이터베이스에 기반한 데이터 관계 추적 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램

Also Published As

Publication number Publication date
US10621235B1 (en) 2020-04-14
AU2020276417A1 (en) 2022-01-20
CA3140362A1 (en) 2020-11-19
WO2020230116A1 (en) 2020-11-19
CA3140362C (en) 2023-01-31
EP3970030A4 (en) 2023-06-28
EP3970030A1 (en) 2022-03-23
KR102615661B1 (ko) 2023-12-20
IL288050A (en) 2022-01-01
US11416550B2 (en) 2022-08-16
US20200410004A1 (en) 2020-12-31
IL288050B1 (en) 2024-05-01
CN114127705B (zh) 2023-05-23
US20230195794A1 (en) 2023-06-22
CN114127705A (zh) 2022-03-01

Similar Documents

Publication Publication Date Title
KR102615661B1 (ko) 그래프 데이터베이스 질의들을 해결하기 위한 방법들, 시스템들, 및 매체들
US9922002B2 (en) Efficient representations of graphs with multiple edge types
Kabgani et al. Characterization of (weakly/properly/robust) efficient solutions in nonsmooth semi-infinite multiobjective optimization using convexificators
JP5059238B1 (ja) インスタンス経路の探索及び視覚化方法、並びにその装置
US8527503B2 (en) Processing search queries in a network of interconnected nodes
US20120136575A1 (en) Path oracles for spatial networks
Johnson et al. The graphs for which the maximum multiplicity of an eigenvalue is two
Dinh et al. A memory-efficient data structure representing exact-match overlap graphs with application for next-generation DNA assembly
Helbig On the lifting of Nichols algebras
Cazaux et al. A linear time algorithm for Shortest Cyclic Cover of Strings
JP2012252694A (ja) オントロジースキーマーに基づくインスタンス経路の探索方法及び装置
Agratini On a class of Bernstein-type rational functions
Liu et al. Parallel construction of Hamiltonian paths for conforming tetrahedral meshes
Desiraju The τ-function of the Ablowitz-Segur family of solutions to Painlevé II as a Widom constant
Ota et al. Dynamic construction of an antidictionary with linear complexity
Lita da Silva On one type of generalized Vandermonde determinants
Lin et al. Lattices and hypergraphs associated to square-free monomial ideals
Tao et al. Continuous dependence and exponential stability of semi-linear interval-valued differential equations
León et al. Local Malliavin calculus for Lévy processes and applications
Patriche Bayesian abstract economies
Delvaux Semi-direct products of multiplier Hopf algebras: Smash products
Čižikovienė et al. On a couple of unresolved group testing conjectures
Couchot Modules with RD-composition series over a commutative ring
Farnoud et al. Computing similarity distances between rankings
Abram et al. Intersections of multiplicative translates of 3-adic Cantor sets II: two infinite families

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right