Em nome de toda a equipe, tenho o prazer de informar que finalmente lançamos a versão 2.1.0 do Couchbase Java SDK. Em comparação com a versão 2.0, ela traz muitos recursos novos, além de uma infinidade de aprimoramentos menores e correções de bugs. É o resultado do incrível e valioso feedback que recebemos de um número cada vez maior de usuários que estão atualizando seus aplicativos, bem como de novos usuários que exploram padrões de acesso a dados reativos.
Nesta postagem do blog, vamos nos concentrar nos novos recursos. Se você quiser conferir a lista completa de alterações, consulte a seção Notas de lançamento. Se você tiver perguntas, pode fazê-las no Fóruns E se você achar que encontrou um problema, registre-o em nosso JIRA.
Ah, e a propósito, também fizemos algumas alterações que devem melhorar o desempenho em determinadas cargas de trabalho. Mesmo que não haja benchmarks nesta publicação do blog, há uma boa chance de que você veja uma melhora na latência e na taxa de transferência em comparação com a versão 2.0.3.
Obtendo o SDK
Como sempre, estamos distribuindo a versão GA de Central Maven e como um arquivo.
Suporte a N1QL DP4
Esta versão traz suporte oficial (ainda experimental) para o N1QL DP4. Ela não é compatível com as versões anteriores do DP3 porque as respostas de streaming subjacentes mudaram bastante. Os destaques incluem:
- Declarações simples, parametrizadas e preparadas.
- Opções de consulta estendidas, como tempos limite e consistência de varredura.
- QueryResults síncronos e assíncronos aprimorados para um tratamento de erros mais flexível.
Simon escreveu uma excelente postagem no blog há duas semanas, portanto, se você quiser saber mais, deve Dê uma olhada aqui.
Suporte a consultas de visualização espacial
Além do suporte regular a consultas de visualização, adicionamos o suporte a consultas de visualização espacial. Observe que o suporte a consultas espaciais ainda é experimental no Couchbase Server 3.0.2, mas em breve terá suporte oficial. Além disso, a implementação na versão 2.1.0 não é compatível com versões anteriores do Couchbase Server porque o formato de resposta foi ligeiramente alterado.
Como um exemplo rápido, imagine que você esteja armazenando informações de uma loja:
Com base nesse formato de dados, você pode definir uma visualização espacial que não apenas indexará a latitude e a longitude, mas também o horário de funcionamento:
Em seguida, você pode consultá-lo em todas as três dimensões, fornecendo uma caixa delimitadora para o local e também um intervalo de tempo em que a loja deve estar aberta:
Você pode esperar mais publicações e exemplos no blog em um futuro próximo, à medida que nos aproximamos de uma versão com suporte total no lado do servidor.
Batimentos cardíacos/Keepalive do soquete ocioso
Quando não há carga passando pelo cliente para um soquete específico, há uma chance de que um firewall (ou outra coisa) esteja cortando a conexão porque acha que ela está obsoleta. Para evitar isso, o SDK agora envia uma mensagem de heartbeat a cada 30 segundos em soquetes ociosos. É claro que essas mensagens não são enviadas se o tráfego regular estiver fluindo nesse intervalo.
Você pode alterar o intervalo no ambiente e, se quiser desativá-lo, basta defini-lo como 0.
Estratégias de repetição plugáveis
Um recurso muito solicitado foi o de fornecer maneiras de falhar rapidamente se a solicitação não puder ser despachada imediatamente. Por exemplo, no intervalo de tempo entre a falha de um nó e a falha no cluster, um subconjunto de documentos não pode ser gravado (todos os que têm como alvo as partições específicas nesse nó). Por padrão, o SDK tentará novamente a operação um pouco mais tarde e, por fim, o tempo limite será atingido no lado do chamador.
O novo modo de falha rápida, em vez disso, cancelaria imediatamente a solicitação, fornecendo loops de feedback mais rápidos para o chamador, que então poderia determinar se a solicitação deveria ser tentada novamente ou não. Essa nova estratégia pode ser ativada no ambiente da seguinte forma:
Além disso, tornamos a estratégia de repetição conectável, de modo que você pode até mesmo definir a sua própria estratégia. Como isso é bastante avançado, não será abordado nesta postagem do blog, mas você pode esperar mais informações em breve na documentação sobre esse tópico. Enquanto isso, se estiver curioso, dê uma olhada nas estratégias (bastante simples) que acompanham o SDK.
Por fim, foi adicionado ao ambiente um "tempo de vida máximo da solicitação" configurável, que é utilizado pela estratégia padrão de "melhor esforço" para determinar se a solicitação ainda deve ser tentada novamente ou se será cancelada. Isso é necessário para evitar que as solicitações fiquem circulando por muito tempo e ocupem espaços preciosos nos RingBuffers.
Barramento de eventos assinável
Um barramento de eventos genérico foi adicionado ao ambiente que é utilizado pelo núcleo e pelo cliente para publicar eventos para possíveis assinantes de aplicativos. No momento, apenas os eventos de abertura/fechamento do Bucket e de conexão/desconexão do Node são publicados, mas, no futuro, planejamos estender muito isso, coletando e publicando também métricas de desempenho e outros tipos de eventos e avisos.
É muito fácil assinar e reagir a esses tipos de eventos, graças ao RxJava e à natureza de fluxo contínuo dos nossos Observables:
DNS SRV Bootstrap
Agora é possível obter a lista de nós de bootstrap por meio de um registro DNS SRV. Isso permite que os administradores de sistema centralizem a configuração da lista de nós bootstrap de maneira muito fácil. Ele precisa ser ativado no ambiente para que funcione. Você pode encontrar mais informações aqui.
O que vem a seguir?
Embora já tenhamos muitas ideias para a versão 2.2, agora estamos dando um passo atrás e planejando estabilizar ainda mais essa ramificação com versões de correção de bugs, conforme necessário. Além disso, estamos mudando o foco para a estrutura aprimorada e a integração "up the stack". Portanto, fique ligado nas próximas semanas para ver as publicações e os anúncios no blog!