그래프 데이터베이스 란? 연결된 데이터를 저장하는 더 나은 방법

키-값, 문서 지향, 열군, 그래프, 관계형 ... 오늘날 우리는 데이터 종류만큼 많은 종류의 데이터베이스를 가지고있는 것 같습니다. 이렇게하면 데이터베이스를 선택하기가 더 어려워 질 수 있지만 올바른 데이터베이스를 더 쉽게 선택할  수 있습니다. 물론 그렇게하려면 숙제를해야합니다. 데이터베이스를 알아야합니다. 

가장 이해하기 어려운 데이터베이스 유형 중 하나는 그래프 데이터베이스입니다. 고도로 상호 연결된 데이터로 작업하도록 설계된 그래프 데이터베이스는 관계형 데이터베이스보다 "관계형"으로 설명 될 수 있습니다. 그래프 데이터베이스는 방대한 정보 웹에서 복잡한 관계를 포착하는 것이 목표 일 때 빛납니다. 

다음은 그래프 데이터베이스가 무엇인지, 왜 다른 데이터베이스와 다른지, 그리고 해결하기 위해 구축 된 데이터 문제의 종류에 대해 자세히 살펴 봅니다.

그래프 데이터베이스와 관계형 데이터베이스

기존의 관계형 또는 SQL 데이터베이스에서 데이터는 테이블로 구성됩니다. 각 테이블은 고정 된 수의 열이있는 특정 형식으로 데이터를 기록하고 각 열은 고유 한 데이터 유형 (정수, 시간 / 날짜, 자유 형식 텍스트 등)을 사용합니다.

이 모델은 주로 한 테이블의 데이터를 다룰 때 가장 잘 작동합니다. 또한 여러 테이블에 저장된 데이터를 집계 할 때도 제대로 작동하지 않습니다. 그러나 그 행동에는 몇 가지 주목할만한 한계가 있습니다.

앨범, 밴드, 레이블 및 연주자가있는 음악 데이터베이스를 고려하십시오. 당신이에 소개 된 모든 공연보고 할 경우 에 의해 앨범 일에 발표 대역 레이블 개의 서로 다른 테이블을-명시 적으로 그 관계를 설명해야합니다. 관계형 데이터베이스에서는 새 데이터 열 (일대일 또는 일대 다 관계의 경우) 또는 새 테이블 (다 대다 관계의 경우)을 통해이를 수행합니다.

적당한 수의 관계를 관리하는 한 실용적입니다. 예를 들어 친구의 친구와 같은 수백만 또는 수십억 개의 관계를 처리하는 경우 이러한 쿼리는 제대로 확장되지 않습니다.

요컨대,  데이터 자체가 아니라 데이터 간의 관계가 주요 관심사라면 다른 종류의 데이터베이스 (그래프 데이터베이스)가 적절합니다.

그래프 데이터베이스 기능

"그래프"라는 용어는 수학에서 사용 된 단어에서 비롯됩니다. 여기에서 노드 (또는 정점 ) 모음을 설명하는 데 사용되며 , 각 노드 에는 정보 ( properties )가 포함 되고 노드 간의 레이블이 지정된 관계 (또는 가장자리 )가 있습니다.

