Amazon Neptune 검토 : OLTP를위한 확장 가능한 그래프 데이터베이스

Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, Azure Cosmos DB의 그래프 부분 및이 리뷰의 주제 인 Amazon Neptune과 같은 그래프 데이터베이스는 다음과 같은 여러 종류의 애플리케이션에 적합합니다. 소셜 그래프를 기반으로 한 권장 사항 제공, 사기 탐지 수행, 실시간 제품 권장 사항 제공, 네트워크 및 IT 운영 침입 탐지와 같이 고도로 연결된 데이터 세트. 이들은 대규모 데이터 세트에서 작동하는 복잡한 SQL 조인이 필요하기 때문에 기존의 관계형 데이터베이스가 비효율적이고 느려지는 경향이있는 영역입니다.

Neptune은 ACID 속성과 즉각적인 일관성을 갖춘 완전 관리 형 그래프 데이터베이스 서비스로, 핵심에는 수십억 개의 관계를 저장하고 밀리 초 지연 시간으로 그래프를 쿼리하는 데 최적화 된 특수 목적의 고성능 그래프 데이터베이스 엔진이 있습니다. Neptune은 가장 널리 사용되는 두 가지 오픈 소스 그래프 쿼리 언어 인 Apache TinkerPop Gremlin 및 W3C SPARQL을 지원합니다. Neo4j에서 사용되는 인기있는 CQL (Cypher Query Language)은 독점적으로 시작되었지만 나중에 오픈 소스가되었습니다.

Gremlin 및 SPARQL은 다양한 종류의 그래프 데이터베이스를 처리합니다. CQL과 마찬가지로 Gremlin은 속성 그래프 데이터베이스 용입니다. SPARQL은 웹용으로 설계된 RDF (Resource Description Framework) 트리플 용입니다. Gremlin은 그래프 순회 언어입니다. SPARQL은 SELECT 및 WHERE 절이있는 쿼리 언어입니다.

Amazon Neptune 구현은 단일 데이터베이스 인스턴스에서 Gremlin 및 SPARQL 언어를 모두 허용하지만 서로의 데이터를 볼 수는 없습니다. 둘 다 허용하는 이유는 새로운 사용자가 자신의 요구에 더 적합한 것이 무엇인지 알아낼 수 있도록하기 위함입니다.

Neptune 설명서에는 Gremlin의 Gremlin-Groovy, Gremlin-Java 및 Gremlin-Python 변형을 사용하는 샘플이 있습니다. Neptune은 콘솔에서 Gremlin, HTTP REST 호출, Java, Python, .Net 및 Node.js 프로그램을 허용합니다. SPARQL 측에서 Neptune은 Eclipse RDF4J 콘솔 및 워크 벤치, HTTP REST 호출 및 Java 프로그램을 지원합니다.

Amazon Neptune 기능 및 이점

서비스로서의 완전 관리 형 트랜잭션 그래프 데이터베이스 인 Amazon Neptune은 데이터베이스 하드웨어 및 소프트웨어를 유지할 필요가 없을뿐만 아니라 손쉬운 확장, 99.99 % 이상의 가용성 및 여러 수준의 보안을 제공합니다. Neptune 데이터베이스 클러스터는 3 개의 가용 영역에 걸쳐 6 개의 데이터 복제본에 최대 64TB의 자동 확장 스토리지를 보유 할 수 있으며, 추가 영역에서 읽기 복제본을 사용하여 고 가용성을 활성화하는 경우 그 이상입니다.

Neptune 데이터 스토리지 계층은 SSD, 내결함성 및자가 치유로 지원됩니다. 디스크 오류는 데이터베이스 가용성 손실없이 백그라운드에서 복구됩니다. Neptune은 자동으로 데이터베이스 충돌을 감지하고 캐시가 데이터베이스 프로세스와 분리되어 있고 다시 시작할 수 있기 때문에 충돌 복구를 수행하거나 데이터베이스 캐시를 재 구축 할 필요없이 일반적으로 30 초 이내에 다시 시작합니다. 전체 기본 인스턴스가 실패하면 Neptune은 최대 15 개의 읽기 전용 복제본 중 하나로 자동으로 장애 조치됩니다. 백업은 S3로 지속적으로 스트리밍됩니다.

인스턴스를 수정하여 Amazon Neptune 클러스터를 확장하거나 축소 할 수 있습니다. 또는 원하는 크기의 인스턴스를 추가하고 데이터 복사본이 마이그레이션되고 새 인스턴스를 다음으로 승격 한 후 이전 인스턴스를 종료하여 (다운 타임을 방지하기 위해) 일 순위. Neptune VM 인스턴스 크기는 db.r4.large (vCPU 2 개 및 RAM 16GiB)에서 db.r4.16xlarge (vCPU 64 개 및 RAM 488GiB)까지 다양합니다.

