{"id":644,"date":"2013-06-23T15:04:40","date_gmt":"2013-06-23T15:04:40","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=644"},"modified":"2013-06-23T15:30:34","modified_gmt":"2013-06-23T15:30:34","slug":"cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/","title":{"rendered":"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data."},"content":{"rendered":"<p>I love Cloudant, simple as, their implementation of CouchDB as a <abbr title=\"Distributed Database as a Service\">DDaaS<\/abbr> (as opposed to <abbr title=\"DataBase as a Service\">DBaaS<\/abbr>) has no real competitor &#8211; as CouchDB develop&#8217;s, that may, of course, become a problem as it gives dominance in a market, but for now, we&#8217;re good.<\/p>\n<p>One of their best features is the dbcopy command, this copies the output of a map\/reduce view to either the same database or another database entirely. Why would you want to do this when you can just create another view? Simple really, you already have the data you need and you don&#8217;t want to re-build a view across a huge dataset. The output of a map\/reduce view often is a single number or statistics on those numbers. For CouchDB to iterate over large documents is significantly slower than iterating over numbers or the output of _stats &#8211; as an example, the rate at which a view was updated recently on our database took a week when I added dbcopy to it, vs near immediately for the view on the dbcopy database (based on a constant request to update the view as I have set up for our database).<\/p>\n<p>Or to put it another way &#8211; imagine having two books: one is a book where each page is full with a story, another book summarises that page&#8217;s story with a bullet point &#8211; how much quicker can you read the second book? A <b>LOT<\/b> quicker! Yes the meat of the story is lost, but so what, you don&#8217;t want meat, you want analysis.<\/p>\n<p>Right so, how is this done? Let&#8217;s use an example (I&#8217;ve abstracted this from a use case at <a href=\"http:\/\/www.mediaskunkworks.com\/\" target=\"_blank\">Media Skunk Works<\/a>, it may look a bit convoluted at times, but I can&#8217;t give away the real use case!)<\/p>\n<p>Let&#8217;s imagine you have a database of users who search your site for certain keywords; during registration you ask for their country, so you have that information.<\/p>\n<p>In your map, you emit, as the key: [country, user, keyword], so you can find all keywords for a user in a country, all users in a country and all countries, but what if you want to find all users who searched for a particular keyword ?<\/p>\n<p>You could add a new view, but, if you add &#8220;dbcopy&#8221;: &#8220;user-stats&#8221; (for example, &#8220;user-stats&#8221; is the database to copy the reduce output to) to your view definition, you can use that new database to re-work that data.<\/p>\n<p>So, in the &#8220;user-stats&#8221; database, add a view that does the following: &#8220;if(doc.key.length === 3) emit([doc.key[2], doc.key[1]], 1)&#8221;.<br \/>\nAnd voila, your new database now has a lookup that outputs [Keyword, User] = 1 for each document allowing you to re-group and re-stat data based on Keyword and User. The bonus is, that&#8217;s a huge performance gain. But not only that, you could also add a view that has &#8220;emit([doc.key[2], doc.key[0]], 1)&#8221; to see what user&#8217;s from each country lookup with minimal performance detriment &#8211; in fact 0 performance detriment to your primary database.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I love Cloudant, simple as, their implementation of CouchDB as a DDaaS (as opposed to DBaaS) has no real competitor &#8211; as CouchDB develop&#8217;s, that may, of course, become a problem as it gives dominance in a market, but for now, we&#8217;re good. One of their best features is the dbcopy command, this copies the &#8230; <a href=\"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &#8220;Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data.&#8221;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[],"class_list":["post-644","post","type-post","status-publish","format-standard","hentry","category-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cloudant&#039;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data. - wade.one<\/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:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloudant&#039;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data. - wade.one\" \/>\n<meta property=\"og:description\" content=\"I love Cloudant, simple as, their implementation of CouchDB as a DDaaS (as opposed to DBaaS) has no real competitor &#8211; as CouchDB develop&#8217;s, that may, of course, become a problem as it gives dominance in a market, but for now, we&#8217;re good. One of their best features is the dbcopy command, this copies the ... Read More &quot;Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data.&quot; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2013-06-23T15:04:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-06-23T15:30:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Wade\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wade\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated 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:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/\"},\"author\":{\"name\":\"Wade\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/f9dedd948575256e77a44aa1417f63de\"},\"headline\":\"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\\\/reduce data.\",\"datePublished\":\"2013-06-23T15:04:40+00:00\",\"dateModified\":\"2013-06-23T15:30:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/\"},\"wordCount\":526,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/\",\"name\":\"Cloudant's Rather Awesome dbcopy for re-reducing the output of existing map\\\/reduce data. - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2013-06-23T15:04:40+00:00\",\"dateModified\":\"2013-06-23T15:30:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2013\\\/06\\\/23\\\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\\\/reduce data.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/f9dedd948575256e77a44aa1417f63de\",\"name\":\"Wade\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg\",\"caption\":\"Wade\"},\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/author\\\/wade\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cloudant's Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data. - wade.one","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:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/","og_locale":"en_GB","og_type":"article","og_title":"Cloudant's Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data. - wade.one","og_description":"I love Cloudant, simple as, their implementation of CouchDB as a DDaaS (as opposed to DBaaS) has no real competitor &#8211; as CouchDB develop&#8217;s, that may, of course, become a problem as it gives dominance in a market, but for now, we&#8217;re good. One of their best features is the dbcopy command, this copies the ... Read More \"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data.\" &raquo;","og_url":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/","og_site_name":"wade.one","article_published_time":"2013-06-23T15:04:40+00:00","article_modified_time":"2013-06-23T15:30:34+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"author":"Wade","twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Written by":"Wade","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/"},"author":{"name":"Wade","@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/f9dedd948575256e77a44aa1417f63de"},"headline":"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data.","datePublished":"2013-06-23T15:04:40+00:00","dateModified":"2013-06-23T15:30:34+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/"},"wordCount":526,"commentCount":0,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"articleSection":["Programming"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/","url":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/","name":"Cloudant's Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data. - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2013-06-23T15:04:40+00:00","dateModified":"2013-06-23T15:30:34+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2013\/06\/23\/cloudants-rather-awesome-dbcopy-for-re-reducing-the-output-of-existing-mapreduce-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"Cloudant&#8217;s Rather Awesome dbcopy for re-reducing the output of existing map\/reduce data."}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}},{"@type":"Person","@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/f9dedd948575256e77a44aa1417f63de","name":"Wade","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/94100ef7361b8aaac136b852c8df93bdd10942165a122d5c56e4466cc403e5d9?s=96&d=retro&r=pg","caption":"Wade"},"url":"https:\/\/wade.one\/blog\/author\/wade\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":437,"url":"https:\/\/wade.one\/blog\/2010\/01\/31\/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql\/","url_meta":{"origin":644,"position":0},"title":"MySQL and Binary(16) &#8211; The Reasons\/Benefits\/Drawbacks (#mysql)","author":"Wade","date":"January 31, 2010","format":false,"excerpt":"I recently posted an article about using BINARY(16) for storing MD5's as unique identifiers instead of simple integer ID's (usually auto increment); in that article I touched on one of the benefits, reducing JOIN's, but there are other reasons for doing it too, so I thought I'd post an article\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":273,"url":"https:\/\/wade.one\/blog\/2009\/11\/05\/link-checker-update-download-meta-data-errors-redirects-as-csv\/","url_meta":{"origin":644,"position":1},"title":"Link Checker Update &#8211; Download Meta Data, Errors, Redirects as CSV","author":"Wade","date":"November 5, 2009","format":false,"excerpt":"I've updated my Link Checker (site crawler) located at https:\/\/wade.one\/tools\/linkchecker to allow downloading of the data it finds as CSV files. So all redirect URL's, 404's and meta data for all pages can be downloaded. The links are at the bottom of the page after the initial output of data.\u2026","rel":"","context":"In &quot;News&quot;","block_context":{"text":"News","link":"https:\/\/wade.one\/blog\/category\/news\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":431,"url":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/","url_meta":{"origin":644,"position":2},"title":"MySQL &#8211; Binary(16) and scalability","author":"Wade","date":"January 29, 2010","format":false,"excerpt":"Over the past few months at work, we've seen our database grown from silly big to really silly big, it's still a way to go to get to the size of the big boys such as Facebook etc. but it's still a database stored in MySQL that most day-to-day PHP\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1115,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/mongodb-vs-documentdb\/","url_meta":{"origin":644,"position":3},"title":"MongoDB vs DocumentDB","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"I've been working on a new as-fast-as-possible platform for a specific situation I can't go in to right now but I wanted to use MongoDB, however, I needed to reduce costs and use AWS so I wanted to use DocumentDB and needed to compare. Sadly DocumentDB does not cover 100%\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1158,"url":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-senior-engineers-still-matter-more-in-the-ai-era\/","url_meta":{"origin":644,"position":4},"title":"Why Senior Engineers Still Matter More in the AI Era","author":"Wade","date":"March 26, 2026","format":false,"excerpt":"AI can generate code faster, but that only makes direction, judgment, and accountability more important. Senior engineers still matter because the expensive mistakes are rarely typing mistakes.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":31,"url":"https:\/\/wade.one\/blog\/2009\/09\/02\/another-day-another-group-of-php-funness\/","url_meta":{"origin":644,"position":5},"title":"Another day, another group of PHP &#8220;funness&#8221;","author":"Wade","date":"September 2, 2009","format":false,"excerpt":"PHP and Serializing...don't try and store the result in a plain text file, there's just a chance you may end up storing NUL so when you go to read a line, you'll end up only reading part of it (the serialized object had a stack trace in it from an\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=644"}],"version-history":[{"count":14,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/644\/revisions"}],"predecessor-version":[{"id":658,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/644\/revisions\/658"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}