오늘 Couchbase .NET SDK 2.0 버전 2.0.1을 출시합니다. 이 버전은 작년 12월 초에 출시된 GA 릴리스 2.0.0의 후속 릴리스이며, 2.0.0을 기반으로 버그 수정 및 성능 개선이 주로 포함되어 있습니다.
이번 릴리스에는 무엇이 포함되나요?
다시 한 번 말씀드리지만, 이번 릴리스는 크게 버그 수정 및 성능 개선 릴리스입니다. 가장 큰 변화는 전송 또는 IO 계층으로, 모든 비동기 연산에 대해 IAsyncResult 객체를 생성해야 하므로 가비지 수집이 더 자주 발생하는 APM(Begin/End) 기반의 이전 비동기 소켓 API 대신 SocketAsyncEventArgs를 사용하도록 재작성된 것입니다. 각 SocketAsyncEventArgs 인스턴스는 풀링되어 재사용되므로 GC와 관련된 많은 문제를 제거합니다. 또한, 하나의 연속적인 고정 버퍼가 모든 SocketAsyncEventArgs 인스턴스에 사용되며 클라이언트 수명 기간 동안 지속됩니다. 이후 릴리스에서 추가 개선이 이루어질 예정입니다.
또 다른 개선 사항은 예를 들어 키 세트를 병렬로 제거하는 일괄 메서드를 추가한 것입니다:
사용 (var cluster = new Cluster(config))
{
사용(var bucket = cluster.OpenBucket())
{
var multiUpsert = bucket.Upsert(items);
Assert.AreEqual(items.Count, multiUpsert.Count);
foreach(다중 업서트의 변수 쌍)
{
Assert.IsTrue(pair.Value.Success);
}
var multiRemove = bucket.Remove(multiUpsert.Keys.ToList());
foreach(멀티리무브의 변수 쌍)
{
Assert.IsTrue(pair.Value.Success);
}
var multiGet = bucket.Get(multiUpsert.Keys.ToList());
foreach(멀티겟의 변수 쌍)
{
Assert.IsFalse(pair.Value.Success);
}
}
}
위의 코드에서는 먼저 대량 Upsert 메서드를 사용하여 키 집합을 추가한 다음, 키 목록을 가져와 Couchbase 버킷에서 키와 연결된 문서 또는 값을 제거하는 새로운 Remove overload를 사용하고 마지막으로 키가 존재하는지 확인하고 있습니다. 약간 인위적이지만 실제 시나리오에서 어떻게 사용될 수 있는지 상상할 수 있습니다.
이번 릴리스에는 IO 계층의 변경 사항 외에도 다음과 같은 주요 버그 수정 사항이 포함되어 있습니다:
- NCBC-777: CAS가 변경되면 Observe가 ObserveResponse.DurabilitySatisfied를 반환합니다.
- NCBC-748: App.Config에서 풀 구성이 사용되었는지 확인
- NCBC-750: 서버의 변경 사항이 BucketConfig로 전파되는지 확인하기
- NCBC-540: 보장 TTL 타임스팬이 규칙을 따를 때
- NCBC-625: 브레이킹 모노 컴파일을 사용하여 제거
전체 릴리스 노트는 여기에서 확인할 수 있습니다.
기여
커뮤니티에서 GitHub의 풀 리퀘스트, Jira 티켓 제출 및 포럼에서의 토론을 통해 여러 가지 기여가 있었습니다. 코드를 통해 직접 기여하지 않았더라도 이번 릴리스에 기여해 주신 모든 분께 감사드리며, 피드백과 의견은 언제나 환영합니다.
어떻게 받을 수 있나요?
패키지는 NuGet, S3에서 사용할 수 있으며, "2.0.1" 태그를 사용하여 마스터에서 직접 소스를 가져올 수도 있습니다: