일반 공개(GA)를 발표하게 되어 기쁘게 생각합니다. C++ SDK 를 출시합니다! 이번 릴리스에서는 기존의 포괄적인 C++ 언어에 네이티브 C++ 언어 지원이 추가되었습니다. SDK 라이브러리 11개 프로그래밍 언어로 지원되며, 개발자가 확장 가능한 최신 애플리케이션을 구축할 수 있는 강력한 고성능 도구를 제공하겠다는 Facebook의 노력에 중요한 이정표가 될 것입니다. 사실 이 C++ SDK는 기존 유니티의 핵심 라이브러리입니다. Python, NodeJS, Ruby및 PHP SDK를 지원하며, 이러한 모든 프로그래밍 언어에서 일관되고 성능이 우수하며 효율적인 경험을 제공하기 위해 노력하고 있습니다.
왜 C++ SDK인가?
C++는 성능, 효율성 및 시스템 리소스에 대한 제어 기능으로 인해 많은 개발자에게 여전히 중요한 언어입니다. Couchbase는 C++ SDK를 도입함으로써 개발자가 이러한 이점을 활용하는 동시에 Couchbase의 고급 NoSQL 기능을 최대한 활용할 수 있도록 지원합니다. 이번 릴리스가 획기적인 이유는 다음과 같습니다:
성능
C++는 속도와 로우레벨 메모리 관리로 잘 알려져 있어 성능이 중요한 애플리케이션에 이상적입니다. Couchbase용 C++ SDK를 사용하면 속도나 효율성을 희생하지 않고도 고성능 애플리케이션을 구축할 수 있습니다.
원활한 통합
C++ SDK는 Couchbase Server와의 원활한 통합을 제공하여 개발자가 KV 작업, SQL++ 쿼리 및 트랜잭션과 같은 작업을 쉽게 수행할 수 있도록 지원합니다. 이러한 긴밀한 통합을 통해 애플리케이션은 고성능을 유지하면서 효과적으로 확장할 수 있습니다.
최신 API 디자인
C++ SDK는 최신 C++ 표준에 부합하는 현대적이고 관용적인 API를 제공합니다. 따라서 C++ 개발자에게는 강력할 뿐만 아니라 직관적이므로 학습 곡선을 줄이고 애플리케이션을 빠르게 구축할 수 있습니다.
주요 기능
다음은 Couchbase용 C++ SDK의 뛰어난 기능 중 일부입니다:
간편한 연결 관리
C++ SDK는 다음을 간소화합니다. 연결 관리를 사용하여 최소한의 노력으로 Couchbase 클러스터에 대한 연결을 설정하고 관리할 수 있습니다. 여기에는 연결 풀링, 로드 밸런싱 및 장애 조치를 처리하여 애플리케이션의 복원력과 성능을 유지하는 것이 포함됩니다. 즉, SDK는 클러스터의 토폴로지를 자동으로 읽고 클러스터 크기 조정 또는 클러스터 업그레이드와 같은 토폴로지 변경 중에 원활한 연결을 제공할 수 있습니다. 다음은 카우치베이스 데이터베이스에 연결하는 C++ 코드의 예시입니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Attempt to connect to the Couchbase cluster auto [connect_err, cluster] = couchbase::cluster::connect(config.connection_string, options).get(); if (connect_err) { // Output the error message if connection fails std::cout << "Unable to connect to the cluster. Error code: " << connect_err.message() << "\n"; } else { auto collection = cluster.bucket(config.bucket_name) .scope(config.scope_name) .collection(config.collection_name); // d something interesting cluster.close().get(); } |
키-값(KV) 운영 지원
C++ SDK는 기본적으로 다음을 수행하도록 지원합니다. 키 값 연산. 키-값 연산은 카우치베이스에 고유한 기능으로, 카우치베이스에 저장된 문서에 대해 매우 빠른 CRUD 연산을 제공합니다. 다음은 간단한 KV를 실행하는 C++ 코드의 예입니다. get 문서의 업서트.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
auto collection = cluster.bucket(config.bucket_name) .scope(config.scope_name) .collection(config.collection_name); // KV- get auto record = collection.get(document_id); std::cout << record.content_as() << "\n"; // create a new document const std::string document_id{ "minimal_example" }; const tao::json::value basic_doc{ { "a", 1.0 }, { "b", 2.0 }, }; // KV auto [err, resp] = collection.upsert(document_id, basic_doc, {}).get(); if (err.ec()) { std::cout << "ec: " << err.message() << ", "; } else { std::cout << "id: " << document_id << ", CAS: " << resp.cas().value() << "\n"; } cluster.close().get(); |
리치 쿼리, 검색 및 벡터 검색 지원
C++ SDK는 다음을 지원합니다. SQL++ 쿼리, 전체 텍스트 검색 (FTS) 및 벡터 검색를 통해 복잡한 데이터 작업을 수행할 수 있는 강력한 도구를 제공합니다. 정교한 쿼리를 실행해야 하든 전체 텍스트 검색을 수행해야 하든, SDK는 모든 것을 지원합니다.
쿼리 검색
다음은 간단한 코드 스니펫입니다. SQL++ 쿼리 를 사용하여 항공사 컬렉션에서 레코드를 가져옵니다:
|
1 2 3 4 5 6 |
auto scope = cluster.bucket(config.bucket_name).scope(config.scope_name); auto [err, resp] = scope.query("SELECT * FROM airline LIMIT 10").get(); std::cout << "--- Iterating as JSON objects:\n"; for (auto row : resp.rows_as_json()) { std::cout << "Airline(id: " << row["airline"]["id"] << ", name: \"" << row["airline"]["name"] << "\")\n"; } |
전체 텍스트 검색(FTS)
아래는 코드 스니펫으로 FTS 쿼리 를 클릭하여 "멋진 레스토랑"랜드마크 컬렉션에 생성된 인덱스입니다:
|
1 2 3 4 5 6 7 8 9 10 |
auto scope = cluster.bucket(config.bucket_name).scope(config.scope_name); auto [err, resp] = scope .search("travel-inventory-landmarks", couchbase::search_request(couchbase::query_string_query("nice restaurants")), couchbase::search_options{}.fields({ "content" })) .get(); for (const auto& row : resp.rows()) { auto fields = row.fields_as<couchbase::codec::tao_json_serializer>(); std::cout << "score: " << row.score() << ", id: \"" << row.id() << "\", content: \"" << fields["content"].get_string() << "\"\n"; } |
벡터 검색
아래는 코드 스니펫으로 벡터 검색 쿼리:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
auto scope = cluster.bucket(config.bucket_name).scope(config.scope_name); // weights could be retrieved from your llm model or openAI std::vector<double> weights{ 0.1, 0.2, 0.3, 0.4 }; auto [err, resp] = scope .search("travel-inventory-landmarks", couchbase::search_request(couchbase::vector_search( couchbase::vector_query(field_name, weights)))) .get(); for (const auto& row : resp.rows()) { auto fields = row.fields_as<couchbase::codec::tao_json_serializer>(); std::cout << "score: " << row.score() << ", id: \"" << row.id() << "\", content: \"" << fields["content"].get_string() << "\"\n"; } |
비동기 프로그래밍
SDK는 다음을 지원합니다. 비동기 프로그래밍 모델을 사용하여 응답성이 뛰어나고 블로킹이 없는 애플리케이션을 구축할 수 있습니다. 이는 응답성 유지가 필수적인 처리량이 많은 애플리케이션에 특히 유용합니다. 다음은 비동기 컨텍스트에서 트랜잭션을 실행하는 예시입니다:
|
1 2 3 4 5 6 |
std::shared_ptr<async_attempt_context> ctx) -> couchbase::error { ctx->get( collection, some_id, // do something in this transaction } |
거래
이 새로운 C++ SDK에는 다음이 지원됩니다. 거래 를 지원하며, 성능 개선과 기능을 추가하여 기존 C++ 트랜잭션 지원을 대체합니다. 다음은 트랜잭션 컨텍스트 생성을 위한 샘플 코드 스니펫입니다:
|
1 2 3 4 |
std::shared_ptr<couchbase::transactions::attempt_context> ctx) -> couchbase::error { ctx.insert(collection, "doc-a", nlohmann::json({})); couchbase::transactions::transaction_get_result doc_a = ctx->get( collection, “doc-a”) } |
강력한 오류 처리
오류 처리 는 모든 애플리케이션에서 매우 중요하며, C++ SDK는 다른 SDK와 마찬가지로 연결 끊김에 대한 재시도, 연결 풀링 및 정보 제공 오류 메시지 등 포괄적인 오류 처리 기능을 제공합니다. 이를 통해 오류를 원활하게 처리하고 복구하여 애플리케이션의 안정성과 신뢰성을 향상시킬 수 있습니다.
시작하기
카우치베이스용 C++ SDK를 시작하는 데 도움을 드리기 위해 문서 웹사이트에 자세한 시작 가이드를 준비했습니다. 다음은 시작하는 방법에 대한 간략한 개요입니다:
커뮤니티 및 지원
저희는 커뮤니티와 오픈소스 개발의 힘을 믿습니다. 카우치베이스용 C++ SDK 는 오픈 소스입니다.를 통해 의견을 제시하고 피드백을 제공하며 대화에 참여해 주시기 바랍니다. 지원을 받으려면 엔터프라이즈 라이선스 고객인 경우 지원팀에 문의할 수 있으며, 그렇지 않은 경우에는 종합적인 문서에 가입하여 카우치베이스 포럼 또는 카우치베이스 디스코드를 통해 문의하거나 지원 포털.
추가 읽기
자세한 내용은 문서 웹사이트를 참조하세요. 특히 트랜잭션 및 비동기 작업과 관련된 API에 대해 자세히 설명하고 있으며, 더 자세히 알아볼 수 있도록 기타 참고 자료와 샘플 바인딩 링크를 제공합니다:
지원되는 운영 체제 는 문서 웹사이트에 나와 있습니다.
행복한 코딩!
카우치베이스 팀