{"id":10560,"date":"2021-02-02T05:16:15","date_gmt":"2021-02-02T13:16:15","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10560"},"modified":"2024-09-12T02:01:51","modified_gmt":"2024-09-12T09:01:51","slug":"recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/","title":{"rendered":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6"},"content":{"rendered":"<h2>Where does it begin&#8230;<\/h2>\n<p>IOT, Edge devices and NoSQL are all technologies that have increased in popularity in recent years. Allowing people to comfortably create interaction heavy applications, without the worry of stability and availability. One problem with the freedom and flexibility of these new technologies is maintaining the cost. Aggregating documents and reducing your data footprint is a common use case for write heavy and analytical applications. Couchbase 6.6 provides us with even more tools to help you lower your TCO. Let\u2019s look into where the problem started and how we can use the Couchbase toolset to resolve it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-10567 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/CostReduction-300x175.png\" alt=\"\" width=\"300\" height=\"175\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/CostReduction-300x175.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/CostReduction-768x448.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/CostReduction-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/CostReduction.png 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<h2>Applications and Interactions<\/h2>\n<p>I remember the time when applications used to be simple, when they set out to achieve a simple goal. For example, a retail application enabling the shopping process to be digitally available, stopping people having to travel to their local retailer to carry out the same task. Films and Music being made available at the click of a button, instead of having to buy CD\u2019s or DVD\u2019s from a media store. The initial digital transformation of almost everything was a huge leap in convenience of the consumer and gave more time back to everybody, and for a while this change was enough to keep us happy. Any technical issues would appear minor because they were overshadowed by the amount of convenience that it provided.<\/p>\n<p>However, these days, a new retailer \u2018going digital\u2019 isn\u2019t really anything to shout about, those expectations are already there, what consumers now care about, is the small stuff that was disregarded before. Those previously minor technical issues will now be the \u2018make or break\u2019 for any successful application. As digital transformation embeds itself into businesses everyday activities, expectations from these applications and systems has risen, and will continue to do so.<\/p>\n<p>&nbsp;<\/p>\n<h2>Databases<\/h2>\n<p>As we develop software to meet this high expectation of user experience, we provide more interaction between the end user and the application. More complex applications come hand and hand with more interactions. This ever-increasing number of interactions, will need an ever-increasing amount of storage to record them, and this is where our database\u2019s fit in.<\/p>\n<p>Like the applications themselves, there was a time where relational databases would be a perfect fit to store the information of pretty much every system, and this satisfied us. However, like the expectations of the user\u2019s experience had started to rise, so did the expectations of the underlying database. We are now storing an exponential amount of data as time goes by and we started to see where the relational database had its flaws. More data means more storage and essentially \u2018More Database\u2019, those that are familiar with relational databases would know that this isn\u2019t as simple as typing ++. To start with, making any adjustments to a relational database would often come with down time, downtime in today\u2019s world just isn\u2019t acceptable anymore. Scaling out relational nodes isn\u2019t easily achievable and so we were limited to scaling up, the problem is that scaling up became costly and it also has its own limitations. You would also expect linearly increased performance given the more compute power and storage that you scaled; however, this is not the case. To top it off, the enforced schema approach meant that the overall architecture was rigid, this made any changes to the underlying dataset hard to make. Overall, the TCO for Relational systems was unmaintainable, and in the world where technology is changing at faster and faster rates, you can see why the relational database needed its replacement for these high interactive applications.<\/p>\n<p>The idea of NoSQL Technologies started to come into the picture. NoSQL embodied a Schema less, Scalable, distributed approach to storing its information. It provided the ability to scale the database both out and up without the need for downtime. There were no restrictions around the dataset allowing rapid and flexible development. The overall TCO for these databases is a lot smaller and maintainable, suiting the applications which require that high level of interaction.<\/p>\n<p>&nbsp;<\/p>\n<h2>IOT and Edge Devices<\/h2>\n<p>One major introduction into the software world was the sudden boom of IOT and Edge Devices. These devices normally consist of both a combination of smaller hardware and software and can act as entry points into the underlying technology stack. One major example of these devices is the use of sensors and being able to continuously record data which can be fed back into the database. NoSQL databases allowed for these devices to multiply and grow without the worry of scaling, rigidity and high availability, which a relational model would struggle provide. In many of these cases the application would encompass a high level of write operations and the information would be analysed at a later stage.<\/p>\n<p>&nbsp;<\/p>\n<h2>Use Case<\/h2>\n<p>Now, although the ability to comfortably scale is a sigh of relief for most DBA\u2019s, we quickly run into a common problem which everybody is trying to solve, increasing cost. The flexibility and freedom to store as much data as possible also has its downsides to it, as a result the size of these clusters can quickly get out of control.<\/p>\n<p>If we take a Formula 1 racing team during a race for example, they could have sensors built into the car recording statistics down to the millisecond, they could have hundreds or even thousands of these sensors all around the car throughout each race. Although the individual readings would be small, the sheer number of documents which are being stored will be in the millions, and that\u2019s me being conservative! Once they have all of this data, they need to run near real time analytics, the result of these analytics will allow the team to make adjustments throughout the race and improve as they go. The problem doesn\u2019t come during any of the above scenario, but when you look at the cluster supporting this, you can see how the amount of data and the TCO for this database can get quickly out of hand. For this Formula 1 team however, it turns out, that after 15 minutes, the granularity of the sensor readings in milliseconds isn\u2019t as necessary anymore and instead they are happy to store averages by the second instead, after an hour, they are happy to store averages by the minute, this process can be repeated as much as is required.<\/p>\n<p>For example if we look at a set of documents which contain multiple temperature and pressure readings, we could get a set of documents which look like this<\/p>\n<pre class=\"lang:default decode:true\">key = \"sensor::temp-press::2020-01-02T12:34:01\"\r\n{\r\n  \"ts\": \"2020-01-02 12:34:01\",\r\n  \"sensor\": \"tps-001\",\r\n  \"temperature\": 110.8,\r\n  \"pressure\": 21.2\r\n}\r\n\r\n...\r\n\r\nkey = \"sensor::temp-press::2020-01-02T12:34:58\"\r\n{\r\n  \"ts\": \"2020-01-02 12:34:58\",\r\n  \"sensor\": \"tps-001\",\r\n  \"temperature\": 112.7,\r\n  \"pressure\": 21.6\r\n}\r\n\r\nkey = \"sensor::temp-press::2020-01-02T12:34:59\"\r\n{\r\n  \"ts\": \"2020-01-02 12:34:59\",\r\n  \"sensor\": \"tps-001\",\r\n  \"temperature\": 113.1,\r\n  \"pressure\": 22.5<\/pre>\n<p>To reduce the dataset and compress the information that we have, we could aggregate the results into arrays of much smaller documents<\/p>\n<pre class=\"lang:default decode:true\">key = \"sensor::tps-001::2020-01-02T12:34\"\r\n{\r\n  \"values\":\r\n  {\r\n    \"t\": [110.8, ... 112.7, 113.1],\r\n    \"p\": [21.2, ... 21.6, 22.5]\r\n  },\r\n  \"type\": \"temp-press\"\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Couchbase introduced the eventing service back in version 5.5 which allows applications to act on the underlying data in the system, with JavaScript programming logic. There is a handy tool in eventing called timers which can delay the execution of the logic. For the Formula 1 team they could utilise these timers and repeatedly call the eventing functions to aggregate the documents in a certain time frame, however prior to version 6.6 this became difficult to repeat. Many of my customers have utilised Linux\u2019 cron jobs to schedule such tasks and enable the eventing functions to be executed at regular intervals by triggering these through external REST API calls.<\/p>\n<p>Couchbase Version 6.6 introduced the recursive timer. Allowing users to create timers within the call back of another timer. At the point of execution, the logic would aggregate the documents within a given time frame and then before exiting, spin up another timer to repeat the process after a period of time.<\/p>\n<p>Although the feature sounds trivial, it greatly simplifies the process of recursion and removes the need to utilise external technologies to achieve something which could be done internally.<\/p>\n<p>So, you may not feel the need for document aggregation as you get your feet off the ground with a NoSQL Database. For write heavy use cases or even just when the overall TCO starts to rise, you\u2019ll be looking for any ideas and answers you can find to help reduce the amount of data you are storing, hopefully this blog post and the new recursive timer can be a part of your solution.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Where does it begin&#8230; IOT, Edge devices and NoSQL are all technologies that have increased in popularity in recent years. Allowing people to comfortably create interaction heavy applications, without the worry of stability and availability. One problem with the freedom [&hellip;]<\/p>\n","protected":false},"author":74466,"featured_media":10566,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1819,7666,2273],"tags":[],"ppma_author":[9167],"class_list":["post-10560","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-data-modeling","category-edge-computing","category-eventing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6 - 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\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6\" \/>\n<meta property=\"og:description\" content=\"Where does it begin&#8230; IOT, Edge devices and NoSQL are all technologies that have increased in popularity in recent years. Allowing people to comfortably create interaction heavy applications, without the worry of stability and availability. One problem with the freedom [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-02T13:16:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T09:01:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daniel Bull, Associate Solutions Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Bull, Associate Solutions Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/\"},\"author\":{\"name\":\"Daniel Bull, Associate Solutions Engineer\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/7f9d5e0c7963a172db12fb5e5e2583e1\"},\"headline\":\"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6\",\"datePublished\":\"2021-02-02T13:16:15+00:00\",\"dateModified\":\"2024-09-12T09:01:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/\"},\"wordCount\":1389,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/02\\\/Documents-Aggregation.jpg\",\"articleSection\":[\"Couchbase Server\",\"Data Modeling\",\"Edge computing\",\"Eventing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/\",\"name\":\"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/02\\\/Documents-Aggregation.jpg\",\"datePublished\":\"2021-02-02T13:16:15+00:00\",\"dateModified\":\"2024-09-12T09:01:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/02\\\/Documents-Aggregation.jpg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/02\\\/Documents-Aggregation.jpg\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\\\/7f9d5e0c7963a172db12fb5e5e2583e1\",\"name\":\"Daniel Bull, Associate Solutions Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/07\\\/daniel-bull-couchbase-engineering.jpeg1a793e281f03204d89cd07cc2163a58e\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/07\\\/daniel-bull-couchbase-engineering.jpeg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2021\\\/07\\\/daniel-bull-couchbase-engineering.jpeg\",\"caption\":\"Daniel Bull, Associate Solutions Engineer\"},\"description\":\"Daniel Bull is an Associate Solutions Engineer at Couchbase\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/daniel-bull-00a102b5\\\/\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/daniel-bull\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6 - 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\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/","og_locale":"en_US","og_type":"article","og_title":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6","og_description":"Where does it begin&#8230; IOT, Edge devices and NoSQL are all technologies that have increased in popularity in recent years. Allowing people to comfortably create interaction heavy applications, without the worry of stability and availability. One problem with the freedom [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-02-02T13:16:15+00:00","article_modified_time":"2024-09-12T09:01:51+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg","type":"image\/jpeg"}],"author":"Daniel Bull, Associate Solutions Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Daniel Bull, Associate Solutions Engineer","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/"},"author":{"name":"Daniel Bull, Associate Solutions Engineer","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7f9d5e0c7963a172db12fb5e5e2583e1"},"headline":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6","datePublished":"2021-02-02T13:16:15+00:00","dateModified":"2024-09-12T09:01:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/"},"wordCount":1389,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg","articleSection":["Couchbase Server","Data Modeling","Edge computing","Eventing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/","url":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/","name":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg","datePublished":"2021-02-02T13:16:15+00:00","dateModified":"2024-09-12T09:01:51+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Documents-Aggregation.jpg","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/recursive-timers-for-document-aggregation-and-lower-tco-with-couchbase-server-6-6\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Recursive Timers for Document Aggregation and Lower TCO with Couchbase Server 6.6"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/7f9d5e0c7963a172db12fb5e5e2583e1","name":"Daniel Bull, Associate Solutions Engineer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/07\/daniel-bull-couchbase-engineering.jpeg1a793e281f03204d89cd07cc2163a58e","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/07\/daniel-bull-couchbase-engineering.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/07\/daniel-bull-couchbase-engineering.jpeg","caption":"Daniel Bull, Associate Solutions Engineer"},"description":"Daniel Bull is an Associate Solutions Engineer at Couchbase","sameAs":["https:\/\/www.linkedin.com\/in\/daniel-bull-00a102b5\/"],"url":"https:\/\/www.couchbase.com\/blog\/author\/daniel-bull\/"}]}},"acf":[],"authors":[{"term_id":9167,"user_id":74466,"is_guest":0,"slug":"daniel-bull","display_name":"Daniel Bull, Associate Solutions Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/07\/daniel-bull-couchbase-engineering.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/07\/daniel-bull-couchbase-engineering.jpeg"},"0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/10560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/74466"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=10560"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/10560\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/10566"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=10560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=10560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=10560"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=10560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}