Ya está disponible el SDK v2.2.7 de Couchbase.NET con la vista previa para desarrolladores de la gestión de índices.
¡Hoy lanzamos la versión 2.2.7 del SDK .NET oficial de Couchbase! Esta versión contiene soporte para la gestión de índices y añade la API de sub-documento que fue lanzada como una vista previa para desarrolladores en la versión 2.2.6, así como una corrección de errores y mejoras en el futuro soporte de .NET Core.
Gestión de índices
Los Índices Secundarios Globales (GSIs) son una pieza importante de la arquitectura de consulta N1QL en el servidor Couchbase permitiendo consultas rápidas y de baja latencia. Puedes colocar índices en elementos JSON, expresiones N1QL y usando filtros a través de una cláusula WHERE. Para la v2.2.7 del SDK .NET hemos construido una abstracción sobre el servicio de indexación de Couchbase Server que hace muy fácil crear índices primarios y secundarios. Esta abstracción extiende y amplía la clase BucketManager que incluye soporte para crear y gestionar Buckets de Couchbase.
|
1 2 3 4 5 6 7 8 9 10 |
var configuración = nuevo ClientConfiguration(); utilizando (var grupo = nuevo Grupo(configuración)) { utilizando (var cubo = grupo.OpenBucket("muestra de cerveza")) { var director = cubo.CreateManager("Administrador", ""); } } |
El BucketManager se crea abriendo un objeto Bucket fuera de una instancia Cluster y pasando la configuración correcta para su entorno.
Creación y eliminación de índices primarios
Puedes crear índices primarios con nombre y sin nombre llamando a los métodos CreatePrimaryIndex y CreateNamedPrimaryIndex una vez que tengas la instancia de BucketManager:
|
1 2 3 4 5 6 |
//crear un índice primario sin nombre en el bucket var resultado = director.CrearíndicePrimario(falso); //crear un índice primario llamado "myprimaryindex" en el bucket var resultado = director.CreateNamedPrimaryIndex("myprimaryindex", falso); |
Tenga en cuenta que siempre está trabajando con el contexto del cubo que ha abierto. Así que estos índices se crearán en el cubo "muestra-cerveza" que hemos abierto antes. Además, ten en cuenta que ambos métodos toman un campo booleano llamado "defer", de hecho, como verás, todos los métodos de creación contienen un parámetro "defer". Si "defer" es verdadero, el índice será creado, sin embargo, no será construido hasta que el método BuildDeferredIndexes sea llamado. Más sobre índices diferidos más adelante.
Dar de baja un índice primario con o sin nombre es prácticamente igual que crear un índice, con la excepción de los nombres de los métodos:
|
1 2 3 4 5 6 |
//suprimir el índice primario del cubo var resultado = director.DropPrimaryIndex(); //suprimir un índice primario con nombre en el bucket var resultado = director.DropNamedPrimaryIndex("myprimaryindex"); |
Tenga en cuenta que si el índice no existe, entonces result.Success será falso.
Creación y eliminación de índices secundarios
La creación y eliminación de índices secundarios es similar a la de los índices primarios, con la diferencia de que también se puede indexar uno o varios campos.
|
1 2 3 4 5 6 |
//crea un índice secundario llamado "myindex" en los campos "id" y "name". var resultado = director.Crearíndice("myindex", verdadero, "id", "nombre"); //suprimir el índice llamado "myindex" var resultado = director.DropIndex("myindex"); |
Nótese que en este caso estoy pasando "true" para que la construcción del índice sea diferida. Además, si el índice ya existe o si no existe e intentas eliminarlo, result.Success será false.
Actualizaciones de la API de subdocumentos
Esta versión también contiene cambios internos en la API SubDocument lanzada como Developer Preview en 2.2.6. Se han añadido dos mejoras importantes relacionadas con el rendimiento:
- Si se ejecuta una única operación de mutación o búsqueda, el SDK utilizará una operación única en lugar de una multioperación, lo que ahorra unos pocos bytes en el cable.
- La deserialización del cuerpo de la respuesta se aplaza ahora hasta que se llame a Content
Expresiones lambda para la navegación por rutas de subdocumentos
Además de estos cambios, se ha incluido otra nueva función en la versión gracias a una contribución de la iniciativa comunidad: Navegación de expresiones lambda para rutas de subdocumentos. Esta característica le permite utilizar la sintaxis familiar de tipo seguro, intellisense apoyado que disfrutar de linq en lugar de simplemente pasar en las rutas de cadena.
Suponiendo que un documento que se parece a:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "nombre": "21st Amendment Brewery Cafe", "ciudad": "San Francisco", "estado": "California", "código": "94107", "país": "Estados Unidos", "teléfono": "1-415-369-0900", "sitio web": "http://www.21st-amendment.com/", "tipo": "cervecería", "actualizado": "2010-10-24 13:54:07", "descripción": "The 21st Amendment Brewery" ofrece una variedad de galardonadas cervezas caseras y cocina americana a la parrilla en un confortable ambiente tipo loft. Únase a nosotros antes y después de los partidos de béisbol de los Giants en nuestra cervecería al aire libre. Un lugar ideal para eventos y fiestas en nuestro loft semiprivado. Nos vemos pronto en el 21A"., "dirección": [ "563 Second Street" ], "geo": { "exactitud": "TECHO", "lat": 37.7825, "lon": -122.393 } } |
A continuación, recupere el valor en la ruta "geo.accuracy" de la siguiente manera:
|
1 2 3 4 5 6 7 8 |
var clave = "21st_amendment_brewery_cafe"; var buscar = cubo.BúsquedaEn(clave). Visite(x => x.Geo.Precisión). Ejecute(); var valor = buscar.Contenido(x=>x.Geo.Precisión); Afirme.AreEqual("TECHO", valor); |
Por supuesto, puede encadenar varios "Gets" para recuperar cada elemento individual del documento.
Notas de la versión 2.2.7
Error
- [NCBC-1099] - Añadir atributo DataContract a las clases Error, Warning y Metrics
Mejora
- [NCBC-1103] - Soporte para operaciones asíncronas en subdocumentos
- [NCBC-994] - Actualizar el entorno de desarrollo y los proyectos a VS2015
- [NCBC-1089] - Esperar todas las rutas de código no exitosas
- [NCBC-1095] - No reintentar en NodeUnavailableException
Nueva función
- [NCBC-1067] - Ampliar BucketManager para que admita la gestión de índices
- [NCBC-1093] - Incluir compatibilidad con la API de subdocumentos - Parte 2 Comandos únicos DP2