첫 번째 개발자 프리뷰를 발표하게 되어 기쁘게 생각합니다. 공식 Go SDK (gocb) 오늘.
과거에도 Couchbase의 많은 기능에 대한 액세스를 제공하는 go-couchbase 프로젝트가 있었지만, 주로 회사 내부에서 사용하기 위한 것이었습니다. gocb는 Couchbase를 사용하는 Go 개발자의 목표를 충족하기 위해 특별히 설계 및 개발된 향후 릴리스의 첫 번째 프리뷰입니다.
gocb 프로젝트는 원하는 만큼의 고루틴에서 동시에 사용할 수 있는 블로킹 메서드 집합으로 구현됩니다. 라이브러리의 병렬성을 최대화하려면 애플리케이션 설계에 맞는 고루틴을 최대한 많이 사용하여 워크로드를 분산하는 것이 좋습니다.
gocb 프로젝트에 대한 API 참조는 다음에서 찾을 수 있습니다: http://godoc.org/github.com/couchbaselabs/gocb/.
기본 작업 수행
뷰 쿼리 수행
로깅
gocb 내에서 사용할 수 있는 로깅은 아직 초기 단계에 있지만 디버깅에 유용한 정보를 많이 제공할 수 있습니다. 내장된 로거 객체를 사용하여 콘솔에 로깅하도록 gocbcore를 설정하는 것은 매우 간단합니다. 다른 메서드가 호출되면 로거는 변경되지 않는 것으로 간주되므로 애플리케이션을 시작할 때 한 번만 호출해야 합니다.
Go SDK 아키텍처
gocb 라이브러리
gocb 라이브러리는 사용자에게 간단하고 사용하기 쉬운 인터페이스를 제공하기 위한 개발자 중심의 라이브러리입니다. 이 라이브러리는 모든 개발자 중심 기능을 사용자에게 노출하는 차단 API를 구현합니다.
gocbcore 라이브러리
gocbcore 라이브러리는 클라이언트의 모든 네트워크 및 스마트 관리 기능을 제공하는 내부 라이브러리입니다. 이 라이브러리는 gocb 내부에서 사용됩니다.
gocbcore는 대부분 잠금 없는 디스패치 작업 방식을 구현하여 애플리케이션이 클러스터의 서버 수만큼의 코어에 쉽게 부하를 분산할 수 있도록 합니다. 즉, 성능이 향상되고 성능 저하 없이 원하는 만큼의 고루틴에서 클라이언트를 안전하게 사용할 수 있습니다.
gocb.NewViewQuery ??
vq := gocouchbase.NewViewQuery(\"dev_all\", \"by-id\").Limit(4)
rows := bucket.ExecuteViewQuery(vq)
또 다른 질문이 있는데, Golang SDK가 동기화 게이트웨이에 연결할 수 있나요?
아니요. 현재 골랑에서는 REST API를 통해 SG에 연결합니다.
연결 해제 기능이 없는 것 같습니다. 한 번만 연결하고 애플리케이션의 수명 기간 동안 해당 연결을 유지하며 애플리케이션 종료 시 연결이 해제된다는 말이 맞나요?
맞습니다. 연결 해제 기능이 일부 에지 케이스에는 도움이 되지만, 애플리케이션 초기화 중에 애플리케이션을 생성하고 애플리케이션 전체에서 동일한 인스턴스를 사용하는 것이 버킷 연결을 처리하는 적절한 방법입니다(버킷 방법은 필요하다고 판단되는 만큼의 고루틴에서 안전하고 성능이 뛰어납니다).
기본 버킷 연결이 종료되도록 애플리케이션을 종료하는 데 권장되는 수단이 있나요, 아니면 종료 수단과 관계없이 종료되나요? 예: 시스템 충돌 등
하지만 버킷 연결을 초기 및 최대 풀 크기로 풀에 설정하면 어떻게 될까요?
초기 크기를 초과한 연결을 닫아야 합니다 !!!
연결을 풀에 넣는 이유는 무엇인가요? gocb 라이브러리는 완전히 스레드에 안전하며 성능 문제 없이 여러 고루틴에서 안전하게 사용할 수 있습니다.
고마워요,
하지만 서버 리소스의 과도한 사용을 피하려면 풀이 필요합니다,
연결을 닫는 것이 어떤 방법으로든 내보내는 것이 유용 할 수 있다고 생각합니다.
버킷 인스턴스를 풀링하면 어떻게 서비스 리소스 사용량이 줄어드는지 자세히 설명해 주시겠어요? 사실, 버킷 연결은 사용되는 리소스 측면에서 다소 비싸고 수많은 스레드에서 잘 수행되도록 고도로 최적화되어 있기 때문에 결과는 그 반대일 수 있다고 생각합니다.
답변 주셔서 감사합니다,
하지만 데이터베이스 서버가 아닌 내 서버 애플리케이션의 리소스 사용량을 줄인다는 의미입니다.
어떤 식으로든 마감 방법을 지원하는 것이 좋습니다.
"bucket.IoRouter().CloseTest()\" 메서드를 사용하여 연결을 올바르게 닫을 수 있나요?
이것은 리포지토리에 표시되지 않도록 설계된 테스트 방법입니다. 연결이 제대로 닫힐 수도 있지만 전체 애플리케이션이 폭발할 수도 있습니다. 사용하지 마세요.
이 라이브러리는 플러그 가능한 재시도 전략과
빠른 실패 모드?
안녕하세요 폴,
현재 Go SDK는 이러한 기능을 지원하지 않습니다. 하지만 이러한 기능이 어떻게 작동하는지 설명해 주시면 가까운 시일 내에 추가할 수 있도록 검토해 보겠습니다.
건배, 브렛
오픈 노드에 데이터를 지속하는 작업의 경우
연결이 실패하는 경우 SDK가 자동으로 시도합니까?
를 사용하여 승격되는 다음 노드에 대한 연결을 설정해야 하나요? 아니면
애플리케이션 로직이 대신 특정 연결 오류를 캡처하고 응답합니다.
에 명시적으로 재연결을 시도하여 재연결할 수 있나요?
애플리케이션은 안전한 경우에만 스토리지 작업을 다시 시도합니다. 작업이 이미 네트워크에서 전송된 후 노드에 장애가 발생한 경우, 그 시점에서 작업의 실제 상태를 알 수 없고 자동으로 재시도하는 것이 문제가 될 수 있으므로 오류는 사용자에게 전파되어 처리됩니다.
감사합니다. 이러한 오류를 처리하는 방법에 대해 예를 들어 설명해 주시겠어요?
다음과 같이 문서를 추가하면 다음과 같이 표시됩니다:
bucket.Upsert(id, &myStruct, 0)
그런 다음 예제에 따라 뷰를 호출하면 행 변수에 관련성이 없는 ID가 포함되어 있습니다. 어디서 왔는지는 잘 모르겠지만 업서트 중에 설정한 ID와 같지 않습니다.
다시 연결한 다음 뷰를 다시 호출하면 모든 것이 예상대로 작동합니다.
뷰를 호출하기 전에 대기 기간을 설정해 보았지만 아무 소용이 없습니다. DEV 머신에서 단일 노드를 실행하고 있습니다.
사실, 다른 작업처럼 보기가 일관되지 않기 때문인 것 같습니다. 관련 없는 ID는 이전에 삭제한 문서의 ID인 것 같습니다.
안녕하세요, 브렛, 라이브러리에서 멀티겟을 지원하나요? 보기의 결과를 개별적으로 순환하는 대신 Java SDK에 따라 한 번의 호출로 값을 검색할 수 있도록 단일 리소스에 ID 목록을 제공하는 것이 도움이 될 것입니다.
안녕하세요, 브렛,
애플리케이션에 여러 개의 버킷 연결이 필요한 경우 채택할 수 있는 가장 좋은 전략은 무엇인가요?
라이브러리에 문제가 있습니다 :(
$ 바로가기 gopkg.in/couchbaselabs/gocb.v0
# gopkg.in/couchbaselabs/gocb.v0
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.UnlockCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.TouchCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.RemoveCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.StoreCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.StoreCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.StoreCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.StoreCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCasCallback)를 유형 gocbcore.StoreCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCtrCallback)를 유형 gocbcore.CounterCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... cb(유형 ioCtrCallback)를 유형 gocbcore.CounterCallback으로 변환할 수 없습니다.
/사용자/알렉/고/src/gopkg.in/couchbaselabs/gocb.v0... 너무 많은 오류