Amazon Neptune 엔진 버전 1.2.0.0(2022년 7월 21일) - Amazon Neptune

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

Amazon Neptune 엔진 버전 1.2.0.0(2022년 7월 21일)

2022년 7월 21일부터 엔진 버전 1.2.0.0이 정식으로 배포되고 있습니다. 모든 리전에서 새 릴리스를 사용할 수 있게 되려면 며칠이 걸립니다.

참고

1.2.0.0 이전 엔진 버전에서 업그레이드하는 경우

  • 엔진 릴리스 1.2.0.0에서는 사용자 지정 파라미터 그룹과 사용자 지정 클러스터 파라미터 그룹을 위한 새로운 형식을 도입했습니다. 따라서 1.2.0.0 이전 엔진 버전에서 엔진 버전 1.2.0.0 이상으로 업그레이드하는 경우 파라미터 그룹 패밀리 neptune1.2를 사용하여 기존의 모든 사용자 지정 파라미터 그룹과 사용자 지정 클러스터 파라미터 그룹을 다시 생성해야 합니다. 이전 릴리스에서는 파라미터 그룹 패밀리 neptune1을 사용했으며, 이러한 파라미터 그룹은 릴리스 1.2.0.0 이상에서는 작동하지 않습니다. 자세한 정보는 Amazon Neptune 파라미터 그룹 섹션을 참조하십시오.

  • 엔진 릴리스 1.2.0.0에는 실행 취소 로그에 대한 새로운 형식도 도입되었습니다. 따라서 이전 엔진 버전에서 생성된 모든 실행 취소 로그를 삭제하고 UndoLogsListSize CloudWatch 지표가 0으로 떨어져야 1.2.0.0 이전 버전에서 업그레이드를 시작할 수 있습니다. 업데이트를 시작하려고 할 때 실행 취소 로그 기록이 너무 많으면(20만 개 이상), 실행 취소 로그 제거가 완료될 때까지 기다리는 동안 업그레이드를 시도하는 제한 시간이 초과될 수 있습니다.

    제거가 이루어지는 클러스터의 라이터 인스턴스를 업그레이드하여 제거 속도를 높일 수 있습니다. 업그레이드를 시도하기 전에 이렇게 하면 시작하기 전에 실행 취소 로그의 수가 줄어들 수 있습니다. 라이터의 크기를 24XL 인스턴스 유형으로 늘리면 제거 속도가 시간당 백만 개 이상으로 증가할 수 있습니다.

    UndoLogsListSize CloudWatch 지표가 매우 큰 경우 지원 사례를 열면 이를 줄이기 위한 추가 전략을 모색하는 데 도움이 될 수 있습니다.

  • 마지막으로, 릴리스 1.2.0.0에는 IAM 인증과 함께 Bolt 프로토콜을 사용하던 이전 코드에 영향을 미치는 주요 변경 사항이 적용되었습니다. 릴리스 1.2.0.0부터 Bolt는 IAM 서명을 위한 리소스 경로가 필요합니다. Java에서 리소스 경로를 설정하면 request.setResourcePath("/openCypher"));처럼 보일 수 있습니다. 다른 언어에서는 엔드포인트 URI에 /openCypher를 추가할 수 있습니다. Bolt 프로토콜 사용의 예제를 참조하세요.

이 릴리스의 후속 패치 릴리스

이 엔진 릴리스의 새로운 기능

  • 글로벌 데이터베이스에 대한 지원이 추가되었습니다. Neptune 글로벌 데이터베이스는 여러 AWS 리전에 걸쳐 있으며, 하나의 리전에 있는 기본 DB 클러스터와 다른 리전에 있는 최대 5개의 보조 DB 클러스터로 구성됩니다.

  • 데이터 영역 작업을 기반으로 Neptune IAM 정책에 이전보다 더 세분화된 액세스 제어에 대한 지원이 추가되었습니다. 이는 더 이상 지원되지 않는 connect 작업을 기반으로 하는 기존 IAM 정책을 보다 세분화된 데이터 영역 작업을 사용하도록 조정해야 한다는 점에서 획기적인 변화입니다. 정책 유형 IAM를 참조하세요.

  • 리더 인스턴스 가용성이 개선되었습니다. 이전에는 라이터 인스턴스가 다시 시작될 때 Neptune 클러스터의 모든 리더 인스턴스도 다시 시작되었습니다. 엔진 릴리스 1.2.0.0부터 라이터 재시작 후에도 리더 인스턴스가 활성 상태를 유지하므로 리더 가용성이 향상됩니다. 리더 인스턴스를 별도로 다시 시작하여 파라미터 그룹 변경 내용을 적용할 수 있습니다. Amazon Neptune에서 DB 인스턴스 재부팅를 참조하세요.

  • 스트림 레코드가 삭제되기 전에 서버에 보관되는 일수를 설정할 수 있는 새로운 neptune_streams_expiry_days DB 클러스터 파라미터가 추가되었습니다. 범위는 1~90이고, 기본값은 7입니다.

