Em nome da equipe do SDK, é com grande prazer que anuncio que a versão do Java SDK 2.2 agora é GA!
Esta versão está repleta de aprimoramentos e correções de bugs. Antes de mais nada, ela oferece compatibilidade com todas as novidades do nosso novo Servidor Couchbase 4.0 traz para a mesa.
Graças ao feedback e após algumas iterações (não houve um mas dois Developer Previews para esta versão!), agora temos um rico conjunto de melhorias que podem ser aproveitadas ao migrar do 2.0/2.1 para 2.2.
Veja o Notas de versão para obter uma lista completa das alterações, mas aqui está uma recapitulação:
- Mudou de observáveis quentes para frios
- Suporte estendido para N1QL e escalonamento multidimensional (MDS)
- Durabilidade aprimorada suporte
- Aprimoramentos de suporte com métricas
- Simples ODM
- Sincronização e assincronização Aprimoramentos da API
- Diversos (alterações de nomes, atualizações de dependências)
Para ter acesso a essa versão, basta atualizar seu pom.xml (ou faça o download do arquivo):
|
1 2 3 4 5 6 7 8 |
com.couchbase.cliente java-cliente 2.2.0 |
Você também pode consultar o javadocs e Documentação do SDK para esta versão.
Novos recursos
Suporte a N1QL e MDS
O SDK foi ajustado para funcionar perfeitamente com Servidor Couchbase 4.0:
- Explore uma DSL completa para trabalhar com N1QL e executar SELECT, além de trabalhar com índices.
- Permita que o SDK e o serviço de consulta otimizem as consultas que você executa com frequência usando a opção
adhoc(false)ajuste deN1qlParamsem vocêN1qlQuery. - Confie no SDK para estar ciente de sua
MDSgrupo (Dimensionamento multidimensionalA possibilidade de os nós terem diferentes serviços ativados, permitindo que você dimensione os nós de acordo com a necessidade deles (por exemplo, mais RAM para nós de dados, mais CPU para nós de consulta).
Sobre a otimização de consultas: é uma substituição do preparar API em visualizações para desenvolvedores. Não há necessidade de manter uma PreparedPayload ou Plano de consulta. Marcação de uma consulta para otimização usando N1qlParams's adhoc(false) usará internamente o recurso de instrução preparada do mecanismo de consulta, armazenando em cache até 5.000 planos de execução para uma execução mais rápida.
Durabilidade aprimorada
Outra possibilidade introduzida em Servidor Couchbase 4.0 é a durabilidade aprimorada. A ideia é que, em vez de usar o CAS para verificar a persistência e a replicação corretas dos seus dados, uma solução mais refinada e mais eficiente seja usada. MutaçãoToken pode ser emitida pelo servidor a cada mutação e usada para observação da durabilidade.
Ele permite garantir que uma mutação específica tenha sido vista em uma réplica, mesmo que uma mutação mais recente seja feita nesse meio tempo (alterando mais uma vez o CAS no mestre e na réplica). Ele também permite uma detecção mais correta do estado se um failover rígido tiver sido acionado no cluster.
Para ativar esse recurso no CouchbaseEnvironment usar o mutationTokensEnabled(true) método.
Observação Isso implica que bytes adicionais são enviados pelo servidor em cada resposta de mutação, o que acarreta uma pequena sobrecarga e, portanto, é desativado por padrão.
Métricas
O que está acontecendo dentro do SDK? Qual é a integridade da minha JVM? Essas latências são devidas às viagens de ida e volta da rede ou estão ocorrendo no SDK?
Todas essas perguntas e outras encontram respostas no novo recurso Metrics!
Tempo de execução e Latência As métricas são coletadas o tempo todo e são despejadas regularmente no EventBus (um Observável por padrão, a cada hora. Além de alterar o intervalo do despejo, é possível configurar facilmente um consumidor para esses eventos de métrica que os registram.
Dê uma olhada na documentação para descobrir todos os detalhes essenciais :)
ODM simples com API de repositório
Estamos explorando o ODM (Mapeamento de objeto-documento) na forma de um Repositório que permite armazenar classes de Entidade diretamente, desde que sejam suficientemente simples (por exemplo, por enquanto ele precisa de um construtor vazio) e anotadas com @Documento, @Id e @Campo.
De observáveis quentes a observáveis frios
Essa é uma grande mudança no comportamento do assíncrono API. Em RxJava, a quente Observável emitirá dados independentemente de alguém estar ou não ouvindo/assinando e sempre fornecerá os mesmos dados a novos assinantes.
Esse era o comportamento dos Observáveis do SDK do Couchbase anteriormente. Isso significava que, se você necessário novas assinaturas para acionar uma nova operação no banco de dados (por exemplo, no contexto de tentar novamente), você tinha que envolver sua chamada em um Observável.defer().
Caso contrário, todas as novas tentativas teriam o mesmo primeiro resultado, por exemplo, um TemporaryFailureException.
De 2.2 em diante, o comportamento padrão é ter frio Observávels, o que significa que o encapsulamento em adiar agora é redundante. Todas as chamadas do SDK funcionarão perfeitamente com RxJava's tentar novamente semântica.
A menos que você explicitamente subscribe() para um Observável retornado pelo SDK, nenhuma interação com o banco de dados é acionada. Essa é uma abordagem mais preguiçosa de "não fazer nada até que seja necessário" que também é benéfica ao declarar fluxos de fallback (como com Observável#onErrorResumeNext()).
Aprimoramentos da API
getFromReplica iteração
Na API de sincronização, agora há uma sobrecarga de getFromReplica que retorna um Iteradorpermitindo o consumo fácil de apenas parte das respostas (por exemplo, quando se está interessado apenas na resposta mais rápida).
includeDocs em Consulta
Ainda na API de sincronização, se você quiser que seu Consulta para recuperar com eficiência todo o conteúdo dos documentos em segundo plano, agora você pode usar o includeDocs opção.
Semântica de contador
Anteriormente, contador inicializaria o documento do contador com o valor padrão de 0 se não houver valor inicial foi fornecido na sobrecarga.
Isso foi alterado para que, em vez disso, um DocumentDoesNotExistException é lançado com esse tipo de sobrecarga (como na geração do SDK 1.4). Para inicializar com 0 em vez de gerar erro, basta usar uma das sobrecargas que aceitam um valor inicial.
Requisito de durabilidade Suporte para contador, anexar e prefixar
Anteriormente, nenhuma sobrecarga permitia definir um PersistTo e/ou ReplicarPara requisito de durabilidade. Isso já foi implementado.
CASMismatchException em vez de CouchbaseException para anexar e prefixar
Como o título indica, onde ambos os métodos retornariam apenas um CouchbaseException
Opções do documento de design
Agora você pode especificar diferentes opções por documento de design ao criar ou substituir um.
CouchbaseEnvironment: Evitando confusão
O CouchbaseEnvironment.Builder não implementa mais a interface, forçando você a chamar construir() para obter o ambiente real (e, assim, evitar confundir NullPointerException durante o uso).
Diversos
Mudanças de nome
Algumas classes relacionadas a N1QL foram renomeadas para evitar confusão e se alinhar melhor com outras classes semelhantes e/ou outros SDKs:
- A maioria
Consultaas classes relacionadas foram prefixadas comN1QL(por exemplo.Resultado de consulta assíncronatorna-seAsyncN1qlQueryResult). Isso é mais consistente com a nomeação, por exemplo, de visualizações (Consulta,N1qlQuery). QueryParamstorna-seN1qlParamseMétricas de consultatorna-seN1qlMetrics.- As várias instâncias da palavra
parametrizadoforam substituídos porparametrizadona documentação e nos SDKs. Por exemplo, emN1qlQuery.parameterized(Statement st, JsonObject paramValues)método de fábrica...
Atualizações de dependências
A seguinte dependência externa foi atualizada:
RxJavade1.0.4para1.0.14
Além disso, as dependências internas também foram atualizadas:
Nettyde4.0.25.Finalpara4.0.30.FinalLMAX Disruptor3.3.0para3.3.2Jacksonde2.4.2para2.6.1LatencyUtilsNovo na versão2.0.2