Amazon Neptune은 VPC (가상 사설 클라우드) 네트워크에서 엔진을 실행하고 선택적으로 AWS Key Management Service를 사용하여 저장 데이터를 암호화하여 보안을 구현합니다. 기본 스토리지를 암호화하는 것 외에도 Neptune은 백업, 스냅 샷 및 복제본도 암호화합니다. Neptune은 HIPAA 애플리케이션에서 사용할 수 있습니다. Neptune은 우수한 쿼리 성능을 달성하기 위해 특정 인덱스를 생성 할 필요 가 없습니다 . 이는 인덱스를 신중하게 조정하여 쿼리 및 쓰기 성능의 균형을 맞추는 데서 반가운 변화입니다.

Amazon Neptune은 Neo4j, TigerGraph 및 AnzoGraph와 같은 다른 그래프 데이터베이스에 포함 된 PageRank와 같은 분석 쿼리 알고리즘을 지원 하지 않습니다 . Neptune은 분석 (OLAP) 데이터베이스가 아닌 방대한 데이터 세트를위한 저 지연 트랜잭션 (OLTP) 그래프 데이터베이스로 설계되었으며 분석 사용 사례 또는 3 개 이상의 홉이 포함 된 쿼리에 최적화되어 있지 않으며 PageRank는 모든 항목에 적용됩니다. 데이터베이스에서.

Amazon Neptune은 집계를 지원하므로 약간의 분석을 수행 할 수 있지만 많지는 않습니다. Neptune과 마찬가지로 Neo4j도 원래 OLTP에 사용되도록 의도되었지만 2017 년에 분석 쿼리 라이브러리를 추가했습니다. Neptune에서 분석 기능이 제한되어 있다는 사실이 저 지연 OLTP 그래프 데이터베이스이므로 반드시 배제 할 이유는 아닙니다. 전 세계에 분산 된 읽기 전용 복제본과 64TB의 데이터를 처리 할 수있는 능력은 재채기 할 필요가 없습니다.

Amazon Neptune 시작하기

Amazon Neptune 콘솔에서 직접 또는 AWS CloudFormation 템플릿을 사용하여 Neptune 스택을 생성하는 두 가지 방법으로 Amazon Neptune 클러스터를 시작할 수 있습니다. 제공된 CloudFormation 템플릿은 매우 안전하지 않기 때문에 프로덕션에 적합하지 않습니다. 이는 자습서의 기초로 만들어졌습니다.

애플리케이션에서 필요할 때마다 작게 시작하여 용량 (더 큰 VM 또는 더 많은 읽기 복제본)을 추가 할 수 있습니다. 스토리지는 자동으로 증가하며 사용한 스토리지에 대해서만 비용을 지불하면됩니다.

다음 스크린 샷에서는 Neptune 콘솔에서 생성 된 Neptune 이미지의 수명주기 중 일부를 보여줍니다. 클러스터 생성부터 시작합니다.

클러스터에 대한 고 가용성을 원하십니까? 전혀 어렵지 않습니다.

고급 설정에는 여러 패널이 있습니다. 다행히도 대부분의 기본값은 사용자의 요구를 충족합니다.

마지막으로 버튼을 눌러 데이터베이스를 시작하기 전에 경고가 표시됩니다. 설명이 정말로 필요한 경우 링크를 마우스 오른쪽 버튼으로 클릭하고 다른 탭에 표시하십시오. (이 버그가 수정되기를 바랍니다.)

작동중인 클러스터가 있으면 인스턴스에서 여러 작업을 수행 할 수 있습니다.

클러스터 수준에서 요약을 가져올 수 있습니다.

인스턴스 수준에서 성능 그래프를 볼 수 있습니다.

Amazon Neptune으로 데이터로드

Amazon Neptune에 데이터를로드하려면 먼저 올바른 형식 (Gremlin 용 CSV, RDF 용 트리플, 쿼드, RDF / XML 또는 Turtle) 중 하나로 Amazon S3에 파일을로드합니다. 로더는 단일 파일의 gzip 압축을 지원합니다.

예를 들어 CloudFormation 템플릿에 의해 이미 생성 된 경우가 아니면 S3 버킷에 액세스 할 수있는 권한을 Neptune에 부여하려면 IAM 역할과 S3 VPC 엔드 포인트를 생성해야합니다. REST 엔드 포인트 (예 : curl 명령에서)를 통해 호출 할 수있는 Neptune 로더 API는 IAM 역할을 맡고 데이터를 클러스터에 대량로드 할 수 있습니다. GitHub에는 GraphML을 CSV로 변환하는 변환기도 있습니다. 데이터로드 연습은 지원되는 모든 데이터 형식에 대한 것입니다.

Gremlin을 사용하여 Amazon Neptune 쿼리

Gremlin 콘솔과 REST 엔드 포인트를 사용하여 데이터베이스와 동일한 VPC에있는 EC2 VM에서 Gremlin의 Amazon Neptune 인스턴스에 연결하고 쿼리 할 수 ​​있습니다. 애플리케이션에 더 유용하게 Java, Python, .Net 및 Node.js에서 Gremlin을 사용하여 Neptune을 쿼리 할 수 ​​있습니다.

