{"id":1892,"date":"2015-02-27T16:17:40","date_gmt":"2015-02-27T16:17:39","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1892"},"modified":"2020-02-15T14:55:40","modified_gmt":"2020-02-15T22:55:40","slug":"data-modelling-key-design","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/","title":{"rendered":"Couchbase key design and data modeling"},"content":{"rendered":"<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Last time we looked at building\u00a0<a title=\"manual secondary indexes\" href=\"manual-secondary-indexes\">manual secondary indexes<\/a>\u00a0in Couchbase: in effect, using Couchbase more for its key-value store properties than as a document store.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Continuing that key-value thread takes us to one of the most important questions in non-relational database modeling: how do we name our keys? Answer: we start with a key pattern. Here&#8217;s a closer look at how to take advantage of Couchbase with data modeling best practices.<\/p>\n<h2 style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; text-align: left;\">Three ways to build and use keys in Couchbase<\/h2>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">There are, broadly, three ways to create a key pattern in a NoSQL key-value store:<\/p>\n<ul style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">\n<li>deterministic: e.g. the email address someone uses to log into your system<\/li>\n<li>computer generated: e.g. a UUID<\/li>\n<li>some combination of the two: e.g. a UUID with a deterministic portion.<\/li>\n<\/ul>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Which key pattern we choose depends largely on how we plan to access the data.<\/p>\n<h2 style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; text-align: left;\">Deterministic<\/h2>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Let&#8217;s say we&#8217;re storing a user profile. Assuming no cookies, what are we guaranteed to know about our user after they&#8217;ve logged in?<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Well, one thing would be their login name.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">So, if we want to make life easy for ourselves in retrieving our user profile then we can key it with that person&#8217;s login name. Everything else we need to know about that person could be derived from their user profile, in one way or another.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Pretty quickly we&#8217;d bump up against a\u00a0problem:\u00a0for a user to change their login name we now have to either create a new user profile under a new key or create a look-up document. We could insist that our users can never change their login names but it&#8217;s unreasonable to make our users suffer unnecessarily.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">We could just decide it&#8217;s not that much effort to copy the profile data over to a new document under a new key. Alternatively, we could use something unrelated to the user&#8217;s data for our key.<\/p>\n<h2 style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; text-align: left;\">Computer generated<\/h2>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">The main downside of a determinstic\u00a0key is that, usually, it&#8217;ll be an element of the data that we&#8217;re storing.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">If we use something like a UUID\u00a0our users can update their email address, or whatever else we&#8217;re using as a login name, without us having to recreate their profile document under a fresh key.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">We can even get Couchbase to do key design for us using a counter.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Here&#8217;s how it works:<\/p>\n<ol style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">\n<li>Someone fills out the new account form and clicks &#8220;Submit&#8221;.<\/li>\n<li>We increment our counter document and it returns the next number up (e.g. 1001).<\/li>\n<li>We create a new user profile document keyed with 1001.<\/li>\n<li>We then create\u00a0<a href=\"manual-secondary-indexes\">look-up documents<\/a>\u00a0for things such as their login name, enabling us to do a simple look-up on the data we hold at login time.<\/li>\n<\/ol>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">We also get some side benefits from using this pattern to name our key, such as a counter telling us how many user profiles we&#8217;ve created during the application&#8217;s lifetime.<\/p>\n<h2 style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; text-align: left;\">Compound keys<\/h2>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">It&#8217;s when we combine both these methods that we can start to do really interesting things with Couchbase and how we use key names.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">We&#8217;ve looked before at\u00a0<a title=\"embed\" href=\"data-modelling-when-embed-or-refer\">when to embed data in one large document and when it&#8217;s best to refer<\/a> to other documents. When we choose to refer to data held in separate documents, we can build predictable key names from components that tell us something about what the document holds. <span style=\"font-weight: 400;\">With compound keys, we\u2019re looking for naturally <\/span><span style=\"font-weight: 400;\">occurring<\/span><span style=\"font-weight: 400;\"> patterns.<\/span><\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Let&#8217;s look at our user profile again. The main document is stored under the key\u00a0<em>1001<\/em>. We&#8217;re working on an ecommerce site so we also want to know all of the orders our customer has made. How do we do it? Simple: we store the list of orders under the key <em>1001::orders<\/em>.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Similarly, our system might judge what sort of marketing emails to send to customers based on their total spend with the site. Rather than have the system calculate that afresh each time, we instead do it the NoSQL way: we calculate it once and then store it for later retrieval under the key\u00a0<em>1001::orders::value<\/em>.<\/p>\n<h2 style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; text-align: left;\">Next time<\/h2>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">Next time I&#8217;ll be looking at how to model data most effectively for use with Couchbase views.<\/p>\n<p style=\"font-family: sans-serif, Arial, Verdana, 'Trebuchet MS'; line-height: 20.7999992370605px; text-align: left;\">\n","protected":false},"excerpt":{"rendered":"<p>Last time we looked at building\u00a0manual secondary indexes\u00a0in Couchbase: in effect, using Couchbase more for its key-value store properties than as a document store. Continuing that key-value thread takes us to one of the most important questions in non-relational database [&hellip;]<\/p>\n","protected":false},"author":18,"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":[],"ppma_author":[8982],"class_list":["post-1892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"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>Couchbase key design and data modeling - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.\" \/>\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\/data-modelling-key-design\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase key design and data modeling\" \/>\n<meta property=\"og:description\" content=\"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-27T16:17:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-15T22:55:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Revell, Lead Developer Advocate, EMEA, 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=\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\"},\"author\":{\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555\"},\"headline\":\"Couchbase key design and data modeling\",\"datePublished\":\"2015-02-27T16:17:39+00:00\",\"dateModified\":\"2020-02-15T22:55:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\"},\"wordCount\":715,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\",\"name\":\"Couchbase key design and data modeling - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-02-27T16:17:39+00:00\",\"dateModified\":\"2020-02-15T22:55:40+00:00\",\"description\":\"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#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\/data-modelling-key-design\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase key design and data modeling\"}]},{\"@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\/6c3060a94353df62a71d4672b3454555\",\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"caption\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\"},\"description\":\"Matthew Revell is a Lead Dev Advocate, EMEA Couchbase. He developed a global strategy for putting Couchbase front in the minds of the product's developers.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/matthew-revell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase key design and data modeling - The Couchbase Blog","description":"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.","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\/data-modelling-key-design\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase key design and data modeling","og_description":"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.","og_url":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-02-27T16:17:39+00:00","article_modified_time":"2020-02-15T22:55:40+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/"},"author":{"name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555"},"headline":"Couchbase key design and data modeling","datePublished":"2015-02-27T16:17:39+00:00","dateModified":"2020-02-15T22:55:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/"},"wordCount":715,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/","url":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/","name":"Couchbase key design and data modeling - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-02-27T16:17:39+00:00","dateModified":"2020-02-15T22:55:40+00:00","description":"Learn the ins and outs of Couchbase key design as well as NoSQL data modeling best practices in this short developer tutorial.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/data-modelling-key-design\/#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\/data-modelling-key-design\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase key design and data modeling"}]},{"@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\/6c3060a94353df62a71d4672b3454555","name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317","url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","caption":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase"},"description":"Matthew Revell is a Lead Dev Advocate, EMEA Couchbase. He developed a global strategy for putting Couchbase front in the minds of the product's developers.","url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-revell\/"}]}},"authors":[{"term_id":8982,"user_id":18,"is_guest":0,"slug":"matthew-revell","display_name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","author_category":"","last_name":"Revell","first_name":"Matthew","job_title":"","user_url":"","description":"Matthew Revell is a Lead Dev Advocate, EMEA Couchbase. He developed a global strategy for putting Couchbase front in the minds of the product's developers."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1892","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\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1892"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=1892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1892"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}