사이퍼 (query language)

Cypher (query language)

사이퍼선언적 그래프 쿼리 언어로, 속성 그래프에서 표현적이고 효율적인 데이터 쿼리가 가능하다.[1]null

사이퍼는 2011년 네오4j 주식회사(옛 네오테크놀로지)에서 근무하면서 주로 안드레스 테일러의 발명품이었다.[2]사이퍼는 당초 그래프 데이터베이스 네오4j와 함께 사용할 예정이었으나 2015년 10월 오픈사이퍼 프로젝트를 통해 오픈했다.[3]null

언어는 SQL(관계형 데이터베이스 모델에 대한 표준 질의 언어)의 힘과 능력을 염두에 두고 설계되었지만, 사이퍼는 그래프 이론의 개념에 기초하여 구축된 데이터베이스의 구성 요소와 요구에 기초하고 있었다.그래프 모델에서 데이터는 노드(수학과 네트워크 과학의 직위)와 관계(수학과 네트워크 과학의 경계)로 구성돼 데이터의 실체가 어떻게 연결되고 서로 연관되는지에 초점을 맞춘다.null

그래프 모형

사이퍼는 데이터를 노드와 에지(사이퍼어로 "관계"라고 함)로 정리하는 속성 그래프 모델을 기반으로 한다.노드와 관계의 이러한 표준 그래프 요소 외에도, 속성 그래프 모델은 데이터의 더 미세한 범주 및 속성을 설명하기 위한 레이블과 속성을 추가한다.null

노드는 그래프의 도면요소다.그들은 속성이라고 불리는 속성(키-값 쌍)을 얼마든지 보유할 수 있다.노드는 도메인에서 서로 다른 역할을 나타내는 0개 이상의 레이블(예: 태그 또는 범주)으로 태그될 수 있다.관계는 두 노드 엔터티 사이에 지시되고 명명된 의미론적 관련 연결을 제공한다.관계에는 항상 방향, 시작 노드, 끝 노드, 그리고 정확히 하나의 관계 유형이 있다.노드처럼 관계도 속성을 가질 수 있다.[4]null

라벨은 0개 이상의 노드 라벨을 할당하여 유사한 노드를 그룹화할 수 있다.레이블은 일종의 태그와 유사하며 사용자가 찾거나 작성할 특정 유형의 도면요소를 지정할 수 있다.속성은 문자열 키의 바인딩과 사이퍼 유형 시스템의 일부 값을 갖는 키 값 쌍이다.싸이퍼 쿼리는 노드의 패턴과 레이블 및 속성에 지정된 필터링과 관계를 사용하여 지정된 패턴에서 찾은 데이터를 생성, 읽기, 업데이트, 삭제한다.null

유형 시스템

사이퍼형 시스템은 다른 프로그래밍 언어와 쿼리 언어에서 사용되는 많은 공통 유형을 포함한다.지원되는 유형에는 부울, 문자열, 숫자, 정수 및 부동 소수점 번호와 같은 스칼라 값 유형이 포함된다.또한 datetime, localdatetime, date, time, localtime, time과 같은 시간적 유형도 지원한다.지도와 목록의 컨테이너 유형과 노드, 관계 및 경로의 그래프 유형, 보이드 유형 등이 제공된다.[5]null

구문

사이퍼 질의어는 노드의 패턴과 관계를 묘사하고 라벨과 속성을 바탕으로 그 패턴을 필터링한다.사이퍼의 구문은 컴퓨터용 텍스트 기반 시각 예술인 ASCII 아트에 기반을 두고 있다.이것은 언어를 시각적으로 그리고 구조적으로 쿼리에 지정된 데이터를 나타내기 때문에 매우 시각적이고 읽기 쉽게 만든다.예를 들어, 노드는 엔티티에 관한 속성 및 정보 주위에 괄호로 표시된다.관계는 괄호 안에 있는 관계 유형과 화살표(방향 또는 방향 없음)로 표시된다.null

//노드 (가변적:라벨 {속성키: '속성값'})  //message -[가변적:Relationship_TYPE]->  //사이퍼 패턴 (node1:라벨A)-[el1:Relationship_TYPE]->(노드2:라벨B) 

키워드

