{"id":431,"date":"2010-01-29T12:13:04","date_gmt":"2010-01-29T12:13:04","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=431"},"modified":"2010-01-29T12:13:04","modified_gmt":"2010-01-29T12:13:04","slug":"mysql-binary16-and-scalability","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/","title":{"rendered":"MySQL &#8211; Binary(16) and scalability"},"content":{"rendered":"<p>Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a midget cannibal.<\/p>\n<p>One of the great things about using something like MySQL (and any other &#8220;real&#8221; database) is the ability to cross-query data, i.e. to grab data from one data-set (table) and join it to another data-set (table) to get a single set of results, either as a combination of the data or the result of an exclusion due to the join. *<\/p>\n<p>However, as tables grow, the time taken to perform queries, particularly in the realm of joins, grows rather quickly. So for example take this query:<\/p>\n<pre>SELECT *\nFROM table2\nLEFT JOIN table1\n    ON table1.columnB = table2.columnA\nWHERE table1.columnC = 'John.Doe';<\/pre>\n<p>Let&#8217;s say table1 is a list of all employees in a small business and table2 is a list of their days off, so it&#8217;s a one-to-many relationship. Running the above query to get the days off for person 5 would be pretty quick and most developers would be happy with that, even if the columns weren&#8217;t indexed, the performance of that query (as it&#8217;s a small business &#8211; therefore small dataset) would be more than suitable for any real-world application.<\/p>\n<p>Now imagine a table where rather than a couple of hundred rows, you have millions or (such as ours) billions of rows of data; as for why we have that much data, that&#8217;s for another topic. That join could could result in a rather painful execution time. The problem you&#8217;ve got is, you have to first query table1 to get the ID of user &#8216;John.Doe&#8217; and then use that ID for table2 to get the actual data.<\/p>\n<p>So how can you optimise this? Well you&#8217;ve got three choices, the first would be two queries, one to grab the users ID from table1, then the next to grabs the users data from table2; but that&#8217;s 2 queries now. In a lot of places that wouldn&#8217;t matter, but we want speed here and reduction of hits to MySQL. The second is have the users name in table2 for each day off &#8211; that&#8217;s duplicating data though and because (in this case) you&#8217;d have a string, it&#8217;s not the fastest lookup and creates rather large indexes when people&#8217;s usernames are quite long.<\/p>\n<p>The third option? A unique hash associated with that user. In this case, MD5 the username and store it as binary(16). MD5 is, after all, a 128-bit number basically. Most people are used to seeing it as a 32 character string, e.g. 7ecb9bba8130abe56cfd9a8430ca969c. That is just a hexadecimal number though, albeit a very very big one &#8211; capable of storing the value 340,282,366,920,938,463,463,374,607,431,768,211,456, for those in the UK that&#8217;s 340 <span>sextillion. MySQL Doesn&#8217;t really have a suitable INT type for storing a number that big so it&#8217;s best to either store it as a 32-byte string (hexadecimal MD5) or better yet, as a binary string of 16 characters.<\/span><\/p>\n<p><span>So how does that change our query now?<\/span><\/p>\n<pre>SELECT *\nFROM table2\nWHERE table2.columnA = UNHEX(MD5('John.Doe'));<\/pre>\n<p><span>No more join and only one select. It means you can look up days off for any user simply by knowing the username. MySQL has UNHEX(MD5()) to md5 a string and convert to its binary equivalent. In PHP you&#8217;d use md5(&#8216;string&#8217;, true) or pack(&#8216;H*&#8217;, md5(&#8216;string&#8217;)); <\/span><\/p>\n<p><span>In all honesty, this isn&#8217;t the best use of binary(16), but it&#8217;s a relatively simple example to follow. For us though, moving away from auto-incrementing ID&#8217;s towards binary hashes has allowed use to do blind inserts (insert ignore) and lightning fast selects where they used to take minutes or even hours. INSERT IGNORE has to be one of the biggest benefits we&#8217;ve seen. By setting the primary key to the BINARY(16) column, you can easily guarantee unique data without wasted extra index space and you only need to query that table when you actually need to data associated with that unique hash, the rest of the time, you can query other tables that relate to that hash without having to do a join.<br \/>\n<\/span><\/p>\n<p style=\"font-size: 80%\">* I would like to point out I am fully aware of people who store data without a dedicated database and use Map-Reduce due to the sheer size of it, however databases like MySQL allow a quick line of text to get the results you want, there&#8217;s no further effort involved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a &#8230; <a href=\"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &#8220;MySQL &#8211; Binary(16) and scalability&#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":[22],"class_list":["post-431","post","type-post","status-publish","format-standard","hentry","category-programming","tag-php-conference-2010"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MySQL - Binary(16) and scalability - 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\/2010\/01\/29\/mysql-binary16-and-scalability\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MySQL - Binary(16) and scalability - wade.one\" \/>\n<meta property=\"og:description\" content=\"Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a ... Read More &quot;MySQL &#8211; Binary(16) and scalability&quot; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2010-01-29T12:13:04+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/\"},\"author\":{\"name\":\"Wade\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/f9dedd948575256e77a44aa1417f63de\"},\"headline\":\"MySQL &#8211; Binary(16) and scalability\",\"datePublished\":\"2010-01-29T12:13:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/\"},\"wordCount\":772,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"PHP Conference 2010\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/\",\"name\":\"MySQL - Binary(16) and scalability - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2010-01-29T12:13:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2010\\\/01\\\/29\\\/mysql-binary16-and-scalability\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MySQL &#8211; Binary(16) and scalability\"}]},{\"@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":"MySQL - Binary(16) and scalability - 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\/2010\/01\/29\/mysql-binary16-and-scalability\/","og_locale":"en_GB","og_type":"article","og_title":"MySQL - Binary(16) and scalability - wade.one","og_description":"Over the past few months at work, we&#8217;ve seen our database grown from silly big to really silly big, it&#8217;s still a way to go to get to the size of the big boys such as Facebook etc. but it&#8217;s still a database stored in MySQL that most day-to-day PHP programmers would avoid like a ... Read More \"MySQL &#8211; Binary(16) and scalability\" &raquo;","og_url":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/","og_site_name":"wade.one","article_published_time":"2010-01-29T12:13:04+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":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/"},"author":{"name":"Wade","@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/f9dedd948575256e77a44aa1417f63de"},"headline":"MySQL &#8211; Binary(16) and scalability","datePublished":"2010-01-29T12:13:04+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/"},"wordCount":772,"commentCount":0,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["PHP Conference 2010"],"articleSection":["Programming"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/","url":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/","name":"MySQL - Binary(16) and scalability - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2010-01-29T12:13:04+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2010\/01\/29\/mysql-binary16-and-scalability\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"MySQL &#8211; Binary(16) and scalability"}]},{"@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":453,"url":"https:\/\/wade.one\/blog\/2010\/02\/26\/phpuk2010-part-2-mysql-stuff\/","url_meta":{"origin":431,"position":0},"title":"#PHPUK2010 Part 2 (MySQL stuff)","author":"Wade","date":"February 26, 2010","format":false,"excerpt":"Just picked up a nice tid-bit on creating a unique index on a two column table where the values in each column may be either way around but you only ever want one instance of the value in that row. So what this means is, inserting 2,1 and 1,2 for\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":437,"url":"https:\/\/wade.one\/blog\/2010\/01\/31\/mysql-and-binary16-the-reasonsbenefitsdrawbacks-mysql\/","url_meta":{"origin":431,"position":1},"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":95,"url":"https:\/\/wade.one\/blog\/2009\/09\/10\/linux-raid-mysql\/","url_meta":{"origin":431,"position":2},"title":"Linux RAID, MySQL","author":"Wade","date":"September 10, 2009","format":false,"excerpt":"Ubuntu...it's a great Linux OS to use on servers due to its speed and simplicity - personal preference based on no statistics, only personal use. However, one thing Linux drives me mad with is software RAID. It's taken me the better part of a day to set up a few\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":463,"url":"https:\/\/wade.one\/blog\/2010\/04\/12\/reset-mysql-root-password-if-you-forgot-it-mysql\/","url_meta":{"origin":431,"position":3},"title":"Reset MySQL root password if you forgot it #mysql","author":"Wade","date":"April 12, 2010","format":false,"excerpt":"Just had a need to reset the mysql root login password for a server, did a bit of Googling and found out this is how you do it (I work on Ubuntu so you may have to tinker with the lines slightly depending on your distribution): Stop the current MySQL\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":38,"url":"https:\/\/wade.one\/blog\/2009\/09\/03\/todays-musings\/","url_meta":{"origin":431,"position":4},"title":"Today&#8217;s musings","author":"Wade","date":"September 3, 2009","format":false,"excerpt":"Today's work was a standard day, well except for the morning, actually no, that was a standard morning too, things didn't work too well, they needed fixing, during which there were random jokes at Ben's expense due to his pure love of graphs. With some help from Remo (my team\u2026","rel":"","context":"In &quot;Ego-centric&quot;","block_context":{"text":"Ego-centric","link":"https:\/\/wade.one\/blog\/category\/ego-centric\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1118,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/expanding-on-performance-of-redis-vs-mongodb-for-a-push-pull-system\/","url_meta":{"origin":431,"position":5},"title":"Expanding on performance of Redis vs MongoDB for a push\/pull system","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"When it comes to building a push\/pop system, both Redis and MongoDB can be used as effective solutions. However, there are a few key differences between these two databases that can impact which one you choose for your system. Redis is an in-memory data structure store that can be used\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/431","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=431"}],"version-history":[{"count":0,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/431\/revisions"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}