Servidor Couchbase

Principales novedades de Couchbase Server 7.6 para desarrolladores

Estamos encantados de anunciar el lanzamiento de Couchbase 7.6una actualización innovadora que está a punto de redefinir el panorama de la tecnología de bases de datos. Esta última versión es un testimonio de nuestro compromiso con la mejora de la tecnología de bases de datos, con un salto significativo en la integración de la IA y el aprendizaje automático con... Búsqueda vectorialLa integración de LangChain permite a los desarrolladores crear aplicaciones más inteligentes y con mayor capacidad de respuesta. 

La clave de esta versión es la introducción de funciones avanzadas de Graph Traversal, que abren nuevas vías para las relaciones de datos complejas y el análisis de redes. Mejora la eficiencia de los desarrolladores e integra a la perfección los casos de uso de RDBMS con la agilidad y escalabilidad de NoSQL. 

Junto a estas innovaciones, nos hemos centrado en mejorar la experiencia del usuario con una supervisión mejorada del rendimiento de las consultas y las búsquedas, garantizando una eficiencia y una capacidad de respuesta óptimas en las operaciones de datos en tiempo real. Esta versión también amplía nuestras capacidades de BI con herramientas de visualización de BI enriquecidas, lo que permite una visión más profunda de los datos y análisis más potentes. 

Couchbase 7.6 no es sólo una actualización; es una transformación, que ofrece las herramientas y características que los desarrolladores, SREs y científicos de datos necesitan para impulsar el futuro de la tecnología de bases de datos. Estas son algunas de ellas.


Integración de la IA 

Búsqueda vectorial

Couchbase introduce una nueva capacidad de búsqueda vectorial con la versión 7.6, una mejora significativa de nuestras capacidades de búsqueda que se alinea con las demandas tecnológicas en evolución de las aplicaciones modernas. A medida que aumenta la complejidad de los datos, la necesidad de mecanismos de búsqueda avanzados se vuelve crítica. Vector Search ofrece una solución que permite a los desarrolladores implementar búsquedas semánticas, enriquecer modelos de aprendizaje automático y dar soporte a aplicaciones de IA directamente en su entorno Couchbase.

Con la búsqueda vectorial, la búsqueda va más allá de la coincidencia de palabras clave o la búsqueda por frecuencia de términos. Permite que la búsqueda se base en el significado semántico, el contexto en el que se utiliza en las consultas. En efecto, capta la intención de las consultas, proporcionando resultados más pertinentes incluso cuando las palabras clave o los términos exactos no están presentes en el contenido. 

Para más información, consulte el Documentación de Couchbase.

Búsqueda vectorial con SQL

Puedes utilizar las capacidades de base de datos NoSQL de Couchbase para almacenar cualquier contenido, como perfiles de usuario, datos históricos de interacción o metadatos de contenido. A continuación, utiliza un modelo de aprendizaje automático, como OpenAI, para generar las incrustaciones. Couchbase Vector Search puede entonces indexar las incrustaciones y proporcionar búsquedas semánticas e híbridas. 

Hybrid vector search with OpenAI embeddings in Couchbase

También puedes usar SQL++ para realizar la búsqueda vectorial directamente, y combinar los predicados de búsqueda con la flexibilidad de Couchbase SQL++ para una búsqueda híbrida:

¿Por qué no queremos añadir una sección sobre cómo obtener las incrustaciones para la consulta anterior? La razón es que hacerlo en una UDF requeriría que UDF/JS soportara CURL, algo que no está soportado en Capella. Los usuarios pueden obtener las incrustaciones en su capa de aplicación.

CTE recursivo

Recorrido de gráficos

La introducción de Recursive CTE a las capacidades de Couchbase SQL++, significa que ahora puedes realizar análisis y manipulación de datos complejos, particularmente en el área de datos gráficos. Puedes navegar sin esfuerzo y analizar estructuras de datos jerárquicas y en red, desbloqueando conocimientos con una facilidad y eficiencia sin precedentes. Ya se trate de explorar redes sociales, jerarquías organizativas o sistemas interconectados, nuestra nueva función simplifica estas tareas, haciendo que su análisis de datos sea más intuitivo y productivo que nunca.

