문서 대량 로드 카우치베이스

이 블로그 게시물은 Couchbase에 데이터를 JSON으로 로드하는 방법에 대한 예시입니다. 이 글의 목적상, RDBMS에서 CSV로 추출한 데이터를 JSON으로 변환합니다. Oracle, SQL server, MySQL 등에 익숙한 RDBMS DBA와 관리자는 아마도 NoSQL을 실험하고 테스트할 방법을 찾고 있을 것입니다. 종종 NoSQL 사용의 첫 번째 단계는 가지고 있는 모든 것을 JSON으로 변환하는 것입니다.

카우치베이스는 JSON과 바이너리 데이터를 지원하지만, 이 글에서는 가장 풍부한 데이터 유형인 JSON을 살펴보고자 합니다. 이 점을 이해하는 것이 중요한데, JSON 이외의 형식으로 문서를 카우치베이스에 로드하면 데이터가 바이너리로 로드되어 뷰나 인덱스를 작성하려고 할 때 뷰 유연성에 영향을 줄 수 있기 때문입니다. 이제 몇 가지 문서를 로드해 보겠습니다. 이를 달성하는 방법에는 두 가지가 있지만 이 글의 목적상 로드하려는 모든 문서가 이미 압축되거나 압축되지 않은 JSON 형식이라고 가정하겠습니다. 다음 섹션에서는 JSON 데이터를 로드하는 한 가지 가능한 경로에 대해 설명합니다.

다음과 같은 일부 Couchbase ETL 파트너는 다음과 같습니다. Talend는 GUI를 원하거나, CSV 파일을 다루고 싶지 않거나, 데이터를 CSV로 커밋하기 전에 데이터 순서를 바꾸고 싶거나, 여러 소스에서 데이터를 ETL한 후 Couchbase Server에 저장해야 할 필요가 있는 경우 Couchbase용 커넥터를 제공합니다. Talend는 원하는 경우 Couchbase에 로드하기 전에 문서를 직접 JSON 파일로 매핑하고 저장할 수 있습니다.

이 가이드는 Linux 또는 Mac, 패키지 관리자 및 Ruby에 어느 정도 익숙하다고 가정합니다.

추가 SDK 설정 정보는 여기를 참조하세요: www.couchbase.com/developers/

데이터를 준비하고 로드하는 데 사용되는 단계는 다음과 같습니다:

  1. 데이터 준비: CSV를 JSON으로 변환하는 몇 가지 예제 도구를 살펴보세요.
  2. 데이터 로드: Ruby 스크립트를 통해 카우치베이스에 데이터를 로드하는 몇 가지 방법을 살펴봅니다.

Linux 및 Mac용 사전 요구 사항: 기능적인 빌드 환경이 필요합니다!

  1. Libcouchbase: 이 스크립트는 Ruby를 사용하므로 couchbase 젬을 설치하기 전에 libcouchbase가 설치되어 있어야 합니다.
  2. 루비젬: 루비 카우치베이스 래퍼를 설치할 수 있는 루비젬이 있는지 확인합니다.
    • 제가 사용한 보석은 다음과 같습니다.
      • '루비-진도 표시줄'
      • 'couchbase'
      • 'yaji'
      • 'optparse'
  3. Yajl 파서: 이 또한 YAJI의 전제 조건으로 설치해야 합니다.
  4. 카우치베이스 젬을 설치합니다: GEM 설치 카우치베이스

설정에 성공했다면 제가 제공한 루비 스크립트가 실행되어야 합니다. 스트림로더에 -h를 전달하고 구문 메시지가 표시되는지 확인할 수 있습니다. 마지막으로, 나열된 GEM인 Yaji, optparse, couchbase 및 ruby-progressbar도 설치하는 것을 잊지 마세요. 링크는 이 글 하단에 제공됩니다.

데이터 준비

데이터 준비 방법 1: 간단하고 빠르며 일관성이 있습니다: csvtojson NodeJS 스크립트

  • Google을 통해 찾을 수 있으며 다른 서비스도 있습니다.
  • NPM 알라를 통해 설치 npm 설치 -g csvtojson

다음은 참조용 변환 예시입니다:

데이터 준비 방법 2: 루비 스크립트 작성: csv2json.rb 

루비는 단일 스레드이므로 프로세스를 완료하는 데 걸리는 시간은 달라질 수 있습니다.

이 스크립트에 대한 추가 참고 사항은 다음과 같습니다. YAJL 파서 대신 기본 JSON 모듈을 사용하여 Couchbase로의 데이터 스트리밍을 처리하지 않습니다.

아래 스크립트는 필요한 유일한 변경 사항을 보여줍니다. 이렇게 하면 변환 중 메모리 사용량이 개선됩니다. 이전에 YAJL을 설치하지 않았다면 간단히 이 작업을 수행할 수 있습니다: 'gem 설치 yajl-ruby'

전환 후 단계

변환이 완료되면 ZIP으로 파일을 압축할 차례입니다:

zip 파일을 디렉토리에 넣습니다. 저는 ~/Downloads/json_files/ 내 홈 디렉토리에 있습니다.

데이터가 준비되면 로드를 시작할 준비가 된 것입니다. 다음 예제에서는 데이터를 Couchbase에 대량으로 가져오는 몇 가지 일반적인 방법에 대해 설명합니다.

Couchbase 설치에는 다음과 같은 기본 제공 도구가 제공됩니다. cbcdocloader. 최대 20MB 크기의 개별 문서 파일을 압축하거나 디렉터리 내에 저장하여 로드합니다. 이 글을 쓰는 시점에 cbcdocloader 를 사용하려면 디렉토리에 여러 개의 JSON 형식 파일이 포함되어 있어야 합니다. 두 번째로, 제가 Ruby로 작성한 도구에 대해 설명할 것인데, 이 도구는 Couchbase의 세르게이 아사바예프의 YAJI 루비 젬. 참조된 코드는 무료로 사용할 수 있으며 사용하기 편한 언어로 다시 작성할 수 있습니다.

문서 로드 방법 1: 사용 cbcdocloader

디렉토리 내의 개별 파일 집합을 사용하는 것은 일반적인 사용 사례이지만, 불러올 파일 및 디렉토리의 구조에 따라 원하는 문서가 로드된 후 표시되는 방식이 달라집니다. 이러한 구조를 유지하려면 로드할 파일과 디렉터리를 .zip 파일 안에 패키징하는 것이 좋습니다.

문서 ID 키 이름은 제공된 문서 파일을 기반으로 합니다.

참고: t그의 방법은 대용량 통합 문서 파일에는 적합하지 않습니다. 대용량 모놀리식 파일의 경우 아래의 방법 2에서 로드하는 방법을 예시하겠습니다.

그런 다음 다음 명령을 사용하여 파일을 로드합니다:

참고:
'-s 1000'은 버킷의 메모리 크기입니다. 버킷에 맞게 이 값을 조정해야 합니다.
또한 버킷은 다음과 같이 존재할 필요가 없습니다. cbcdocloader 를 사용하면 생성되지만 '-s' 플래그를 설정하기 전에 리소스 사용량을 확인하여 사용 가능한 RAM이 있는지 확인해야 합니다.

모든 것이 성공적으로 완료되면 문서가 로드되었는지 여부, 바이트 수 등이 표시된 출력이 표시됩니다.

다음은 지정된 디렉터리에 있는 많은 .zip 파일을 로드하는 간단한 스크립트입니다:

문서 로드 방법 2: streamloadjson

다른 방법은 단일 모놀리식 파일에서 쉼표로 구분된 모든 문서를 로드하는 것입니다.

이 방법을 수행하기 위해 YAJI JSON 스트림 파서를 사용하는 작지만 효과적인 스크립트를 준비했습니다. streamjsonload.

이 프로그램의 옵션은 다음과 같습니다:

아래에서 fathers.json.txt와 같은 테스트 JSON 파일이 있는 문서를 로드하려면 다음과 같이 호출할 수 있습니다:

