SQL, 검색, 지리적 위치 정보 조회, 가치 저장소 액세스 등 다양한 데이터 액세스 유형에 가장 적합한 사용 사례가 있습니다. 각 액세스 방법에 대해 여러 데이터 시스템을 결합하거나 확장할 수 있습니다. 따라서 카우치베이스 아키텍처는 이러한 다양한 유형의 컨설팅을 결합하여 실제 문제를 해결할 수 있습니다.
이 문서는 데모 애플리케이션 "이게 뭐야?"의 측면에 대해 설명합니다. "이게 뭐죠?"(일명 "WITT"). 자세한 컨텍스트와 히스토리를 확인해보세요:
이 블로그 게시물은 2024년 C# 도래의 일부입니다. 따라서 이 게시물을 읽기 위해 C#를 이해할 필요는 없으며, 개념은 다음 중 하나에 적용될 수 있습니다. 카우치베이스에서 사용할 수 있는 다양한 SDK를 제공합니다.
구매자 검색: 기본 사항
검색은 유사한 항목을 정확하게 찾아야 하는 애플리케이션에 유용합니다. 예를 들어, IA 모델로 생성된 임베딩은 색인화 및 검색할 수 있습니다. WITT의 모든 항목은 동일하게 모델링됩니다:
|
1 2 3 4 5 6 7 8 |
{ "name": "Reticulated Splines", "desc": "Specialized grooves used in advanced machinery for precise alignment.", "price": 19.99, "image": "data:image/png;base64,...", "rating": 5, "imageVector": [ -4.5390625, 0.32543945, ... ] } |
참고: 항목 이미지는 Base64로 코딩된 문자열로 저장됩니다. 프로덕션 프로젝트에서는 데이터 뱅크에 인코딩할 때 파일 인코딩, S3 등을 사용하는 것이 좋습니다.
이미지 벡터 와 같이 IA 이미지 모델에 이미지를 가져와서 복구됩니다. Azure 컴퓨터 비전.
관찰: 다음과 같은 리소스 중 하나 카펠라 AI 서비스 최근 발표된 모델 호스팅은 이 단계의 지연 시간을 단축하고 잠재적으로 비용을 절감할 수 있을 뿐만 아니라 프라이버시와 유연성을 향상시킬 것입니다.
이미지 통합 및 향후 전망 검색
필드에 대한 수의사 검색 인덱스로 이미지 벡터를 사용하면 카우치베이스가 더 가까운 뷰 쿼리를 실행할 수 있습니다. 이 경우 이 검색은 시각적으로 동일한(IA 모델에 따라) 항목을 찾습니다. 따라서 사용자가 이미지를 가지고 있고 이 이미지와 가장 유사한 항목을 카우치베이스에서 찾고자 하는 경우 검색 인덱스를 통해 이를 수행할 수 있습니다:
다음은 특정 이미지에 대한 WITT 코드입니다, 벡터 임베딩을 요청합니다. Azure 컴퓨터 비전을 수행합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Free tier: 20 Calls per minute, 5K Calls per month // Standard tier: 10 Calls per second, starting $1.00 USD/1000 calls (Estimated) public async Task<float[]> GetImageEmbedding(string base64Image) { var endpoint = _settings.Value.Endpoint; var subscriptionKey = _settings.Value.SubscriptionKey; using (HttpClient client = new HttpClient()) { // Set the subscription key and endpoint client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey); // Endpoint URL string url = $"{endpoint}/retrieval:vectorizeImage?overload=stream&api-version=2023-04-01-preview"; byte[] imageBytes = Base64PngToByteArray(base64Image); using (ByteArrayContent content = new ByteArrayContent(imageBytes)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); HttpResponseMessage response = await client.PostAsync(url, content); string jsonResponse = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { // Parse the JSON response to extract the vector embeddings JObject json = JObject.Parse(jsonResponse); JToken vectorEmbeddings = json["vector"]; return vectorEmbeddings.ToObject<float[]>(); } throw new Exception("Unable to retrieve vector embeddings for image."); } } } |
물론 이 이름으로도 사용할 수 있는 프레임워크가 있지만, 이 간단한 데모에서는 REST라는 단일 이름만 있으면 충분합니다. 이 데모에서 다른 Azure를 사용하려는 경우 다음을 구현해야 합니다. IEmbeddingService.
SQL++로 다용도 상담
많은 수의 데이터 뱅크는 매우 유사한 작업을 실행할 수 있습니다. 카우치베이스를 사용하면 단일 플랫폼, 즉 단일 데이터 집합으로 다양한 유형의 데이터 작업을 실행할 수 있습니다. 예를 들어, 지리적 위치(웹 브라우저에서 검색할 수 있음)가 있는 경우 이미지만으로는 항목을 찾을 수 없지만, 단 하나의 SQL++ 쿼리를 통해 지리적 검색과 결합할 수 있습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
WITH closestStores AS ( /* CTE to get closest stores based on user's location */ SELECT x.name, META(x).id AS id FROM whatisthis._default.Stores x WHERE SEARCH(x, { "fields": ["*"], "query" : { "location" : { "lat" : 39.8787, "lon" : -83.0805 }, "distance" : "15mi", "field" : "geo" } . . . }) LIMIT 3 ) /* SELECT items with nearby stock */ SELECT allItems.name, allItems.`desc`, allItems.image, allItems.price, allItems.rating, SEARCH_SCORE(allItems) AS score, /* subquery to get stock from nearby locations */ (SELECT . . . ) AS stock FROM whatisthis._default.Items AS allItems /* vector search using image embedding */ WHERE SEARCH(allItems, { "fields": ["*"], "query": { "match_none": {} }, "knn": [ { "k": 4, "field": "imageVector", "vector": [ -0.9135742,1.1552734, ... ] } ] } ) ORDER BY score DESC |
참고: 이 상담은 간결성을 위해 편집되었습니다. Confira DataLayer.cs 를 클릭하여 전체 상담 내용을 확인하세요.
이 상담의 결과는 특정 이미지에 대한 '가장 적합한 대응'입니다. 예를 들어 다음은 캔버스 이미지를 업로드할 때의 주요 결과입니다:
응답 품질에 따라 달라집니다:
-
- IA 모델의 품질
- 특정 항목에 대한 이미지의 품질/양
제한된 테스트에서 Azure Computer Vision 모델이 관련 이미지를 결합하는 데 매우 적합하다는 것을 알았습니다.
그 결과 품목을 구매할 수 있는 다음 단계도 표시됩니다.
수의학 및 지리학 관련 정보
이 컨설팅은 수의학적 검색과 지리공간적 검색을 단일 작업으로 결합할 수 있는 카우치베이스의 역량을 보여줍니다. 또한 CTE, JOIN 및 하위 컨설턴트도 제공합니다.
단 한 번의 상담으로 실행할 수도 있습니다:
-
- 전체 텍스트 검색득점, 패싯, 부스팅 등을 포함합니다.
- 시계열 운영
- 사용자 정의 함수(UDF) 사용자 지정 코드(JavaScript 또는 SQL) 추가하기
- 전체 SQL 기능얀엘라, CTE, 조인, 집계 등의 기능
- 다음을 통해 실시간 분석 데이터를 읽어오세요. 쓰기
- 다음에서 자동으로 동기화되는 데이터를 참조하세요. 모바일/엣지 디바이스
- 자동 캐싱 (기본 제공)
일부 데이터 은행은 이러한 작업의 일부만 실행할 수 있으며 추가 기능이 필요할 때 다른 도구를 사용하도록 요청할 수 있습니다. 이는 비용, 지연 시간 및 복잡성을 증가시킵니다. 카우치베이스를 사용하면 애플리케이션을 더 간단하고, 빠르고, 효율적으로 관리할 수 있습니다.
기술 자료
참조된 WITT 데모 애플리케이션은 다음과 같이 구축되었습니다:
-
- React UI 프론트엔드
- ASP.NET Core 백엔드
- Azure 컴퓨터 비전
- 카우치베이스 .NET SDK
또한 다음과 같이 문의할 수도 있습니다. 이게 뭐죠? 공개 데모로 사용하세요. (모든 것이 무료 호스팅으로 구축되었음을 기억하세요(Azure 및 카펠라 무료 티어) 그리고 현재 활발하게 개발되고 있습니다. 지연 시간이나 비활성 시간을 발견하면 많은 작업으로 인한 것일 수 있습니다.)