이 엔진 릴리스의 개선 사항

  • ByteCode 쿼리에 대한 Gremlin 직렬화 성능이 개선되었습니다.

  • Neptune은 이제 DFE 엔진을 사용하여 텍스트 조건자를 처리하므로 성능이 향상됩니다.

  • Neptune은 이제 DFE 엔진을 사용하여 비터미널 및 하위 순회 제한을 포함하여 limit() Gremlin 단계를 처리합니다.

  • Gremlin union() 단계의 DFE 처리가 다른 새 기능과 함께 작동하도록 변경되었습니다. 즉, 참조 노드가 예상대로 쿼리 프로필에 표시됩니다.

  • DFE 내에서 비용이 많이 드는 일부 조인 작업을 병렬화하여 성능이 최대 5배까지 개선되었습니다.

  • Gremlin DFE 엔진의 OrderGlobalStep order(global)에 대한 by() 변조 지원이 추가되었습니다.

  • DFE의 세부 정보 설명에 주입된 정적 값 표시가 추가되었습니다.

  • 중복 패턴 프루닝 시 성능이 개선되었습니다.

  • Gremlin DFE 엔진에 순서 보존 지원이 추가되었습니다.

  • 다음과 같이 빈 필터가 있는 Gremlin 쿼리의 성능이 개선되었습니다.

    g.V().hasId(P.within([]))
    g.V().hasId([])
  • SPARQL 쿼리가 Neptune이 내부적으로 표현하기에는 너무 큰 숫자 값을 사용할 때 발생하는 오류 메시지가 개선되었습니다.

  • 스트림이 사용 해제된 경우 인덱스 검색을 줄여 연결된 엣지가 있는 버텍스를 삭제하는 성능이 개선되었습니다.

  • DFE 지원을 더 많은 has() 단계 변형, 특히 hasKey(), hasLabel() 그리고 has() 내에서 문자열/URI에 대한 범위 조건자로 확대했습니다. 이렇게 하면 다음과 같은 쿼리에 영향을 줍니다.

    // hasKey() on properties g.V().properties().hasKey("name") g.V().properties().has(T.key, TextP.startingWith("a")) g.E().properties().hasKey("weight") g.E().properties().hasKey(TextP.containing("t")) // hasLabel() on vertex properties g.V().properties().hasLabel("name") // range predicates on ID and Label fields g.V().has(T.label, gt("person")) g.E().has(T.id, lte("(an ID value)"))
  • 목록의 문자열을 단일 문자열로 연결하는 Neptune 전용 openCypher join() 함수가 추가되었습니다.

  • 새 글로벌 데이터베이스 API에 대한 데이터 액세스 권한 및 권한을 포함하도록 Neptune 관리형 정책이 업데이트되었습니다.

