인덱스 관리의 개발자 프리뷰가 포함된 Couchbase.NET SDK v2.2.7이 출시되었습니다!
오늘 공식 Couchbase .NET SDK 버전 2.2.7을 출시합니다! 이번 릴리스에는 특히 인덱스 관리 지원이 포함되어 있으며, v2.2.6에서 개발자 프리뷰로 출시되었던 하위 문서 API에 추가되었으며, 버그 수정 및 향후 .NET Core 지원에 대한 개선 사항이 포함되어 있습니다.
인덱스 관리
글로벌 보조 인덱스(GSI)는 카우치베이스 서버의 N1QL 쿼리 아키텍처의 중요한 부분으로, 빠르고 대기 시간이 짧은 쿼리를 가능하게 해줍니다. JSON 요소, N1QL 표현식에 인덱스를 배치하고 WHERE 절을 통해 필터를 사용할 수 있습니다. .NET SDK v2.2.7에서는 기본 및 보조 인덱스를 매우 쉽게 생성할 수 있도록 Couchbase Server 인덱싱 서비스에 대한 추상화를 구축했습니다. 이 추상화는 Couchbase 버킷 생성 및 관리 지원을 포함하는 BucketManager 클래스를 확장하고 확장합니다.
1 2 3 4 5 6 7 8 9 10 |
var 구성 = new 클라이언트 구성(); 사용 (var 클러스터 = new 클러스터(구성)) { 사용 (var 버킷 = 클러스터.OpenBucket("맥주 샘플")) { var 관리자 = 버킷.CreateManager("관리자", ""); } } |
버킷 관리자는 클러스터 인스턴스에서 버킷 개체를 열고 사용자 환경에 맞는 올바른 구성을 전달하면 생성됩니다.
기본 인덱스 생성 및 삭제
명명된 기본 인덱스와 명명되지 않은 기본 인덱스는 BucketManager 인스턴스가 있으면 CreatePrimaryIndex 및 CreateNamedPrimaryIndex 메서드를 호출하여 만들 수 있습니다:
1 2 3 4 5 6 |
//버킷에 이름 없는 기본 인덱스를 생성합니다. var 결과 = 관리자.CreatePrimaryIndex(false); //버킷에 "myprimaryindex"라는 이름의 기본 인덱스를 생성합니다. var 결과 = 관리자.CreateNamedPrimaryIndex("myprimaryindex", false); |
항상 열어둔 버킷의 컨텍스트에서 작업한다는 점에 유의하세요. 따라서 이러한 인덱스는 앞서 연 "맥주 샘플" 버킷에서 생성됩니다. 또한 이 두 가지 메서드 모두 "defer"라는 부울 필드를 사용하지만, 사실 보시다시피 모든 생성 메서드에는 "defer" 매개변수가 포함되어 있습니다. "defer"가 참이면 인덱스가 생성되지만 BuildDeferredIndexes 메서드가 호출될 때까지 인덱스가 구축되지 않습니다. 나중에 지연된 인덱스에 대해 자세히 알아보겠습니다!
명명된 또는 명명되지 않은 기본 인덱스를 삭제하는 것은 메서드 이름을 제외하면 인덱스를 만드는 것과 거의 동일합니다:
1 2 3 4 5 6 |
//버킷의 기본 인덱스를 삭제합니다. var 결과 = 관리자.드롭 프라이머리 인덱스(); //버킷에 명명된 기본 인덱스를 드롭합니다. var 결과 = 관리자.DropNamedPrimaryIndex("myprimaryindex"); |
인덱스가 존재하지 않으면 result.Success는 거짓이 됩니다.
보조 인덱스 만들기 및 삭제하기
보조 인덱스 생성 및 삭제는 하나 이상의 필드에 대해서도 인덱싱할 수 있다는 점을 제외하면 기본 인덱스와 유사합니다.
1 2 3 4 5 6 |
//"id" 및 "name" 필드에 "myindex"라는 보조 인덱스를 생성합니다. var 결과 = 관리자.CreateIndex("myindex", true, "id", "name"); //"myindex"라는 인덱스를 삭제합니다. var 결과 = 관리자.DropIndex("myindex"); |
이 경우 인덱스 생성이 지연되도록 "true"를 전달하고 있습니다. 또한 인덱스가 이미 존재하거나 존재하지 않는데 삭제하려고 하면 result.Success는 false가 됩니다.
하위 문서 API 업데이트
이번 릴리스에는 2.2.6에서 개발자 프리뷰로 출시된 SubDocument API에 대한 내부 변경 사항도 포함되어 있습니다. 성능과 관련된 두 가지 주요 개선 사항이 추가되었습니다:
- 단일 변이 또는 조회 연산이 실행되는 경우 SDK는 유선을 통해 몇 바이트를 절약하는 다중 연산이 아닌 단일 연산을 사용합니다.
- 응답 본문의 역직렬화는 이제 Content를 호출할 때까지 연기됩니다.
하위 문서 경로 탐색을 위한 람다 표현식
이러한 변경 사항 외에도 다음 커뮤니티의 기여를 통해 또 다른 새로운 기능이 릴리스에 추가되었습니다. 커뮤니티: 하위 문서 경로에 대한 람다 표현식 탐색. 이 기능을 사용하면 문자열 경로를 전달하는 대신 익숙한 유형 안전 인텔리센스 지원 구문을 linq에서 사용할 수 있습니다.
다음과 같은 문서가 있다고 가정합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "name": "수정헌법 제21조 양조장 카페", "city": "샌프란시스코", "state": "캘리포니아", "code": "94107", "country": "미국", "전화": "1-415-369-0900", "웹사이트": "http://www.21st-amendment.com/", "type": "양조장", "업데이트됨": "2010-10-24 13:54:07", "설명": "21세기 수정헌법 브루어리는 편안한 로프트 같은 분위기에서 수상 경력에 빛나는 다양한 하우스 메이드 맥주와 미국식 그릴 요리를 제공합니다. 야외 비어 가든에서 자이언츠 야구 경기 전후에 저희와 함께하세요. 세미 프라이빗한 브루어스 로프트에서 연회와 파티를 즐기기에 좋은 장소입니다. 21A에서 곧 뵙겠습니다!", "주소": [ "563 세컨드 스트리트" ], "geo": { "정확도": "ROOFTOP", "lat": 37.7825, "lon": -122.393 } } |
그런 다음 다음과 같이 "geo.accuracy" 경로에서 값을 검색합니다:
1 2 3 4 5 6 7 8 |
var 키 = "21st_개정안_브루어리_카페"; var 조회 = 버킷.룩업인(키). Get(x => x.지리적.정확성). 실행(); var 값 = 조회.콘텐츠(x=>x.지리적.정확성); Assert.AreEqual("ROOFTOP", 값); |
물론 문서에서 각 개별 요소를 검색하기 위해 여러 개의 'Get'을 연결할 수도 있습니다.
v2.2.7 릴리스 노트
버그
- [NCBC-1099] - 오류, 경고 및 메트릭 클래스에 DataContract 속성 추가
개선 사항
- [NCBC-1103] - 하위 문서에 대한 비동기 작업 지원
- [NCBC-994] - 개발 환경 및 프로젝트를 VS2015로 업그레이드
- [NCBC-1089] - 성공하지 못한 모든 코드 경로를 기다립니다.
- [NCBC-1095] - NodeUnavailableException에서 다시 시도하지 마십시오.
새로운 기능
v2.2.7을 다운로드하는 방법
- 바이너리 다운로드 여기를 클릭하세요.
- NuGet 패키지는 다음에서 찾을 수 있습니다. 여기를 클릭하세요.
- 깃허브 리포지토리는 다음과 같습니다. 여기를 클릭하세요.