스크립트는 아래와 같은 출력을 제공해야 합니다:

YAJI 파서 사용의 가장 큰 장점 중 하나는 메모리 사용량이 매우 적다는 것입니다. 즉, 입력 데이터를 페이지 매김하고 여러 스트림으로 분할하여 카우치베이스에 로드할 수 있습니다. 루비는 싱글 스레드이기 때문에 신중한 프로세스가 생성되지만 다른 언어도 멀티 스레딩에 사용될 수 있습니다. 이러한 예제는 Couchbase Labs Github 리포지토리에 있습니다.

몇 가지 주의해야 할 사항이 있습니다, 이 도구는 모놀리식 문서 파일만 로드하고, '-d'가 제공되지 않으면 자동으로 ID를 생성하려고 시도하며, 문서가 로드되지 않으면 -r로 '루트'를 미세 조정해야 합니다.

로더에 대한 최신 코드는 내 깃허브 리포지토리에서도 제공했지만 아래에 인라인으로 제공했습니다:

작업 완료

데이터가 로드되면 Couchbase 콘솔에 로그인하여 쿼리 및 인덱싱을 위한 개발 보기로 작업을 시작하세요.

다음을 사용하는 경우 N1QL이 포함된 Couchbase Server 4.0 기본 인덱스를 생성하여 Couchbase SQL과 유사한 인터페이스를 즉시 탐색하고 SDK를 통해 N1QL 쿼리의 강력한 기능을 활용할 수 있습니다!

YAJL을 제공해 주신 오픈 소스 커뮤니티의 훌륭한 분들과 YAJI 파서를 제공해 주신 Sergey Avseyev에게 많은 감사를 드립니다. Sergey는 Ruby SDK 작업을 담당하는 매우 지식이 풍부한 Couchbase 리소스이며, 여러분 중 누구라도 JRuby SDK를 사용해 보고 피드백을 제공해 주셨으면 좋겠습니다.

링크:

CB 예제 Github - https://github.com/agonyou/cb-examples/
YAJI 스트림 파서 - https://github.com/avsej/yaji
YAJL JSON Gem - https://github.com/brianmario/yajl-ruby
csv2json Gem - https://rubygems.org/gems/csv2json/
카우치베이스 서버 4(N1QL 포함) - -. http://www.couchbase.com/nosql-databases/downloads

작성자

게시자 오스틴 고니유, 솔루션 엔지니어, 카우치베이스

오스틴 고니유는 지난 4년간 카우치베이스에서 솔루션 엔지니어로 근무했습니다. Austin은 내부, 중간급 및 엔터프라이즈 영업 직원이 잠재 고객과 고객을 위해 Couchbase NoSQL 문서 데이터베이스 서버 및 모바일 대화에 대한 기술 솔루션을 제공합니다.

댓글 하나

  1. './cbdocloader -u tito -p foobar -b test -n 192.168.1.4:8091 -s 1000 /Users/tito/Desktop/을 실행하면 다음과 같습니다.sample.zip \'로 설정되어 있고 샘플 파일에 문서가 두 개만 있는 JSON 배열이 포함되어 있으면 전체 파일 내용을 하나의 문서로 가져옵니다. 즉, cbdocloader는 문서가 JSON 객체의 배열이라는 것을 인식하지 못하는 것 같습니다. 또한 편집기에 \'경고: JSON은 배열이 아니어야 합니다\'라는 메시지가 표시됩니다. cbdocloader는 어떻게 작동해야 하나요? 고마워요.

    1. 그런데 \''에 있는 샘플 JSON을 사용하면http://www.rubydoc.info/gems/c..., 똑같은 문제가 발생합니다. 두 경우 모두 파일 내용은 유효한 JSON입니다. cbdocloader가 협조하지 않는 것 같습니다. :-/

  2. 잘 정리하면 다음과 같이 사용할 수도 있습니다. https://sqlify.io/convert/csv/to/json 을 사용하여 JSON으로 변환한 다음 자체 스크립트를 롤링하는 대신 정상적으로 문서를 로드합니다.

댓글 남기기