이 엔진 릴리스에서 수정된 결함

  • 콘텐츠 유형이 지정되지 않은 HTTP 요청이 자동으로 실패하는 버그가 수정되었습니다.

  • 쿼리 최적화 도구에서 쿼리 내 서비스 호출을 사용할 수 없었던 SPARQL 버그가 수정되었습니다.

  • Turtle RDF 구문 분석에서 Unicode 데이터의 특정 조합으로 인해 오류가 발생하던 SPARQL 버그가 수정되었습니다.

  • GRAPHSELECT 절의 특정 조합으로 인해 잘못된 쿼리 결과가 생성되는 SPARQL 버그가 수정되었습니다.

  • 다음과 같이 통합 단계 내에서 모든 필터 단계를 사용하는 쿼리의 정확성 문제를 일으킨 Gremlin 버그가 수정되었습니다.

    g.V("1").union(hasLabel("person"), out())
  • count()를 사용하지 않으면 반환되는 실제 결과에 both().simplePath()count()가 2배로 나타나는 Gremlin 버그가 수정되었습니다.

  • IAM 인증이 사용 설정된 클러스터에 대한 Bolt 요청에 대해 서버에서 잘못된 서명 불일치 예외가 생성되는 openCypher 버그가 수정되었습니다.

  • HTTP keep-alive를 사용하는 요청이 실패한 후 제출된 경우 쿼리가 잘못 종료될 수 있는 openCypher 버그가 수정되었습니다.

  • 상수 값을 반환하는 쿼리를 제출할 때 내부 오류가 발생할 수 있는 openCypher 버그가 수정되었습니다.

  • DFE 하위 쿼리 Time(ms)이 이제 DFE 하위 쿼리 내 연산자의 CPU 시간을 올바르게 합산하도록 세부 정보 설명의 버그가 수정되었습니다. 설명 출력의 다음 발췌문을 예제로 들 수 있습니다.

    subQuery1 ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣ ... ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 2 │ - │ DFEChunkLocalSubQuery │ subQuery=...graph#336e.../graph_1 │ - │ 1 │ 1 │ 1.00 │ 0.38 ║ ║ │ │ │ │ coordinationTime(ms)=0.026 │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ... subQuery=...graph#336e.../graph_1 ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣ ║ 0 │ 1 │ - │ DFESolutionInjection │ solutions=[?100 -> [-10^^<LONG>]] │ - │ 0 │ 1 │ 0.00 │ 0.04 ║ ║ │ │ │ │ outSchema=[?100] │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 3 │ - │ DFERelationalJoin │ joinVars=[] │ - │ 2 │ 1 │ 0.50 │ 0.29 ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 2 │ 1 │ - │ DFESolutionInjection │ outSchema=[] │ - │ 0 │ 1 │ 0.00 │ 0.01 ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 3 │ - │ - │ DFEDrain │ - │ - │ 1 │ 0 │ 0.00 │ 0.02 ║ ╚════╧════════╧════════╧═══════════════════════╧═══════════════════════════════════╧══════╧══════════╧═══════════╧═══════╧═══════════╝

    하단 테이블의 마지막 열에 있는 subQuery 시간을 합하면 최대 0.36ms(.04 + .29 + .01 + .02 = .36)입니다. 해당 하위 쿼리의 조정 시간(.36 + .026 = .386)을 더하면 위쪽 테이블의 마지막 열에 기록된 하위 subQuery의 시간, 즉 0.38ms에 가까운 결과를 얻을 수 있습니다.

이 릴리스에서 지원되는 쿼리 언어 버전

DB 클러스터를 버전 1.2.0.0으로 업그레이드하기 전에 프로젝트가 다음 쿼리 언어 버전과 호환되는지 확인합니다.

  • Gremlin 초기 버전 지원: 3.5.2

  • Gremlin 최신 버전 지원: 3.5.4

  • openCypher 버전: Neptune-9.0.20190305-1.0

  • SPARQL 버전: 1.1

엔진 릴리스 1.2.0.0에 대한 업그레이드 경로

이 버전은 메이저 엔진 릴리스이므로 자동 업그레이드는 없습니다.

엔진 릴리스 1.1.1.0의 최신 패치 릴리스에서 릴리스 1.2.0.0으로 수동으로만 업그레이드할 수 있습니다. 이전 엔진 릴리스를 먼저 최신 릴리스 1.1.1.0으로 업그레이드해야 1.2.0.0으로 업그레이드할 수 있습니다.

따라서 이 릴리스로 업그레이드하기 전에 현재 릴리스 1.1.1.0의 최신 패치 릴리스를 실행하고 있는지 확인합니다. 그렇지 않은 경우 먼저 1.1.1.0의 최신 패치 릴리스로 먼저 업그레이드합니다.

업그레이드하기 전에 파라미터 그룹 패밀리 neptune1.2를 사용하여 이전 버전에서 사용하던 사용자 지정 DB 클러스터 파라미터 그룹도 다시 만들어야 합니다. 자세한 정보는 Amazon Neptune 파라미터 그룹 섹션을 참조하십시오.

먼저 릴리스 1.1.1.0으로 업그레이드한 다음 바로 릴리스 1.2.0.0으로 업그레이드하는 경우 다음과 같은 오류가 발생할 수 있습니다.

We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.

이 오류가 발생하면 보류 중인 작업이 완료될 때까지 기다리거나, 유지 관리 기간을 즉시 실행하여 이전의 업그레이드를 완료합니다(Amazon Neptune DB 클러스터 유지 관리 참조).

이 릴리스로 업그레이드

