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
verdadeirooufalso. - 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 falsoos 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$ time curl -v https://localhost:8093/query/service -d "pretty=true&statement=SELECT * from `travel-sample`" | tail -15 * Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::1... * Connected to localhost (::1) port 8093 (#0) * Server auth using Basic with user 'travel-sample' > POST /query/service HTTP/1.1 > Authorization: Basic dHJhdmVsLXNhbXBsZTpoZWxsbw== > User-Agent: curl/7.37.1 > Host: localhost:8093 > Accept: */* > Content-Length: 51 > Content-Type: application/x-www-form-urlencoded > } [data not shown] * upload completely sent off: 51 out of 51 bytes < HTTP/1.1 200 OK < Content-Type: application/json; version=1.6.0 < Date: Sat, 15 Oct 2016 02:04:09 GMT < Transfer-Encoding: chunked < { [data not shown] 100 103M 0 103M 100 51 16.6M 8 0:00:06 0:00:06 --:--:-- 17.2M * Connection #0 to host localhost left intact ], "sourceairport": "TLV", "stops": 0, "type": "route" } } ], "status": "success", "metrics": { "elapsedTime": "6.165034483s", "executionTime": "6.164993497s", "resultCount": 31591, "resultSize": 107830610 } } real 0m6.208s user 0m5.704s sys 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$ time curl -v https://localhost:8093/query/service -d "pretty=false&statement=SELECT * from `travel-sample`" | tail -5 * Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::1... * Connected to localhost (::1) port 8093 (#0) * Server auth using Basic with user 'travel-sample' > POST /query/service HTTP/1.1 > Authorization: Basic dHJhdmVsLXNhbXBsZTpoZWxsbw== > User-Agent: curl/7.37.1 > Host: localhost:8093 > Accept: */* > Content-Length: 52 > Content-Type: application/x-www-form-urlencoded > } [data not shown] * upload completely sent off: 52 out of 52 bytes < HTTP/1.1 200 OK < Content-Type: application/json; version=1.6.0 < Date: Sat, 15 Oct 2016 02:03:29 GMT < Transfer-Encoding: chunked < { [data not shown] 100 35.1M 0 35.1M 100 52 15.9M 23 0:00:02 0:00:02 --:--:-- 15.9M "status": "success", "metrics": {"elapsedTime": "2.148354775s","executionTime": "2.148323137s","resultCount": 31591,"resultSize": 36754457} } real 0m2.223s user 0m1.977s sys 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:
12345678910SELECT { UPPER(callsign) || "_key" : callsign || ":" || country || ":" || name } AS myobjFROM `travel-sample`WHERE type = 'airline' limit 1;[{"myobj": {"MILE-AIR_key": "MILE-AIR:United States: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:
123456789SELECT {type, name} AS myobj FROM `travel-sample` LIMIT 1;[{"myobj": {"type": "airport""name": "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 |
SELECT meta().id, ARRAY_INTERSECT(public_likes, ["Brian Kilback", "Lilian McLaughlin"]) AS likes FROM `travel-sample` WHERE type = 'hotel' ORDER BY likes DESC LIMIT 4; [ { "id": "hotel_10025", "likes": [ "Lilian McLaughlin", "Brian Kilback" ] }, { "id": "hotel_10026", "likes": [] }, { "id": "hotel_10064", "likes": [] }, { "id": "hotel_10063", "likes": [] } ] |
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!!!