En nombre del equipo del SDK, tengo el gran placer de anunciar que la versión del SDK de Java 2.2
¡ya es GA!
Esta versión está repleta de mejoras y correcciones de errores. En primer lugar, ofrece compatibilidad con todas las novedades de nuestro nuevo Servidor Couchbase 4.0
pone sobre la mesa.
Gracias a los comentarios y después de bastantes iteraciones (no había un pero dos Developer Previews para esta versión), ahora tenemos un amplio conjunto de mejoras para aprovechar al migrar de 2.0
/2.1
a 2.2
.
Véase el notas de la versión para consultar la lista completa de cambios, pero aquí tiene un resumen:
- Cambio de observables en caliente a fríos
- Soporte ampliado para N1QL y el escalado multidimensional (MDS)
- Mayor durabilidad soporte
- Mejoras de la compatibilidad con métricas
- Simple ODM
- Sincronización y asincronización Mejoras de la API
- Varios (cambios de nombres, actualizaciones de dependencias)
Para obtener esta versión, sólo tiene que actualizar su pom.xml
(o descargar el archivo):
1 2 3 4 5 6 7 8 |
com.couchbase.cliente java-cliente 2.2.0 |
También puede consultar javadocs y Documentación del SDK para este comunicado.
Novedades
Soporte N1QL y MDS
El SDK se ha ajustado para que funcione a la perfección con Servidor Couchbase 4.0
:
- Explora un DSL completo para trabajar con N1QL y realizar SELECT así como trabajar con índices.
- Deje que el SDK y el servicio de consultas optimicen las consultas que ejecuta con frecuencia utilizando la función
adhoc(false)
afinación deN1qlParámetros
en tiN1qlQuery
. - Confíe en el SDK para conocer su
MDS
grupo (Escalado multidimensional
la posibilidad de que los nodos tengan habilitados diferentes servicios, lo que permite escalar los nodos en función de sus necesidades, por ejemplo, más RAM para los nodos de datos, más CPU para los nodos de consulta).
Acerca de la optimización de consultas: se trata de una sustitución del prepare
API en previsualizaciones para desarrolladores. No es necesario aferrarse a una Carga preparada
o Plan de consulta
. Marcar una consulta para su optimización mediante N1qlParámetros
's adhoc(false)
utilizará internamente la función de sentencias preparadas del motor de consultas, almacenando en caché hasta 5000 planes de ejecución para una ejecución más rápida.
Mayor durabilidad
Otra posibilidad introducida en Servidor Couchbase 4.0
es la durabilidad mejorada. La idea es que, en lugar de utilizar CAS para comprobar la persistencia y replicación correctas de los datos, se puede utilizar un algoritmo de granularidad más fina. MutationToken
puede ser emitido por el servidor con cada mutación y utilizado para la observación de la durabilidad.
Permite asegurar que una mutación específica ha sido vista en una réplica incluso si se realiza una nueva mutación mientras tanto (cambiando de nuevo el CAS en el maestro y la réplica). También permite una detección de estado más correcta si se ha desencadenado un hard failover en el cluster.
Para activar esta función en el CouchbaseEnvironment
utilizar el mutationTokensEnabled(true)
método.
Nota Esto implica que el servidor envía bytes adicionales en cada respuesta de mutación, por lo que conlleva una ligera sobrecarga y, por tanto, está desactivado por defecto.
Métricas
¿Qué está pasando dentro del SDK? ¿Cuál es la salud de mi JVM? ¿Esas latencias se deben a los viajes de ida y vuelta de la red o están ocurriendo en el SDK?
Todas estas preguntas y muchas más encuentran respuesta en la nueva función Métricas.
Tiempo de ejecución
y Latencia
Las métricas se recopilan todo el tiempo y se vuelcan regularmente al EventBus
(an Observable
), por defecto cada hora. Además de cambiar el intervalo para el volcado, se puede configurar fácilmente un consumidor para estos eventos métricos que los registre.
Eche un vistazo a la documentación para descubrir todos sus detalles :)
ODM simple con API de repositorio
Estamos explorando la ODM (Correspondencia objeto-documento
) en forma de Repositorio
que permite almacenar clases Entity directamente, siempre que sean lo suficientemente simples (por ejemplo, por ahora necesita un constructor vacío) y estén anotadas con @Documento
, @Id
y @Campo
.
De los observables calientes a los fríos
Esto supone un cambio importante en el comportamiento del async
API. En RxJava
, a caliente Observable
emitirá datos tanto si alguien está escuchando/suscribiéndose como si no, y siempre servirá los mismos datos a los nuevos suscriptores.
Este era el comportamiento de los Observables del SDK de Couchbase anteriormente. Esto significaba que si necesario nuevas suscripciones para desencadenar una nueva operación en la base de datos (por ejemplo en el contexto de reintentar
), tenía que envolver su llamada en una llamada Observable.defer()
.
De lo contrario, todos los reintentos verían el mismo primer resultado, por ejemplo un TemporaryFailureException
.
En 2.2
en adelante, el comportamiento por defecto es tener frío Observable
s, lo que significa que la envoltura en aplazar
es ahora redundante. Todas las llamadas al SDK funcionarán sin problemas con RxJava
's reintentar
semántica.
A menos que explícitamente subscribe()
a un Observable
devuelto por el SDK, no se activa ninguna interacción con la base de datos. Este es un enfoque más perezoso de "no hacer nada hasta que sea necesario" que también es beneficioso al declarar flujos de retorno (como con Observable#onErrorReanudarSiguiente()
).
Mejoras de la API
getFromReplica
iteración
En la API de sincronización, ahora hay una sobrecarga de getFromReplica
que devuelve un Iterador
, lo que permite consumir fácilmente sólo una parte de las respuestas (por ejemplo, cuando sólo interesa la respuesta más rápida).
incluirDocs
en ViewQuery
Todavía en la API de sincronización, si desea que su ViewQuery
para recuperar eficazmente todo el contenido de los documentos en segundo plano, ahora puede utilizar la función incluirDocs
opción.
Contrasemántica
Anteriormente, contador
inicializaría el documento contador con el valor por defecto de 0 si no hay ningún initialValue
en la sobrecarga.
Esto se ha cambiado para que, en su lugar, un DocumentDoesNotExistException
con este tipo de sobrecargas (como en la generación 1.4 del SDK). Para inicializar con 0 en lugar de lanzar un error, simplemente utilice una de las sobrecargas que aceptan un valor initialValue
.
Requisito de durabilidad Apoyo a contador
, añadir
y anteponer
Anteriormente ninguna sobrecarga permitía establecer un PersistTo
y/o ReplicateTo
requisito de durabilidad. Esto ya se ha aplicado.
CASMismatchException
en lugar de CouchbaseException
para añadir
y anteponer
Como el título indica, en el caso de que ambos métodos devolvieran simplemente un genérico CouchbaseException
Opciones del documento de diseño
Ahora puede especificar distintas opciones por documento de diseño al crear o sustituir uno.
CouchbaseEnvironment: Evitar confusiones
En CouchbaseEntorno.Builder
ya no implementa la interfaz, lo que le obliga a llamar a construir()
para obtener el entorno real (y así evitar confundir NullPointerException
durante el uso).
Varios
Cambios de nombre
Algunas clases relacionadas con N1QL
se han renombrado para evitar confusiones y alinearse mejor con otras clases similares y/o otros SDKs:
- Más
Consulta
se ha antepuesto el prefijoN1QL
(Ej.AsyncQueryResult
se convierte enAsyncN1qlQueryResultado
). Esto es más coherente con la nomenclatura, por ejemplo, para las vistas (ViewQuery
,N1qlQuery
). Parámetros de consulta
se convierte enN1qlParámetros
yQueryMetrics
se convierte enN1qlMetrics
.- Las diversas instancias de la palabra
parametrizado
se han sustituido porparametrizado
en la documentación y los SDK. Por ejemplo, enN1qlQuery.parameterized(Statement st, JsonObject paramValues)
método de fábrica...
Actualizaciones de dependencia
Se ha actualizado la siguiente dependencia externa:
RxJava
de1.0.4
a1.0.14
Además, también se han actualizado las dependencias internas:
Netty
de4.0.25.Final
a4.0.30.Final
Disruptor LMAX
3.3.0
a3.3.2
Jackson
de2.4.2
a2.6.1
LatencyUtils
nuevo en versión2.0.2