DB 클러스터가 이 릴리스에 대한 업그레이드 경로가 있는 엔진 버전을 실행하는 경우 지금 업그레이드할 수 있습니다. 콘솔에서 DB 클러스터 작업을 사용하여 또는 SDK를 사용하여 적격 클러스터를 업그레이드할 수 있습니다. 다음 CLI 명령은 적격 클러스터를 즉시 업그레이드합니다.

Linux, OS X, Unix의 경우:

aws neptune modify-db-cluster \ --db-cluster-identifier (your-neptune-cluster) \ --engine-version 1.2.0.0 \ --allow-major-version-upgrade \ --apply-immediately

Windows의 경우

aws neptune modify-db-cluster ^ --db-cluster-identifier (your-neptune-cluster) ^ --engine-version 1.2.0.0 ^ --allow-major-version-upgrade ^ --apply-immediately

--apply-immediately 대신 --no-apply-immediately를 지정할 수 있습니다. 메이저 버전 업그레이드를 수행하려면 allow-major-version-upgrade 파라미터가 필요합니다. 또한 엔진 버전을 반드시 포함해야 합니다. 그렇지 않으면 엔진이 다른 버전으로 업그레이드될 수 있습니다.

클러스터에서 사용자 지정 클러스터 파라미터 그룹을 사용하는 경우 다음 파라미터를 포함하여 지정해야 합니다.

--db-cluster-parameter-group-name (name of the custom DB cluster parameter group)

마찬가지로 클러스터의 인스턴스가 사용자 지정 DB 파라미터 그룹을 사용하는 경우 이 파라미터를 포함하여 지정해야 합니다.

--db-instance-parameter-group-name (name of the custom instance parameter group)

업그레이드하기 전에 항상 테스트 수행

새로운 메이저 또는 마이너 Neptune 엔진 버전이 릴리스되면 업그레이드하기 전에 먼저 해당 버전에서 항상 Neptune 애플리케이션을 테스트하세요. 마이너 업그레이드이더라도 코드에 영향을 줄 수 있는 새로운 기능이나 동작이 도입될 수 있습니다.

먼저 현재 버전의 릴리스 노트 페이지를 대상 버전의 릴리스 노트 페이지와 비교하여 쿼리 언어 버전에 변경 사항이나 기타 주요 변경 사항이 있는지 확인합니다.

프로덕션 DB 클러스터를 업그레이드하기 전에 새 버전을 테스트하는 가장 좋은 방법은 프로덕션 클러스터를 복제하여 새 엔진 버전을 실행하도록 하는 것입니다. 이렇게 하면 프로덕션 DB 클러스터에 영향을 주지 않고 복제본에서 쿼리를 실행할 수 있습니다.

업그레이드하기 전에 항상 수동 스냅샷 생성

업그레이드하기 전에 항상 DB 클러스터의 수동 스냅샷을 생성하는 것이 좋습니다. 자동 스냅샷은 단기적인 보호 기능만 제공하는 반면, 수동 스냅샷은 명시적으로 삭제하기 전까지는 계속 사용할 수 있습니다.

경우에 따라 Neptune은 업그레이드 프로세스의 일부로 수동 스냅샷을 생성하지만, 여기에 의존해서는 안 되며 항상 자체 수동 스냅샷을 만들어야 합니다.

DB 클러스터를 업그레이드 전 상태로 되돌릴 필요가 없다고 판단되면 직접 만든 수동 스냅샷과 Neptune이 생성한 수동 스냅샷(있는 경우)을 명시적으로 삭제할 수 있습니다. Neptune이 수동 스냅샷을 생성하는 경우 이름은 preupgrade로 시작하고 DB 클러스터 이름, 소스 엔진 버전, 대상 엔진 버전, 날짜가 차례로 뒤따릅니다.

참고

보류 중인 작업이 진행 중인 동안 업그레이드를 시도하면 다음과 같은 오류가 발생할 수 있습니다.

We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.

이 오류가 발생하면 보류 중인 작업이 완료될 때까지 기다리거나, 유지 관리 기간을 즉시 실행하여 이전의 업그레이드를 완료합니다.

엔진 버전 업그레이드에 대한 자세한 내용은 Amazon Neptune DB 클러스터 유지 관리 단원을 참조하십시오. 질문이나 우려 사항이 있는 경우 커뮤니티 포럼 및 AWS Premium Support를 통해 AWS Support 팀에 도움을 요청할 수 있습니다.