Simplifique a transição do RDBMS
A versão 4.5.1 do Couchbase Server traz várias melhorias de funcionalidade, usabilidade e desempenho no N1QL para atender às necessidades dos aplicativos corporativos. Esses aprimoramentos abordam muitos dos problemas críticos de nossos clientes e simplificam Transição do RDBMS.
Experimente o Couchbase Server 4.5.1. Está pronto para produção, testado em campo por parceiros e clientes. Veja o que há de novo para obter a lista completa de aprimoramentos e melhorias.
Não perca parte1 do blog.
Nova configuração de consulta bonito
Muito bonito!!! Muito bonito!!! bonito
!! Sim, bonito
é uma nova e impressionante configuração de consulta no N1QL que pode ativar ou desativar a formatação bonita dos resultados da consulta. Você pode se perguntar: o que há de tão bom nisso? E por que alguém pode querer desativar a bela formatação da saída JSON.
Como diz o velho ditado, não há almoços grátis. A formatação bonita dos resultados da consulta tem suas próprias despesas:
- Primeiro, um fato rápido é que os caracteres de espaço em branco (tabulações, espaços, novas linhas) em um documento JSON bem formatado consomem quase um terço do seu tamanho.
- Portanto, a simples redução do embelezamento economizará todos os bytes brutos que fluem pela rede.
- Além disso, considere a economia correspondente nos recursos de memória e processamento do serviço N1QL.
- No total, a economia é bastante significativa.
- O formato de saída bonito é bom para cenários legíveis por humanos, com tamanhos de resultados gerenciáveis por humanos.
- No entanto, os aplicativos do mundo real e os programas de computador executam consultas com muito mais frequência do que os humanos e processam resultados de consultas muito maiores.
- Para eles, o que importa é desempenho e eficiêncianão é uma formatação bonita. Na verdade, essa formatação é uma sobrecarga para o analisador e o aplicativo JSON, e geralmente é descartada. Normalmente, os aplicativos têm sua própria camada de apresentação para formatar os dados adequadamente para os respectivos usuários.
- Por exemplo, considere um site de reservas de viagens, no qual você está pesquisando voos. Tenho certeza de que nenhum site de viagens despeja os voos disponíveis como um monte de documentos JSON.
O novo parâmetro de consulta bonito
em 4.5.1 permite ativar/desativar a formatação de um resultado de consulta. O parâmetro pode ser:
- definido como
verdadeiro
oufalso
. - Passado para o mecanismo CBQ como parâmetros de linha de comando
- Passado como parâmetro de consulta com chamadas REST.
Por padrão, ele é definido como verdadeiro
. Quando definido como falso
os caracteres de espaço em branco são retirados dos resultados da consulta. Os benefícios de desempenho são significativamente visíveis quando as consultas produzem resultados grandes e, é claro, dependem da porcentagem de espaço em branco em seus documentos. Por exemplo, a consulta a seguir, que seleciona todos os documentos de travel-sample, é executada quase 3x mais rápido quando pretty = false
. Além disso, observe o tamanho do conjunto de resultados, que é um terço do resultado bem formatado.
Com pretty = true
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
varakurprasad$ tempo enrolar -v http://localhost:8093/query/service -d "pretty=true&statement=SELECT * from `travel-sample`" | tail -15 * Nome do host foi NÃO encontrado em DNS cache % Total % Recebido % Xferd Média Velocidade Tempo Tempo Tempo Atual Dload Carregar Total Gastos Esquerda Velocidade 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Tentando ::1... * Conectado para localhost (::1) porto 8093 (#0) * Servidor autenticação usando Básico com usuário 'amostra de viagem' > POST /consulta/serviço HTTP/1.1 > Autorização: Básico dHJhdmVsLXNhbXBsZTpoZWxsbw== > Usuário-Agente: enrolar/7.37.1 > Anfitrião: localhost:8093 > Aceitar: */* > Conteúdo-Comprimento: 51 > Conteúdo-Tipo: aplicativo/x-www-formulário-codificado por url > } [dados não mostrado] * carregar completamente enviado desligado: 51 fora de 51 bytes < HTTP/1.1 200 OK < Conteúdo-Tipo: aplicativo/json; versão=1.6.0 < Data: Sábado, 15 Outubro 2016 02:04:09 GMT < Transferência-Codificação: em pedaços < { [dados não mostrado] 100 103M 0 103M 100 51 16.6M 8 0:00:06 0:00:06 --:--:-- 17.2M * Conexão #0 para o host localhost permaneceu intacto ], "sourceairport" (aeroporto de origem): "TLV", "paradas": 0, "tipo": "route" (rota) } } ], "status": "sucesso", "métricas": { "elapsedTime" (tempo decorrido): "6.165034483s", "executionTime": "6.164993497s", "resultCount": 31591, "resultSize": 107830610 } } real 0m6.208s usuário 0m5,704s sistema 0m0,373s |
Com pretty = false
Observe que o total de
resultSize agora é de apenas 36754457bytes, e a consulta foi executada em 2,2 segundos.
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 29 30 31 32 |
varakurprasad$ tempo enrolar -v http://localhost:8093/query/service -d "pretty=false&statement=SELECT * from `travel-sample`" | tail -5 * Nome do host foi NÃO encontrado em DNS cache % Total % Recebido % Xferd Média Velocidade Tempo Tempo Tempo Atual Dload Carregar Total Gastos Esquerda Velocidade 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Tentando ::1... * Conectado para localhost (::1) porto 8093 (#0) * Servidor autenticação usando Básico com usuário 'amostra de viagem' > POST /consulta/serviço HTTP/1.1 > Autorização: Básico dHJhdmVsLXNhbXBsZTpoZWxsbw== > Usuário-Agente: enrolar/7.37.1 > Anfitrião: localhost:8093 > Aceitar: */* > Conteúdo-Comprimento: 52 > Conteúdo-Tipo: aplicativo/x-www-formulário-codificado por url > } [dados não mostrado] * carregar completamente enviado desligado: 52 fora de 52 bytes < HTTP/1.1 200 OK < Conteúdo-Tipo: aplicativo/json; versão=1.6.0 < Data: Sábado, 15 Outubro 2016 02:03:29 GMT < Transferência-Codificação: em pedaços < { [dados não mostrado] 100 35.1M 0 35.1M 100 52 15.9M 23 0:00:02 0:00:02 --:--:-- 15.9M "status": "sucesso", "métricas": {"elapsedTime" (tempo decorrido): "2.148354775s","executionTime": "2.148323137s","resultCount": 31591,"resultSize": 36754457} } real 0m2.223s usuário 0m1,977s sistema 0m0,141s |
Aprimoramentos na construção de objetos dinâmicos em consultas N1QL
O N1QL já suporta a criação de objetos JSON dinamicamente em consultas. Isso ajuda imensamente na criação de objetos de resultados especificamente construídos em listas de projeção de consultas. O servidor Couchbase 4.5.1 amplia o poder das expressões e enriquece a criação dinâmica de objetos e o processamento de objetos em consultas N1QL.
- No Couchbase Server 4.5.1, o N1QL permite que os nomes e os valores dos campos de objeto sejam expressões arbitrárias. Nas versões anteriores, os nomes dos campos devem ser cadeias de caracteres estáticas. Se um nome não for avaliado como uma cadeia de caracteres, o resultado da construção do objeto será NULL. Por exemplo:
12345678910SELECIONAR { SUPERIOR(indicativo) || "_key" : indicativo || ":" || país || ":" || nome } AS meu objetoDE `viagens-amostra`ONDE tipo = "companhia aérea limite 1;[{"myobj": {"MILE-AIR_key": "MILE-AIR:Estados Unidos:40-Mile Air"}}] - Ao construir objetos em uma consulta N1QL, os nomes dos campos em pares nome-valor tornam-se opcionais no item 4.5.1. Por exemplo, a consulta a seguir atribui implicitamente os nomes "type" e "name" aos respectivos valores:
123456789SELECIONAR {tipo, nome} AS meu objeto DE `viagens-amostra` LIMITE 1;[{"myobj": {"tipo": "aeroporto""name" (nome): "airport_123"}}]
Nova função de matriz ARRAY_INTERSECT()
A função ARRAY_INTERSECT() recebe dois ou mais vetores como parâmetros e retorna a interseção dos vetores de entrada como resultado, ou seja, o vetor que contém os valores presentes em todos os vetores de entrada. Ela retorna uma matriz vazia se não houver elementos de matriz comuns. Para obter mais informações, consulte a documentação. Por exemplo, a consulta a seguir encontra os hotéis de que Brian ou Lilian gostam, no bucket de amostra de viagens enviado com Servidor Couchbase 4.5.1.
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 |
SELECIONAR meta().id, ARRAY_INTERSECT(public_likes, ["Brian Kilback", "Lilian McLaughlin"]) AS gostos DE `viagens-amostra` ONDE tipo = 'hotel' ORDEM BY gostos DESC LIMITE 4; [ { "id": "hotel_10025", "curtidas": [ "Lilian McLaughlin", "Brian Kilback" ] }, { "id": "hotel_10026", "curtidas": [] }, { "id": "hotel_10064", "curtidas": [] }, { "id": "hotel_10063", "curtidas": [] } ] |
Baixar Servidor Couchbase 4.5.1 e experimente. Informe-me se tiver alguma dúvida/comentário ou se estiver achando o máximo ;-)
Saúde!!!