{"id":1878,"date":"2015-02-03T15:51:47","date_gmt":"2015-02-03T15:51:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1878"},"modified":"2024-09-12T01:01:40","modified_gmt":"2024-09-12T08:01:40","slug":"storing-timestamped-metrics-in-couchbase-with-spring","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/storing-timestamped-metrics-in-couchbase-with-spring\/","title":{"rendered":"Almacenamiento de m\u00e9tricas con fecha y hora en Couchbase con Spring"},"content":{"rendered":"<h2 id=\"storingtimestampedmetricsincouchbasewithspring\">Almacenamiento de m\u00e9tricas con fecha y hora en Couchbase con Spring<\/h2>\n<p>Tengo <a href=\"\/blog\/es\/intro-spring-data-couchbase\/\">anteriormente en el blog<\/a> una introducci\u00f3n a Spring Data Couchbase. Este post es una continuaci\u00f3n. Os mostrar\u00e9 c\u00f3mo utilizo los conectores sociales de Spring para almacenar datos procedentes de Twitter.<\/p>\n<h2 id=\"documentstructure\">Estructura del documento<\/h2>\n<p>Una pregunta que nos hacen a menudo sobre el desarrollo Java es: \"\u00bftenemos un ODM ( Object Document Mapper)?\". Mientras que actualmente no hay ODM Java proporcionado en nuestro SDK, hay uno con spring-data-couchbase. As\u00ed que vamos a hablar un poco sobre POJO y c\u00f3mo se mapean como JSON para ser almacenados en Couchbase. He aqu\u00ed un ejemplo pr\u00e1ctico con la clase TwitterUpdate:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/ldoguin\/934d63c0d0f8d124c184.js\"><\/script><\/p>\n<p>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\u00e1pidamente las b\u00e1sicas.<\/p>\n<h3 id=\"document\">@Documento<\/h3>\n<p>Su prop\u00f3sito es se\u00f1alar a spring-data-couchbase que la clase anotada ser\u00e1 almacenada como un documento Couchbase. Puede utilizar la opci\u00f3n \"expiry\" para establecer un TTL para todos estos objetos almacenados. El valor por defecto es 0, lo que significa que el objeto no expirar\u00e1.<\/p>\n<h3 id=\"id\">@Id<\/h3>\n<p>Su prop\u00f3sito es definir qu\u00e9 campo del documento se utilizar\u00e1 como clave para almacenarlo en Couchbase. Este campo es obligatorio y debe tener un m\u00e1ximo de 250 caracteres.<\/p>\n<h3 id=\"field\">@Campo<\/h3>\n<p>Su prop\u00f3sito es decir que el campo anotado ser\u00e1 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\u00f3n Field. Mira el campo clave como ejemplo.<\/p>\n<p>El POJO ya est\u00e1 listo. Para almacenarlo podr\u00eda usar el CouchbaseClient Bean tal y como hice en el post anterior. Pero la idea aqu\u00ed es crear un repositorio personalizado,.<\/p>\n<h2 id=\"springdatarepositories\">Repositorios de datos de Spring<\/h2>\n<p>Si has estado haciendo c\u00f3digo empresarial Java durante un tiempo o est\u00e1s familiarizado con Spring, entonces es casi seguro que esperas un Repositorio. Ahora mismo Spring Data Couchbase soporta el repositorio <a href=\"https:\/\/docs.spring.io\/spring-data\/commons\/docs\/current\/api\/org\/springframework\/data\/repository\/CrudRepository.html\">CRUDRepository<\/a>. Te da acceso a m\u00e9todos CRUD b\u00e1sicos (get, save, delete, update, findAll).<\/p>\n<p>Es f\u00e1cil configurar esto. Todo lo que tienes que hacer es crear una interfaz que extienda la interfaz CRUDRepository, a continuaci\u00f3n, utilizar gen\u00e9ricos para definir el tipo de objeto y la clave utilizada para almacenar tus Datos con este repositorio.<\/p>\n<pre>\r\n<code>package org.couchbase.advocacy.metrics.twitter;\r\nimport org.springframework.data.repository.CrudRepository;\r\npublic interface TwitterUpdateRepository extends CrudRepository<TwitterUpdate, String> {}\r\n<\/code><\/pre>\n<p>Para asegurarte de que esto funciona como se espera, y que la implementaci\u00f3n del repositorio ser\u00e1 generada autom\u00e1ticamente por Spring Framework en tiempo de ejecuci\u00f3n, aseg\u00farate de a\u00f1adir @EnableCouchbaseReposititories en tu clase Application. Esta implementaci\u00f3n de repositorio ser\u00e1 un Spring Bean y como tal ser\u00e1 inyectable.<\/p>\n<p>Si intentas usar los m\u00e9todos findAll, deleteAll o count, no funcionar\u00e1n. La raz\u00f3n es que dependen de una vista personalizada en el lado de Couchbase. Todos los dem\u00e1s m\u00e9todos funcionan porque se basan en la clave del documento. As\u00ed que vamos a crear la vista all para nuestro POJO. La convenci\u00f3n es que un find<strong>Algo<\/strong> a\u00f1adido a un repositorio se basar\u00e1 en el m\u00e9todo <strong>algo<\/strong> vista. As\u00ed que ahora tenemos que crear una vista llamada <strong>todos<\/strong> para la <strong>TwitterUpdate<\/strong> documento de dise\u00f1o. Esto es realmente sencillo. Si desea utilizar el m\u00e9todo de recuento, no se olvide de a\u00f1adir el recuento de reducir haciendo clic en uno de los incorporados en reducir:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/ldoguin\/ldoguin.name\/gh-pages\/images\/TwitDevView.png\"\/><\/p>\n<p>La siguiente pregunta que te puedes hacer es \u00bfC\u00f3mo 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'.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/ldoguin\/ldoguin.name\/gh-pages\/images\/byAccountView.png\" width=\"80%\"\/><\/p>\n<p>Usando la misma convenci\u00f3n que antes, podemos a\u00f1adir un m\u00e9todo findByAccount a nuestra interfaz TwitterUpdateRepository. Este m\u00e9todo tomar\u00e1 un objeto Query como par\u00e1metro. Esto tambi\u00e9n significa que necesitamos que la vista sea llamada byAccount:<\/p>\n<pre>\r\n<code>package org.couchbase.advocacy.metrics.twitter;\r\n\r\nimport com.couchbase.client.protocol.views.Query;\r\nimport org.springframework.data.repository.CrudRepository;\r\nimport java.util.Collection;\r\n\r\npublic interface TwitterUpdateRepository extends CrudRepository<TwitterUpdate, String> {\r\n\r\n    Collection<TwitterUpdate> findByAccount(Query query);\r\n\r\n}\r\n<\/code><\/pre>\n<p>Ahora, para utilizar este m\u00e9todo, debe definir el objeto de consulta adecuado. Es muy sencillo:<\/p>\n<pre>\r\n<code>    Query query = new Query();\r\n     query.setKey(\u201cCouchbase\u201d);\r\n     Collection<TwitterUpdate> tUpdates = twitterUpdateRepository.findByAccount(query);\r\n<\/code><\/pre>\n<p>Podr\u00eda usar el repositorio directamente en mi m\u00e9todo principal pero eso ser\u00eda malo, sem\u00e1nticamente malo. La llamada a la parte de 'persistencia' de tu aplicaci\u00f3n normalmente viene del lado del negocio. Pertenece a un Servicio.<\/p>\n<h2 id=\"springservices\">Servicios de primavera<\/h2>\n<p>Para crear un servicio Spring, a\u00f1ada una nueva clase y an\u00f3tela con la anotaci\u00f3n @Service. Es un poco como usar la anotaci\u00f3n @Component, pero con un significado extra-sem\u00e1ntico. De nuevo, los servicios son donde pones tu l\u00f3gica de negocio. Hay otras anotaciones especializadas como Controller o Repository. \u00bfPor qu\u00e9 esta separaci\u00f3n? Puede ser \u00fatil diferenciarlas cuando te diviertes con <a href=\"https:\/\/docs.spring.io\/spring\/docs\/current\/spring-framework-reference\/html\/aop.html\">AOP<\/a>.<\/p>\n<p><script src=\"https:\/\/gist.github.com\/ldoguin\/067475b75bc6cf7ed68c.js\"><\/script><\/p>\n<p>Puedo autowirear la clase Twitter porque la he declarado como un bean en mi clase Application y porque he a\u00f1adido la anotaci\u00f3n @ComponentScan. Todas sus propiedades est\u00e1n definidas en un fichero de propiedades al igual que lo estaban para la configuraci\u00f3n de mi Couchabse Server. Proviene del proyecto spring-social-twitter y me permitir\u00e1 ejecutar f\u00e1cilmente algunas consultas contra la API de Twitter. Esto me permite crear mi objeto Twitter Update y almacenarlo en Couchbase a trav\u00e9s del TwitterUpdateRepository.<\/p>\n<pre>\r\n<code>    @Bean\r\n    Twitter twitter() {\r\n        return new TwitterTemplate(twitterConsumerKey, twitterConsumerSecret,\r\n            twitterAccessToken, twitterAccessTokenSecret);\r\n        }\r\n<\/code><\/pre>\n<p>Algo interesante que hay que ver aqu\u00ed es c\u00f3mo se construye la clave del documento. Empieza con 'tw' para twitter, luego el nombre de la cuenta que he buscado y por \u00faltimo la marca de tiempo. Esto deber\u00eda permitirme hacer algunas consultas interesantes en el futuro, una vez que a\u00f1ada m\u00e9tricas de otras cuentas de Twitter u otras redes sociales. Me imagino un buen panel para visualizar las tendencias de todas estas cuentas.<\/p>\n<p>Espero que os haya servido de ayuda. A continuaci\u00f3n har\u00e9 otra entrada en el blog sobre un caso de uso algo m\u00e1s avanzado para Spring (Cach\u00e9, Validaci\u00f3n y programaci\u00f3n).<\/p>","protected":false},"excerpt":{"rendered":"<p>Storing Timestamped Metrics in Couchbase with Spring I have previously blogged an intro to Spring Data Couchbase. This post is a follow-up. I will show you how I use Spring social connectors to store data coming from Twitter. Document Structure [&hellip;]<\/p>","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[1424],"ppma_author":[9023],"class_list":["post-1878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-spring"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Storing Timestamped Metrics in Couchbase with Spring - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/storing-timestamped-metrics-in-couchbase-with-spring\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Storing Timestamped Metrics in Couchbase with Spring\" \/>\n<meta property=\"og:description\" content=\"Storing Timestamped Metrics in Couchbase with Spring I have previously blogged an intro to Spring Data Couchbase. This post is a follow-up. I will show you how I use Spring social connectors to store data coming from Twitter. Document Structure [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/storing-timestamped-metrics-in-couchbase-with-spring\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-03T15:51:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T08:01:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/raw.githubusercontent.com\/ldoguin\/ldoguin.name\/gh-pages\/images\/TwitDevView.png\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Storing Timestamped Metrics in Couchbase with Spring\",\"datePublished\":\"2015-02-03T15:51:47+00:00\",\"dateModified\":\"2024-09-12T08:01:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/\"},\"wordCount\":938,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"spring\"],\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/\",\"name\":\"Storing Timestamped Metrics in Couchbase with Spring - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-02-03T15:51:47+00:00\",\"dateModified\":\"2024-09-12T08:01:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Storing Timestamped Metrics in Couchbase with Spring\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Storing Timestamped Metrics in Couchbase with Spring - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/storing-timestamped-metrics-in-couchbase-with-spring\/","og_locale":"es_MX","og_type":"article","og_title":"Storing Timestamped Metrics in Couchbase with Spring","og_description":"Storing Timestamped Metrics in Couchbase with Spring I have previously blogged an intro to Spring Data Couchbase. This post is a follow-up. I will show you how I use Spring social connectors to store data coming from Twitter. Document Structure [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/storing-timestamped-metrics-in-couchbase-with-spring\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-02-03T15:51:47+00:00","article_modified_time":"2024-09-12T08:01:40+00:00","og_image":[{"url":"https:\/\/raw.githubusercontent.com\/ldoguin\/ldoguin.name\/gh-pages\/images\/TwitDevView.png","type":"","width":"","height":""}],"author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Storing Timestamped Metrics in Couchbase with Spring","datePublished":"2015-02-03T15:51:47+00:00","dateModified":"2024-09-12T08:01:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/"},"wordCount":938,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["spring"],"articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/","url":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/","name":"Storing Timestamped Metrics in Couchbase with Spring - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-02-03T15:51:47+00:00","dateModified":"2024-09-12T08:01:40+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/storing-timestamped-metrics-in-couchbase-with-spring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Storing Timestamped Metrics in Couchbase with Spring"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent es un metalero empoll\u00f3n que vive en Par\u00eds. Principalmente escribe c\u00f3digo en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programaci\u00f3n reactiva y otras cosas de moda. Tambi\u00e9n fue Developer Advocate de Clever Cloud y Nuxeo, donde dedic\u00f3 su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1878"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1878\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1878"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}