É com grande satisfação que anunciamos o lançamento do Couchbase 7.6uma atualização inovadora, pronta para redefinir o cenário da tecnologia de banco de dados. Esta última versão é uma prova do nosso compromisso com o aprimoramento da tecnologia de banco de dados, com um salto significativo na integração de IA e aprendizado de máquina com o Pesquisa de vetoresA integração com o LangChain permite que os desenvolvedores criem aplicativos mais inteligentes e responsivos. 

A chave para esta versão é a introdução de recursos avançados de Graph Traversal, abrindo novos caminhos para relacionamentos de dados complexos e análise de rede. Aprimorando a eficiência do desenvolvedor e integrando perfeitamente os casos de uso de RDBMS com a agilidade e o dimensionamento do NoSQL. 

Juntamente com essas inovações, nos concentramos em elevar a experiência do usuário com o monitoramento aprimorado do desempenho de consultas e pesquisas, garantindo eficiência e capacidade de resposta ideais em operações de dados em tempo real. Esta versão também expande nossos recursos de BI com ferramentas de visualização de BI enriquecidas, permitindo insights de dados mais profundos e análises mais poderosas. 

O Couchbase 7.6 não é apenas uma atualização; é uma transformação, fornecendo as ferramentas e os recursos de que os desenvolvedores, SREs e cientistas de dados precisam para impulsionar o futuro da tecnologia de banco de dados. Aqui estão alguns deles.


Integração de IA 

Pesquisa de vetores

O Couchbase apresenta um novo recurso de pesquisa vetorial com a versão 7.6, um aprimoramento significativo dos nossos recursos de pesquisa que se alinha às demandas tecnológicas em evolução dos aplicativos modernos. À medida que a complexidade dos dados aumenta, a necessidade de mecanismos de pesquisa avançados torna-se crítica. O Vector Search oferece uma solução, permitindo que os desenvolvedores implementem a pesquisa semântica, enriqueçam os modelos de aprendizado de máquina e ofereçam suporte a aplicativos de IA diretamente no ambiente do Couchbase.

Com a pesquisa vetorial, a pesquisa vai além da correspondência de palavras-chave ou da pesquisa de frequência de termos. Ela permite que a pesquisa se baseie no significado semântico, no contexto em que é usada nas consultas. De fato, ela captura a intenção das consultas, fornecendo resultados mais relevantes mesmo quando palavras-chave ou termos exatos não estão presentes no conteúdo. 

Para obter mais informações, consulte o Documentação do Couchbase.

Pesquisa vetorial com SQL++

Você pode usar os recursos de banco de dados NoSQL do Couchbase para armazenar qualquer conteúdo, como perfis de usuário, dados históricos de interação ou metadados de conteúdo. Em seguida, use um modelo de aprendizado de máquina, como o OpenAI, para gerar os embeddings. O Couchbase Vector Search pode então indexar os embeddings e fornecer pesquisa semântica e híbrida. 

Hybrid vector search with OpenAI embeddings in Couchbase

Você também pode usar o SQL++ para executar a pesquisa vetorial diretamente e combinar os predicados de pesquisa com a flexibilidade do Couchbase SQL++ para pesquisa híbrida:

Por que não queremos adicionar uma seção sobre como obter os embeddings para a consulta acima? O motivo é que, para fazer isso em um UDF, seria necessário que o UDF/JS suportasse CURL, algo que não é suportado no Capella. Os usuários podem obter os embeddings em sua camada de aplicativo.

CTE recursivo

Travessia de gráfico

A introdução do CTE recursivo nos recursos do Couchbase SQL++ significa que agora você pode realizar análises e manipulações complexas de dados, especialmente na área de dados de gráficos. Você pode navegar e analisar estruturas de dados hierárquicas e em rede sem esforço, revelando insights com facilidade e eficiência sem precedentes. Seja para explorar redes sociais, hierarquias organizacionais ou sistemas interconectados, nosso novo recurso simplifica essas tarefas, tornando sua análise de dados mais intuitiva e produtiva do que nunca.

Aqui está um exemplo de consulta CTE recursiva do Couchbase SQL++ para encontrar todos os voos de LAX para MAD com menos de duas paradas desse conjunto de dados de amostra. Observe que esses dados de amostra não se baseiam na amostra de viagens, mas em uma versão simplificada das rotas AA para 2008.

código_do_aeroporto_de_origem código_do_aeroporto_destino companhia aérea
LAX MAD AA
LAX LHR AA
LHR MAD AA
LAX OPO AA
OPO MAD AA
MAD OPO AA

 