Gremlin에 대한 전체 책, Practical Gremlin : An Apache TinkerPop Tutorial , by Kelvin Lawrence가 있습니다. 이 책은 데이터베이스로 TinkerGraph를 사용하지만 Amazon에서 문서화 한 작은 예외를 제외하고 Neptune에서도 동일한 Gremlin 구문이 작동합니다.

Gremlin 쿼리는 그래프 정점 및 간선을 탐색하는 방법을 설명합니다. 이 책에서 논의 된 항공 노선 데이터베이스의 예는 텍사스 오스틴 (공항 코드 AUS)에서 인도 아그라 (공항 코드 AGR)까지 2 개의 경유지로 비행하는 모든 방법을 찾습니다.

gV (). has ( 'code', 'AUS'). repeat (out ()). times (3) .has ( 'code', 'AGR'). path (). by ( 'code')

Amazon Neptune에 대한 책의 예제를 시도하려면 먼저 AWS CLI cp 명령을 사용하여 엣지 및 노드 CSV 파일을 S3 버킷에 복사하고 거기에서 Neptune으로 데이터를로드해야합니다.

SPARQL을 사용하여 Amazon Neptune 쿼리

RDF4J 콘솔, RDF4J 워크 벤치 및 REST 엔드 포인트를 사용하여 데이터베이스와 동일한 VPC에있는 EC2 VM에서 SPARQL의 Amazon Neptune 인스턴스에 연결하고 쿼리 할 수 ​​있습니다. 애플리케이션에 더 유용하게 Java에서 SPARQL을 사용하여 Neptune을 쿼리 할 수 ​​있습니다. SPARQL 1.1 쿼리 언어 사양은 쿼리 구성 방법을 정의합니다. 웹에서 "sparql tutorial"을 검색하면 주제에 대한 많은 무료 서면 및 비디오 자습서를 찾을 수 있습니다. 데이터를로드 한 후에는 모두 Neptune에서 작동합니다.

SPARQL은 Gremlin보다 기능 코드가 아닌 SQL과 비슷합니다. 예를 들면 :

선택? 책? 누구

어디 {? book dc : creator? 누가}

Amazon Neptune 성능 및 확장

Amazon Neptune은 대규모 (최대 64TB) 데이터베이스에서 최대 3 개 홉의 지연 시간이 짧은 그래프 쿼리를 위해 설계되었습니다. 읽기 용량을 확장하기 위해 3 개의 가용 영역에서 최대 15 개의 짧은 지연 시간 읽기 전용 복제본을 지원하며 Amazon에 따르면 초당 100,000 개 이상의 그래프 쿼리를 실행할 수 있습니다.

인스턴스 크기는 15GiB에서 488GiB의 RAM이있는 vCPU 2 개에서 64 개로, 각 단계에서 두 배가됩니다. Neptune은 총 1024 개의 vCPU에 대해 64 개의 vCPU에 16 개의 인스턴스를, 총 7808GiB의 RAM에 대해 488GiB RAM에 16 개의 인스턴스를 사용할 수 있습니다. 이는 인스턴스 크기와 읽기 전용 복제본 수를 고려할 때 전체적으로 512 배 확장 가능한 확장입니다. 비용은 리소스 확장을 거의 정확하게 추적합니다.

트랜잭션 그래프 데이터베이스를 서비스로 찾고 있다면 Amazon Neptune이 실행 가능한 선택입니다. Neptune이 Gremlin 및 SPARQL 쿼리 언어를 모두 지원하므로 이에 대해 애플리케이션을 구축 할 개발자를 찾을 수 있습니다. 반면에 Neptune의 Cypher 지원 부족은 기존 Neo4j 사용자를 실망시킬 수 있으며 OLAP 및 그래프 알고리즘 지원이 부족하면 트랜잭션 및 분석을 위해 단일 그래프 데이터베이스를 원하는 사람들을 실망시킬 수 있습니다.

Amazon Neptune의 광범위한 용량 (최대 16 배 크기 및 16 개 인스턴스), 높은 최대 트랜잭션 속도 (초당 10 만 쿼리) 및 종량제 요금이 대부분의 비즈니스 요구 사항에 맞아야합니다. 그러나 온 프레미스 옵션이 없기 때문에 민감한 데이터를 클라우드에 저장하지 않는 정책이있는 회사와 지속적인 운영 비용보다 자본 비용을 발생 및 적어 두는 것을 선호하는 회사에서 사용하지 못할 수 있습니다.

비용 : 인스턴스 크기에 따라 인스턴스 시간당 $ 0.348 ~ $ 5.568, 스토리지의 경우 GB 당 월 $ 0.10, I / O 요청 백만 건당 $ 0.20, 백업 스토리지의 경우 GB 당 월 $ 0.023, 아웃 바운드 데이터 전송의 경우 GB 당 $ 0.12 다양한 가격 할인이 적용됩니다. 

플랫폼 : Amazon Web Services; Apache TinkerPop Gremlin 또는 SPARQL 쿼리를 지원합니다. AWS 콘솔, HTTP REST, Java, RDF4J Workbench (SPARQL), Python, .Net 및 Node.js (Gremlin)를 통한 액세스.