Para dar suporte à próxima versão do Couchbase Server 4.5 e a algumas inovações na comunidade PHP com o PHP 7, estamos aprimorando nosso PHP SDK. Hoje, gostaria de anunciar o terceiro Beta, que traz alguns novos recursos, além de correções e melhorias internas. Nesta postagem do blog, demonstraremos alguns deles.
API de subdocumento
Nós já escreveu sobre essa API anteriormentemas, desta vez, vamos mostrar um pouco de PHP. Presumimos que você tenha instalado o Couchbase 4.5 beta, no mínimo, e tenha configurado o bucket de amostra aprimorado amostra de viagem
. Primeiro, vamos fazer um código de serviço, no qual instanciamos uma conexão com o bucket e também definimos uma função de utilidade para informar sobre um hotel aleatório.
1 2 3 4 5 6 7 8 9 |
$agrupamento = novo CouchbaseCluster('couchbase://localhost'); $balde = $agrupamento->openBucket('amostra de viagem'); função relatório($nome, $publicLikes, $firstServiceRating) { printf("Hotel"%s" tem %d de curtidas públicas. A primeira classificação do serviço é %dn", $nome, contagem($publicLikes), $firstServiceRating); } |
Agora estamos prontos. A API Sub-Document permite economizar o tráfego de rede ao operar em documentos grandes usando o controle refinado, por exemplo, vamos extrair algumas das propriedades do hotel_10025
:
1 2 3 4 5 6 7 8 |
$res = $balde->lookupIn('hotel_10025') ->obter("nome) ->obter('public_likes') ->obter('reviews[0].ratings.Service') ->executar(); relatório($res->valor[0]['valor'], $res->valor[1]['valor'], $res->valor[2]['valor']); // => O Hotel "Medway Youth Hostel" tem 8 curtidas públicas. A primeira avaliação do serviço é 5 |
Aqui e posteriormente, os métodos de acessório aceitam o caminho como primeiro argumento. Isso é semelhante ao caminho N1QL conforme descrito na documentação. Se você obtiver esse documento usando a API normal, verá que ele não é o menor e contém muitas informações sobre o local, e com lookupIn
você está transferindo apenas os dados de seu interesse. Isso se torna mais importante quando você deseja alterar pequenas partes de um documento enorme. Por exemplo, vamos adicionar mais uma pessoa ao public_likes
Ajuste o nome do hotel e remova uma das classificações.
1 2 3 4 5 6 |
$balde->mutateIn('hotel_10025') ->substituir("nome, Albergue para adultos em Medway) ->arrayAppend('public_likes', 'John Doe') ->remover('reviews[0]') ->executar(); |
O código é bastante autoexplicativo. Se você quiser usar o bloqueio otimistabasta passar o valor CAS como um segundo argumento para mutateIn
. A lista completa de operadores de mutação está na referência da API https://docs.couchbase.com/sdk-api/couchbase-php-client-2.2.0beta3/classes/CouchbaseMutateInBuilder.html. Vamos exibir o que temos após a alteração, mas desta vez usaremos o atalho para lookupIn
com vários obter
operadores:
1 2 3 4 5 |
$res = $balde->recuperarIn('hotel_10025', "nome, 'public_likes', 'reviews[0].ratings.Service'); relatório($res->valor[0]['valor'], $res->valor[1]['valor'], $res->valor[2]['valor']); // => O Hotel "Medway Youth Hostel" tem 9 curtidas públicas. A primeira avaliação do serviço é 3 |
Gerenciamento de índices
Anteriormente, para listar, criar ou remover índices, era necessário criar manualmente a instrução N1QL. No próximo PHP SDK 2.2, haverá uma nova API que simplificará essa tarefa, expondo funções úteis em Gerenciador de balde
como nas visualizações do Couchbase. Vamos ver quais índices estão definidos no amostra de viagem
por padrão:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$gerente = $balde->gerente(); $res = $gerente()->listN1qlIndexes(); antes de ($res como $índice) { printf("Índice %s.%s", $índice->Espaço-chave, $índice->nome); se ($índice->condição) { printf("ntwith condition: %s", $índice->condição); } se (contagem($índice->campos) > 0) { printf("campos nton: %s", unir-se(', ', $índice->campos)); } printf("n"); } |
O resultado deve ser algo parecido com isto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Índice viagens-amostra.def_primary Índice viagens-amostra.def_airportname em campos: `nome do aeroporto` Índice viagens-amostra.def_city em campos: `cidade` Índice viagens-amostra.def_faa em campos: `faa` Índice viagens-amostra.def_icao em campos: `icao` Índice viagens-amostra.tipo_de_nome_de_defesa com condição: (`_tipo` = "Usuário") em campos: `nome` Índice viagens-amostra.def_route_src_dst_day com condição: (`tipo` = "route" (rota)) em campos: `aeroporto de origem`, `aeroporto de destino`, (distinto (matriz (`v`.`dia`) para `v` em `cronograma` final)) Índice viagens-amostra.def_schedule_utc em campos: matriz (`s`.`utc`) para `s` em `cronograma` final Índice viagens-amostra.def_sourceairport em campos: `aeroporto de origem` Índice viagens-amostra.def_type em campos: `tipo` |
O exemplo a seguir demonstra a criação de índices em name:
1 2 3 4 |
$gerente->createN1qlPrimaryIndex(); $gerente->createN1qlIndex('ex_name', matriz("nome)); $gerente->createN1qlIndex('ex_srcdst, array('aeroporto de origem','aeroporto de destino'), '`tipo` = "route" (rota)`); |
A remoção de índices não é um pouco mais difícil:
1 2 3 |
$gerente->dropN1qlPrimaryIndex(); $gerente->dropN1qlIndex('ex_name'); |
Antes de encerrar, gostaria de mostrar uma mudança pequena, mas em alguns casos importante, que fizemos na versão beta3. O valor do CAS sempre foi opaco no protocolo do Couchbase, bem como nos SDKs, mas no PHP ele estava oculto até mesmo para o desenvolvedor do aplicativo por trás da referência de recurso do PHP, o que significa que é difícil transmiti-lo facilmente (por exemplo, para renderizar em uma página HTML). Nesta versão, codificamos o CAS como um token de cadeia de caracteres, de modo que ele ainda é opaco, mas muito mais fácil de ser serializado.
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 = $balde->obter('airline_10'); var_dump($res); //=> object(CouchbaseMetaDoc)#5 (4) { // ["error"]=> // NULL // ["value"]=> // object(stdClass)#4 (7) { // ["id"]=> // int(10) // ["type"]=> // string(7) "airline" // ["name"]=> // string(11) "40-Mile Air" // ["iata"]=> // string(2) "Q5" // ["icao"]=> // string(3) "MLA" // ["indicativo"]=> // string(8) "MILE-AIR" // ["country"]=> // string(13) "United States" (Estados Unidos) // } // ["flags"]=> // int(33554438) // ["cas"]=> // string(11) "jq25pb4ckd0" // } |
Se você não sabe o que é CAS, pode aprender com um exemplo aqui: https://github.com/couchbase/php-couchbase/blob/master/examples/cas/cas_replace.php
E, por fim, para instalar essa versão, use o seguinte comando (certifique-se de ter a libcouchbase 2.6.0+ instalada):
1 2 |
pecl instalar couchbase-2.2.0beta3 |
Isso é tudo por enquanto. Planejamos mais uma versão Beta antes do GA com ainda mais recursos. Se você encontrar algum problema, poste diretamente no site das Comunidades do Couchbase em https://www.couchbase.com/community/. Além disso, os bugs podem ser relatados diretamente em nosso rastreador de problemas disponível aqui: https://www.couchbase.com/issues/browse/PCBC/
Fique atento.