소셜 네트워크는 그래프의 좋은 예입니다. 네트워크의 사람은 노드가되고 각 사람의 속성 (예 : 이름, 나이 등)은 속성이되고 사람을 연결하는 선 ( "친구", "어머니"또는 " 감독자”)는 그들의 관계를 나타냅니다. 

기존 데이터베이스에서는 관계에 대한 쿼리를 처리하는 데 오랜 시간이 걸릴 수 있습니다. 관계가 외래 키로 구현되고 테이블을 조인하여 쿼리되기 때문입니다. 모든 SQL DBA가 알 수 있듯이 조인을 수행하는 것은 비용이 많이 들며, 특히 많은 수의 개체를 정렬해야하는 경우 또는 더 나쁜 경우에는 일종의 간접 (예 : "친구의 친구") 쿼리를 수행하기 위해 여러 테이블을 조인해야 할 때 비용이 많이 듭니다. 그래프 데이터베이스가 뛰어납니다. 

그래프 데이터베이스 는 데이터와 함께 관계 를 저장하여 작동  합니다. 관련 노드는 데이터베이스에서 물리적으로 연결되어 있기 때문에 이러한 관계에 액세스하는 것은 데이터 자체에 액세스하는 것만큼이나 즉각적입니다. 즉, 관계형 데이터베이스가 수행해야하는 관계를 계산하는 대신 그래프 데이터베이스는 단순히 저장소에서 관계를 읽습니다. 쿼리를 만족시키는 것은 그래프를 걷거나 "순회"하는 간단한 문제입니다.  

그래프 데이터베이스는 개체 간의 관계를 기본 방식으로 저장하여 관계에 대한 쿼리를 빠르고 쉽게 만들 수있을뿐만 아니라 다른 종류의 개체와 다른 종류의 관계를 그래프에 포함 할 수 있습니다. 다른 NoSQL 데이터베이스와 마찬가지로 그래프 데이터베이스는 스키마가 없습니다. 따라서 성능 및 유연성 측면에서 그래프 데이터베이스는 관계형 또는 테이블 지향 데이터베이스보다 문서 데이터베이스 또는 키-값 저장소에 더 가깝습니다.

그래프 데이터베이스 사용 사례

그래프 데이터베이스는 작업중인 데이터가 밀접하게 연결되어있을 때 가장 잘 작동하며 일반적으로 다 대다 관계를 통해 다른 데이터를 연결하거나 참조 하는 방식으로 표현되어야합니다 .

다시 말하지만, 소셜 네트워크가 유용한 예입니다. 그래프 데이터베이스는 활동 피드와 같은 소셜 네트워크에서 찾은 데이터보기를 구성하고 표시하는 데 필요한 작업량을 줄이거 나 네트워크에있는 다른 친구와의 근접성으로 인해 특정 사람을 알 수 있는지 여부를 결정하는 데 필요한 작업량을 줄입니다.

그래프 데이터베이스의 또 다른 응용 프로그램은 다른 데이터 표현을 통해 알아 내기 어려운 그래프 데이터에서 연결 패턴을 찾는 것입니다. 사기 탐지 시스템은 그래프 데이터베이스를 사용하여 다른 방법으로는 알아 채기 어려웠을 엔티티 간의 관계를 밝힙니다. 

마찬가지로 그래프 데이터베이스는 엔터티 간의 관계 또는 상호 종속성을 관리하는 애플리케이션에 적합합니다. 추천 엔진, 콘텐츠 및 자산 관리 시스템, ID 및 액세스 관리 시스템, 규정 준수 및 위험 관리 솔루션 뒤에있는 그래프 데이터베이스를 자주 찾을 수 있습니다. 

그래프 데이터베이스 쿼리

다른 NoSQL 데이터베이스와 마찬가지로 그래프 데이터베이스는 일반적으로 SQL 대신 고유 한 사용자 지정 쿼리 방법을 사용합니다.

일반적으로 사용되는 그래프 쿼리 언어 중 하나는 원래 Neo4j 그래프 데이터베이스 용으로 개발 된 Cypher입니다. 2015 년 말부터 Cypher는 별도의 오픈 소스 프로젝트로 개발되었으며 많은 다른 공급 업체에서 제품 (예 : SAP HANA)에 대한 쿼리 시스템으로이를 채택했습니다.

다음은 Scott의 친구 인 모든 사람에 대한 검색 결과를 반환하는 Cypher 쿼리의 예입니다.

MATCH (a : Person {name : 'Scott'})-[: FRIENDOF]-> (b) RETURN b 

화살표 기호 ( ->)는 Cypher 쿼리에서 그래프에서 방향 관계를 나타내는 데 사용됩니다.

또 다른 일반적인 그래프 쿼리 언어 인 Gremlin은 Apache TinkerPop 그래프 컴퓨팅 프레임 워크를 위해 고안되었습니다. Gremlin 구문은 일부 언어의 ORM 데이터베이스 액세스 라이브러리에서 사용하는 구문과 유사합니다.

다음은 Gremlin의 "friends of Scott"쿼리의 예입니다.

gV (). has ( "name", "Scott"). out ( "friendof") 

많은 그래프 데이터베이스는 내장 또는 타사 라이브러리를 통해 Gremlin을 지원합니다.

또 다른 쿼리 언어는 SPARQL입니다. 원래 W3C에서 메타 데이터에 대해 RDF (Resource Description Framework) 형식으로 저장된 데이터를 쿼리하기 위해 개발했습니다. 즉, SPARQL은 그래프 데이터베이스 검색을 위해 고안 되지 않았지만 사용할 수 있습니다. 전체적으로 Cypher와 Gremlin이 더 광범위하게 채택되었습니다.

SPARQL 쿼리에는 SQL을 연상시키는 일부 요소, 즉  SELECTWHERE절이 있지만 나머지 구문은 근본적으로 다릅니다. SPARQL을 SQL과 전혀 관련이 없다고 생각하거나 다른 그래프 쿼리 언어와 관련이 있다고 생각하지 마십시오.

인기있는 그래프 데이터베이스

그래프 데이터베이스는 상대적으로 틈새 시장 사용 사례를 제공하기 때문에 관계형 데이터베이스만큼 많지는 않습니다. 장점으로는 뛰어난 제품을 쉽게 식별하고 논의 할 수 있습니다.

Neo4j

Neo4j는 쉽게 가장 성숙하고 (11 년 동안) 일반적인 사용을위한 그래프 데이터베이스로 가장 잘 알려져 있습니다. 이전 그래프 데이터베이스 제품과 달리 SQL 백엔드를 사용하지 않습니다. Neo4j는 수십만 개의 관계 등을 반환하는 쿼리에서와 같이 큰 그래프 구조를 지원하도록 내부에서 밖으로 엔지니어링 된 네이티브 그래프 데이터베이스입니다.

Neo4j는 무료 오픈 소스 및 유료 엔터프라이즈 에디션으로 제공되며 후자는 데이터 세트의 크기에 대한 제한이 없습니다 (다른 기능 중에서). 실습 할 샘플 데이터 세트가 포함 된 Sandbox를 통해 Neo4j를 온라인으로 실험 할 수도 있습니다.

자세한 내용은 Neo4j의 검토를 참조하십시오.

Microsoft Azure Cosmos DB

Azure Cosmos DB 클라우드 데이터베이스는 야심 찬 프로젝트입니다. 일관된 API 세트를 사용하는 단일 통합 서비스를 통해 기존 테이블, 문서 지향, 컬럼 패밀리 및 그래프와 같은 여러 종류의 데이터베이스를 에뮬레이션하기위한 것입니다.

이를 위해 그래프 데이터베이스는 Cosmos DB가 작동 할 수있는 다양한 모드 중 하나 일뿐입니다. 그래프 유형 쿼리에 Gremlin 쿼리 언어 및 API를 사용하고 Apache TinkerPop 용으로 생성 된 Gremlin 콘솔을 다른 인터페이스로 지원합니다.

Cosmos DB의 또 다른 큰 판매 포인트는 인덱싱, 크기 조정 및 지역 복제가 사용자의 끝을 조정하지 않고도 Azure 클라우드에서 자동으로 처리된다는 것입니다. Microsoft의 올인원 아키텍처가 성능 측면에서 네이티브 그래프 데이터베이스까지 측정하는 방법은 아직 명확하지 않지만 Cosmos DB는 확실히 유연성과 확장 성의 유용한 조합을 제공합니다.

자세한 내용은의 Azure Cosmos DB 검토를 참조하세요.

야누스 그래프

JanusGraph는 TitanDB 프로젝트에서 분리되었으며 현재 Linux Foundation의 관리하에 있습니다. 지원되는 여러 백엔드 (Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB)를 사용하여 그래프 데이터를 저장하고 Gremlin 쿼리 언어 (Apache TinkerPop 스택의 다른 요소 포함)를 지원하며 Apache Solr, Apache Lucene 또는 Elasticsearch 프로젝트를 통해 전체 텍스트 검색을 통합합니다.

JanusGraph 프로젝트의 지원자 중 하나 인 IBM은 Compose for JanusGraph라고하는 IBM Cloud에서 JanusGraph의 호스팅 버전을 제공합니다. Azure Cosmos DB와 마찬가지로 Compose for JanusGraph는 리소스 사용량에 따른 가격 책정으로 자동 크기 조정 및 고 가용성을 제공합니다.