사이퍼 (질의어)
사이퍼(Cypher)는 식으로 나타내는, 프로퍼티 그래프의 효율적인 질의 및 업데이트를 허용하는 선언형 그래프 질의어이다. 사이퍼는 상대적으로 단순하지만 매우 강력한 언어이다. 매우 복잡한 데이터베이스 쿼리들은 사이퍼를 통해 쉽게 표현이 가능하다. 이를 통해 사용자들이 데이터베이스 접근 중에 길을 잃지 않고 자신의 도메인에 집중할 수 있게 한다.[1]
사이퍼는 처음에는 그래프 데이터베이스 Neo4j를 대상으로 Neo4j사(이전 명칭: 네오 테크놀로지)가 만들었으나 2015년 10월 오픈사이퍼(openCypher) 프로젝트를 통해 개방되었으며[2] 그 뒤로 SAP HANA[3], 아젠스그래프를 포함한 여러 다른 그래프 데이터베이스 벤더들에 채택되었다.[4]
그래프 모델
편집사이퍼는 프로퍼티 그래프 모델에 기반을 두며, 그 외에 노드와 엣지의 표준 그래프 요소들(사이퍼에서는 "관계", relationship이라고 함)이 콘셉트로서 레이블(label)과 프로퍼티(property)를 추가한다. 노드들은 0개 이상의 레이블이 있을 수 있는 반면, 각 관계는 정확히 하나의 관계형(relationship type)이 있다.[5] 노드와 관계 또한 0개 이상의 프로퍼티가 있으며 여기에서 프로퍼티는 사이퍼 자료형에서 문자열 키와 일부 값의 키-값 바인딩으로 되어 있다.
자료형 체계
편집사이퍼 자료형 체계는 CIP(Cypher Improvement Proposal)에 자세히 기술되어 있으며,[6] 다음의 자료형을 포함하고 있다: nodes, relationships, paths, maps, lists, integers, floating-point numbers, booleans, strings
문법
편집사이퍼는 다양한 절(clause)을 포함한다. 그 중 가장 일반적으로 쓰이는 것들이 MATCH와 WHERE이다. 이 기능들은 SQL의 것과는 다소 다르다. MATCH는 검색할 패턴의 구조를 기술하기 위해 사용하며 주로 관계에 기반을 둔다. WHERE은 패턴에 추가적인 제약을 추가하기 위해 사용된다.[7] 이를테면, 아래의 쿼리는 'Nicole Kidman'이라는 이름의 배우가 활동한 모든 영화들을 반환하며 특정한 해 이전으로 국한시킨다. (파라미터에 의해 전달됨):
MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie
게다가 사이퍼는 데이터의 쓰기, 업데이트, 삭제를 위한 절을 포함하고 있다. CREATE와 DELETE는 노드와 관계의 생성, 삭제를 위해 사용된다. SET과 REMOVE는 값을 프로퍼티에 설정하고 노드에 레이블을 추가하기 위해 사용된다. 노드들은 다른 관계들이 존재하지 않을 때에만 삭제가 가능하다. 이를테면:[7]
MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
WHERE content.source = 'user'
OPTIONAL MATCH (content)-[r]-()
DELETE r, content
표준화
편집오픈사이퍼 프로젝트와 함께 그래프 처리를 위한 질의어로서 사이퍼를 표준화하는 노력이 시작되었다. 이러한 과정 중 일부는 First openCypher Implementers Meeting(oCIM)이며, 2016년 12월 처음 발표되었다.[8][9]
같이 보기
편집- SPARQL: 그래프 데이터를 조회하기 위한 또다른 선언형 질의어
각주
편집- ↑ “Cypher Introduction”. Neo Technology. 2018년 2월 6일에 원본 문서에서 보존된 문서. 2017년 1월 31일에 확인함.
- ↑ “Meet openCypher: The SQL for Graphs - Neo4j Graph Database”. 《Neo4j Graph Database》 (미국 영어). 2015년 10월 21일. 2017년 1월 31일에 확인함.
- ↑ “Graph Processing with SAP HANA 2”. 《blogs.sap.com》. 2018년 2월 3일에 원본 문서에서 보존된 문서. 2017년 1월 31일에 확인함.
- ↑ “Bitnine AgensGraph”. 《bitnine.net》. 2017년 4월 22일에 원본 문서에서 보존된 문서. 2017년 1월 31일에 확인함.
- ↑ “Property Graph Model”. 《GitHub》 (영어). 2017년 1월 31일에 확인함.
- ↑ “Cypher Type System”. 《GitHub》 (영어). 2017년 1월 31일에 확인함.
- ↑ 가 나 “Neo4j 3.1.1 manual - MATCH clause”. Neo Technology. 2018년 4월 17일에 원본 문서에서 보존된 문서. 2017년 1월 31일에 확인함.
- ↑ “openCypher Implementers Meeting · openCypher.org”. 《www.opencypher.org》 (영어). 2017년 1월 28일에 원본 문서에서 보존된 문서. 2017년 1월 31일에 확인함.
- ↑ “oCIM announcement on openCypher Google Groups”. 《groups.google.com》. 2017년 1월 31일에 확인함.