A continuación se muestra un ejemplo de consulta CTE recursiva SQL++ de Couchbase para encontrar todos los vuelos de LAX a MAD con menos de dos escalas de este conjunto de datos de muestra. Nótese que estos datos de la muestra no se basan en la muestra de viajes, sino en una versión simplificada de las rutas AA de 2008.

código_aeropuerto_fuente código_aeropuerto_destino aerolínea
LAX MAD AA
LAX LHR AA
LHR MAD AA
LAX OPO AA
OPO MAD AA
MAD OPO AA

 

Consulta SQL Resultados
/* Lista de todas las rutas de LAX a MAD con < 2 paradas */
CON RouteCTE RECURSIVO COMO (
  SELECCIONE [r.source_airport_code,
r.destination_airport_code] AS ruta,
        r.código_aeropuerto_destino AS últimaParada,
        1 AS profundidad
  DESDE rutas r
  DONDE r.source_airport_code = LAX
UNIÓN TODOS
  SELECCIONE ARRAY_APPEND(r.ruta,f.código_aeropuerto_destino) AS ruta,
        f.código_aeropuerto_destino AS últimaParada,
        r.profundidad + 1 AS profundidad
  DESDE RutaCTE r
  ÚNASE A rutas f EN r.ultimaParada = f.codigo_aereo_fuente
  DONDE f.código_aeropuerto_destino != LAX
    Y r.profundidad < 3
)OPCIONES {"niveles":3}
SELECCIONE r.*
DESDE RouteCTE AS r
DONDE r.últimaParada = MAD
AND r.depth < 3;
[
  {
    "ruta": [ "LAX", "MAD" ]
  },
  {
    "ruta": [ "LAX", "LHR", "MAD" ]
  },
  {
    "ruta": [ "LAX", "OPO", "MAD" ]
  }
]

Estructura jerárquica de datos

También puede utilizar CTE recursivo para recorrer una estructura de datos jerárquica, como la jerarquía de una organización. 

Hierarchical data structure

Consulta SQL Resultados
/* Lista de todos los empleados y su jerarquía org */

CON orgHier RECURSIVO como (
  SELECCIONE [e.emp_name] hier, e.emp_id, 0 lvl
    DESDE empleado e
      DONDE e.manager_id es null
  UNIÓN
    SELECCIONE ARRAY_APPEND(o.hier, e1.emp_name) hier,
        e1.emp_id, o.lvl+1  lvl
    DESDE empleado e1
    ÚNASE A orgHier o
   EN e1.manager_id=o.emp_id
)
SELECCIONE o.* DESDE orgHier o;
[
  {
    "emp_id": 1,
    "hier": [ "matt" ],
    "lvl": 0
  },
  {
    "emp_id": 2,
    "hier": [ "matt", "emily" ],
    "lvl": 1
  },
  {
    "emp_id": 3,
    "hier": [ "matt", "mike" ],
    "lvl": 1
  },
  {
    "emp_id": 5,
    "hier": [ "matt", "mike", "alex" ],
    "lvl": 2
  },
  { "emp_id": 4,
    "hier": [ "matt", "emily", "sarah" ],
    "lvl": 2
  },
  {
    "emp_id": 6,
    "hier": [ "matt", "emily", "lisa" ],
    "lvl": 2
  }
]

Para más información, consulte la documentación de Couchbase en consulta recursiva


Eficiencia de los promotores

Exploración de la gama KV

Las operaciones clave/valor (K/V) en Couchbase son la forma más eficiente de acceder a los datos almacenados en la base de datos. Estas operaciones utilizan la clave única de un documento para realizar acciones de lectura, escritura y actualización. Sin embargo, estas operaciones funcionan sobre la base de un documento individual. Para casos de uso de recuperación de datos más grandes, recomendamos usar el SQL++ del servicio Query para tus aplicaciones.

