저는 SQL Server에서 다음과 같은 작업을 하고 있습니다. 카우치베이스 서버 블로그 포스팅을 작성하는 동안, 크리스마스 주말을 맞아 JSON의 좋은 점 하나를 남겨드리고 싶었습니다.

위키베이스 에는 방대한 정보 데이터베이스가 있습니다. 모든 종류의 정보가 있습니다. 그리고 JSON 형식으로 다운로드할 수 있습니다. 아직 이 데이터로 무엇을 할지는 정확히 모르겠지만, 이 데이터를 Couchbase로 가져와서 N1QL 쿼리를 실행하는 것이 유용할 것 같았습니다.

이를 위해 다음을 사용하겠습니다. cbimport.

위키베이스 데이터 가져오기

위키베이스 다운로드 는 JSON, XML 및 RDF로 제공됩니다.

다운로드한 파일은 다음과 같습니다. wikidata-20161219-all.json.bz2의 크기가 6GB가 넘습니다. 압축을 풀어서 wikidata-20161219-all.json는 거의 100GB에 달합니다. 이는 하나의 파일에 많은 양의 데이터가 담겨 있는 것입니다.

파일 내에서 데이터는 JSON 객체를 포함하는 하나의 큰 JSON 배열로 구조화되어 있습니다. 제 목표는 해당 배열의 각 JSON 객체에 대한 Couchbase 문서를 만드는 것이었습니다.

cbimport 사용

cbimport 는 카우치베이스 서버와 함께 제공되는 데이터(JSON 및 CSV)를 가져올 수 있는 편리한 유틸리티입니다.

이 명령줄 도구에 알려야 합니다:

  • json 또는 csv 가져오려는 파일 유형 ⇒ 가져오려는 파일 유형

  • -c 클러스터 위치 ⇒ 클러스터 위치

  • -b 가져올 버킷의 이름 ⇒ 가져올 버킷의 이름입니다.

  • -u 및 -p 클러스터 자격 증명 ⇒ 클러스터 자격 증명

  • -d ⇒ 가져올 데이터 세트의 URL(내 파일이 로컬에 있으므로 file:// URL)

저도 이 옵션을 사용했습니다:

  • -생성-키 ⇒ 각 문서에 대한 키를 구성하는 방법을 cbimport에 알려줍니다. 각 문서에 id 필드를 예로 들면, 다음과 같은 템플릿을 지정할 수 있습니다. %id% 를 키로 사용합니다.

  • -포맷 목록 ⇒ cbimport에 파일의 형식을 알려줍니다. 몇 가지 옵션은 줄, 목록, 샘플입니다. JSON이 모두 하나의 파일에 있지만 한 줄당 하나의 JSON 객체가 아니기 때문에 'List'를 사용했습니다.

위키베이스 데이터에 cbimport 사용

위키데이터 json 파일이 있는 폴더(내 폴더는 wikidata-20161219-all.json이지만 회원님의 폴더는 다를 수 있음)에서 Couchbase Server를 E 드라이브에 설치하여 실행했습니다:

E:CouchbaseServerbincbimport.exe json -c couchbase://localhost -u 관리자 -p 비밀번호 -b 위키베이스 파일://wikidata-20161219-all.json --generate-key %id% --format list

기반 위키베이스 데이터 모델 문서이 있을 거라고 생각했습니다. id 필드를 고유한 값으로 설정합니다. 그래서 저는 %id%. 보다 복잡한 키는 상대적으로 강력한 키 생성기 템플릿 를 제공합니다.

대용량 데이터 세트에 문제가 생길까 봐 cbimport가 실행되는 동안 메모리 사용량을 주의 깊게 모니터링했습니다. 하지만 문제 없이 실행되는 동안 RAM 사용량이 21MB를 초과하지 않았습니다.

512MB의 RAM으로 시작하여 가져오는 동안 Couchbase의 내 버킷에 924MB의 RAM으로 옮겼습니다. 노드가 하나뿐입니다. 그래서 저는 이것이 많은 양의 캐시에서 꺼내기 일어날 줄 알았습니다. 실제로 그렇게 되었습니다.

Couchbase Server bucket ejections

총 파일 용량이 99GB이므로 데스크톱의 RAM에 모두 넣을 수 있는 방법은 없습니다. 프로덕션 환경에서는 몇 개의 노드가 있는 RAM에 99GB 이상을 넣는 것이 비현실적이지 않을 것입니다. 위키베이스가 계속 성장함에 따라 다음과 같이 수용할 수 있습니다. Couchbase의 간편한 확장성다른 서버를 추가하고 계속 진행하세요.

데스크톱에서 실행하는 데 시간이 오래 걸립니다. 실제로 이 블로그 게시물을 작성하는 지금도 실행 중입니다. 최대 520만 개의 문서가 있고 진행 중입니다(총 기록이 얼마나 되는지는 모르겠지만 현재 디스크 사용량이 9.5GB이므로 갈 길이 멀다고 생각합니다).

완료되면, 이 데이터에 대해 몇 가지 흥미로운 N1QL 쿼리를 실행할 수 있기를 바랍니다. 위키베이스가 제공하는 "Gremlin" 쿼리 엔진을 사용하는 예제입니다. 대신).

