ASP.NET CRUD 애플리케이션은 만들기, 읽기, 업데이트 및 삭제로 구성됩니다. In 파트 1를 사용하여 기본 ASP.NET Core 프로젝트를 설정했습니다. In 파트 2에 첫 번째 읽기 엔드포인트에서 위시리스트 데이터에 대한 SQL++ 쿼리를 사용합니다.
Couchbase의 SQL++는 강력한 쿼리 언어로, 관계형 SQL의 모든 최고의 기능을 포함하고 있으며 JSON 데이터 쿼리를 위한 다양한 기능을 갖추고 있습니다.
하지만 SQL++가 Couchbase에서 데이터와 상호 작용하는 유일한 방법은 아닙니다. 이 글에서는 키-값 API를 사용하는 방법을 살펴보겠습니다.
키-값 대 SQL?
관계형 배경 지식이 있는 경우 SQL에 익숙할 것입니다. 유일한 데이터와 상호 작용하는 방법(엔티티 프레임워크 코어와 같은 도구를 사용하더라도 궁극적으로는 여전히 SQL을 사용하게 됩니다). Couchbase와 같은 NoSQL 데이터베이스의 가장 큰 특징 중 하나는 SQL을 사용할 수 있지만 다른 액세스 방법도 사용할 수 있다는 것입니다. (따라서 반의어 "SQL뿐만 아니라").
Couchbase의 경우, 데이터에 액세스하는 가장 효율적인 방법은 키-값 조회. 카우치베이스가 지원하는 다른 모든 인덱스 및 쿼리(SQL++, 전체 텍스트 검색, 분석, 이벤트등)는 궁극적으로 낮은 키 값 조회를 기반으로 구축되거나 이에 의존합니다.
키-값 API는 최고의 성능을 제공합니다:
-
- 키가 지정되거나
- 코드에 키가 제공되거나
- 결정론적으로 키를 구성할 수 있습니다.
예: 키-값을 사용해야 하는 경우
다음은 키-값 API를 읽기에 사용할 때(그리고 사용하지 않을 때)에 대한 몇 가지 예입니다:
사용 사례 | 키 값? | 왜 또는 왜 안 될까요? |
키로 사용자 조회 "73892“ | 예 | 직접 조회 |
키를 사용하여 사용자의 이메일 주소만 조회"73892“ | 예 | 사용자 문서가 크더라도 Couchbase는 키 기반 하위 문서 API를 클릭하면 문서의 일부를 검색할 수 있습니다. |
키가 있는 사용자 그룹 조회 "73892“, “47212", 그리고 “90491” | 예 | 이 경우 여러 키 조회 작업이 필요할 수 있지만 여전히 SQL 선택 ... 어디에서 ... 쿼리. |
블로그 게시물에서 댓글 조회 | 어쩌면 | 블로그 글에 대한 댓글이 하나의 문서에 있고 블로그 글 키를 알고 있는 경우 블로그 글 댓글 키를 만들 수 있습니다. 예: 블로그 글 키는 다음과 같습니다. 나는 풍선을 좋아해키를 사용하여 댓글을 표시합니다. 좋아요-풍선::댓글 |
에서 모든 사용자 조회 "Ohio“ | 아니요 | 사용자의 상태는 키가 아닌 '보조' 속성일 가능성이 높습니다(여러 사용자가 오하이오에 있을 수 있음). 이는 SQL++의 좋은 사용 사례입니다. |
로 제품 검색 "풍선" 설명에 | 아니요 | 설명은 키가 아닌 보조 속성입니다(여러 제품의 설명에 '풍선'이 있을 수 있음). 이는 전체 텍스트 검색(FTS)의 좋은 사용 사례입니다. |
Couchbase는 메모리 우선 아키텍처를 사용합니다. 내장된 캐시는 키-값 조회가 디스크에서 대기하지 않고 메모리에서 직접 데이터를 검색하는 경우가 많으므로 대기 시간이 마이크로초 단위로 짧습니다.
제 경험에 비추어 볼 때 가능한 한 키-값 API를 사용하고, 필요한 경우 SQL++ 또는 전체 텍스트 검색과 같은 보다 유연한 옵션으로 돌아가는 것이 좋습니다.
Get CRUD 엔드포인트 만들기
키-값 API를 사용하여 위시리스트에서 단일 항목을 검색하는 엔드포인트를 만들어 보겠습니다.
이 엔드포인트에는 위시리스트 항목의 ID를 매개변수로 지정해야 합니다:
1 2 3 4 5 6 7 8 9 10 11 |
[HttpGet] [경로("API/GET/{ID}")] public 비동기 작업<IActionResult> Get(Guid id) { var 버킷 = 기다림 _버킷 공급자.GetBucketAsync("demo"); var 컬렉션 = 기다림 버킷.CollectionAsync("위시리스트"); var 항목 = 기다림 컬렉션.GetAsync(id.ToString()); 반환 확인(항목.ContentAs<위시리스트 항목>()); } |
이 예제에서는 필요하지 않습니다. 클러스터 객체를 사용할 수 있지만(SQL++에서 했던 것처럼), 그래도 컬렉션 객체에 추가합니다. 위시리스트 컬렉션이 위시리스트의 _기본값 범위를 설정하면 스코프 가져오기를 건너뛰고 버킷에서 컬렉션으로 바로 이동합니다..
다음에서 품목이 반품된 경우 GetAsync에 있는 IGetResult 객체를 저장합니다. 카우치베이스는 C# 객체를 저장하지 않고 JSON을 저장합니다. 따라서 직렬화하려면 위시리스트 항목 객체, 사용 item.ContentAs.
이 API는 유연성을 제공합니다. Couchbase에서 반환된 문서를 다음과 같이 직렬화할 수 있습니다. 위시리스트 항목 여기와 아마도 아마존 위시리스트 항목 를 사용하여 애플리케이션의 다른 부분에서
행동하는 핵심 가치
ASP.NET Core 애플리케이션을 실행하고 업데이트된 OpenAPI/Swagger 페이지를 살펴봅시다.
엔드포인트 /api/get/{id} 아래 선물 가 나열되어야 합니다. 해당 엔드포인트를 클릭하여 확장합니다. 엔드포인트의 /api/getall 엔드포인트와 마찬가지로, 이 엔드포인트에는 가져오려는 위시리스트 항목의 ID라는 매개 변수가 필요합니다.
GUID 중 하나가 기억나지 않는 경우 다음을 실행할 수 있습니다. /api/getall 를 먼저 클릭하고 그 중 하나를 복사하거나 사용하세요: "31c9cc33-8dfe-440c-bd1b-bb038939d2e0"(조이 보토 유니폼에 부여한 ID입니다)라는 문구가 있습니다. 클릭 사용해 보기를 클릭하고 해당 ID를 붙여넣은 다음 실행:
응답에서 반환된 ID는 다음과 같습니다. null. 에서 설명했듯이 파트 2를 입력하면 Couchbase는 ID를 메타데이터로 저장합니다. 이 상황에서는 큰 문제가 되지 않습니다. ID는 매개변수로 제공되었으므로 반환되는 C# 객체에 할당하기만 하면 됩니다:
1 2 3 4 |
var itemObj = 항목.ContentAs<위시리스트 항목>(); itemObj.Id = Guid.Parse(id); 반환 확인(itemObj); |
또는 ID를 반환하고 싶지 않은 경우 를 전혀 사용하지 않는 경우 별도의 C# 뷰 클래스를 만들 수 있습니다. 이름 를 사용하여 ContentAs.
유효성 검사 및 오류 처리는 어떻게 되나요?
정말 현명한 질문입니다! 이 엔드포인트는 확실히 프로덕션에 사용할 준비가 되지 않았습니다. 무엇이 빠졌나요?
-
- 오류 처리: 예외가 발생하면 어떻게 하나요?
- 유효성 검사: 전달된 ID가 유효하지 않은 경우 어떻게 하나요?
- 인증/승인: 이 API의 소비자에게 읽기 권한이 없어야 하는 경우 어떻게 해야 하나요?
- 로깅: 무언가 제대로 진행되지 않아 나중에 결과를 검토하고 싶을 때는 어떻게 해야 하나요?
이는 모두 중요한 문제입니다. 이러한 대부분의 경우 ASP.NET Core에는 기본 제공 기능 및/또는 인기 있는 타사 라이브러리를 통해 도움을 받을 수 있습니다. 하지만 다음 사항에 대한 Couchbase 설명서를 확인하세요. .NET SDK로 오류 처리하기 그리고 보안 관리 개요.
다음 단계는 무엇인가요?
ASP.NET Core 프로젝트는 카우치베이스 카펠라에 연결되어 있으며, SQL++와 키-값 API를 통해 데이터를 읽고 있습니다.
다음 블로그 게시물에서는 데이터 생성 및 업데이트("C" 및 "U")에 대해 살펴보겠습니다.
그동안은 그렇게 하셔야 합니다:
-
- 아카펠라 무료 체험 신청하기
- 다음 내용을 확인하세요. .NET용 카우치베이스 플레이그라운드 브라우저에서 바로 실행할 수 있는 예제입니다.