Sin embargo, hay casos en los que no es económicamente viable configurar nodos de consulta e indexación, ahora tiene la opción de utilizar KV Range Scan. La nueva función permite a sus aplicaciones iterar sobre todos los documentos basándose en un rango de claves, un prefijo de claves o un muestreo aleatorio. Las API envían internamente las solicitudes a múltiples vbuckets basándose en el moneda_máxima para equilibrar la carga entre los nodos de datos. A continuación, los flujos vbucket se fusionan lógicamente y se devuelven como uno solo flujo a la aplicación.

 

KV Obtener Exploración de la gama KV
público clase CouchbaseReadHotelExample {
    público estático void principal(String[] args) {
    // Conectarse al clúster
    Cluster cluster = Cluster.connect("couchbase://localhost", "nombre de usuario", "contraseña");
       
    // Obtener una referencia al cubo 'muestra-viaje
   Bucket bucket = cluster.bucket("viaje-muestra");
   // Acceder al ámbito "inventario" y a la colección "hotel
   Ámbito inventarioÁmbito = bucket.scope("inventario");
   Colección hotelCollection = inventoryScope.collection("hotel");       
  Cadena documentKey = "hotel_12345"  GetResult getResult = hotelCollection.get(documentKey);

public static void main(String... args) {
    Cluster cluster = Cluster.connect("couchbase://localhost", "nombre de usuario", "contraseña");    Bucket bucket = cluster.bucket("muestra-viaje");
    Alcance = bucket.scope("_default");
    Colección colección = scope.collection("_default");    System.out.println("\nEjemplo: [rango-escaneo-rango]");

    // tag::rangeEscanearTodosLosDocumentos[]
    Stream results = collection.scan(
          ScanType.rangeScan(null, null)
    );
    results.forEach(System.out::println);
    // end::rangeEscanearTodosLosDocumentos[]

Para más información, consulte el Documentación de Couchbase KV Operations.

Consulta Exploración secuencial

Basándose en la funcionalidad KV Range Scan, Query Sequential Scan permite ahora realizar todas las operaciones CRUD de la base de datos utilizando SQL++ sin necesidad de un índice. Esta capacidad permite a los desarrolladores empezar a trabajar con la base de datos con conjuntos de datos pequeños sin tener que considerar los índices necesarios para las operaciones.

Desde el punto de vista de la consulta, el plan de consulta elegirá cualquier índice disponible para la consulta. Pero si no se encuentra ninguno, volverá a utilizar la búsqueda secuencial. El plan de consulta también mostrará el uso de la búsqueda secuencial en lugar de la búsqueda de índices.

// Número de vuelos desde SFO->LHR por aerolínea
SELECCIONE a.nombre, recuento_de_arreglos(r.horario) vuelos
DESDE ruta r
INTERIOR ÚNASE A aerolínea a EN r.aerolínea = a.iata
DONDE r.sourceairport=OFS Y r.aeropuertodestino=LHR;

 

Tenga en cuenta que la búsqueda secuencial es adecuada para pequeños conjuntos de datos de desarrollo. Los índices deben seguir utilizándose cuando el rendimiento de la consulta sea una prioridad.

Para más información, consulte la documentación de Couchbase en exploraciones secuenciales.

Consulta de lectura de la réplica

La lectura desde réplica es parte de la característica de Alta Disponibilidad que está disponible con todos los servicios de Couchbase. Cuando se utiliza el SDK para las operaciones KV, una lectura desde réplica permite a la aplicación leer desde un nodo de datos con réplica vbucket cuando la copia activa podría no estar disponible, como por ejemplo durante un failover. 

pruebe {
        // Intento de lectura del nodo activo
        GetResult resultado = collection.get(documentKey);
        System.out.println("Documento del nodo activo: " + result.contentAsObject());
    } captura (DocumentNotFoundException activeNodeException) {
        System.out.println("Falló la lectura del nodo activo, intentando lectura de réplica...");
        // Si la lectura del nodo activo falla, intenta leer desde cualquier réplica disponible
        pruebe {
              GetReplicaResult replicaResult = collection.getAnyReplica(documentKey);
              System.out.println("Documento de réplica: " + replicaResult.contentAsObject());
            } captura (Excepción replicaReadException) {
                System.err.println("Error al obtener el documento de la réplica: " + replicaReadException.getMessage());
    }
        

Sin embargo, este enfoque no puede aplicarse cuando la aplicación utiliza el SDK para ejecutar una consulta SQL++. Esto se debe a que la operación de obtención de datos ocurre en la capa de servicio de consulta. En el ejemplo de abajo, sin Query Read from Replica, si hay un problema con el nodo de datos activo desde el que se está obteniendo la consulta, la consulta devolverá un error de tiempo de espera a la aplicación. Realizar un reintento en la aplicación de abajo significaría volver a ejecutar toda la consulta de nuevo.

 

pruebe {
      // Ejecutar una consulta N1QL
      Cadena statement = "SELECT * FROM viaje-muestra.inventory.hotel WHERE ciudad = 'San Francisco' LIMIT 10;";
      QueryResult result = cluster.query(statement);
        // Iterar por las filas del conjunto de resultados
        para (filaConsulta : resultado.filas()) {
                System.out.println(fila);
        }
    } captura (QueryException e) {
            System.err.println("Consulta fallida: " + e.getMessage());
    }

Couchbase 7.6 ahora soporta Query Read from Replica. Esto significa que el servicio de consulta podría cambiar la conexión a un nodo de datos alternativo, si recibe un kvTimeout del nodo de datos del que se estaba obteniendo. La lógica de cambio a un nodo de datos diferente se realiza de forma transparente dentro del servicio de consulta, no se requiere ninguna acción por parte de la aplicación.

Al utilizar la lectura de consultas desde la réplica, las aplicaciones deben tener en cuenta las posibles incoherencias de los datos, especialmente en entornos con mucha actividad de escritura. La replicación continua de datos a través de nodos de datos significa que, a medida que el servicio de consulta cambia entre nodos durante las operaciones de obtención, pueden surgir incoherencias. Este escenario es más probable en sistemas que experimentan frecuentes actualizaciones de datos, donde el proceso de replicación podría provocar ligeros retrasos en la sincronización entre nodos.

Por esta razón, la aplicación tiene la opción de controlar la consulta de lectura desde la réplica. Esto se puede activar/desactivar en la configuración de nivel de solicitud, nodo o clúster.

Para más información, consulte el Documentación sobre la configuración de consultas de Couchbase.

Secuencia SQL

Ahora puedes usar SQL++ para crear un objeto secuencia que se mantiene dentro del servidor Couchbase. El objeto de secuencia genera una secuencia de valores numéricos que están garantizados para ser únicos dentro de la base de datos. Las aplicaciones pueden usar la secuencia SQL++ de Couchbase para asegurar un único contador para servir a múltiples clientes.

// Crear sintaxis SEQUENCE

CREAR SECUENCIA [SI NO EXISTE] [SI NO EXISTE] [ CON ]
ALTERAR SECUENCIA [CON ]
DROP SECUENCIA [SI EXISTE]
NEXTVAL PARA <name>
PREVVAL PARA <name>
// Ejemplos
CREAR SEQUENCE myBucket.myScope.ordNum INICIO CON 1000 CACHE 100;
ALTER SEQUENCE miCubo.miAlcance.ordNum WITH {"max": 2000};
INSERTAR EN pedidos VALORES (uuid(), {"num":SIGUIENTE VALOR PARA ordNum,"cliente":"Alex"});
DROP SEQUENCE myBucket.myScope.ordNum SI EXISTE;

Para más información, consulte el Documentación de secuencias de Couchbase


Gracias por leer, esperamos que disfrute de estas nuevas funciones. Pronto publicaremos más artículos relacionados con la versión 7.6.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Binh Le

Binh Le es director de producto principal del servicio de consultas de Couchbase. Antes de Couchbase, trabajó en Oracle y dirigió el equipo de gestión de productos para Sales Clould Analytics y CRM OnDemand. Binh es licenciado en Informática por la Universidad de Brighton, Reino Unido.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.