{"id":7782,"date":"2019-10-29T07:19:51","date_gmt":"2019-10-29T14:19:51","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7782"},"modified":"2019-10-25T14:51:30","modified_gmt":"2019-10-25T21:51:30","slug":"is-no-processing-better-than-some-processing","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/","title":{"rendered":"Is No Processing Better Than Some Processing?"},"content":{"rendered":"<p>Let\u2019s do a little thought experiment.<\/p>\n<p>Yeah, I know, thinking. Who wants to do that?<\/p>\n<p>Wait!<\/p>\n<p>Before you tune me out and browse on to the next post on sexy indexes&#8230;<\/p>\n<p>At least give me a couple of minutes.<\/p>\n<p>Let\u2019s say you have a website.<\/p>\n<p>Well, not just any website&#8230;<\/p>\n<p>That\u2019s a little too generic.<\/p>\n<p>OK, let\u2019s say you\u2019ve got a travel website.<\/p>\n<p>Someplace where people come to make airline reservations.<\/p>\n<p>I think we\u2019ve all used one of those at some time.<\/p>\n<p>So, your users come to your site, and want to see what flights are available.<\/p>\n<p>What\u2019s the first thing they do?<\/p>\n<p>Do they write a question out in long-hand?<\/p>\n<p>Not these days.<\/p>\n<p>They probably start with selecting where they want to leave from.<\/p>\n<p>Their local airport.<\/p>\n<p>And then they probably want to select where they want to go.<\/p>\n<p>So, two choices, both airports.<\/p>\n<p>You could make them guess what airports are around.<\/p>\n<p>I mean, I usually just enter the town that I need to go to and let the website figure out what airport I need to fly to.<\/p>\n<p>But let\u2019s assume that your users already know the airports at both ends of their trip.<\/p>\n<p>Makes it easy for our little thought experiment.<\/p>\n<p>So, you need to present the user with a list of airports to choose from.<\/p>\n<p>Yeah, it\u2019ll be a long list.<\/p>\n<p>Seems there\u2019s a lot of airports scattered around this big-ole world.<\/p>\n<p>Just loading up our travel-sample bucket gives us almost 2 thousand.<\/p>\n<p>Man, that\u2019s a lot of airports!<\/p>\n<p>Someone did a lot of data-entry&#8230;<\/p>\n<p>But the good thing about airports is that don\u2019t change that often.<\/p>\n<p>I mean, yeah there\u2019s new ones being built&#8230;<\/p>\n<p>And old ones being left for ruin&#8230;<\/p>\n<p>But that all happens over time.<\/p>\n<p>Usually if one airport is abandoned, it\u2019s often because a newer, shinier one got built.<\/p>\n<p>And it takes a long time to build a new airport.<\/p>\n<p>It\u2019s not like they\u2019re throwing them up every day.<\/p>\n<p>So, back to our list of airports&#8230;<\/p>\n<p>Long or not, you\u2019ll have to provide some form of list of airports for the user to choose from.<\/p>\n<p>And if your website if very busy, there could be a lot of users.<\/p>\n<p>And we all want our websites to be busy.<\/p>\n<p>So let\u2019s just go ahead and assume that our website not just busy&#8230;<\/p>\n<p>It\u2019s very busy.<\/p>\n<p>Millions of users every day.<\/p>\n<p>Thousands of users every minute.<\/p>\n<p>That\u2019s a lot of times that you\u2019re having to serve up that list of airports!<\/p>\n<p>So, let\u2019s start by assuming that your airport documents in your Couchbase bucket are structured like the ones in our travel-sample bucket.<\/p>\n<p>Hey, it comes with our Couchbase Server product, may as well use it!<\/p>\n<p>Makes things easy&#8230;<\/p>\n<p>So, just listing the airports using a simple N1QL query:<\/p>\n<pre class=\"\">SELECT `travel-sample`.*\r\nFROM `travel-sample`\r\nWHERE type = \"airport\"\r\n;<\/pre>\n<p>Gives us this:<\/p>\n<pre class=\"\">[\r\n {\r\n  \"airportname\": \"Calais Dunkerque\",\r\n  \"city\": \"Calais\",\r\n  \"country\": \"France\",\r\n  \"faa\": \"CQF\",\r\n  \"geo\": {\r\n    \"alt\": 12,\r\n    \"lat\": 50.962097,\r\n    \"lon\": 1.954764\r\n  },\r\n  \"icao\": \"LFAC\",\r\n  \"id\": 1254,\r\n  \"type\": \"airport\",\r\n  \"tz\": \"Europe\/Paris\"\r\n },\r\n {\r\n  \"airportname\": \"Peronne St Quentin\",\r\n  \"city\": \"Peronne\",\r\n  \"country\": \"France\",\r\n  \"faa\": null,\r\n  \"geo\": {\r\n    \"alt\": 295,\r\n    \"lat\": 49.868547,\r\n    \"lon\": 3.029578\r\n  },\r\n  \"icao\": \"LFAG\",\r\n  \"id\": 1255,\r\n  \"type\": \"airport\",\r\n  \"tz\": \"Europe\/Paris\"\r\n },\r\n...\r\n]<\/pre>\n<p>Hmm, not going to be easy finding what our users need in this. Maybe if we sort it on the FAA airport code, and then eliminate those where the code is null&#8230;<\/p>\n<pre class=\"\">[\r\n {\r\n  \"airportname\": \"Lansdowne Airport\",\r\n  \"city\": \"Youngstown\",\r\n  \"country\": \"United States\",\r\n  \"faa\": \"04G\",\r\n  \"geo\": {\r\n    \"alt\": 1044,\r\n    \"lat\": 41.1304722,\r\n    \"lon\": -80.6195833\r\n  },\r\n  \"icao\": null,\r\n  \"id\": 8534,\r\n  \"type\": \"airport\",\r\n  \"tz\": \"America\/New_York\"\r\n },\r\n {\r\n  \"airportname\": \"Moton Field Municipal Airport\",\r\n  \"city\": \"Tuskegee\",\r\n  \"country\": \"United States\",\r\n  \"faa\": \"06A\",\r\n  \"geo\": {\r\n    \"alt\": 264,\r\n    \"lat\": 32.4605722,\r\n    \"lon\": -85.6800278\r\n  },\r\n  \"icao\": null,\r\n  \"id\": 8317,\r\n  \"type\": \"airport\",\r\n  \"tz\": \"America\/Chicago\"\r\n },\r\n...\r\n]<\/pre>\n<p>That\u2019s better, but it\u2019s more data than we need to be providing to the website.<\/p>\n<p>So, let\u2019s reduce what we\u2019re returning to the FAA code, airport name, city, and country:<\/p>\n<pre class=\"\">[\r\n {\r\n  \"airportname\": \"Lansdowne Airport\",\r\n  \"city\": \"Youngstown\",\r\n  \"country\": \"United States\",\r\n  \"faa\": \"04G\"\r\n },\r\n {\r\n  \"airportname\": \"Moton Field Municipal Airport\",\r\n  \"city\": \"Tuskegee\",\r\n  \"country\": \"United States\",\r\n  \"faa\": \"06A\"\r\n },\r\n...\r\n]<\/pre>\n<p>Ok, now we\u2019re getting down to what we\u2019re looking for.<\/p>\n<p>So, if we query this we\u2019re getting , oh, let\u2019s say about a 50-60ms response time.<\/p>\n<p>Not bad.<\/p>\n<p>But with thousands of requests for this list every minute&#8230;<\/p>\n<p>Hmm, maybe we can speed things up a bit.<\/p>\n<p>Let\u2019s make it a covered query by adding our own index that includes everything we need.<\/p>\n<pre class=\"\">CREATE INDEX myFaaIndex on `travel-sample`(faa asc,airportname,city,country)\r\nWHERE type = \"airport\" AND faa IS NOT NULL;<\/pre>\n<p>And now we re-run the query and get a response time in around 17.5 ms.<\/p>\n<p>Much better.<\/p>\n<p>But is it possible to do even better than this?<\/p>\n<p>I mean, this list will be requested thousands of times every minute.<\/p>\n<p>Those milliseconds will add up.<\/p>\n<p>So, what if we took the results of this query, and saved it as a single document?<\/p>\n<p>Let\u2019s call it \u201cairport_list\u201d.<\/p>\n<p>So now, if we run a query selecting the whole document with the \u201cUSE KEYS\u201d clause:<\/p>\n<pre class=\"\">SELECT `travel-sample`.*\r\nFROM `travel-sample`\r\nUSE KEYS \"airport_list\";<\/pre>\n<p>This is giving us a response time around 14.5 ms.<\/p>\n<p>Hmm, saved another 3 whole milliseconds!<\/p>\n<p>And we might save another half-millisecond or two if we use the key-value access and get the document by its ID directly from the data service.<\/p>\n<p>For a document that needs to be served thousands of times a minute.<\/p>\n<p>Millions of times a day.<\/p>\n<p>Those milliseconds will add up.<\/p>\n<p>Yeah, I know. Airports change from time to time.<\/p>\n<p>Yeah, but they don\u2019t change very often.<\/p>\n<p>Yes, this one document will need to be replaced every so often.<\/p>\n<p>But that\u2019s an operation that isn\u2019t serving a high-activity website.<\/p>\n<p>So who care\u2019s how slow (comparatively) that process may be.<\/p>\n<p>Plus, I no longer need my covering index!<\/p>\n<p>I can save a little bit of space on my index server!<\/p>\n<p>Woo-hoo! Bonus!<\/p>\n<p>Yeah, I know. I get excited about some odd things&#8230;<\/p>\n<p>OK, so that was an exercise in shaving milliseconds off our response time. What about a query that takes a bit longer and does more?<\/p>\n<p>Let\u2019s say you run a call-center, and it\u2019s important to keep track of how quickly your team is picking up incoming calls&#8230;<\/p>\n<p>OK, let\u2019s get a little more specific.<\/p>\n<p>Let\u2019s say you want to have a dashboard showing how many calls have been answered within five seconds, ten seconds, and the total number of calls that have come in today.<\/p>\n<p>Something like&#8230;<\/p>\n<pre class=\"\">SELECT SUM(five) as fiveCount, SUM(ten) as tenCount, SUM(incoming) as callCount\r\nFROM\r\n (SELECT\r\n    CASE \r\n      WHEN connectTime = 0 AND (endTime - startTime) <= 5000 THEN 1 \r\n      WHEN connectTime > 0 AND (acceptTime - startTime) <= 5000 THEN 1\r\n      ELSE 0 END as five,\r\n    CASE \r\n      WHEN connectTime = 0 AND (endTime - startTime) <= 10000 THEN 1 \r\n      WHEN connectTime > 0 AND (acceptTime - startTime) <= 10000 THEN 1 \r\n      ELSE 0 END as ten, \r\n    1 as incoming \r\n  FROM sigc \r\n  WHERE type='cdr' AND startTime > $today\r\n    AND callType BETWEEN 10 AND 2000) as calls\r\n;<\/pre>\n<p>So, you start with an index on the startTime and callType properties, limiting it to documents of type \u201ccdr\u201d, only to find it takes about a second to run this query.<\/p>\n<p>And this isn\u2019t the only query you want to use to populate your dashboard&#8230;<\/p>\n<p>Ugh, this is going to be as slow as molasses!<\/p>\n<p>OK, so let\u2019s build a new index with all of the properties in it, making this a covered query, only to find that, while it\u2019s improved, it still takes around 100 milliseconds.<\/p>\n<p>Hey, that\u2019s a 10X improvement! That\u2019s great, isn\u2019t it?<\/p>\n<p>Only your dashboard still refreshes like it\u2019s running in molasses.<\/p>\n<p>Thin, watery molasses, but still&#8230;<\/p>\n<p>Hmm, what can we do to improve this?<\/p>\n<p>What if, instead of using this query to feed the dashboard, we take the output and use it to create a new document with just the results?<\/p>\n<p>Something with a known name, like call_stats_&lt;some date&gt;&#8230;<\/p>\n<p>And we can run this query on a timer, using a cron job, or trigger it using the Couchbase Eventing service.<\/p>\n<p>Only if we trigger it from the Eventing service, we probably want to run it with a scan consistency of at least at_plus to include the document update you are using to trigger the query.<\/p>\n<p>But now, when we retrieve the result document, we\u2019re achieving response times in the low single-digit milliseconds, so close to a 1000X improvement in performance!<\/p>\n<p>And now we\u2019ve got a responsive dashboard!<\/p>\n<p>WOO-HOO!!!<\/p>\n<p>Now we\u2019re talking turbo-booster speed!<\/p>\n<p>So, what is the lesson from both of these two scenarios?<\/p>\n<p>Well, by taking any processing we needed to do on the data and making them background tasks, so that our interactive data requests involve no processing, we\u2019ve made things very speedy&#8230;<\/p>\n<p>We\u2019re talking faster than a speeding bullet fast!<\/p>\n<p>Excuse us Superman, we\u2019re coming through&#8230;<\/p>\n<p>So, was that thought experiment really that painful?<\/p>\n<p>Now on to those sexy indexes&#8230;<\/p>\n<p>Couchbase, empowering data nerds everywhere&#8230;<\/p>\n<p>(Hey Peter, I think I\u2019ve got our new slogan here!)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Let\u2019s do a little thought experiment. Yeah, I know, thinking. Who wants to do that? Wait! Before you tune me out and browse on to the next post on sexy indexes&#8230; At least give me a couple of minutes. Let\u2019s [&hellip;]<\/p>\n","protected":false},"author":41537,"featured_media":7781,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1819],"tags":[],"ppma_author":[9086],"class_list":["post-7782","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-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>Is No Processing Better Than Some Processing? - 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\/is-no-processing-better-than-some-processing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Is No Processing Better Than Some Processing?\" \/>\n<meta property=\"og:description\" content=\"Let\u2019s do a little thought experiment. Yeah, I know, thinking. Who wants to do that? Wait! Before you tune me out and browse on to the next post on sexy indexes&#8230; At least give me a couple of minutes. Let\u2019s [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-29T14:19:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/10\/AirplaneHeader.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"589\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Davis Chapman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Davis Chapman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\"},\"author\":{\"name\":\"Davis Chapman\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5dfa15a576b0656f5568265c860729e5\"},\"headline\":\"Is No Processing Better Than Some Processing?\",\"datePublished\":\"2019-10-29T14:19:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\"},\"wordCount\":1303,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png\",\"articleSection\":[\"Application Design\",\"Data Modeling\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\",\"name\":\"Is No Processing Better Than Some Processing? - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png\",\"datePublished\":\"2019-10-29T14:19:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png\",\"width\":2048,\"height\":589},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Is No Processing Better Than Some Processing?\"}]},{\"@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\/5dfa15a576b0656f5568265c860729e5\",\"name\":\"Davis Chapman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5685854cb1346b5427fb6d5ce53daf4a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1bcbb0d36ee45a118a98d5138f85da1dfff72f2e40c4ca2d5e279f44aa0d6fd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1bcbb0d36ee45a118a98d5138f85da1dfff72f2e40c4ca2d5e279f44aa0d6fd9?s=96&d=mm&r=g\",\"caption\":\"Davis Chapman\"},\"description\":\"Davis Chapman calls himself a Solution Architect, claims to be employed by Couchbase, and is supposedly part of our Professional Services team. He says that he\u2019s been in the industry for decades, and has been involved in application development for most of that time. Hmm, we'll have to check on that...\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/davis-chapman\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Is No Processing Better Than Some Processing? - 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\/is-no-processing-better-than-some-processing\/","og_locale":"en_US","og_type":"article","og_title":"Is No Processing Better Than Some Processing?","og_description":"Let\u2019s do a little thought experiment. Yeah, I know, thinking. Who wants to do that? Wait! Before you tune me out and browse on to the next post on sexy indexes&#8230; At least give me a couple of minutes. Let\u2019s [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-10-29T14:19:51+00:00","og_image":[{"width":2048,"height":589,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/10\/AirplaneHeader.png","type":"image\/png"}],"author":"Davis Chapman","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Davis Chapman","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/"},"author":{"name":"Davis Chapman","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5dfa15a576b0656f5568265c860729e5"},"headline":"Is No Processing Better Than Some Processing?","datePublished":"2019-10-29T14:19:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/"},"wordCount":1303,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png","articleSection":["Application Design","Data Modeling"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/","url":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/","name":"Is No Processing Better Than Some Processing? - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png","datePublished":"2019-10-29T14:19:51+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/AirplaneHeader.png","width":2048,"height":589},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/is-no-processing-better-than-some-processing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Is No Processing Better Than Some Processing?"}]},{"@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\/5dfa15a576b0656f5568265c860729e5","name":"Davis Chapman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5685854cb1346b5427fb6d5ce53daf4a","url":"https:\/\/secure.gravatar.com\/avatar\/1bcbb0d36ee45a118a98d5138f85da1dfff72f2e40c4ca2d5e279f44aa0d6fd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1bcbb0d36ee45a118a98d5138f85da1dfff72f2e40c4ca2d5e279f44aa0d6fd9?s=96&d=mm&r=g","caption":"Davis Chapman"},"description":"Davis Chapman calls himself a Solution Architect, claims to be employed by Couchbase, and is supposedly part of our Professional Services team. He says that he\u2019s been in the industry for decades, and has been involved in application development for most of that time. Hmm, we'll have to check on that...","url":"https:\/\/www.couchbase.com\/blog\/author\/davis-chapman\/"}]}},"authors":[{"term_id":9086,"user_id":41537,"is_guest":0,"slug":"davis-chapman","display_name":"Davis Chapman","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/1bcbb0d36ee45a118a98d5138f85da1dfff72f2e40c4ca2d5e279f44aa0d6fd9?s=96&d=mm&r=g","author_category":"","last_name":"Chapman","first_name":"Davis","job_title":"","user_url":"","description":"Davis Chapman calls himself a Solution Architect, claims to be employed by Couchbase, and is supposedly part of our Professional Services team. He says that he\u2019s been in the industry for decades, and has been involved in application development for most of that time. Hmm, we'll have to check on that..."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7782","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\/41537"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=7782"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7782\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/7781"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7782"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}