Sin categoría

Almacenamiento de métricas con fecha y hora en Couchbase con Spring

Almacenamiento de métricas con fecha y hora en Couchbase con Spring

Tengo anteriormente en el blog una introducción a Spring Data Couchbase. Este post es una continuación. Os mostraré cómo utilizo los conectores sociales de Spring para almacenar datos procedentes de Twitter.

Estructura del documento

Una pregunta que nos hacen a menudo sobre el desarrollo Java es: "¿tenemos un ODM ( Object Document Mapper)?". Mientras que actualmente no hay ODM Java proporcionado en nuestro SDK, hay uno con spring-data-couchbase. Así que vamos a hablar un poco sobre POJO y cómo se mapean como JSON para ser almacenados en Couchbase. He aquí un ejemplo práctico con la clase TwitterUpdate:

Probablemente hayas notado algunas anotaciones, cada una de las cuales ayuda a spring-data-couchbase a mapear el POJO a un documento Couchbase. Vamos a repasar rápidamente las básicas.

@Documento

Su propósito es señalar a spring-data-couchbase que la clase anotada será almacenada como un documento Couchbase. Puede utilizar la opción "expiry" para establecer un TTL para todos estos objetos almacenados. El valor por defecto es 0, lo que significa que el objeto no expirará.

@Id

Su propósito es definir qué campo del documento se utilizará como clave para almacenarlo en Couchbase. Este campo es obligatorio y debe tener un máximo de 250 caracteres.

@Campo

Su propósito es decir que el campo anotado será parte del documento almacenado en Couchbase. El comportamiento por defecto utiliza el nombre del campo como clave del objeto JSON, pero puedes definir el tuyo propio dando un valor personalizado a la anotación Field. Mira el campo clave como ejemplo.

El POJO ya está listo. Para almacenarlo podría usar el CouchbaseClient Bean tal y como hice en el post anterior. Pero la idea aquí es crear un repositorio personalizado,.

Repositorios de datos de Spring

Si has estado haciendo código empresarial Java durante un tiempo o estás familiarizado con Spring, entonces es casi seguro que esperas un Repositorio. Ahora mismo Spring Data Couchbase soporta el repositorio CRUDRepository. Te da acceso a métodos CRUD básicos (get, save, delete, update, findAll).

Es fácil configurar esto. Todo lo que tienes que hacer es crear una interfaz que extienda la interfaz CRUDRepository, a continuación, utilizar genéricos para definir el tipo de objeto y la clave utilizada para almacenar tus Datos con este repositorio.

Para asegurarte de que esto funciona como se espera, y que la implementación del repositorio será generada automáticamente por Spring Framework en tiempo de ejecución, asegúrate de añadir @EnableCouchbaseReposititories en tu clase Application. Esta implementación de repositorio será un Spring Bean y como tal será inyectable.

Si intentas usar los métodos findAll, deleteAll o count, no funcionarán. La razón es que dependen de una vista personalizada en el lado de Couchbase. Todos los demás métodos funcionan porque se basan en la clave del documento. Así que vamos a crear la vista all para nuestro POJO. La convención es que un findAlgo añadido a un repositorio se basará en el método algo vista. Así que ahora tenemos que crear una vista llamada todos para la TwitterUpdate documento de diseño. Esto es realmente sencillo. Si desea utilizar el método de recuento, no se olvide de añadir el recuento de reducir haciendo clic en uno de los incorporados en reducir:

La siguiente pregunta que te puedes hacer es ¿Cómo consulto usando algo que no sea la clave del documento? Tradicionalmente con Couchbase creas una nueva vista usando como clave cualquier propiedad sobre la que quieras buscar. En mi caso va a ser 'doc.account'.

Usando la misma convención que antes, podemos añadir un método findByAccount a nuestra interfaz TwitterUpdateRepository. Este método tomará un objeto Query como parámetro. Esto también significa que necesitamos que la vista sea llamada byAccount:

Ahora, para utilizar este método, debe definir el objeto de consulta adecuado. Es muy sencillo:

Podría usar el repositorio directamente en mi método principal pero eso sería malo, semánticamente malo. La llamada a la parte de 'persistencia' de tu aplicación normalmente viene del lado del negocio. Pertenece a un Servicio.

Servicios de primavera

Para crear un servicio Spring, añada una nueva clase y anótela con la anotación @Service. Es un poco como usar la anotación @Component, pero con un significado extra-semántico. De nuevo, los servicios son donde pones tu lógica de negocio. Hay otras anotaciones especializadas como Controller o Repository. ¿Por qué esta separación? Puede ser útil diferenciarlas cuando te diviertes con AOP.

Puedo autowirear la clase Twitter porque la he declarado como un bean en mi clase Application y porque he añadido la anotación @ComponentScan. Todas sus propiedades están definidas en un fichero de propiedades al igual que lo estaban para la configuración de mi Couchabse Server. Proviene del proyecto spring-social-twitter y me permitirá ejecutar fácilmente algunas consultas contra la API de Twitter. Esto me permite crear mi objeto Twitter Update y almacenarlo en Couchbase a través del TwitterUpdateRepository.

Algo interesante que hay que ver aquí es cómo se construye la clave del documento. Empieza con 'tw' para twitter, luego el nombre de la cuenta que he buscado y por último la marca de tiempo. Esto debería permitirme hacer algunas consultas interesantes en el futuro, una vez que añada métricas de otras cuentas de Twitter u otras redes sociales. Me imagino un buen panel para visualizar las tendencias de todas estas cuentas.

Espero que os haya servido de ayuda. A continuación haré otra entrada en el blog sobre un caso de uso algo más avanzado para Spring (Caché, Validación y programación).

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Laurent Doguin

Laurent es un metalero empollón que vive en París. Principalmente escribe código en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programación reactiva y otras cosas de moda. También fue Developer Advocate de Clever Cloud y Nuxeo, donde dedicó su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.