Neo4j에 대한 Neptune의 호환성 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Neo4j에 대한 Neptune의 호환성

Neo4j는 데이터 로드, 데이터 ETL, 애플리케이션 쿼리, 데이터 스토리지 및 관리 작업이 모두 EC2 인스턴스와 같은 동일한 컴퓨팅 리소스 세트에서 이루어지는 올인원 아키텍처식 접근 방식을 기반으로 합니다. Amazon Neptune은 OLTP 중심의 개방형 사양 그래프 데이터베이스로서, 아키텍처가 작업을 분리하고 리소스를 분리하여 동적으로 확장할 수 있도록 합니다.

Neo4j에는 OpenCypher 사양에 포함되지 않거나, OpenCypher와 호환되지 않거나, Neptune의 OpenCypher 구현과 호환되지 않는 타사 도구를 포함하여 다양한 기능 및 도구가 있습니다. 다음은 이들 중 가장 일반적인 이유 중 일부입니다.

Neptune에는 없는 Neo4J 전용 기능

  • LOAD CSV - Neptune은 데이터 로딩에 대한 아키텍처 접근 방식이 Neo4j와 다릅니다. 더 나은 확장과 비용 최적화를 위해 Neptune은 리소스와 관련된 문제를 분리하고 Neptune 벌크 로더가 지원하는 형식으로 데이터를 준비하는 데 필요한 ETL 프로세스를 수행하는 AWS Glue와 같은 AWS 서비스 통합 중 하나를 사용할 것을 권장합니다.

    또 다른 옵션은 Amazon EC2 인스턴스, Lambda 함수, Amazon Elastic Container Service, AWS Batch 작업 등과 같은 AWS 컴퓨팅 리소스에서 실행되는 애플리케이션 코드를 사용하여 동일한 작업을 수행하는 것입니다. 코드는 Neptune의 HTTPS 엔드포인트 또는 Bolt 엔드포인트를 사용할 수 있습니다.

  • 세분화된 액세스 제어 - Neptune은 IAM 조건 키를 사용하여 데이터 액세스 작업에 대한 세분화된 액세스 제어를 지원합니다. 애플리케이션 계층에서 세분화된 액세스 제어를 추가로 구현할 수 있습니다.

  • Neo4j 패브릭 - Neptune은 SPARQL SERVICE 키워드를 사용하여 RDF 워크로드에 대한 데이터베이스 전반의 쿼리 페더레이션을 지원합니다. 현재 속성 그래프 워크로드에 대한 쿼리 페더레이션에 대한 공개 표준이나 사양이 없기 때문에 애플리케이션 계층에서 해당 기능을 구현해야 합니다.

  • 역할 기반 액세스 제어(RBAC) - Neptune은 IAM 정책 및 역할 할당을 통해 인증을 관리합니다. IAM 정책 및 역할은 애플리케이션 내에서 매우 유연한 수준의 사용자 관리를 제공하므로 클러스터를 구성하기 전에 IAM 개요의 정보를 읽고 이해하는 것이 좋습니다.

  • 북마크 - Neptune 클러스터는 단일 라이터 인스턴스와 최대 15개의 읽기 복제본 인스턴스로 구성됩니다. 라이터 인스턴스에 기록된 데이터는 ACID를 준수하며 후속 읽기 시 강력한 일관성을 보장합니다. 읽기 복제본은 라이터 인스턴스와 동일한 스토리지 볼륨을 사용하며 일반적으로 데이터가 기록된 시점으로부터 100ms 이내에 최종적으로 일관성을 유지합니다. 사용 사례에서 새 쓰기의 읽기 일관성을 즉시 보장해야 하는 경우 이러한 읽기는 리더 엔드포인트 대신 클러스터 엔드포인트로 전달되어야 합니다.

  • APOC 프로시저 - APOC 프로시저는 OpenCypher 사양에 포함되어 있지 않기 때문에 Neptune은 외부 프로시저를 직접 지원하지 않습니다. 대신 Neptune은 다른 AWS 서비스와의 통합을 통해 확장 가능하고 안전하며 강력한 방식으로 유사한 최종 사용자 기능을 구현합니다. 때때로 APOC 프로시저는 OpenCypher 또는 Gremlin에서 다시 작성할 수 있으며 일부는 Neptune 애플리케이션과 관련이 없습니다.

    일반적으로 APOC 프로시저는 다음과 같은 범주로 분류됩니다.

    • 가져오기 - Neptune은 쿼리 언어, Neptune 벌크 로더를 사용하거나 AWS Database Migration Service 대상으로 사용하는 다양한 형식을 사용하여 데이터를 가져올 수 있도록 지원합니다. 데이터에 대한 ETL 작업은 AWS Glue 및 neptune-python-utils 오픈 소스 패키지를 사용하여 수행할 수 있습니다.

    • 내보내기 - Neptune은 다양한 일반 내보내기 형식 및 방법을 지원하는 neptune-export 유틸리티를 사용하여 데이터를 내보낼 수 있도록 지원합니다.

    • 데이터베이스 통합 - Neptune은 ETL 도구(예: AWS Glue) 또는 마이그레이션 도구를 사용하여 AWS Database Migration Service와 같은 다른 데이터베이스와의 통합을 지원합니다.

    • 그래프 업데이트 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • 데이터 구조 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • 임시(일시) - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • 수학적 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • 고급 그래프 쿼리 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • 그래프 비교 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

    • Cypher 집행 - Neptune은 OpenCypher 및 Gremlin 쿼리 언어를 모두 지원하여 속성 그래프 데이터를 업데이트하는 다양한 기능을 지원합니다. 일반적으로 사용되는 프로시저의 재작성 예는 Cypher 재작성 섹션을 참조하세요.

  • 사용자 지정 프로시저 - Neptune은 사용자가 만든 사용자 지정 프로시저를 지원하지 않습니다. 이 기능은 애플리케이션 계층에서 구현해야 합니다.

  • 지리공간 - Neptune은 지리공간 기능에 대한 기본 지원을 제공하지 않지만, Ross Gabay와 Ablash Vinod의 블로그 게시물 지리공간 쿼리에 대해 Amazon Neptune과 Amazon OpenSearch Service를 결합(2022년 2월 1일)에서 볼 수 있듯이 다른 AWS 서비스와의 통합을 통해 유사한 기능을 구현할 수 있습니다.

  • 그래프 데이터 과학 - Neptune은 현재 그래프 분석 알고리즘 라이브러리를 지원하는 메모리 최적화 엔진인 Neptune Analytics를 통해 그래프 분석을 지원합니다.

    또한 Neptune은 AWS Pandas SDK 및 Python 환경 내에서 이러한 통합을 활용하여 그래프 데이터에 대한 분석을 실행하는 방법을 보여주는 여러 샘플 노트북과의 통합을 제공합니다.

  • 스키마 제약 조건 - Neptune에서 사용할 수 있는 유일한 스키마 제약 조건은 노드 또는 엣지 ID의 고유성입니다. 그래프의 요소에 대한 추가 스키마 제약 조건이나 추가 고유성 또는 값 제약 조건을 지정하는 기능은 없습니다. Neptune의 ID 값은 문자열이며 다음과 같이 Gremlin을 사용하여 설정할 수 있습니다.

    g.addV('person').property(id, '1') )

    ID를 고유성 제약으로 활용해야 하는 애플리케이션은 고유성 제약 조건을 충족하기 위해 이 방법을 시도하는 것이 좋습니다. 애플리케이션이 고유성 제약 조건으로 여러 열을 사용한 경우 ID는 이러한 값의 조합으로 설정될 수 있습니다. 예를 들어 id=123, code='SEA'를 복잡한 고유성 제약 조건을 충족하기 위해 ID='123_SEA'로 표현할 수 있습니다.

  • 멀티테넌시 - Neptune은 클러스터당 단일 그래프만 지원합니다. Neptune을 사용하여 멀티테넌트 시스템을 구축하려면 여러 클러스터를 사용하거나 단일 그래프 내에서 테넌트를 논리적으로 분할하고 애플리케이션 측 로직을 사용하여 분리하도록 합니다. 예를 들어 다음과 같이 tenantId 속성을 추가하고 각 쿼리에 포함시키세요.

    MATCH p=(n {tenantId:1})-[]->({tenantId:1}) RETURN p LIMIT 5)

    Neptune Serverless를 사용하면 필요에 따라 각각 독립적으로 자동 확장되는 여러 DB 클러스터를 사용하여 비교적 쉽게 멀티테넌시를 구현할 수 있습니다.

