오늘 Couchbase .NET SDK 2.0 베타 2를 출시합니다. 이것은 .NET 플랫폼과 .NET 커뮤니티에 대한 지속적인 노력의 일환으로 이루어진 흥미로운 업데이트입니다. 고객의 요청에 따라 정식 버전 출시 전에 몇 가지 새로운 기능도 추가했습니다. 대량 메서드와 비동기 뷰 및 N1QL 쿼리를 살짝 엿볼 수 있는 기능을 포함하게 되어 매우 기쁩니다!
이번 릴리스에는 무엇이 포함되나요?
기능 면에서는 이전 릴리스(DP1, DP2 및 베타)를 기반으로 하며 다음과 같은 기능이 추가되었습니다:
- 대량 방법: 업서트 및 가져오기
- 비동기 보기
- 비동기 N1QL 쿼리(실험적 - N1QL은 여전히 DP3)
- 공통 데이터 유형 - SDK 간에 일관된 값 유형 지정
- 관리 API - 클러스터, 버킷 및 보기 관리용
대량 방법: 업서트 및 가져오기
대량 메서드를 사용하면 애플리케이션이 한 번의 요청으로 키 집합을 전송한 다음 결과를 기다릴 수 있습니다. 예를 들어
위에서는 클러스터 객체를 생성하고 기본 버킷을 열고 있습니다. 그런 다음 키는 문자열로 정의되고 값은 동적 유형으로 정의된 딕셔너리를 구축합니다. 그런 다음 여러 개의 키와 연결된 값을 추가합니다. 각 값은 문자열, 익명 유형, 정수, 10진수, 마지막으로 바이트 배열 등 서로 다른 유형임을 알 수 있습니다. 그런 다음 IBucket.Upsert(...)를 호출하고 사전을 전달합니다. 그런 다음 결과를 반복하여 각 작업이 성공했는지 확인합니다.
뒤에서 우리는 작업 병렬 라이브러리를 활용하여 각 작업을 병렬로 실행하고 있습니다. 이 오버로드에는 기본 ParallelOptions가 사용되지만, 자체 ParallelOptions(자체 취소 토큰 포함)를 전달하고 반복당 처리될 키의 각 파티션 크기를 제어할 수 있는 오버로드가 있습니다.
비동기 보기
비동기 CRUD(InsertAsync, UpsertAsync 등) 작업에 대한 지원은 GA에 포함되지 않았지만, 비동기 보기는 포함되었습니다. 이 구현은 대부분의 .NET 개발자에게 익숙한 작업 비동기 패턴(TAP)을 기반으로 하며 .NET 4.0에 도입된 async/await 키워드를 지원합니다:
{
사용 (var bucket = _cluster.OpenBucket("맥주 샘플"))
{
var 쿼리 = 버킷.
CreateQuery("맥주", "brewery_beers").
제한(10);
var 결과 = 버킷 대기.QueryAsync<동적>(쿼리);
foreach (var row in 결과.행)
{
콘솔.WriteLine(행);
}
}
}
여기서는 이미 생성된 클러스터 개체에서 "beer-sample" 버킷을 열고 "beer" 디자인 문서에 정의된 "brewery_beers" 보기를 대상으로 하는 쿼리를 생성하고 있습니다. 중요한 것은 비동기 대기를 알리기 위해 await 키워드를 사용하고 있고 호출 메서드에 async 키워드가 정의되어 있으며, 호출된 쿼리를 실행하는 메서드의 이름에도 "Async" 후첨이 붙어 있다는 점입니다: QueryAsync
비동기 N1QL 쿼리(실험적)
비동기 보기와 마찬가지로, 비동기/대기 키워드를 사용하여 N1QL 쿼리를 비동기적으로 실행하기 위한 오버로드가 추가되었습니다:
{
사용 (var bucket = _cluster.OpenBucket())
{
const 문자열 쿼리 = "SELECT * " +
"FROM 튜토리얼 " +
"WHERE fname = 'Ian'";
var 결과 = 버킷 대기.QueryAsync<동적>(쿼리);
foreach (var row in 결과.행)
{
콘솔.WriteLine(행);
}
}
}
다시 한 번 쿼리를 실행하는 메서드의 시그니처에 "async" 키워드를 추가한 다음 "await" 키워드를 사용하여 쿼리가 메인 스레드에서 실행되는 동안 스레드풀 스레드에서 비동기 대기를 수행합니다. 호출이 반환되면 다른 N1QL 쿼리와 마찬가지로 결과를 반복합니다.
일반적인 데이터 유형
기업 환경에서는 조직의 비즈니스 요구 사항을 충족하는 소프트웨어 솔루션을 제공하기 위해 하나 이상의 개발자 팀이 두 개 이상의 플랫폼을 사용하는 것이 매우 일반적입니다. 예를 들어, Java로 작성된 티어는 핵심 서비스를 써드파티에 노출하고, .NET으로 작성된 다른 티어는 Java 티어에서 푸시한 데이터를 소비하는 경우가 있습니다. 이와 같이 한 플랫폼이 Couchbase에 데이터를 쓰고 다른 플랫폼이 해당 데이터를 읽는 상황에서는 Couchbase에 저장된 각 항목의 기본 데이터 유형이 두 플랫폼과 각각의 SDK에서 동일하게 취급되는 것이 중요합니다.
과거에는 다양한 SDK에서 유형 트랜스코딩을 처리하는 방식에 약간의 일관성이 없었지만 2.0 SDK에서는 변경되었습니다. 이제 하나의 SDK(예: Python)에서 문서나 값을 저장하면 다른 플랫폼에서 해당 값을 읽을 때 동일한 유형으로 트랜스코딩됩니다. 이는 단순히 하위 유형 집합을 JSON, 문자열, 바이너리 데이터 또는 이전 버전과의 호환성을 위해 "비공개" 유형으로 처리하여 수행됩니다. 이 유형 정보는 문서 메타데이터 내에 '공통 플래그'로 저장되며 SDK에서 트랜스코딩을 일관되게 처리하는 방법을 결정하는 데 사용됩니다.
관리 API
GA에서 마지막으로 공개된 주요 기능은 버킷, 디자인 문서 및 뷰 생성 및 제거, 클러스터에서 노드 추가 및 제거와 같은 클러스터 및 버킷 수준 작업을 수행할 수 있는 완전히 새로운 관리 API입니다.
관리 API는 버킷에서 수행되는 작업과 클러스터에서 수행되는 작업의 두 가지 개별 작업 유형으로 나눌 수 있습니다. 각각은 클러스터 객체의 팩토리 메서드에 의해 생성되는 각각의 관리자 객체로 표현됩니다.
다음은 클러스터에 노드를 추가하는 예제입니다:
{
변수 클러스터 관리자 = 클러스터.CreateManager("관리자", "비밀번호");
var 결과 = 클러스터 관리자.추가 노드(“192.168.56.103”);
Assert.IsTrue(결과.성공);
}
먼저 버킷을 열 때 사용하는 것과 동일한 객체인 Cluster 객체를 만들어 원격 클러스터의 존재 위치를 알려주는 구성을 전달합니다. 그런 다음 클러스터의 관리 사용자 이름과 비밀번호를 전달하여 CreateManager(...) 팩토리 메서드를 호출합니다. 인증이 완료되면 클러스터에 새 노드를 추가하고 요청이 예상대로 처리되었는지 확인합니다.
다음 예에서는 버킷에 새 디자인 문서 및 보기를 추가하는 버킷 수준 관리 작업을 수행합니다.
{
사용 (var bucket = 클러스터.OpenBucket())
{
var 관리자 = 버킷.CreateManager("관리자", “”);
var designDoc = 파일.ReadAllText(@"데이터\디자인 문서\by_field.json");
var 결과 = 관리자.삽입 디자인 문서("by_field", 디자인 문서);
Assert.IsTrue(결과.성공);
}
}
여기서는 클러스터 객체를 생성한 다음 기본 버킷을 열고 팩토리 메서드를 사용하여 BucketManager 객체를 생성합니다. 관리자가 생성되면 디자인 문서와 보기가 포함된 파일을 JSON으로 열고 InsertDesignDocument(..) 메서드를 사용하여 디자인 문서 "by_field"를 버킷에 추가합니다. 디자인 문서 삽입 외에도 기존 디자인 문서 업데이트, 디자인 문서 또는 모든 디자인 문서 가져오기, 디자인 문서 제거를 위한 추가 메서드가 있습니다.
무엇이 달라졌나요?
베타 버전과 베타 2 버전 사이에는 SDK 내에서 여러 가지 변경 사항이 발생했습니다. 대부분의 경우 이러한 변경 사항은 추가적이거나 내부적인 것으로, 2.0 SDK를 사용하기 시작한 사용자에게는 영향을 미치지 않습니다. 하지만 몇 가지 획기적인 변경 사항이 몇 가지 있습니다:
주로 매개변수의 이름 변경 및/또는 재정렬과 관련된 기타 사소한 변경 사항도 다수 발생했습니다.
- Couchase.CouchbaseCluster가 Couchbase.Cluster로 이름이 변경되었습니다.
- CouchBaseBucket 및 MemchachedBucket이 CouchBase.Core.Buckets에서 기본 CouchBase 네임스페이스로 이동되었습니다.
이번 릴리스에 없는 기능은 무엇인가요?
최대한 많은 기능을 릴리스에 포함하기 위해 노력하고 있지만, 항상 주기에 비해 더 많은 기능이 제공되고 있으며 일부 기능은 GA에 포함되지 못했습니다. 가장 주목할 만한 것은
- 복제본 읽기: 클라이언트가 하나 이상의 복제본에서 읽을 수 있도록 허용합니다. 이는 주로 "내 VBucket이 아님"이 발생할 수 있는 리밸런싱 시나리오에 사용됩니다.
- 비동기/대기 기능을 사용한 비동기 CRUD 작업
- 플러그형 JSON 파서: 원하는 JSON 직렬화기/역직렬화기를 사용할 수 있는 기능입니다. 현재 클라이언트는 Newtonsoft.JSON에 의존합니다.
- Per connection TCP heartbeat settings: currently this is configured at the OS level via KeepAliveTime on Windows: http://technet.microsoft.com/en-us/library/cc782936%28WS.10%29.aspx
받는 방법
바이너리는 S3에서 사용할 수 있으며, 소스 코드는 Github에서, 패키지는 Nuget에서 사용할 수 있습니다:
- 바이너리는 다음과 같습니다. 여기를 클릭하세요.
- 리포지토리는 다음과 같습니다. 여기.
- NuGet 패키지는 다음과 같습니다. 여기.
감사
오픈 소스 프로젝트인 Couchbase .NET SDK는 아무리 작은 것이라도 커뮤니티의 기여에 의존합니다. 풀 리퀘스트를 제출하거나 버그 리포트를 발행해 주신 다음 분들께 특별히 감사드립니다:
- 매트 니샨
- 보이타 야쿠벡
수고하셨습니다!
LINQ는 어떻게 되나요? 이 게시물의 어디에도, 심지어 이번 릴리스에 포함되지 않은 사항 섹션에도 언급되어 있지 않습니다.
남겨진 게 아니길...
안녕하세요 도론 - 안녕하세요.
Linq2Couchbase 프로젝트는 살아서 움직이고 있지만 SDK 위에 별도의 레이어입니다. 여기에서 찾을 수 있습니다: https://github.com/couchbasela…
아직 너겟 패키지를 베타2로 업데이트하지 않았으므로 업데이트할 때까지는 작동하지 않을 수 있으며, 일부 구조적 변경으로 인해 작동이 중단될 수 있습니다.
고마워요!
Jeff