다른 쿼리 언어와 마찬가지로, Cypher는 패턴을 지정하고, 패턴을 필터링하고, 결과를 반환하는 다양한 키워드를 포함하고 있다.가장 흔한 것 중에는 MATCH, WHERE, RETURN 등이 있다.이것들은 SQL의 SELECT와 WHERE와는 약간 다르게 작동하지만, 그들은 비슷한 목적을 가지고 있다.null

Match는 노드, 관계 또는 노드와 관계의 조합을 함께 찾기 위한 검색 패턴을 설명하기 전에 사용된다.[6]WHERE in Cypher는 패턴에 추가적인 제약조건을 추가하고 원하지 않는 패턴을 걸러내기 위해 사용된다.[7]사이퍼의 RETURN은 결과를 출력하는 방법을 포맷하고 정리한다.다른 쿼리 언어와 마찬가지로 특정 속성, 목록, 순서 등을 사용하여 결과를 반환할 수 있다.[8]null

위와 같은 패턴 구문이 있는 키워드를 사용하여 아래 예시 쿼리는 관계(ACTED_)에 의해 연결된 노드(이름 '니콜 키드맨'으로 불리는 배우 라벨과 속성)의 패턴을 검색한다.첫 번째 노드에서 다른 노드(Movie 레이블)로 입력 및 송신 방향.그런 다음 WHERE 절은 일치 절의 Movie 노드가 전달된 매개 변수 값보다 작은 연도 속성을 갖는 패턴만 필터링한다.반환에서 쿼리는 일치하는 패턴과 필터링에 적합한 동영상 노드를 출력하도록 지정하며, 절이 어디인지 지정한다.null

매치 (니콜:배우 {이름을 붙이다: '니콜 키드먼'})-[:ACTIVE_IN]->(영화:영화) 어디에 영화.연도 < $년도변수 리턴 영화 

사이퍼는 또한 데이터 쓰기, 업데이트, 삭제에 대한 조항을 지정하는 키워드를 포함하고 있다.CREATE와 DELETE는 노드 및 관계를 생성하고 삭제하는 데 사용된다.SET와 REVE는 값을 속성으로 설정하고 노드에 레이블을 추가하는 데 사용된다.MERGE는 중복되지 않고 고유하게 노드를 생성하는 데 사용된다.노드는 다른 관계가 아직 존재하지 않는 경우에만 삭제할 수 있다.예를 들면 다음과 같다.

매치 (startContent:내용)-[관계:IS_RENTED_]->(EndContent:내용) 어디에 EndContent.출처 = '사용자' 선택적 일치 (EndContent)-[r]-() 삭제 관계, EndContent 

표준화

