Para apoyar el próximo lanzamiento de Couchbase Server 4.5 y algunas innovaciones en la comunidad PHP con PHP 7, estamos mejorando nuestro PHP SDK. Hoy me gustaría anunciar la tercera Beta, que trae un par de nuevas funcionalidades junto con correcciones y mejoras internas. En esta entrada de blog demostraremos algunas de ellas.
API de subdocumentos
Nosotros ya escribió anteriormente sobre esta APIpero esta vez vamos a mostrar algo de PHP. Asumimos que has instalado Couchbase 4.5 beta como mínimo y has configurado el bucket de ejemplo mejorado viaje-muestra
. Primero vamos a hacer un poco de código de servicio, donde instanciamos una conexión a bucket, y también definimos una función de utilidad para informar sobre un hotel al azar.
1 2 3 4 5 6 7 8 9 |
$grupo = nuevo CouchbaseCluster(couchbase://localhost); $cubo = $grupo->openBucket(muestra-viaje); función informe($nombre, $publicLikes, $firstServiceRating) { printf("Hotel"%s"tiene %d gustos públicos. La primera valoración de Servicio es %dn"., $nombre, cuente($publicLikes), $firstServiceRating); } |
Bien, ya estamos listos. La API de subdocumentos permite ahorrar tráfico de red al trabajar con documentos de gran tamaño mediante un control detallado; por ejemplo, podemos extraer algunas de las propiedades del archivo hotel_10025
:
1 2 3 4 5 6 7 8 |
$res = $cubo->buscarEn(hotel_10025) ->consiga(nombre) ->consiga('public_likes') ->consiga('opiniones[0].valoraciones.Servicio') ->ejecutar(); informe($res->valor[0][valor], $res->valor[1][valor], $res->valor[2][valor]); // => Hotel "Medway Youth Hostel" tiene 8 público le gusta. La primera valoración del servicio es 5 |
Aquí y los métodos de acceso posteriores aceptan la ruta como primer argumento. Esto es similar a la ruta N1QL como se describe en la documentación. Si obtiene este documento utilizando la API normal, verá que no es el más pequeño y que contiene mucha información sobre el lugar, y con buscarEn
sólo transfieres los datos que te interesan. Esto es más importante cuando quieres modificar pequeñas partes de un documento enorme. Por ejemplo, añadamos una persona más a me gusta_público
, ajuste el nombre del hotel y elimine una de las valoraciones.
1 2 3 4 5 6 |
$cubo->mutateIn(hotel_10025) ->sustituir(nombre, Albergue de adultos Medway) ->arrayAppend('public_likes', John Doe) ->eliminar('comentarios[0]') ->ejecutar(); |
El código se explica por sí mismo. Si desea utilizar bloqueo optimistabasta con pasar el valor CAS como segundo argumento a mutateIn
. La lista completa de operadores de mutación se encuentra en la referencia API https://docs.couchbase.com/sdk-api/couchbase-php-client-2.2.0beta3/classes/CouchbaseMutateInBuilder.html. Vamos a mostrar lo que tenemos después del cambio, pero esta vez vamos a utilizar el acceso directo para buscarEn
con múltiples consiga
operadores:
1 2 3 4 5 |
$res = $cubo->recuperarEn(hotel_10025, nombre, 'public_likes', 'opiniones[0].valoraciones.Servicio'); informe($res->valor[0][valor], $res->valor[1][valor], $res->valor[2][valor]); // => Hotel "Medway Youth Hostel" tiene 9 público le gusta. Primera puntuación para Servicio es 3 |
Gestión de índices
Anteriormente, para listar, crear o eliminar índices, era necesario elaborar manualmente la sentencia N1QL. En el próximo SDK de PHP 2.2 habrá una nueva API que simplificará esta tarea mediante la exposición de prácticas funciones en Gestor de cubos
como en Couchbase Views. Veamos qué índices están definidos en el archivo viaje-muestra
por defecto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$director = $cubo->director(); $res = $director()->listN1qlIndexes(); foreach ($res como $índice) { printf("Índice %s.%s", $índice->espacio clave, $índice->nombre); si ($índice->condición) { printf("ntwith condition: %s", $índice->condición); } si (cuente($índice->campos) > 0) { printf("campos nton: %s", únase a(', ', $índice->campos)); } printf("n"); } |
Debería salir algo como esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Índice viaje-muestra.def_primary Índice viaje-muestra.def_airportname en campos: `nombre del aeropuerto` Índice viaje-muestra.def_ciudad en campos: `ciudad` Índice viaje-muestra.def_faa en campos: `faa` Índice viaje-muestra.def_icao en campos: `icao` Índice viaje-muestra.def_name_type con condición: (`Tipo` = "Usuario") en campos: `nombre` Índice viaje-muestra.def_route_src_dst_day con condición: (`tipo` = "ruta") en campos: `fuenteaeropuerto`, `destinoaeropuerto`, (distinto (matriz (`v`.`día`) para `v` en `horario` fin)) Índice viaje-muestra.def_schedule_utc en campos: matriz (`s`.`utc`) para `s` en `horario` fin Índice viaje-muestra.def_sourceairport en campos: `fuenteaeropuerto` Índice viaje-muestra.def_tipo en campos: `tipo` |
El siguiente ejemplo demuestra la creación de índices sobre nombre:
1 2 3 4 |
$director->createN1qlPrimaryIndex(); $director->crearN1qlIndex(ex_nombre, matriz(nombre)); $director->crearN1qlIndex('ex_srcdst, array('fuenteaeropuerto','destinoaeropuerto'), '`tipo` = "ruta"`); |
Eliminar índices no es un poco más difícil:
1 2 3 |
$director->dropN1qlPrimaryIndex(); $director->dropN1qlIndex(ex_nombre); |
Antes de terminar, me gustaría mostrar un pequeño pero en algunos casos importante cambio que hemos conseguido en la versión beta3. El valor CAS siempre ha sido opaco en el protocolo de Couchbase, así como en los SDKs, pero en PHP estaba incluso oculto para los desarrolladores de aplicaciones detrás de la referencia de recursos PHP, lo que significa que es difícil pasarlo fácilmente (por ejemplo, para renderizar en una página HTML). En esta versión codificamos el CAS como un token de cadena, por lo que sigue siendo opaco, pero mucho más fácil de serializar.
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 = $cubo->consiga(aerolínea_10); var_dump($res); //=> object(CouchbaseMetaDoc)#5 (4) { // ["error"]=> // NULL // ["value"]=> // objeto(stdClass)#4 (7) { // ["id"]=> // int(10) // ["tipo"]=> // cadena(7) "compañía aérea" // ["name"]=> // string(11) "40-Mile Air" // ["iata"]=> // cadena(2) "Q5" // ["icao"]=> // cadena(3) "MLA" // ["indicativo"]=> // cadena(8) "MILE-AIR" // ["country"]=> // cadena(13) "Estados Unidos" // } // ["flags"]=> // int(33554438) // ["cas"]=> // string(11) "jq25pb4ckd0" // } |
Si no está familiarizado con lo que es el CAS, puede aprenderlo con un ejemplo aquí: https://github.com/couchbase/php-couchbase/blob/master/examples/cas/cas_replace.php
Y por último, para instalar esta versión, utilice el siguiente comando (asegúrese de tener libcouchbase 2.6.0+ instalado):
1 2 |
pecl instale couchbase-2.2.0beta3 |
Esto es todo por ahora. Planeamos una versión Beta más antes de GA con aún más características. Si encuentras algún problema, por favor envíalo directamente al sitio de Comunidades Couchbase en https://www.couchbase.com/community/. Además, los errores pueden notificarse directamente a través de nuestro gestor de incidencias disponible aquí: https://www.couchbase.com/issues/browse/PCBC/
Permanezca atento.