요약

위키베이스의 데이터 또는 이미 JSON 형식으로 되어 있는 대규모 데이터 저장소로 작업하고 싶다면, cbimport를 사용하여 매우 쉽게 Couchbase로 가져올 수 있습니다.

이제 위키베이스의 대규모 데이터 집합을 확보했으니 다음 목표는 N1QL을 사용하여 데이터에서 쿼리할 수 있는 몇 가지 흥미로운 것들을 찾아내는 것입니다.

궁금한 점이 있으면 댓글을 남기거나 트위터에서 저와 대화하기.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 하나

  1. 올레그 쿠즈민 5월 17, 2017에서 5:07 오후

    안녕하세요, 매튜,

    훌륭한 기사이며, 약간의 차이가 있기 때문에 다른 운영 체제에서 cbimport가 어떻게 실행되는지에 대해 언급하고 싶었습니다. 또한 명령에서 슬래시 문자가 사라진 것으로 보이는데, 다음과 같이 표시되어야 합니다(댓글에서도 슬래시 문자가 사라지지 않기를 바랍니다):

    E:\Couchbase\Server\bin\cbimport.exe json -c couchbase://localhost -u 관리자 -p 비밀번호 -b 위키베이스 파일://wikidata-20161219-all.json -생성 키 %id% -포맷 목록

    그렇다면 Mac OS, Windows, Linux에서 cbimport를 실행하는 방법은 무엇일까요? 'test.user'로 로그인한 상태에서 CSV 형식의 파일 "test.csv"에서 "기본" 버킷으로 문서를 로드한다고 가정해 보겠습니다. CSV 파일에는 EXPERIMENT_ID 열이 있으며, 이 값을 문서 키로 사용하겠습니다. Couchbase는 로컬 호스트(127.0.0.1)에서 실행 중입니다.

    Mac OS(터미널 창에서):
    >> cd /Applications/Couchbase\ Server.app/Contents/Resources/couchbase-core/bin
    >> ./cbimport csv -c couchbase://127.0.0.1:8091 -u 관리자 -p 비밀번호 -b 기본값 -d 파일:///Users/test.user/Desktop/test.csv -g csv::%EXPERIMENT_ID%

    파일이 현재 디렉터리에 있지 않는 한 "file:///" 프로토콜 접두사의 슬래시 문자 세 개에 유의하세요(파일://test.csv).

    Windows(명령 프롬프트에서):

    >> cd "C:\Program Files\Couchbase\서버\bin"
    >> cbimport.exe csv -c couchbase://127.0.0.1:8091 -u 관리자 -p 비밀번호 -b 기본값 -d 파일://C:/사용자/test.user/Desktop/test.csv -g csv::%EXPERIMENT_ID%

    "file://" 프로토콜 접두사의 슬래시 문자 두 개에 유의하세요.

    우분투 리눅스(터미널 창에서):

    >> cd /opt/couchbase/bin
    >> ./cbimport csv -c couchbase://127.0.0.1:8091 -u 관리자 -p 비밀번호 -b 기본값 -d 파일:///home/test.user/test.csv -g csv::%EXPERIMENT_ID%

    파일이 현재 디렉터리에 있지 않는 한 "file:///" 프로토콜 접두사의 슬래시 문자 세 개에 유의하세요(파일://test.csv).

  2. [...] cbimport를 사용하여 위키베이스 데이터를 JSON 문서로 가져오기 [...]

댓글 남기기