이벤트를 통해 버킷을 컬렉션 및 범위로 마이그레이션하기: 2부
다시 한 번 (1부에서와 마찬가지로) Shivani Gupta가 작성한 훌륭한 블로그를 소개해드리고자 합니다, Couchbase 7.0에서 범위 및 컬렉션으로 마이그레이션하는 방법에서 버킷 기반 문서를 Couchbase의 범위 및 컬렉션으로 마이그레이션하는 다른 방법을 자세히 다루고 있습니다. Shivani가 다루는 여러 가지 비이벤트 메서드에 대해서도 읽어보시기 바랍니다.
Couchbase를 처음 사용하든 노련한 수의사라면 스코프와 컬렉션에 대해 들어보셨을 것입니다. 사용해 볼 준비가 되었다면 이 도움말을 참조하세요.
범위 및 컬렉션은 다음 버전에 도입된 새로운 기능입니다. 카우치베이스 서버 7.0 를 사용하여 Couchbase 내에서 데이터를 논리적으로 구성할 수 있습니다. 자세히 알아보기, 범위 및 컬렉션에 대한 이 소개를 읽어보세요..
레거시 RDBMS를 문서 데이터베이스에 매핑하거나 수백 개의 마이크로서비스 및/또는 테넌트를 단일로 통합하려는 경우 범위 및 컬렉션을 활용해야 합니다. 카우치베이스 클러스터(결과적으로 TCO가 훨씬 낮아집니다).
범위 및 컬렉션 마이그레이션에 이벤트 사용
이전 글(1부)에서 이전 CouchBase 버전에서 CouchBase 7.0의 범위 및 컬렉션으로 마이그레이션하는 고성능 방법의 메커니즘에 대해 설명했습니다. 이벤트.
버킷에서 컬렉션으로 마이그레이션하려면 데이터 서비스(또는 KV)와 이벤트 서비스만 있으면 됩니다. 잘 조정된 대규모 Couchbase 클러스터에서는 초당 1백만 개 이상의 문서를 마이그레이션할 수 있습니다. 예, N1QL도 필요 없고 인덱스도 필요하지 않습니다.
이 후속 기사에서는 수십 개(또는 수백 개)의 데이터 유형으로 대규모 마이그레이션을 수행하는 간단한 완전 자동화된 방법론을 제공합니다. Perl 스크립트.
마지막 이벤트 함수에 대한 요약입니다: ConvertBucketToCollections
파트 1에서는 이벤트 함수에 대해 다음과 같이 설정했습니다. 각 고유 유형에 "맥주" 및 "양조장"읽기+쓰기" 모드에서 대상 컬렉션에 버킷 바인딩 별칭을 추가해야 했습니다. 또한 대상 컬렉션을 만들어야 했습니다(이 경우 "bulk.data.beer" 및 "bulk.data.brewery“
파트 1에서는 이벤트 함수에 다음과 같은 자바스크립트 코드를 사용했습니다. 각 고유 유형에 "맥주" 및 "양조장"를 사용하려면 자바스크립트 코드 블록을 복제하고 Couchbase 데이터 서비스에서 해당 바인딩 별칭 또는 대상 컬렉션에 대한 참조를 업데이트해야 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
함수 온업데이트(doc, 메타) { 만약 (!doc.유형) 반환; var 유형 = doc.유형; 만약 (DROP_TYPE) 삭제 doc.유형; 만약 (유형 === '맥주') { 만약 (DO_COPY) beer_col[메타.id] = doc; 만약 (DO_DELETE) { 만약(!beer_col[메타.id]) { // 안전 점검 로그("스킵 삭제 복사본을 찾을 수 없음 유형=" + doc.유형 + ", meta.id=" + 메타.id); } else { 삭제 src_col[메타.id]; } } } 만약 (유형 === '양조장') { 만약 (DO_COPY) brewery_col[메타.id] = doc; 만약 (DO_DELETE) { 만약(!brewery_col[메타.id]) { // 안전 점검 로그("스킵 삭제 복사본을 찾을 수 없음 유형=" + doc.유형 + ", meta.id=" + 메타.id); } else { 삭제 src_col[메타.id]; } } } } |
파트 1의 기술은 효과가 있지만 유형이 많으면 어떻게 해야 하나요?
이벤트 기능을 사용하면 실제로 1부에서 설명한 대로 마이그레이션을 수행할 수 있지만 설정하는 데 약간의 작업이 필요한 것 같습니다.
80개의 서로 다른 유형이 있는 경우 이 기술을 사용하려면 (이벤트 함수를 만들고 필요한 키 공간을 만드는 데) 엄청난 양의 오류가 발생하기 쉽습니다. 마이그레이션 및 분할할 버킷에 80개의 유형이 있다면 각 유형에 대해 위에서 설명한 모든 작업을 수작업으로 하고 싶지 않을 것입니다.
사용자 지정 변환 버킷을 통한 자동화.pl
이 문제를 해결하기 위해 저는 작은 Perl 스크립트, 사용자 지정 버킷을 컬렉션으로 변환.pl를 클릭하면 두 개의 파일이 생성됩니다:
- 사용자 지정 버킷을 컬렉션으로 변환.json, 는 이 포스트에서 설명한 위의 모든 작업을 수행하는 완전한 이벤트 함수입니다..
- MakeCustomKeyspaces.sh, 는 필요한 모든 키스페이스를 빌드하고 생성된 이벤트 함수를 가져오는 셸 파일입니다.
이 스크립트는 GitHub에서 찾을 수 있습니다. https://github.com/jon-strabala/cb-buckets-to-collections.
참고, 스크립트 사용자 지정 버킷을 컬렉션으로 변환.pl 두 가지가 모두 필요합니다. Perl (실용적인 추출 및 보고 언어) 및 또한 jq (가볍고 유연한 명령줄 JSON 프로세서)가 시스템에 설치되어 있습니다.
예시: 80가지 유형으로 2억 5천만 개의 레코드 마이그레이션
키스팩에 2억 5천만 개의 문서가 있습니다.e "입력._기본값._기본값"와 함께 80개의 다른 유형으로 데이터를 유형별로 재구성하여 아래의 컬렉션으로 재구성하려고 합니다. 범위 "output.reorg” 를 속성 유형별로 구분합니다. 데이터 서비스와 저녁 서비스를 모두 실행하는 3개의 r5.2xlarge 인스턴스로 구성된 AWS 클러스터가 있습니다.
입력 버킷 "입력' 예제에서는 메모리 할당량이 16000MB로 구성되어 있습니다.
아래에서는 CustomConvertBucketToCollections.pl을 사용합니다. Perl 스크립트에서 https://github.com/jon-strabala/cb-buckets-to-collections. 보시다시피 자동화된 스크립트를 사용하여 마이그레이션을 수행하는 것은 간단할 수 있습니다.
1단계: 일회성 설정
1 2 3 4 5 6 |
git 복제 https://github.com/jon-strabala/cb-buckets-to-collections cd cb-버킷-에-컬렉션 PATH=${PATH}:/opt/카우치베이스/bin cd cb-버킷-에-컬렉션/ chmod +x 사용자 지정 버킷을 컬렉션으로 변환하기.pl big_data_test_gen.pl big_data_test_load.sh |
2단계: 2억 5천만 개의 테스트 문서 만들기
대화형 실행 big_data_test_load.sh 명령을 사용합니다:
1 |
./big_data_test_load.sh |
구성 매개변수를 입력합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 이 bash 스크립트인 'big_data_test_load.sh'는 백만 개의 테스트를 로드합니다. # 문서를 ._기본값._기본값에 1백만 개의 청크로 저장합니다. #는 펄 스크립트 'big_data_test_gen.pl'에 의해 생성됩니다. 데이터는 #에는 80가지 문서 유형 값이 고르게 분포되어 있습니다. 입력 의 숫자 의 테스트 문서 에 create in 의 수백만 250 입력 의 버킷 (또는 대상) 에 load 테스트 문서 에 입력 입력 의 사용자 이름:비밀번호 에 당신의 클러스터 관리자:jtester 입력 의 호스트 이름 또는 IP 주소 의 당신의 클러스터 localhost 입력 의 숫자 의 스레드 에 대한 cbimport 8 Will load 2 백만 테스트 문서 에 키 스페이스 입력._기본값._기본값 (의 기본값 에 대한 버킷 입력) 유형 ^C 에 중단, 실행 중 in 5 초. 실행 중 .... gen/cbimport 블록: 1 의 2, 시작 에서 월 01 11월 2021 11:06:01 AM PDT JSON `파일://./data.json`을 `couchbase://localhost`로 성공적으로 가져왔습니다. 문서 가져온: 1000000 문서 실패: 0 ** 제거됨 23 라인 ** gen/cbimport 블록: 250 의 250, 시작 에서 월 01 11월 2021 11:24:05 AM PDT JSON `파일://./data.json`을 `couchbase://localhost`로 성공적으로 가져왔습니다. 문서 가져온: 1000000 문서 실패: 0 |
이제 키 공간에 2억 5천만 개의 테스트 문서가 있어야 합니다. 입력._기본값._기본값.
3단계: 이벤트 함수 및 키스페이스 스크립트 생성하기
대화형 실행 사용자 지정 버킷을 컬렉션으로 변환.pl 명령을 사용합니다:
1 |
./사용자 지정 버킷을 컬렉션으로 변환하기.pl |
구성 매개변수를 입력합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
입력 의 버킷 (또는 출처) 에 변환 에 컬렉션 [여행-샘플]: 입력 입력 의 사용자 이름:비밀번호 에 당신의 클러스터 [관리자:jtester]: 입력 의 호스트 이름 또는 IP 주소 의 당신의 클러스터 [localhost]: 입력 의 목적지 버킷.범위 [mybucket.myscope]: 출력.reorg 입력 의 이벤트 스토리지 키 스페이스 버킷.범위.컬렉션 [rr100.이벤트.메타데이터]: 입력 의 숫자 의 근로자 (LTE # 코어가 많을수록 빠릅니다[8]: 프로브 의 버킷 (또는 출처) 에 결정 의 set 의 유형 [Y]: 샘플 전반적으로 의 버킷 (또는 출처) 에 찾기 유형 [20000]: 100000 최대 추정 버킷(또는 소스)의 유형 # [30]: 100 스캔 입력 에 대한 'type' 속성 이 may take a few 초 curl -s -u 관리자:비밀번호 http://localhost:8093/query/service -d \. 'statement=INFER `input`._default._default WITH {"sample_size": 100000, "num_sample_values": 100, "유사성_메트릭": 0.1}' \ | jq '.results[][].properties.type.samples | .[]' | 정렬 -u 유형 FOUND: t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 t63 t64 t65 t66 t67 t68 t69 t70 t71 t72 t73 t74 t75 t76 t77 t78 t79 t80 생성 이벤트 기능: 사용자 지정 버킷을 컬렉션으로 변환하기.json 생성 키 스페이스 명령: 사용자 지정 키 공간 만들기.sh |
대화형 Perl 스크립트에서 위의 기본 선택 사항 중 네 가지가 변경되었습니다.
3단계: MakeCustomKeyspaces.sh 업데이트(필요에 따라)
"vi MakeCustomKeyspaces.sh"를 클릭하고 필요한 값을 변경합니다. Unix sed 명령을 사용하여 버킷 "출력" 100에서 1600까지
1 2 |
cat 사용자 지정 키 공간 만들기.sh | sed -e 's/\(^.*버킷=출력.*램사이즈=\)100 \(\.*\)/\116000 \2/' > tmp mv tmp 사용자 지정 키 공간 만들기.sh |
4단계: MakeCustomKeyspaces.sh 스크립트 실행
1 |
sh ./사용자 지정 키 공간 만들기.sh |
를 출력합니다:
1 2 3 4 5 6 7 8 9 10 |
성공: 버킷 생성 성공: 범위 생성 성공: 컬렉션 생성 성공: 버킷 생성 성공: 범위 생성 성공: 컬렉션 생성 성공: 컬렉션 생성 ** 제거됨 77 라인 ** 성공: 컬렉션 생성 성공: 이벤트 가져온 |
5단계: 이벤트 페이지에서 카우치베이스 UI 새로고침하기
카우치베이스 UI에서 새로운 이벤트 기능(또는 업데이트된 기능)을 찾으려면 이벤트 페이지로 이동하여 웹 브라우저를 새로고침하세요.
6단계: 사용자 지정 버킷을 컬렉션에 배포하기
카우치베이스 UI에서 이벤트 페이지로 이동하여 이벤트 기능 배포 "사용자 지정 버킷을 컬렉션으로 변환하기“.
45분 정도면 개편이 완전히 완료됩니다.
실제로 모든 문서는 유형별로 컬렉션으로 재구성됩니다. 이 작은 클러스터에서는 초당 93,000개의 문서가 처리되었습니다.
최종 생각
이 글 시리즈가 도움이 되었으며 이벤트에 대해 더 자세히 알아보고 싶다면 여기를 클릭하세요. 카우치베이스 이벤트 서비스.
사용자 지정 버킷을 컬렉션으로 변환하는 CustomConvertBucketToCollections.pl Perl 스크립트에서 https://github.com/jon-strabala/cb-buckets-to-collections 유형이 많은 버킷을 컬렉션 패러다임으로 마이그레이션해야 할 때 유용한 도구입니다.
CustomConvertBucketToCollections.pl 스크립트를 자유롭게 개선하여 중간 구성 파일을 Eventing Perl 도구에서 모든 매개변수를 조정할 수 있습니다. 그런 다음 중간 구성 파일을 사용하여 이벤트 함수 및 설정 셸 스크립트를 만듭니다.
중간 구성 파일 예시:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[ { "src_ks": "입력._기본값._기본값", "dst_ks": "output.myscope.t01", "create_dst_ks": true, "dst_copy": true, "src_del": true, "dst_remove_type": true }, { "src_ks": "입력._기본값._기본값", "dst_ks": "output.myscope.t02", "create_dst_ks": true, "dst_copy": true, "src_del": true, "dst_remove_type": true }, { "src_ks": "입력._기본값._기본값", "dst_ks": "output.myscope.t03", "create_dst_ks": true, "dst_copy": true, "src_del": true, "dst_remove_type": true } ] |
리소스
- 다운로드: Couchbase Server 7.0 다운로드
- 이벤트 스크립트: 함수: ConvertBucketToCollections
- GitHub: Perl 도구: cb-buckets-to-collections.pl
참조
카우치베이스와 이벤트 서비스의 기능이 마음에 드셨는지, 앞으로 비즈니스에 어떤 도움이 되는지 여러분의 의견을 듣고 싶습니다. 아래 댓글이나 다음에서 의견을 공유해 주세요. 카우치베이스 포럼.