{"id":8463,"date":"2020-04-29T09:00:34","date_gmt":"2020-04-29T16:00:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8463"},"modified":"2020-04-29T09:01:29","modified_gmt":"2020-04-29T16:01:29","slug":"the-series-on-time-series-in-couchbase-episode-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/","title":{"rendered":"The Series on Time Series (in Couchbase): Episode 1"},"content":{"rendered":"<h2>What Is This About<\/h2>\n<p>So, you have a time series use case?\u00a0 So do I, and this blog article is the proof of it.<\/p>\n<p>When I learn about a new subject, I like using the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Method_of_loci\" target=\"_blank\" rel=\"noopener noreferrer\">method of loci<\/a> to memorize and connect the new concepts.\u00a0 The method uses a familiar place (your house, for instance) you walk through (mentally) and fill with the things you want to remember.\u00a0 If I want my memory to hold my schedule for tomorrow, I can start at the entrance and &#8220;hang&#8221; my 09:00 doctor&#8217;s appointment next to my huge colorful sombrero.\u00a0 As I &#8220;walk&#8221; into the kitchen, I will see my 10:30 Zoom call &#8220;frying&#8221; on top of a skillet with scrambled eggs.\u00a0 The weird imagery helps remember things better: our brains cling to the unusual.\u00a0 Interestingly enough, this example is a time series, too: each event on my schedule happens at a certain time, and each event has certain properties (name, place, etc.).<\/p>\n<p>Let&#8217;s continue this &#8220;walk through a house&#8221; analogy and try to make the new time series knowledge stick.<\/p>\n<h2>The <span style=\"color: #339966\">Green<\/span> Room<\/h2>\n<p><span style=\"color: #339966\">Green<\/span> is a happy color: nature, renewal, growth, fresh ideas.\u00a0 Our definition of time series belongs in the green room.<\/p>\n<p>When your child has a fever, and you take his or her body temperature every <strong>hour<\/strong>, you have a <strong>series<\/strong> of measurements over time.\u00a0 When you clandestinely attach a GPS tracker to a criminal&#8217;s car, you get a <strong>series<\/strong> of locations where the car stops over <strong>weeks<\/strong> or <strong>months<\/strong>.\u00a0 How about a\u00a0 <a href=\"https:\/\/www.raspberrypi.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Raspberry Pi<\/a> project to collect temperature and humidity <strong>readings<\/strong> once a <strong>second<\/strong> that your kid built for a school science fair?\u00a0 Have it installed in your cannabis farm to <strong>stream<\/strong> this data to your Couchbase cluster!\u00a0 You can then use the data with a <a href=\"https:\/\/www.couchbase.com\/products\/mobile\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase Mobile<\/a> app to assure the optimal conditions for the best harvest of this important crop.<\/p>\n<p>As you can see, the time series use cases extend well beyond the old boring stock ticker and server logs examples.\u00a0 They still boil down to a <strong>list<\/strong> (sequence, series) <strong>of values<\/strong> (readings, measurements, data points) <strong>collected<\/strong> <strong>over time<\/strong>.\u00a0 Time series use cases are common nowadays in consumer products, industrial technologies, and business services.\u00a0 This popularity inspired the appearance of <a href=\"https:\/\/db-engines.com\/en\/ranking\/time+series+dbms\" target=\"_blank\" rel=\"noopener noreferrer\">time series databases<\/a>, which include different optimizations for working specifically with time series data.\u00a0 E.g., we provide <a href=\"https:\/\/github.com\/couchbaselabs\/cbprometheus_python\" target=\"_blank\" rel=\"noopener noreferrer\">Prometheus exporter<\/a> (written in Python) to convert Couchbase Server metrics into <a href=\"https:\/\/prometheus.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Prometheus<\/a> time series format, so you can build your monitoring dashboards with <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Grafana<\/a>.<\/p>\n<p>We are leaving our <span style=\"color: #339966\">green<\/span> room with a <a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Persistence_of_Memory\" target=\"_blank\" rel=\"noopener noreferrer\">melted clock<\/a> hanging from the ceiling (it needs to be weird, right?) and a melting white board with a series of distorted time-stamped measurements as an example of the <strong>time series <\/strong>data from a summer day in Arizona (in degrees Fahrenheit):<\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">2019-07-27 07:11:22, temperature=90, humidity=\"what humidity?\", feeling=\"sweaty\"\r\n2019-07-27 10:21:22, temperature=98, humidity=\"this word again...\", feeling=\"the pain\"\r\n2019-07-27 12:34:56, temperature=107, humidity=\"gotta look up this word in a dictionary\", feeling=\"desperate\"\r\n2019-07-27 15:00:27, temperature=120, feeling=\"boiling inside, fried on the outside\"\r\n2019-07-27 15:32:15, temperature=, feeling=\"confused\", thermometer-status=\"melted\"\r\n<\/pre>\n<h2>The <span style=\"color: #ff6600\">Orange<\/span> Room<\/h2>\n<p><span style=\"color: #ff6600\">Orange<\/span> is the color that attracts our attention; it usually brings the feelings of enthusiasm and warmth.\u00a0 So, it is a good place to put the details of how we work with time series data in Couchbase Server.<\/p>\n<h3><span style=\"color: #ff6600\">W<\/span>rite!<\/h3>\n<p>Be prepared to handle a lot of writes!\u00a0 Real-life use cases involving time series data produce thousands of readings &#8211; per hour, per minute, per second.\u00a0 When you multiply it by the number of devices or applications generating the data, you will quickly reach millions of new writes per day.\u00a0 Couchbase Server optimizes data ingestion with its <a href=\"https:\/\/docs.couchbase.com\/server\/current\/introduction\/intro.html#mem-first-archi\" target=\"_blank\" rel=\"noopener noreferrer\">memory-first<\/a>, asynchronous architecture.\u00a0 JSON documents are compressed in memory, on disk, and on the wire.<\/p>\n<p>Couchbase Server handles all types of writes &#8211; inserts, updates, and upserts (insert if the key does not exist; otherwise, update) &#8211; with equal efficiency.\u00a0 You can further optimize your updates with our sub-document operations available for every supportable SDK (e.g., <a href=\"https:\/\/docs.couchbase.com\/java-sdk\/3.0\/howtos\/subdocument-operations.html\" target=\"_blank\" rel=\"noopener noreferrer\">Java SDK sub-document API<\/a>).<\/p>\n<h3><span style=\"color: #ff6600\">A<\/span>ggregate!<\/h3>\n<p>When you take multiple collected measurements and roll them up into a single JSON document, you aggregate your data.\u00a0 It is a typical step to optimize the storage of time series data.\u00a0 This can happen <strong>before<\/strong> inserting the measurements in a database (pre-aggregation): your application or your data ingestion software, like StreamSets Data Collector, can do the job.\u00a0 Couchbase Server <a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">Eventing service<\/a> can roll up time series values <strong>after<\/strong> they have been added to a bucket.\u00a0 In this case, a JavaScript function executes as a database OnUpdate trigger to save values from <strong>multiple JSON documents<\/strong> into an array of values in a <strong>single JSON document<\/strong>.\u00a0 Either approach will get you from, for example, <strong>60 documents<\/strong> of per-second readings (see below)<\/p>\n<pre class=\"toolbar:2 lang:js decode:true\">key = \"sensor::temp-press::2020-01-02T12:34:00\"\r\n{\r\n  \"ts\": \"2020-01-02 12:34:00\",\r\n  \"sensor\": \"tps-001\",\r\n  \"temperature\": 112.4,\r\n  \"pressure\": 21.7\r\n}\r\n\r\nkey = \"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  \"pressure\": 22.8\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\r\n}<\/pre>\n<p>to a <strong>single<\/strong> document with all the readings, like the one below:<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">key = \"sensor::tps-001::1577968440\"\r\n{\r\n  \"values\":\r\n  {\r\n    \"t\": [112.4, 110.8, ... null, 113.1],\r\n    \"p\": [21.7, 21.2, ... 22.8, 22.5]\r\n  },\r\n  \"type\": \"temp-press\",\r\n  \"schema\": \"1.3.5\"\r\n}<\/pre>\n<p>Apart from eliminating duplicate data (timestamps, long JSON field\/attribute names), we have also made the following changes:<\/p>\n<ul>\n<li>replaced ISO timestamp with epoch value in the document key.\u00a0 The epoch value corresponds to the minute (2020-01-02 12:34), for which we collected per-second readings.<\/li>\n<li>added sensor name to the document key.\u00a0 This way we can query the values for the specific sensor using key-value operations, which is always the fastest way to work with documents.<\/li>\n<li>listed temperature and pressure data in 60-element arrays, one measurement per second;<\/li>\n<li>added JSON schema version of the document.<\/li>\n<\/ul>\n<p>The flexibility of JSON format makes it easy to get your first version out quickly (in the spirit of &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Worse_is_better\" target=\"_blank\" rel=\"noopener noreferrer\">Worse is better<\/a>&#8221; principle) and evolve your document schema as your application matures.\u00a0 Specialized time series databases are much more rigid in this respect.\u00a0 However, it is a best practice to keep track of the schema version in your documents.\u00a0 This helps to ensure backward compatibility in your applications.\u00a0 It also allows you to update the documents to a new schema by running a N1QL <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/update.html\" target=\"_blank\" rel=\"noopener noreferrer\">UPDATE<\/a> query.<\/p>\n<h3><span style=\"color: #ff6600\">R<\/span>ead!<\/h3>\n<p>It is time to do something useful with our time series data.\u00a0 Here are the options that Couchbase data platform offers:<\/p>\n<ul>\n<li>Key-value reads in less than a millisecond is what Couchbase Server does great, all day long.\u00a0 After all, one of the main reasons we aggregated our data was to get it easily in a single read operation.<\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-intro\/queriesandresults.html\" target=\"_blank\" rel=\"noopener noreferrer\">SQL queries<\/a> for your JSON data.\u00a0 N1QL language purposely inherited SQL syntax to make it easy for you to learn.<\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/current\/fts\/fts-performing-searches.html\" target=\"_blank\" rel=\"noopener noreferrer\">Full text search<\/a> is another way to work with data that&#8217;s available with Couchbase Server.\u00a0 Depending on your use case, the search can be a better alternative for language-aware, numeric range, date range, and geospatial queries.\u00a0 Better yet, you can <a href=\"https:\/\/www.couchbase.com\/blog\/n1ql-and-search-how-to-leverage-fts-index-in-n1ql-query\/\" target=\"_blank\" rel=\"noopener noreferrer\">combine search and N1QL<\/a> in a single query.<\/li>\n<li>Analytics is a natural fit for time series data.\u00a0 As part of our data platform, we offer <a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/primer-beer.html\" target=\"_blank\" rel=\"noopener noreferrer\">Analytics service<\/a> that allows you to obtain a wide variety of business insights from your data.\u00a0 Couchbase Analytics runs as part of the same cluster where your data resides, so there is no ETL (Extract, Transform, Load) operations necessary.\u00a0 You execute efficient parallel queries against up-to-date shadow copies of the data.<\/li>\n<li>Couchbase also plays nice with others.\u00a0 We offer supported big data connectors for popular systems like <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Spark<\/a>, <a href=\"https:\/\/docs.couchbase.com\/kafka-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Kafka<\/a>, and <a href=\"https:\/\/docs.couchbase.com\/elasticsearch-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Elasticsearch<\/a>.<\/li>\n<\/ul>\n<h3><span style=\"color: #ff6600\">M<\/span>ove On!<\/h3>\n<p>Sooner or later, it will be time to move on.\u00a0 How long do you need to keep your data?\u00a0 We always ask this question when we help our customers size their clusters.\u00a0 With Couchbase, it is easy to scale up or down.\u00a0 An online gaming company may want to start with a few extra nodes when launching a new game.\u00a0 On the other hand, a startup on a tight budget may have to be extra vigilant about how much data they keep around.<\/p>\n<p>How can we delete data in Couchbase?<\/p>\n<ul>\n<li>Set document expiration (also known as TTL, time to live).\u00a0 TTL values are part of the document metadata: if TTL is zero, document will not expire.\u00a0 A value greater than zero is the number of seconds, after which the document will be marked as deleted.\u00a0 TTL can be set and updated via SDK methods or (as of Couchbase Server 6.5.1) via <a href=\"https:\/\/www.couchbase.com\/blog\/how-to-manage-ttl-with-couchbase-n1ql\/\" target=\"_blank\" rel=\"noopener noreferrer\">N1QL query<\/a>.<\/li>\n<li>Set <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/buckets-memory-and-storage\/expiration.html\" target=\"_blank\" rel=\"noopener noreferrer\">TTL on a bucket<\/a>.\u00a0 All new documents entering the bucket will get the TTL assigned, unless it&#8217;s already set.<\/li>\n<li>Delete documents via N1QL query or Eventing function.\u00a0 Eventing functions can also be executed by <a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-timers.html\" target=\"_blank\" rel=\"noopener noreferrer\">timers<\/a> .<\/li>\n<li>Flush or drop the entire bucket.<\/li>\n<\/ul>\n<p>Prior to deleting data from Couchbase cluster, you may want to archive or share it for some of the reasons below:<\/p>\n<ul>\n<li>Archive documents to another Couchbase cluster by using <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/clusters-and-availability\/xdcr-overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">XDCR<\/a> (cross data center replication).\u00a0 The documents in the source bucket can have TTLs, which can be removed before entering the destination bucket.\u00a0 This option is configurable for XDCR replications.<\/li>\n<li>Archive documents to cheaper storage system (e.g., AWS S3) for longer retention.<\/li>\n<li>Move documents to a different system for further analysis (e.g., a data lake for long-term scientific research).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8581\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/arrow-squiggly.png\" alt=\"\" width=\"100\" height=\"72\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/arrow-squiggly.png 100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/arrow-squiggly-20x14.png 20w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\" \/><\/p>\n<p>As we are leaving our <span style=\"color: #ff6600\">orange<\/span> room, let&#8217;s keep this <span style=\"color: #ff6600\">W<\/span>.<span style=\"color: #ff6600\">A<\/span>.<span style=\"color: #ff6600\">R<\/span>.<span style=\"color: #ff6600\">M<\/span>. feeling (Write, Aggregate, Read, Move on) in our memory.\u00a0 The life cycle of the time series data is shown with these capital letters &#8211; one letter per each wall &#8211; and the squiggly arrows (like the one above) connecting them.<\/p>\n<h2>More Rooms Coming Soon<\/h2>\n<p>Well, <span style=\"color: #ffff00;background-color: #bebebe\"><strong>yellow<\/strong><\/span> is the color of hope, but it&#8217;s very hard to read on a white background.\u00a0 I&#8217;ll use it here once as a symbol of my hope to share the Episode 2 of this Series on Time Series with you soon.\u00a0 Thank you for your time!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8580\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/arrow-heart.png\" alt=\"\" width=\"100\" height=\"85\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/arrow-heart.png 100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/arrow-heart-20x17.png 20w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What Is This About So, you have a time series use case?\u00a0 So do I, and this blog article is the proof of it. When I learn about a new subject, I like using the method of loci to memorize [&hellip;]<\/p>\n","protected":false},"author":1414,"featured_media":8593,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1819,2389],"tags":[1447],"ppma_author":[9081],"class_list":["post-8463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-data-modeling","category-solutions","tag-data-modeling"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Series on Time Series (in Couchbase): Episode 1 - 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\/the-series-on-time-series-in-couchbase-episode-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Series on Time Series (in Couchbase): Episode 1\" \/>\n<meta property=\"og:description\" content=\"What Is This About So, you have a time series use case?\u00a0 So do I, and this blog article is the proof of it. When I learn about a new subject, I like using the method of loci to memorize [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-29T16:00:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-29T16:01:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"427\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\"},\"author\":{\"name\":\"Oleg Kuzmin, Solutions Architect, Databricks\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/567ed489e7c498f0b9ff0014374c2bcd\"},\"headline\":\"The Series on Time Series (in Couchbase): Episode 1\",\"datePublished\":\"2020-04-29T16:00:34+00:00\",\"dateModified\":\"2020-04-29T16:01:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\"},\"wordCount\":1559,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg\",\"keywords\":[\"Data Modeling\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Data Modeling\",\"Solutions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\",\"name\":\"The Series on Time Series (in Couchbase): Episode 1 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg\",\"datePublished\":\"2020-04-29T16:00:34+00:00\",\"dateModified\":\"2020-04-29T16:01:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg\",\"width\":640,\"height\":427,\"caption\":\"Time Series\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Series on Time Series (in Couchbase): Episode 1\"}]},{\"@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\/567ed489e7c498f0b9ff0014374c2bcd\",\"name\":\"Oleg Kuzmin, Solutions Architect, Databricks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3c430b3fd08e47e71c288418a9321d65\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g\",\"caption\":\"Oleg Kuzmin, Solutions Architect, Databricks\"},\"sameAs\":[\"https:\/\/databricks.com\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/oleg-kuzmincouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Series on Time Series (in Couchbase): Episode 1 - 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\/the-series-on-time-series-in-couchbase-episode-1\/","og_locale":"en_US","og_type":"article","og_title":"The Series on Time Series (in Couchbase): Episode 1","og_description":"What Is This About So, you have a time series use case?\u00a0 So do I, and this blog article is the proof of it. When I learn about a new subject, I like using the method of loci to memorize [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-04-29T16:00:34+00:00","article_modified_time":"2020-04-29T16:01:29+00:00","og_image":[{"width":640,"height":427,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg","type":"image\/jpeg"}],"author":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/"},"author":{"name":"Oleg Kuzmin, Solutions Architect, Databricks","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/567ed489e7c498f0b9ff0014374c2bcd"},"headline":"The Series on Time Series (in Couchbase): Episode 1","datePublished":"2020-04-29T16:00:34+00:00","dateModified":"2020-04-29T16:01:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/"},"wordCount":1559,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg","keywords":["Data Modeling"],"articleSection":["Application Design","Best Practices and Tutorials","Data Modeling","Solutions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/","url":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/","name":"The Series on Time Series (in Couchbase): Episode 1 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg","datePublished":"2020-04-29T16:00:34+00:00","dateModified":"2020-04-29T16:01:29+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/04\/jason-coudriet-eQux_nmDew0-unsplash.jpg","width":640,"height":427,"caption":"Time Series"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/the-series-on-time-series-in-couchbase-episode-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Series on Time Series (in Couchbase): Episode 1"}]},{"@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\/567ed489e7c498f0b9ff0014374c2bcd","name":"Oleg Kuzmin, Solutions Architect, Databricks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3c430b3fd08e47e71c288418a9321d65","url":"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1bbfe682ab4a0341e520c779f47ba96d7930bb09c6e881f66c953e13579ff10f?s=96&d=mm&r=g","caption":"Oleg Kuzmin, Solutions Architect, Databricks"},"sameAs":["https:\/\/databricks.com"],"url":"https:\/\/www.couchbase.com\/blog\/author\/oleg-kuzmincouchbase-com\/"}]}},"authors":[{"term_id":9081,"user_id":1414,"is_guest":0,"slug":"oleg-kuzmincouchbase-com","display_name":"Oleg Kuzmin, Sr. Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0f297a537c749f924978fb4b8fd8d25dd01526af81550a9df5403c58cb300f06?s=96&d=mm&r=g","author_category":"","last_name":"Kuzmin, Sr. Solutions Engineer, Couchbase","first_name":"Oleg","job_title":"","user_url":"https:\/\/couchbase.com","description":"I help companies succeed in the Digital Economy through adoption of the best NoSQL data platform - Couchbase!"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8463","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\/1414"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=8463"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/8463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/8593"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=8463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=8463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=8463"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=8463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}