Couchbase와 다양한 서버 SDK는 데이터를 쿼리하는 다양한 방법을 제공합니다. N1QL 쿼리를 작성하거나, 쿼리를 보거나, 키로 문서를 조회할 수도 있습니다. 데이터를 얻는 세 가지 방법 중 정의된 키를 기반으로 조회를 수행하는 것이 인덱스를 사용하는 쿼리를 실행하는 것보다 항상 더 빠릅니다.
문서 키가 여러 개 있고 해당 문서를 모두 가져와야 할 때는 어떻게 해야 할까요? 가장 먼저 떠오르는 것은 이러한 키를 반복하여 루프를 반복할 때마다 조회 작업을 수행하는 것입니다. 이 방법은 효과가 있지만 조회할 때마다 새로운 네트워크 요청이 발생한다는 대가가 따릅니다. 더 좋은 방법이 있을까요? 당연히 있습니다!
데이터베이스에 대한 대량 작업을 수행할 수 있습니다. 이 질문이 여러 번 나오는 것을 보았고 심지어는 튜토리얼을 작성했습니다. 에서 이러한 작업을 수행하는 방법에 대해 설명했습니다. 하지만 자바스크립트 개발자가 아니라면 어떻게 해야 할까요? 이번에는 Go 프로그래밍 언어를 사용하여 일괄 요청을 수행하는 방법을 살펴보겠습니다.
다음 Golang 애플리케이션을 예로 들어 보겠습니다:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 |
패키지 메인 가져오기 ( "fmt" "github.com/couchbase/gocb" ) 유형 사람 구조체 { 이름 문자열 `json:"이름, 생략"` 성 문자열 `json:"성, 생략"` 웹사이트 문자열 `json:"웹사이트, 생략"` 블로그 문자열 `json:"블로그, 생략"` } var 버킷 *gocb.버킷 func 메인() { 클러스터, _ := gocb.연결("couchbase://localhost") 버킷, _ = 클러스터.OpenBucket("예제", "") var 항목 []gocb.BulkOp 항목 = 추가(항목, &gocb.GetOp{키: "nraboy", 가치: &사람{}}) 항목 = 추가(항목, &gocb.GetOp{키: "agupta", 가치: &사람{}}) 오류 := 버킷.Do(항목) 만약 오류 != nil { fmt.Println("오류: ", 오류) } 에 대한 i := 0; i < len(항목); i++ { 사람, _ := 항목[i].(*gocb.GetOp).가치.(*사람) 만약 *사람 == (사람{}) { fmt.Printf("`%+v`가 데이터베이스에 존재하지 않습니다.", 항목[i].(*gocb.GetOp).키) } else { fmt.Printf("키: %+v, 값: %+vn", 항목[i].(*gocb.GetOp).키, 사람) } } } |
위의 애플리케이션에는 사람
구조로 각 Couchbase 문서를 나타냅니다. Couchbase 클러스터에 연결을 설정하고 특정 버킷을 연 후 다음과 같은 대량 작업 조각을 만듭니다. 항목
.
요청에서 조회하고자 하는 각 키는 여기에 들어갑니다. 항목
슬라이스를 추가하면 결과 값도 함께 저장됩니다.
사용 Do
함수를 사용하면 오류를 주시하면서 대량 작업을 실행할 수 있습니다. 이 경우 오류는 키 누락이 아니라 실행 오류입니다. 요청을 실행한 후 각 항목의 항목
슬라이스. 특정 항목의 값이 초기화되었지만 비어 있는 항목의 값과 동일한 경우 사람
객체를 반환하면 서버에서 키를 찾지 못했다는 뜻입니다. 그렇지 않으면 키와 찾은 문서를 인쇄합니다.
성능이라는 주제에 관심이 있으시다면 Kirk Kirkconnel이 블로그 게시물에 차이점을 설명하는 글을 작성했습니다. 다음 링크에서 확인할 수 있습니다. 여기. 카우치베이스에서 일괄 처리 작업에 대해 읽을 수도 있습니다. 문서.