드디어 Couchbase .NET 2.0 SDK의 공식 개발자 프리뷰 1(DP1)이 출시되었습니다! 이전에는 게시됨 에서 Couchbase .NET SDK를 다시 작성하게 된 동기와 목표 및 기대할 수 있는 기능에 대해 설명했습니다. 이 DP1은 최소한의 기능 하위 집합 에서 약속드린 대로 개발자의 관점에서 API가 나아가고 있는 방향에 대해 알아볼 수 있을 것입니다. 이 글에서는 새 클라이언트의 미리 보기를 통해 시작하고 실행하는 방법과 몇 가지 기능을 보여드리겠습니다.
경고: 프로덕션 환경에서 DP1을 사용하지 마세요!
물론 프로덕션 문제를 디버깅하기 위해 가위를 들고 밤잠을 설치는 것을 좋아하지 않는다면 말입니다.
진지하게 여러분, 이것은 고려해야 합니다. 매우 이른 사전 릴리스 그리고 지금부터 최종 총회까지 내부적으로나 외부적으로 많은 변화가 있을 것으로 예상됩니다. 즉, 추가적인 방법과 기능이 추가되는 것을 제외하고는 공개 인터페이스는 크게 변경되지 않을 것입니다.
사전 요구 사항
DP1을 시작하고 실행하려면 몇 가지 전제 조건이 필요합니다:
- Couchbase Server 2.5 이상의 로컬 인스턴스가 설치되어 실행 중입니다. 그렇지 않은 경우 지금 설치하세요: http://www.couchbase.com/download
- N1QL 개발자 프리뷰 3이 설치되어 실행 중입니다. 설치되어 있지 않다면 그것도 설치하세요: http://www.couchbase.com/communities/n1ql
- Visual Studio 2013이 설치되어 있습니다. VS2012 또는 Express 버전 중 하나도 가능합니다: http://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx하지만 아직 테스트해 보지 않았으니 알아서 하세요 ;)
- 이제 다음에서 비트를 다운로드하세요. 여기.
이제 모든 것이 설치되었나요? 이제 코드를 작성해 보겠습니다*!
*튜토리얼을 따라 하려면 VS2013을 시작하고 Couchbase.NetDP1이라는 콘솔 애플리케이션을 만든 다음 위의 마지막 글머리 기호에서 바이너리에 대한 참조를 추가하세요. 최종 솔루션/프로젝트도 사용할 수 있습니다. 여기.
클러스터 개체
Cluster 개체는 Couchbase 서버 클러스터의 클라이언트 측 표현을 나타내며 Couchbase 버킷 및 관리 API와 상호 작용하기 위한 인터페이스를 제공합니다. 내부적으로는 클라이언트와 서버 간의 연결을 관리하고 리소스가 올바르게 할당 및 할당 해제되는지 확인합니다.
클러스터 클래스는 GOF 지연 로드 동작이 있는 싱글톤은 프로세스 내의 모든 스레드에서 단일 인스턴스를 사용해야 한다는 것입니다. 이는 싱글톤은 아니지만 성능상의 이유로 싱글톤처럼 취급해야 했던 이전 1.X 클라이언트와 비교하면 큰 변화입니다.
클러스터 개체를 사용하려면 먼저 초기화해야 합니다. 기본적으로 구성은 localhost(127.0.0.1)를 사용하도록 설정되어 있으며, 클러스터 개체당 최대 크기가 2이고 최소 크기가 1인 연결 풀을 생성합니다. 이러한 기본값을 재정의하려면 고유한 ClientConfiguration 개체를 생성하고 이를 Cluster.Get()을 호출하기 전에 Cluster.Initialize(...) 메서드에 전달하여 재정의할 수 있습니다.
또한 ClientConfiguration 클래스를 사용하면 버킷 수준에서 구성을 재정의할 수 있으므로 사용하려는 각 버킷에 대해 별도의 구성을 만들 수 있습니다.
카우치베이스버킷 개체
Cluster 객체 외에 또 다른 중요한 클래스로는 뷰 쿼리, N1QL 쿼리 수행, 키에 대한 일반적인 CRUD 작업 수행을 위한 API를 제공하는 CouchbaseBucket 클래스가 있습니다. 또한 필요한 모든 유형의 직렬화/역직렬화를 수행하고 클러스터 전체에서 키 집합에 대한 키 해싱을 관리합니다. CouchbaseBucket 클래스는 IBucket 인터페이스를 구현하며, 인메모리 Memcached 버킷 작업을 위한 사촌이 있습니다: MemachedBucket. 이 DP에서는 둘 다 지원됩니다.
CouchbaseBucket 클래스를 사용하려면 초기화된 Cluster 객체(위 참조)가 필요하며, 또한 Couchbase Server 인스턴스 또는 클러스터 내에 이미 Bucket이 존재해야 합니다. 다음은 모든 Couchbase 설치와 함께 제공되는 "기본" Bucket을 여는 예제입니다:
버킷 인스턴스가 있으면 문서와 버킷에 대한 CRUD 작업을 시작할 수 있습니다. DP1에서는 문서 삽입과 읽기만 지원된다는 점에 유의하세요. 다음은 새로운 삽입 메서드의 예입니다:
다음은 위의 코드를 사용하여 기본 버킷에 삽입된 문서를 검색하기 위해 Get(key)를 사용하는 예제입니다:
버킷 사용이 끝나면 클러스터 개체로 다시 릴리스하기만 하면 됩니다:
클러스터 객체 자체는 IDisposable을 구현하므로 이를 사용 중인 프로세스가 종료되면 Dispose 메서드가 호출되어야 합니다. 명시적으로 호출하지 않으면 GC는 나중에 특정 시점에 파이널라이저를 호출하여 암시적으로 Dispose를 호출하고 내부 리소스를 정리합니다.
IOperationResult 객체
대부분의 메서드는 작업 결과에 관한 추가 정보를 제공하는 IOperationResult 객체를 반환합니다. 가장 주목할 만한 속성은 다음과 같습니다:
- 가치 - 카우치베이스에서 삽입되거나 반환되는 객체 또는 값 - 이것은 타입 T입니다.
- 성공 - 작업 성공 여부를 나타내는 부울 값입니다.
- 메시지 - 연산이 실패한 경우 실패 이유에 대한 추가 정보가 포함된 문자열 값이며, 그렇지 않으면 비어 있습니다.
- 응답 상태 - 작업 상태를 나타내는 서버에서 반환된 값입니다.
- Cas - 연산에 대한 "확인 및 설정" 값인 부호 없는 긴 문자열입니다. 이는 낙관적인 동시성을 위한 수단으로 사용됩니다.
매우 일반적인 패턴은 성공 속성을 확인하고 오류가 감지되면 그에 따라 프로그램 흐름을 변경하는 것입니다.
N1QL 지원!
이 개발자 프리뷰에서는 애드혹 N1QL 쿼리에 대한 기본 지원도 제공합니다! N1QL이 무엇인지 잘 모르시는 분들을 위해 설명하자면, Couchbase Buckets에서 문서를 쿼리하기 위한 SQL과 유사한 언어입니다. 다음은 예시입니다:
이 기능을 사용하려면 N1QL용 개발자 프리뷰 3이 설치되어 실행 중이어야 합니다! 여기에서 다운로드할 수 있습니다: http://www.couchbase.com/communities/n1ql
지원 보기
뷰 쿼리는 개발자 미리 보기 1에서도 지원됩니다. 맥주 샘플이 설치되어 있다고 가정하면(Couchbase 서버 관리 콘솔의 설정->샘플 탭에서 설치 가능), 다음 쿼리가 작동합니다:
CreateQuery 메서드는 IViewQuery 인터페이스를 생성하여 Couchbase 보기 REST URI를 생성할 수 있습니다. 이 인터페이스는 "유창한 스타일" 인터페이스를 통해 일련의 호출을 연결하여 사용 사례에 적합한 쿼리를 만들 수 있습니다.
다음 단계
베타 버전을 출시하기 전에 적어도 한 번 이상의 개발자 프리뷰가 더 있을 것으로 예상되며, 2014년 중후반 여름경에 공개 테스트가 진행될 예정입니다(날짜는 정해지지 않았으므로 변경될 수 있습니다!). 대중의 관점에서 볼 때, 여기서 논의된 공개 인터페이스는 보다 일관성 있고 사용하기 쉽도록 약간 변경될 가능성이 높습니다. 즉, 개발자 커뮤니티의 피드백을 기다리고 있는 상당히 완성된 상태라는 뜻입니다(여러분의 의견을 경청하고 있습니다!).
다음 개발자 프리뷰에서 볼 수 있는 것은 모든 또는 대부분의 Couchbase CRUD 작업(증분/감소, 관찰 등)에 대한 지원과 다음에 대한 지원입니다. TAP(대기/비동기) 그 후에는 성능과 내부 안정성에 더 중점을 두게 됩니다. 더 아래로 내려가면 다음이 표시됩니다. LINQ 다음에 대한 지원 N1QL 쿼리 및 SSL 지원
여러분의 피드백이 필요합니다!
네, 여러분! 계속해서 비트를 사용해 보시고 의견을 알려주세요. 버그를 발견하거나 기능 요청이 있는 경우 여기에서 Jira 티켓을 만들 수 있습니다: http://www.couchbase.com/issues/browse/NCBC
이 DP1을 사용하려고했습니다. "JSON 정수 15456010240 가 Int32에 비해 너무 크거나 작습니다. 경로 \'[0].quota.ram\', 줄 1, 위치 12344\"에서 cluster.OpenBucket(bucketName); RAM 크기를 보유하기 위해 Int64 변수가 아니어야 하나요?
오픈 소스인가요? 저희도 기여할 수 있도록 액세스 권한이 있으면 좋을 것 같습니다. 이 외에도 스냅샷 기반 변경 추적 지원 및 JSON 결과가 포함된 N1QL 쿼리용 LINQ 래퍼를 구축하려고 합니다. 이 구현은 Ruezel의 CqlSharp를 기반으로 하고 있습니다. 이것이 통과된다면, 우리는 새로운 릴리스에서 Cassandra와 BigFox를 버리고 Couchbase와 N1ql을 채택할 수 있습니다. http://thulya.com . 감사합니다.
thulyaportal -
정말 버그입니다! 조만간 다가오는 베타 버전에서 이 문제를 해결하도록 하겠습니다. 다음은 추적용 Jira 티켓입니다: http://www.couchbase.com/issue…
예, 이것은 곧 Apache 2.0 라이선스에 따라 출시될 예정이며 커뮤니티 기여에 감사드립니다. N1QL용 Linq 래퍼를 개발하신다니 정말 멋지네요! 저희는 클라이언트 위에 또 다른 레이어가 될 N1Ql용 Linq 제공자도 계획하고 있습니다.
\"스냅샷 기반 변경 추적 지원", 그러니까 ORM에 가깝다고요? 멋진 아이디어입니다.
감사합니다,
Jeff
[...] N1QL 쿼리에 대한 임시 쿼리 지원. N1QL이 무엇인지 궁금하신가요? Couchbase에서 JSON 문서를 쿼리하기 위한 완전히 새로운 언어입니다! [...]
[...] .NET SDK 2.0 개발자 프리뷰 1 블로그 [...]
[...] DP1: http://www.couchbase.com/couchbase-net-sdk-20-developer-preview-1 […]
[...] 릴리스에는 개발자 프리뷰 1, 2, 3과 베타 1에 추가된 모든 기능이 포함되어 있으며 [...]