Consulta SQL++ Resultados
/* Lista de todas as rotas de LAX para MAD com < 2 paradas */
COM RECURSIVO RouteCTE COMO (
  SELECIONAR [r.source_airport_code,
r.destination_airport_code] AS rota,
        r.destination_airport_code AS lastStop,
        1 AS profundidade
  DE rotas r
  ONDE r.source_airport_code = "LAX
UNIÃO TODOS
  SELECIONAR ARRAY_APPEND(r.route,f.destination_airport_code) AS rota,
        f.destination_airport_code AS lastStop,
        r.profundidade + 1 AS profundidade
  DE RouteCTE r
  JUNTAR rotas f ON r.lastStop = f.source_airport_code
  ONDE f.destination_airport_code != "LAX
    E r.depth < 3
)OPÇÕES {"levels":3}
SELECIONAR r.*
DE RouteCTE AS r
ONDE r.lastStop = 'MAD'
E r.depth < 3;
[
  {
    "route": [ "LAX", "MAD" ]
  },
  {
    "route": [ "LAX", "LHR", "MAD" ]
  },
  {
    "route": [ "LAX", "OPO", "MAD" ]
  }
]

Estrutura de dados hierárquica

Você também pode usar o CTE recursivo para percorrer uma estrutura de dados hierárquica, como uma hierarquia de organização. 

Hierarchical data structure

Consulta SQL++ Resultados
/* Lista de todos os funcionários e sua hierarquia organizacional */

WITH RECURSIVE orgHier as (
  SELECIONAR [e.emp_name] hier, e.emp_id, 0 nível
    DE funcionário e
      ONDE e.manager_id é nulo
  UNIÃO
    SELECIONAR ARRAY_APPEND(o.hier, e1.emp_name) hier,
        e1.emp_id, o.lvl+1  nível
    DE funcionário e1
    JUNTAR orgHier o
   ON e1.manager_id=o.emp_id
)
SELECIONAR o.* DE 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 obter mais informações, consulte a documentação do Couchbase em consultas recursivas


Eficiência do desenvolvedor

Varredura de faixa KV

As operações de chave/valor (K/V) no Couchbase são a maneira mais eficiente de acessar os dados armazenados no banco de dados. Essas operações usam a chave exclusiva de um documento para executar ações de leitura, gravação e atualização. No entanto, essas operações funcionam em uma base de documento individual. Para casos de uso de recuperação de dados maiores, recomendamos usar o SQL++ do serviço Query para seus aplicativos.

No entanto, em alguns casos em que não é economicamente viável configurar nós de consulta e indexação, agora você tem a opção de usar o KV Range Scan. O novo recurso permite que seus aplicativos iterem sobre todos os documentos com base em um intervalo de chaves, um prefixo de chave ou uma amostragem aleatória. As APIs enviam internamente as solicitações para vários vbuckets com base no max_concurrency para equilibrar a carga entre os nós de dados. Os fluxos do vbucket são então mesclados logicamente e retornados como um único fluxo para o aplicativo.

 