Neo4j 도구에 대한 Neptune 지원

Neptune은 Neo4j 도구에 대한 다음과 같은 대안을 제공합니다.

  • Neo4j 브라우저 - Neptune은 쿼리를 실행하고 결과를 시각화하기 위한 개발자 중심의 IDE를 제공하는 오픈 소스 그래프 노트북을 제공합니다.

  • Neo4j Bloom - Neptune은 Graph-explorer, Tom Sawyer, Cambridge Intelligence, Graphistry, metaphacts, G.V()와 같은 타사 시각화 솔루션을 사용하여 풍부한 그래프 시각화를 지원합니다.

  • GraphQL - Neptune은 현재 사용자 지정 AWS AppSync 통합을 통해 GraphQL을 지원합니다. Amazon Neptune과 AWS Amplify로 그래프 애플리케이션 구축하기 블로그 게시물 및 예제 프로젝트인 AWS AppSync 및 Amazon Neptune을 사용한 서버리스 칼로리 트래커 애플리케이션 구축을 참조하세요.

  • NeoSemantics - Neptune은 기본적으로 RDF 데이터 모델을 지원하므로 RDF 워크로드를 실행하려는 고객은 Neptune의 RDF 모델 지원을 사용하는 것이 좋습니다.

  • Arrows.app - 내보내기 명령을 사용하여 모델을 내보낼 때 생성되는 Cypher는 Neptune과 호환됩니다.

  • Linkurious Ogma - Linkurious Ogma와의 통합 샘플은 여기에서 확인할 수 있습니다.

  • 스프링 데이터 Neo4j - 현재 Neptune과 호환되지 않습니다.

  • Neo4j Spark 커넥터 - Neo4j Spark 커넥터는 Spark Job 내에서 OpenCypher를 사용하여 Neptune에 연결하는 데 사용할 수 있습니다. 다음은 몇 가지 샘플 코드 및 애플리케이션 구성입니다.

    샘플 코드:

    SparkSession spark = SparkSession .builder() .config("encryption.enabled", "true") .appName("Simple Application").config("spark.master", "local").getOrCreate(); Dataset<Row> df = spark.read().format("org.neo4j.spark.DataSource") .option("url", "bolt://(your cluster endpoint):8182") .option("encryption.enabled", "true") .option("query", "MATCH (n:airport) RETURN n") .load(); System.out.println("TOTAL RECORD COUNT: " + df.count()); spark.stop();

    애플리케이션 구성

    <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-connector-apache-spark_2.12-4.1.0</artifactId> <version>4.0.1_for_spark_3</version> </dependency>

여기에 나열되지 않은 Neo4j 기능 및 도구

여기에 나열되지 않은 도구 또는 기능을 사용하는 경우 Neptune 또는 AWS 포함된 다른 서비스와의 호환성을 확신할 수 없습니다. 추가 질문이 있는 경우 AWS 고객 지원 팀에 문의하거나 계정 팀에 문의하세요.