openCyper 프로젝트와 함께, 사이퍼를 그래프 처리를 위한 쿼리 언어로 표준화하려는 노력이 시작되었다.이 과정의 일부로, 5번의 대면 Cyper 구현자 미팅(oCIMs (oCIMso-to-to-to-to-to-to-cypers Meetings:첫 번째 회의는 2017년 2월 독일 월도프 SAP 본사에서 링크드 데이터 벤치마크 협의회 회의와 동시에 열렸다.가장 최근의 OCIM은 2019년 3월 W3C 그래프 데이터 관리를 위한 웹 표준 워크숍과 동시에 베를린에서 개최되었다.[10][11]null

그 회의에서는, GQL이라는 국제표준화된 Graph Query Language의 보다 넓은 프로젝트에 Cypher가 중요한 입력이 되도록 노력하자는 의견의 일치가 있었다. 2019년 9월, GQL 표준 프로젝트의 제안은 ISO/IEC 공동 기술 위원회 1의 회원인 국가 표준 기구의 투표에 의해 승인되었다(resp).정보 기술 표준 허용).[12]GQL 프로젝트 제안서에는 다음과 같이 명시되어 있다.

그래프를 데이터 모델링의 기초적인 표현으로 사용하는 것이 데이터 관리의 새로운 접근방식이다.이 접근법에서 데이터 세트는 그래프로 모델링되며, 각 데이터 도면요소를 그래프의 꼭지점(노드라고도 함)으로 나타내고, 두 도면요소 사이의 각 관계를 해당 정점 사이의 가장자리로서 나타낸다.그래프 데이터 모델은 독특한 장점으로 주목을 받아왔다.첫째, 그래프 모형은 계층 구조, 복잡 구조 또는 임의 구조를 가진 데이터 세트에 자연적으로 적합할 수 있다.그러한 구조들은 가장자리로서 그래프 모델에 쉽게 인코딩될 수 있다.이것은 관계형 모델보다 더 편리할 수 있는데, 이 모델에서는 고정된 행 유형을 가진 테이블 세트로 데이터 세트를 표준화해야 한다.둘째로, 그래프 모델은 도달 가능성 쿼리, 최단 또는 가장 저렴한 경로 쿼리 또는 중심성 분석과 같이 데이터 실체들 간의 멀티홉 관계를 관찰해야 하는 값비싼 쿼리 또는 데이터 분석 기능의 효율적인 실행을 가능하게 한다.현재 사용 중인 두 개의 그래프 모델이 있는데, RDF(Resource Description Framework) 모델과 속성 그래프 모델이다.RDF 모델은 여러 규격에서 W3C에 의해 표준화되었다.반면에 Property Graph 모델은 그래프 데이터베이스, 그래프 알고리즘, 그래프 처리 시설에서 다수의 구현을 가지고 있다.그러나 관계형 데이터베이스 시스템의 SQL과 같은 속성 그래프에 대한 일반적인 표준화된 쿼리 언어가 누락되어 있다.이 공백을 메우기 위해 GQL을 제안한다.[13]

현재 GQL 표준은 작성 중이고 아직 공개적으로 사용할 수 없다.그러나, 언어의 하위집합에 대한 첫 번째 오픈 소스 구현은 이미 이용 가능하다.[14][15]구현과는 별도로 공식화를 찾아 GQL의 특정 부분집합 구문을 읽을 수도 있다.[16]

참고 항목

  • Neo4j, 사이퍼 쿼리 언어의 인기 있는 그래프 데이터베이스
  • 데이터베이스 범주에 대한 그래프 데이터베이스, 배경, 데이터 모델, 구성 요소 및 공급자
  • SPARQL, 그래프 데이터 쿼리용 W3C 표준 선언적 쿼리 언어
  • 그래프 데이터를 쿼리하는 또 다른 방법인 Gremlin
  • GQL(그래프 쿼리 언어)

참조

  1. ^ "Cypher Introduction". Neo4j. Retrieved 2019-11-08.
  2. ^ "Cypher: An Evolving Query Language for Property Graphs" (PDF). Proceedings of the 2018 International Conference on Management of Data. ACM. Retrieved 2018-06-27.
  3. ^ "Meet openCypher: The SQL for Graphs - Neo4j Graph Database". Neo4j Graph Database. 2015-10-21. Retrieved 2019-11-08.
  4. ^ "Property Graph Model". GitHub. Retrieved 2019-11-08.
  5. ^ "Cypher Type System". GitHub. Retrieved 2019-11-08.
  6. ^ "Cypher manual - MATCH clause". Neo4j. Retrieved 2019-11-08.
  7. ^ "Cypher manual - WHERE clause". Neo4j. Retrieved 2019-11-08.
  8. ^ "Cypher manual - RETURN clause". Neo4j. Retrieved 2019-11-08.
  9. ^ "Cypher manual clauses". Neo4j. Retrieved 2019-11-08.
  10. ^ https://www.opencypher.org/events
  11. ^ "W3C Workshop on Web Standardization for Graph Data. Creating Bridges: RDF, Property Graph and SQL". W3C. Retrieved September 29, 2019.
  12. ^ "ISO/IEC WD 39075 Information Technology — Database Languages — GQL". ISO. Retrieved September 29, 2019.
  13. ^ "ISO/IEC JTC 1/SC 32 N 3007 - ISO/IEC NP 39075 Information Technology -- Database Languages -- GQL". British Standards Institute. Retrieved September 29, 2019.
  14. ^ "GQL Parser". Retrieved January 18, 2021.
  15. ^ "First GQL research implementation from Olof Morra at TU Eindhoven!". Alastair Green. Retrieved January 18, 2021.
  16. ^ "A Semantics of GQL; a New Query Language for Property Graphs Formalized" (PDF). Olof Morra. Retrieved January 18, 2021.