곧 출시될 Couchbase Server 4.5 릴리스와 PHP 7을 통한 PHP 커뮤니티의 혁신을 지원하기 위해 저희는 PHP SDK를 개선하고 있습니다. 오늘은 내부 수정 및 개선 사항과 함께 몇 가지 새로운 기능을 제공하는 세 번째 베타를 발표하고자 합니다. 이 블로그 게시물에서는 그 중 몇 가지를 시연해 보겠습니다.
하위 문서 API
우리는 이미 이 API에 대해 이전에 쓴 글에 대해 설명했지만 이번에는 PHP를 보여드리겠습니다. 최소한 Couchbase 4.5 베타를 설치했고 향상된 샘플 버킷을 설정했다고 가정합니다. 여행 샘플
. 먼저 버킷에 대한 연결을 인스턴스화하고 임의의 호텔에 대해 보고하는 유틸리티 함수를 정의하는 몇 가지 서비스 코드를 작성해 보겠습니다.
1 2 3 4 5 6 7 8 9 |
$클러스터 = new 카우치베이스클러스터('couchbase://localhost'); $버킷 = $클러스터->오픈버킷('travel-sample'); 함수 보고($이름, $공개좋아요, $첫 서비스 평가) { printf("호텔 "%s" 공개 좋아요는 %d입니다. 서비스에 대한 첫 번째 평가는 %dn", $이름, 카운트($공개좋아요), $첫 서비스 평가); } |
이제 준비가 되었습니다. 하위 문서 API를 사용하면 세분화된 제어를 통해 대용량 문서에서 작업하면서 네트워크 트래픽을 절약할 수 있습니다. hotel_10025
:
1 2 3 4 5 6 7 8 |
$res = $버킷->룩업인('hotel_10025') ->get('name') ->get('public_likes') ->get('reviews[0].ratings.Service') ->실행(); 보고($res->값[0]['value'], $res->값[1]['value'], $res->값[2]['value']); // => 호텔 "메드웨이 유스호스텔"은 8개의 공개 좋아요가 있습니다. 서비스에 대한 첫 번째 평가는 5입니다. |
여기와 이후의 접근자 메서드는 경로를 첫 번째 인수로 받습니다. 이는 N1QL 경로와 유사합니다. 문서에 설명된 대로. 일반 API를 사용하여이 문서를 가져 오면 가장 작은 문서가 아니며 장소에 대한 많은 정보가 포함되어 있음을 알 수 있습니다. 룩업인
를 사용하면 관심 있는 데이터만 전송할 수 있습니다. 큰 문서에서 작은 부분을 수정하고 싶을 때 이 기능은 더욱 중요해집니다. 예를 들어 한 사람을 더 추가한다고 가정해 보겠습니다. 공개_좋아요
를 클릭하고 호텔 이름을 조정하고 등급 중 하나를 제거합니다.
1 2 3 4 5 6 |
$버킷->mutateIn('hotel_10025') ->대체('name', '메드웨이 어덜트 호스텔') ->배열 추가('public_likes', 'John Doe') ->제거('reviews[0]') ->실행(); |
코드는 설명이 필요 없을 정도로 간단합니다. 사용하려는 경우 낙관적 잠금에 두 번째 인수로 CAS 값을 전달하면 됩니다. mutateIn
. 돌연변이 연산자의 전체 목록은 API 참조에 있습니다. https://docs.couchbase.com/sdk-api/couchbase-php-client-2.2.0beta3/classes/CouchbaseMutateInBuilder.html. 변경 후의 내용을 표시해 보겠습니다만 이번에는 룩업인
여러 get
연산자:
1 2 3 4 5 |
$res = $버킷->retrieveIn('hotel_10025', 'name', 'public_likes', 'reviews[0].ratings.Service'); 보고($res->값[0]['value'], $res->값[1]['value'], $res->값[2]['value']); // => 호텔 "메드웨이 유스호스텔"은 9개의 공개 좋아요가 있습니다. 서비스에 대한 첫 번째 평가는 3입니다. |
인덱스 관리
이전에는 인덱스를 나열, 생성 또는 제거하려면 N1QL 문을 수동으로 작성해야 했습니다. 곧 출시될 PHP SDK 2.2에서는 다음과 같은 편리한 함수를 노출하여 이 작업을 간소화하는 새로운 API가 추가될 예정입니다. 버킷 관리자
를 사용하여 인덱스를 정의할 수 있습니다. 에 어떤 인덱스가 정의되어 있는지 살펴보겠습니다. 여행 샘플
기본값입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$관리자 = $버킷->관리자(); $res = $관리자()->listN1qlIndexes(); foreach ($res as $색인) { printf("색인 %s.%s", $색인->키 스페이스, $색인->이름); 만약 ($색인->조건) { printf("조건부: %s", $색인->조건); } 만약 (카운트($색인->필드) > 0) { printf("n톤 필드: %s", join(', ', $색인->필드)); } printf("n"); } |
다음과 같은 내용이 출력됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
색인 여행-샘플.def_primary 색인 여행-샘플.def_공항명 on 필드: `공항명` 색인 여행-샘플.def_city on 필드: `도시` 색인 여행-샘플.def_faa on 필드: `faa` 색인 여행-샘플.def_icao on 필드: `icao` 색인 여행-샘플.def_name_type 와 함께 조건: (`_유형` = "사용자") on 필드: `이름` 색인 여행-샘플.def_route_src_dst_day 와 함께 조건: (`유형` = "경로") on 필드: `소스공항`, `목적지공항`, (distinct (배열 (`v`.`일`) 에 대한 `v` in `일정` 끝)) 색인 여행-샘플.def_schedule_utc on 필드: 배열 (`s`.`UTC`) 에 대한 `s` in `일정` 끝 색인 여행-샘플.def_sourceairport on 필드: `소스공항` 색인 여행-샘플.def_type on 필드: `유형` |
다음 예는 이름에 인덱스를 만드는 방법을 보여 줍니다:
1 2 3 4 |
$관리자->createN1qlPrimaryIndex(); $관리자->createN1qlIndex('ex_name', 배열('name')); $관리자->createN1qlIndex('ex_srcdst, array('소스공항','목적지공항'), '`유형` = "경로"`); |
인덱스를 제거하는 것은 조금도 어렵지 않습니다:
1 2 3 |
$관리자->dropN1qlPrimaryIndex(); $관리자->dropN1qlIndex('ex_name'); |
마지막으로 베타3 릴리스에 적용된 작지만 경우에 따라서는 중요한 변경 사항 하나를 소개해드리고자 합니다. CAS 값은 SDK뿐만 아니라 Couchbase 프로토콜에서도 항상 불투명했지만, PHP에서는 애플리케이션 개발자에게도 PHP 리소스 참조 뒤에 숨겨져 있어 쉽게 전달하기 어려웠습니다(예: HTML 페이지에 렌더링하기 위해). 이번 릴리스에서는 CAS를 문자열 토큰으로 인코딩하여 여전히 불투명하지만 직렬화하기가 훨씬 쉬워졌습니다.
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 |
$res = $버킷->get('airline_10'); var_dump($res); //=> object(CouchbaseMetaDoc)#5 (4) { // ["오류"]=> // NULL // ["value"]=> // object(stdClass)#4 (7) { // ["id"]=> // int(10) // ["type"]=> // 문자열(7) "항공사" // ["name"]=> // string(11) "40-Mile Air" // ["IATA"]=> // string(2) "Q5" // ["icao"]=> // 문자열(3) "MLA" // ["콜사인"]=> // string(8) "MILE-AIR" // ["국가"]=> // 문자열(13) "미국" // } // ["플래그"]=> // int(33554438) // ["cas"]=> // 문자열(11) "jq25pb4ckd0" // } |
CAS가 무엇인지 잘 모르겠다면 여기에서 예시를 통해 배울 수 있습니다: https://github.com/couchbase/php-couchbase/blob/master/examples/cas/cas_replace.php
마지막으로 이 릴리스를 설치하려면 다음 명령을 사용하세요(libcouchbase 2.6.0+가 설치되어 있는지 확인하세요):
1 2 |
pecl 설치 카우치베이스-2.2.0beta3 |
여기까지입니다. 더 많은 기능이 포함된 베타 버전을 한 번 더 출시할 예정입니다. 문제가 발생하면 다음 주소로 카우치베이스 커뮤니티 사이트에 직접 게시해 주세요. https://www.couchbase.com/community/. 또한 여기에서 제공되는 이슈 트래커를 통해 버그를 직접 신고할 수도 있습니다: https://www.couchbase.com/issues/browse/PCBC/
계속 지켜봐 주세요.