KV Obter Varredura de faixa KV
público classe CouchbaseReadHotelExample {
    público estático vazio principal(String[] args) {
    // Conectar-se ao cluster
    Cluster cluster = Cluster.connect("couchbase://localhost", "nome de usuário", "senha");
       
    // Obter uma referência ao bucket "travel-sample".
   Bucket bucket = cluster.bucket("amostra de viagem");
   // Acesse o escopo 'inventory' e a coleção 'hotel'
   Scope inventoryScope = bucket.scope("inventário");
   Collection hotelCollection = inventoryScope.collection("hotel");       
  String documentKey = "hotel_12345"  GetResult getResult = hotelCollection.get(documentKey);

public static void main(String... args) {
    Cluster cluster = Cluster.connect("couchbase://localhost", "nome de usuário", "senha");    Bucket bucket = cluster.bucket("travel-sample");
    Escopo do escopo = bucket.scope("_default");
    Collection collection = scope.collection("_default");    System.out.println("\nExemplo: [range-scan-range]");

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

Para obter mais informações, consulte o Documentação de operações do Couchbase KV.

Consulta de varredura sequencial

Com base na funcionalidade KV Range Scan, a Query Sequential Scan agora permite que você execute todas as operações CRUD do banco de dados usando o SQL++ sem a necessidade de um índice. Esse recurso permite que os desenvolvedores comecem a trabalhar com o banco de dados com pequenos conjuntos de dados sem ter que considerar os índices necessários para as operações.

Do ponto de vista da consulta, o plano de consulta escolherá todos os índices disponíveis para a consulta. Mas se nenhum for encontrado, ele voltará a usar a varredura sequencial. O plano de consulta também mostrará o uso da varredura sequencial, em vez da varredura de índice.

// Número de voos de SFO->LHR por companhia aérea
SELECIONAR a.nome, contagem de matriz(r.schedule) voos
DE rota r
INNER JUNTAR companhia aérea a ON r.airline = a.iata
ONDE r.sourceairport="SFO E r.destinationairport="LHR;

 

Observe que o Sequential Scan é adequado para pequenos conjuntos de dados de desenvolvimento. Os índices ainda devem ser usados quando o desempenho da consulta for uma prioridade.

Para obter mais informações, consulte a documentação do Couchbase em varreduras sequenciais.

Consulta de leitura da réplica

A leitura da réplica faz parte do recurso de alta disponibilidade que está disponível em todos os serviços do Couchbase. Ao usar o SDK para as operações KV, uma leitura de réplica permite que o aplicativo leia de um nó de dados com vbucket de réplica quando a cópia ativa pode não estar disponível, como durante um failover. 

tentar {
        // Tentativa de leitura do nó ativo
        GetResult result = collection.get(documentKey);
        System.out.println("Documento do nó ativo: " + result.contentAsObject());
    } captura (DocumentNotFoundException activeNodeException) {
        System.out.println("Falha na leitura do nó ativo, tentativa de leitura da réplica...");
        // Se a leitura do nó ativo falhar, tente ler de qualquer réplica disponível
        tentar {
              GetReplicaResult replicaResult = collection.getAnyReplica(documentKey);
              System.out.println("Documento da réplica: " + replicaResult.contentAsObject());
            } captura (Exceção replicaReadException) {
                System.err.println("Erro ao buscar o documento da réplica: " + replicaReadException.getMessage());
    }
        

Entretanto, essa abordagem não pode ser aplicada quando o aplicativo usa o SDK para executar uma consulta SQL++. Isso ocorre porque a operação de busca de dados acontece na camada de serviço de consulta. No exemplo abaixo, sem Query Read from Replica, se houver um problema com o nó de dados ativo de onde a consulta está sendo obtida, a consulta retornará um erro de tempo limite para o aplicativo. Executar uma nova tentativa no aplicativo abaixo significaria reexecutar a consulta inteira novamente.

 

tentar {
      // Executar uma consulta N1QL
      Declaração de string = "SELECT * FROM amostra de viagem.inventory.hotel WHERE city = 'San Francisco' LIMIT 10;";
      QueryResult result = cluster.query(statement);
        // Iterar pelas linhas do conjunto de resultados
        para (QueryRow row : result.rows()) {
                System.out.println(row);
        }
    } captura (QueryException e) {
            System.err.println("A consulta falhou: " + e.getMessage());
    }

O Couchbase 7.6 agora oferece suporte à leitura de consulta da réplica. Isso significa que o serviço de consulta pode mudar a conexão para um nó de dados alternativo, se receber um kvTimeout do nó de dados do qual estava fazendo a busca. A lógica de alternar para um nó de dados diferente é executada de forma transparente no serviço de consulta, não sendo necessária nenhuma ação por parte do aplicativo.

Ao usar o Query Read from Replica, os aplicativos devem estar atentos às possíveis inconsistências de dados, especialmente em ambientes com muita atividade de gravação. A replicação contínua de dados entre os nós de dados significa que, como o serviço de consulta alterna entre os nós durante as operações de busca, podem surgir inconsistências. Esse cenário é mais provável em sistemas com atualizações frequentes de dados, em que o processo de replicação pode levar a pequenos atrasos na sincronização entre os nós.

Por esse motivo, o aplicativo tem a opção de controlar a consulta de leitura da réplica. Isso pode ser ativado/desativado na configuração em nível de solicitação, nó ou cluster.

Para obter mais informações, consulte o Documentação das configurações de consulta do Couchbase.

Sequência SQL++

Agora você pode usar o SQL++ para criar um objeto de sequência que é mantido no servidor Couchbase. O objeto de sequência gera uma sequência de valores numéricos que são garantidos como únicos no banco de dados. Os aplicativos podem usar a sequência SQL++ do Couchbase para garantir um único contador para atender a vários clientes.

// Criar sintaxe de SEQUENCE

CRIAR SEQUENCE [IF NÃO EXISTE] [IF NÃO EXISTE] [ COM ]
ALTER SEQUENCE [COM ]
DROP SEQUENCE [IF EXISTE]
NEXTVAL PARA <name>
PREVALÊNCIA PARA <name>
// Exemplos
CRIAR SEQUENCE myBucket.myScope.ordNum INICIAR COM 1000 CACHE 100;
ALTER SEQUENCE myBucket.myScope.ordNum WITH {"max": 2000};
INSERIR INTO pedidos VALORES (uuid(), {"num":NEXT VALOR PARA ordNum,"cliente":"Alex"});
DROP SEQUENCE myBucket.myScope.ordNum IF EXISTE;

Para obter mais informações, consulte o Documentação da sequência do Couchbase


Obrigado por ler, esperamos que você goste desses novos recursos. Mais postagens relacionadas à versão 7.6 serão publicadas em breve.

Autor

A ordem da postagem em relação a outras postagens. Binh Le

Binh Le é gerente de produto principal do serviço de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh é bacharel em Ciência da Computação pela Universidade de Brighton, no Reino Unido.

Posição vertical a partir do topo para iniciar o corte como uma porcentagem da altura da imagem.