Files
nexus/sreweekly/articles/413/09-the-role-of-cap-theorem-in-modern-day-distributed-systems.html
2026-09-12 17:23:01 +08:00

96 lines
85 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="preload" as="image" href="https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/41a8c4b0a13fb4ca619236e1.png"/><link rel="preload" as="image" href="https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/3b26d4f9d45e14b163baeb58.png"/><link rel="stylesheet" href="/assets/styles-Dkt3QWRo.css" nonce="th0//p+Gz1aytWYEh3rCRA==" data-precedence="default"/><meta property="csp-nonce" content="th0//p+Gz1aytWYEh3rCRA=="/><title>The Role of CAP Theorem in Modern Day Distributed Systems | Readyset</title><meta name="theme-color" content="#ffffff" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="msapplication-TileColor" content="#161615" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="apple-mobile-web-app-capable" content="yes" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="mobile-web-app-capable" content="yes" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="apple-mobile-web-app-status-bar-style" content="black" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="description" content="Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems? Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how ot..." nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="application-name" content="Readyset | Drop-in SQL Caching for PostgreSQL and MySQL" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="apple-mobile-web-app-title" content="Readyset | Drop-in SQL Caching for PostgreSQL and MySQL" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="keywords" content="SQL caching, real-time cache, database cache, PostgreSQL cache, MySQL cache" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:type" content="article" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:site_name" content="Readyset | Drop-in SQL Caching for PostgreSQL and MySQL" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:title" content="The Role of CAP Theorem in Modern Day Distributed Systems | Readyset" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:description" content="Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems? Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how ot..." nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image" content="https://readyset.io/api/og/blog/a-developers-guide-to-the-cap-theorem?v=1783974545002" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image:secure_url" content="https://readyset.io/api/og/blog/a-developers-guide-to-the-cap-theorem?v=1783974545002" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image:type" content="image/png" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image:alt" content="The Role of CAP Theorem in Modern Day Distributed Systems | Readyset" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:card" content="summary_large_image" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:site" content="@readysetio" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:creator" content="@readysetio" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:title" content="The Role of CAP Theorem in Modern Day Distributed Systems | Readyset" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:description" content="Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems? Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how ot..." nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:image" content="https://readyset.io/api/og/blog/a-developers-guide-to-the-cap-theorem?v=1783974545002" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image:width" content="1200" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:image:height" content="630" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="og:url" content="https://readyset.io/blog/a-developers-guide-to-the-cap-theorem" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta name="twitter:url" content="https://readyset.io/blog/a-developers-guide-to-the-cap-theorem" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="article:author" content="Readyset" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="article:published_time" content="2023-12-14" nonce="th0//p+Gz1aytWYEh3rCRA=="/><meta property="article:section" content="Engineering" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/index-CgozBq9o.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/_slug-feOgb-yl.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/article-card-BslrmY68.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/newsletter-popup-C0xZnHQP.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/rich-markdown-DYApPWH1.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/index-rMShz_NE.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="modulepreload" href="/assets/use-disclosure-DaTsKJMJ.js" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="icon" href="/favicon.ico" sizes="any" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="icon" type="image/png" sizes="16x16" href="/manifest/favicon-16x16.png" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="icon" type="image/png" sizes="32x32" href="/manifest/favicon-32x32.png" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="apple-touch-icon" sizes="180x180" href="/manifest/apple-touch-icon.png" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="mask-icon" href="/manifest/safari-pinned-tab.svg" color="#161615" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="manifest" href="/manifest.webmanifest" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="prefetch" href="/icons/sprite-stroke.svg" as="image" type="image/svg+xml" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="prefetch" href="/icons/sprite-bulk.svg" as="image" type="image/svg+xml" nonce="th0//p+Gz1aytWYEh3rCRA=="/><link rel="canonical" href="https://readyset.io/blog/a-developers-guide-to-the-cap-theorem" nonce="th0//p+Gz1aytWYEh3rCRA=="/><script type="application/ld+json" nonce="th0//p+Gz1aytWYEh3rCRA==">{"@context":"https://schema.org","@type":"Organization","@id":"https://readyset.io/#organization","name":"Readyset","url":"https://readyset.io","logo":"https://readyset.io/manifest/apple-touch-icon.png","description":"Increase the scale of your PostgreSQL and MySQL deployment by up to 100x with Readyset - all without modifying your application code or database. Start using Readyset today for free!","sameAs":["https://x.com/readysetio"]}</script><script type="application/ld+json" nonce="th0//p+Gz1aytWYEh3rCRA==">{"@context":"https://schema.org","@type":"WebSite","@id":"https://readyset.io/#website","url":"https://readyset.io","name":"Readyset","publisher":{"@id":"https://readyset.io/#organization"}}</script><script type="application/ld+json" nonce="th0//p+Gz1aytWYEh3rCRA==">{"@context":"https://schema.org","@type":"Article","headline":"The Role of CAP Theorem in Modern Day Distributed Systems","description":"Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems? Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how ot...","url":"https://readyset.io/blog/a-developers-guide-to-the-cap-theorem","image":"https://readyset.io/images/blog-placeholder.svg","datePublished":"2023-12-14T00:00:00.000Z","dateModified":"2026-07-13T20:29:05.002Z","author":{"@type":"Person","name":"Readyset"},"publisher":{"@id":"https://readyset.io/#organization"}}</script></head><body class="min-h-screen bg-surface-layout-2"><a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-[100] focus:rounded-lg focus:bg-content-layout-1 focus:px-4 focus:py-2 focus:text-sm focus:font-semibold focus:text-surface-layout-1">Skip to content</a><header class="sticky top-0 z-50 bg-surface-layout-2/80 backdrop-blur-lg border-b border-border-layout-soft"><div class="relative max-w-7xl mx-auto px-6 py-4 flex items-center justify-between"><div class="flex items-center gap-8"><a href="/" class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 145 33" class="fill-current text-content-layout-1 h-6"><path d="M16 31.328c0 .736-.597 1.333-1.333 1.333H4a4 4 0 0 1-4-4V17.994c0-.736.597-1.333 1.333-1.333H16v14.667Z"></path><path d="M21.333 11.328v5.333h-4c-.736 0-1.333.597-1.333 1.333v4h-5.333v-5.333h4c.736 0 1.333-.597 1.333-1.333v-4h5.333Z"></path><path d="M32 15.328c0 .736-.597 1.333-1.333 1.333H16V1.994c0-.736.597-1.333 1.333-1.333H28a4 4 0 0 1 4 4v10.667Z"></path><path fill-rule="evenodd" d="M91.272 5.367h2.864V23.25h-2.864v-1.99c-1.145 1.45-2.665 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.9 0 3.42.722 4.557 2.164V5.367Zm-3.997 15.308c1.146 0 2.096-.386 2.852-1.157.763-.779 1.145-1.74 1.145-2.885 0-1.152-.382-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.764.77-1.145 1.732-1.145 2.884 0 1.145.381 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm-24.258-2.898c.05-.364.075-.737.075-1.119 0-1.956-.652-3.581-1.955-4.874-1.295-1.302-2.918-1.953-4.87-1.953-1.278 0-2.444.295-3.498.883a6.442 6.442 0 0 0-2.466 2.438c-.597 1.028-.896 2.172-.896 3.432 0 1.948.68 3.577 2.042 4.887 1.37 1.31 3.084 1.965 5.143 1.965 1.203 0 2.32-.24 3.35-.722 1.037-.48 1.892-1.144 2.564-1.99l-1.93-1.653c-.39.514-.938.94-1.643 1.28-.698.34-1.453.51-2.267.51-1.054 0-1.959-.277-2.714-.833-.747-.563-1.237-1.314-1.47-2.25h10.535Zm-9.19-4.538c.69-.556 1.494-.834 2.416-.834.93 0 1.74.278 2.428.834.697.555 1.154 1.289 1.37 2.2h-7.584c.233-.911.69-1.645 1.37-2.2Zm21.469-3.166h2.863V23.25h-2.864v-1.99c-1.145 1.45-2.664 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.901 0 3.42.722 4.558 2.164v-1.922Zm-3.998 10.602c1.146 0 2.096-.386 2.852-1.157.764-.779 1.145-1.74 1.145-2.885 0-1.152-.381-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.763.77-1.145 1.732-1.145 2.884 0 1.145.382 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm35.186-10.602h3.188L102.941 25.6l-1.027 2.356h-3.319c.461-.939 1.313-2.68 1.718-3.537l.697-1.443-5.51-12.902h3.275l3.842 9.532 3.867-9.532Zm8.586 13.363c-2.092 0-3.894-.664-5.405-1.99l1.482-2.015c1.071 1.02 2.362 1.53 3.873 1.53.755 0 1.374-.124 1.855-.373.482-.257.722-.61.722-1.057a.93.93 0 0 0-.161-.535c-.1-.157-.225-.29-.374-.398-.141-.108-.353-.211-.635-.31-.282-.1-.531-.179-.747-.237a25.515 25.515 0 0 0-.884-.224l-.934-.224a16.527 16.527 0 0 1-.909-.286 6.683 6.683 0 0 1-.909-.373 5.835 5.835 0 0 1-.76-.497 2.716 2.716 0 0 1-.647-.672 3.57 3.57 0 0 1-.561-1.952c0-.862.241-1.6.722-2.213a4.153 4.153 0 0 1 1.868-1.343c.764-.29 1.627-.436 2.59-.436 1.901 0 3.549.577 4.944 1.729l-1.507 2.014c-.996-.845-2.125-1.268-3.387-1.268-.672 0-1.228.112-1.668.336-.432.224-.648.551-.648.982 0 .166.029.315.087.448a.93.93 0 0 0 .299.36c.15.108.291.2.423.274.133.075.328.153.586.236l.66.187.772.174c.373.083.68.157.921.224.249.058.552.149.909.273a4.943 4.943 0 0 1 1.669.87c.266.2.477.42.635.66.166.232.299.514.398.845.108.332.162.693.162 1.082 0 .87-.245 1.63-.734 2.276-.49.638-1.142 1.115-1.955 1.43-.806.315-1.723.473-2.752.473Zm20.26-6.778c0 .382-.025.755-.075 1.12h-10.534c.232.936.722 1.687 1.469 2.25.755.556 1.66.833 2.715.833.813 0 1.569-.17 2.266-.51.706-.34 1.254-.766 1.644-1.28l1.93 1.654c-.673.845-1.528 1.508-2.565 1.99-1.03.48-2.146.72-3.35.72-2.059 0-3.773-.654-5.143-1.964-1.361-1.31-2.042-2.94-2.042-4.887 0-1.26.299-2.404.897-3.432a6.436 6.436 0 0 1 2.465-2.438c1.054-.588 2.221-.883 3.499-.883 1.951 0 3.574.651 4.869 1.953 1.303 1.293 1.955 2.918 1.955 4.874Zm-6.849-4.253c-.921 0-1.726.278-2.415.834-.681.555-1.138 1.289-1.37 2.2h7.583c-.216-.911-.672-1.645-1.37-2.2-.689-.556-1.498-.834-2.428-.834Zm15.99.255h-3.674v6.212c0 .597.162 1.049.486 1.355.332.299.801.448 1.407.448.573 0 1.166-.15 1.781-.448v2.674c-.706.356-1.499.535-2.379.535-1.37 0-2.403-.361-3.1-1.082-.698-.722-1.046-1.729-1.046-3.022V12.66h-2.205v-2.587h2.205V5.367h2.851v4.706h3.674v2.587ZM48.869 9.873h-.49c-1.673 0-3.033.712-4.08 2.135v-1.935h-2.887V23.25h2.887v-6.434c0-1.222.36-2.189 1.08-2.9.728-.72 1.729-1.08 3-1.08h.49V9.873Z" clip-rule="evenodd"></path></svg></a><nav class="hidden laptop:flex items-center"><button type="button" class="flex items-center gap-1 text-label-medium transition-colors px-3 py-2 cursor-pointer text-content-layout-2 hover:text-content-layout-1" aria-haspopup="true" aria-expanded="false">Products<svg class="inline justify-self-center stroke-current h-4 w-4 min-w-4 stroke-2 transition-transform" aria-hidden="true" focusable="false"><use href="/icons/sprite-stroke.svg#chevron-down"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">dropdown</span></button><button type="button" class="flex items-center gap-1 text-label-medium transition-colors px-3 py-2 cursor-pointer text-content-layout-2 hover:text-content-layout-1" aria-haspopup="true" aria-expanded="false">Solutions<svg class="inline justify-self-center stroke-current h-4 w-4 min-w-4 stroke-2 transition-transform" aria-hidden="true" focusable="false"><use href="/icons/sprite-stroke.svg#chevron-down"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">dropdown</span></button><button type="button" class="flex items-center gap-1 text-label-medium transition-colors px-3 py-2 cursor-pointer text-content-layout-2 hover:text-content-layout-1" aria-haspopup="true" aria-expanded="false">Resources<svg class="inline justify-self-center stroke-current h-4 w-4 min-w-4 stroke-2 transition-transform" aria-hidden="true" focusable="false"><use href="/icons/sprite-stroke.svg#chevron-down"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">dropdown</span></button></nav></div><div class="hidden laptop:flex items-center"><button type="button" class="relative flex items-center justify-center min-w-max cursor-pointer select-none transition duration-fast ease-base transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-primary-soft focus-visible:ring-offset-2 focus-visible:ring-offset-surface-layout-1 active:scale-[0.98] active:origin-center text-button-medium py-3 px-4 rounded-2xl h-10 text-content-primary-solid bg-surface-primary-solid hover:bg-surface-primary-solid-hover active:bg-surface-primary-solid-active [&amp;_#loader]:border-t-content-primary-solid"><div class="flex items-center">Try locally<div class="h-1 w-1"></div><svg aria-hidden="true" class="inline justify-self-center stroke-current h-5 w-5 min-w-5 stroke-[1.5px]" focusable="false"><use href="/icons/sprite-stroke.svg#arrow-right"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></div></button></div><button type="button" class="laptop:hidden flex items-center justify-center w-10 h-10 rounded-2xl text-content-layout-1 hover:bg-surface-layout-2 transition-colors cursor-pointer" aria-label="Open menu" aria-expanded="false"><svg class="inline justify-self-center stroke-current h-5 w-5 min-w-5 stroke-[1.5px]" aria-hidden="true" focusable="false"><use href="/icons/sprite-stroke.svg#menu"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">menu</span></button></div></header><main id="main-content"><!--$--><!--$--><div class="relative mx-auto container px-4 tablet:px-6 laptop:px-8 max-w-[1456px] flex flex-col gap-2 mt-12" id="blog-post-content"><div class="w-full flex flex-col gap-8"><div class="max-w-3xl mx-auto w-full flex flex-col gap-8"><div class="flex flex-col gap-6"><a class="text-body-small text-content-layout-3 hover:text-content-layout-1 transition-colors w-fit active" href="/blog" data-status="active" aria-current="page">← Back to blog</a><span class="inline-block w-fit px-3 py-1 rounded-full bg-surface-layout-1 text-body-small text-content-layout-3">Engineering</span><h1 class="text-display-small">The Role of CAP Theorem in Modern Day Distributed Systems</h1><p class="text-body-large text-content-layout-3">Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems?
Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how others might feel walking into an argument amongst developers about which IDE is the best or which code editor is most productive. It’s hard to get your bearings, much less figure out what to think yourself. 
Henry Robinson, Senior Staff Software Engineer at Slack, put it well, writ</p><div class="flex items-center gap-4"><a href="/blog/authors/neda" class="shrink-0"><img src="https://cms.readyset.io/files/authors/657385d2b4c219000125f4cd/c0376b666550a188861d4a2d.bin" alt="Readyset" loading="lazy" decoding="async" class="w-10 h-10 rounded-full object-cover"/></a><div class="flex flex-col"><a href="/blog/authors/neda" class="hover:underline"><p class="text-body-medium">Readyset</p></a><p class="text-body-small text-content-layout-3">2023-12-14<!-- --> · <!-- -->8 min read</p></div></div><div class="flex flex-wrap gap-2"></div></div><div role="separator" class="bg-border-layout-soft h-(--divider-thickness) w-full" style="--divider-thickness:1.5px"></div><div class="prose prose-neutral max-w-none"><!--$--><p><strong>Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems?</strong></p>
<p>Stumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how others might feel walking into an argument amongst developers about which IDE is the best or which code editor is most productive. It’s hard to get your bearings, much less figure out what to think yourself.</p>
<p>Henry Robinson, Senior Staff Software Engineer at Slack, <a href="https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">put it</a> well, writing, “No subject appears to be more controversial to distributed systems engineers than the oft-quoted, oft-misunderstood CAP theorem.” The trouble for developers, however, is that you can’t treat it like a technical detail you can otherwise breeze past.</p>
<p>Over the years, people have claimed to have “beaten” the CAP theorem, people have questioned its usefulness and its relevance, and still others have argued it’s more relevant than ever. And at the bottom of this discourse is a proof that makes the CAP theorem more than a merely abstract argument.</p>
<p>In other words, developers don’t have to be distributed systems engineers to be beholden to the CAP theorem.</p>
<p>In this article, we’ll walk you through the CAP theorem, explain the basics of why it works, and show how developers can put it into practice without needing to become distributed systems experts themselves.</p>
<h2 id="the-cap-theorem-what-it-is-and-why-it-matters"><a href="#the-cap-theorem-what-it-is-and-why-it-matters">The CAP Theorem: What It Is and Why It Matters</a></h2>
<p>Like all great theorems and frameworks, the CAP theorem is an acronym. CAP stands for Consistency, Availability, and Partition tolerance. Once you know the acronym, the theory itself is pretty simple: A distributed system cannot simultaneously be consistent, available, and partition tolerant.</p>
<p>Before proceeding, there’s a little nuance to explain.</p>
<p>According to the theorem, availability means that “every request received by a non-failing node in the system must result in a response.” If a client sends a data change request, the server has to accept the change. Not every server has to be available, but there must be enough individual servers available in a cluster to handle the request.</p>
<p>According to the theorem, partition tolerance means that “the network will be allowed to lose arbitrarily many messages sent from one node to another.”</p>
<p>Consistency, sometimes the most confusing element, refers to <a href="https://medium.com/@marton.waszlavik/demystifying-cap-theorem-eventual-consistency-and-exactly-once-delivery-guarantee-ed20cf7cc877?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">“strong” consistency</a>. According to the theorem, “any read operation that begins after a write operation completes must return that value, or the result of a later write operation.”</p>
<p>Don’t confuse this sense of consistency with the one in a related concept, ACID (atomicity, consistency, isolation, durability). In ACID, consistency refers to ensuring a database is consistent before and after a transaction via integrity constraints.</p>
<p>As Google engineer Michael Whittaker <a href="https://mwhittaker.github.io/blog/an%5Fillustrated%5Fproof%5Fof%5Fthe%5Fcap%5Ftheorem/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">illustrates below</a>, an inconsistent system involves a client getting stale data.</p>
<p><img src="https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/41a8c4b0a13fb4ca619236e1.png" alt=""/></p>
<p>And a consistent system, as Whittaker illustrates again, is one where the client gets the most up-to-date data.</p>
<p><img src="https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/3b26d4f9d45e14b163baeb58.png" alt=""/></p>
<p>Eric Brewer, now vice-president of infrastructure at Google and a professor emeritus of computer science at the University of California, Berkeley, formulated the original theorem. In 2000, Brewer gave a keynote called “Towards Robust Distributed Systems” at the Principles of Distributed Computing conference.</p>
<p>In this keynote, he laid out the basic principles of the CAP theorem. Two years later, MIT researchers Seth Gilbert and Nancy Lynch proved the theorem in their paper “Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services.” And in the years since, others have even provided handy <a href="https://mwhittaker.github.io/blog/an%5Fillustrated%5Fproof%5Fof%5Fthe%5Fcap%5Ftheorem/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">illustrated guides</a> to the proof.</p>
<p>According to Brewer, the <a href="https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">original inspiration</a> for the CAP theorem resulted from discussions in the mid-1990s about building “cluster-based wide-area systems,” including search engines, proxy caches, and content distribution systems. At the time, he writes, revenue goals and contract specifications ensured “system availability was at a premium.” The CAP theorem emerged due to facing this premium and hitting limits in availability or consistency.</p>
<p>Two decades later, the CAP theorem stands tall – whether as a monument or a target.</p>
<h2 id="consistency-availability-and-partition-tolerance--you-can-only-pick-two-or-can-you"><a href="#consistency-availability-and-partition-tolerance--you-can-only-pick-two-or-can-you">Consistency, Availability, and Partition Tolerance – You Can Only Pick Two (or Can You?)</a></h2>
<p>The CAP theorem plays off a classic saying – “Fast, cheap, and good, but you can only pick two.” It’s an evocative way to explain tradeoffs. Just as an artist can’t turn around a beautiful portrait without a high price tag or a long timeline, distributed systems face limits after being partitioned and made to be both consistent and available.</p>
<p>In reality, however, the triplicate model doesn’t quite match. The inherent instability of networks makes partitioning necessary, meaning you have to choose between consistency and availability.</p>
<p>One of the biggest mistakes in distributed computing is the assumption that networks can be fully reliable (the first of the eight <a href="https://en.wikipedia.org/wiki/Fallacies%5Fof%5Fdistributed%5Fcomputing?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">fallacies of distributed computing</a> described by Sun Microsystems). As <a href="https://robertgreiner.com/cap-theorem-revisited/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Robert Greiner</a> writes, “Networks and parts of networks go down frequently and unexpectedly. Network failures happen to your system and you don&#x27;t get to choose when they occur.”</p>
<p>Distributed systems <em>have to</em> tolerate partitions. That third of the CAP theorem is chosen ahead of time, leaving you only two dials to turn: Consistency and Availability.</p>
<p>The choice between consistency and availability can be broad or narrow, expanding to entire systems and products or narrowed to particular use cases and functions.</p>
<p>Some companies choose to be either AP or CP, meaning they prioritize availability over consistency (or vice versa). <a href="https://www.cockroachlabs.com/blog/limits-of-the-cap-theorem/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Cockroach Labs</a>, for example, “chooses consistency, and is therefore a CP system in the terminology of the CAP theorem (as opposed to an AP system, which favors availability over consistency).”</p>
<p>Other examples include <a href="https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">ZooKeeper</a> and <a href="https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Facebook</a>, which both relax availability and <a href="https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Amazon Dynamo</a> and <a href="https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Yahoo’s PNUTS system</a>, which both relax consistency.</p>
<p>For many systems, however, CP vs. AP is not a binary decision one needs to make at the outset and then bake into the system. Many systems are dynamic and can be configured in a CP or AP style depending on different use cases and requests. Every implementation takes place somewhere on the spectrum between the two.</p>
<p>Daniel J. Abadi, then computer science professor at Yale University, even rewrote CAP as <a href="https://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">PACELC</a> to illustrate this spectrum: “If there is a partition (P), how does the system trade off availability and consistency (A and C); else (E), when the system is running normally in the absence of partitions, how does the system trade off latency (L) and consistency (C)?”</p>
<p>Brewer himself points out this nuance, <a href="https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">writing</a>, “The choice between C and A can occur many times within the same system at very fine granularity; not only can subsystems make different choices, but the choice can change according to the operation or even the specific data or user involved.”</p>
<p>In some contexts, the binary nature of this choice recedes even further. At Figma, for example, the tradeoffs are “<a href="https://newsletter.pragmaticengineer.com/p/inside-figmas-engineering-culture?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">relatively subtle</a>.”</p>
<p>“Anyone who&#x27;s looked into CAP theorem discovers that tradeoffs aren’t as scary as they first seem,” writes Figma CTO Kris Rasmussen. “They result in important but relatively subtle trade-offs most people don&#x27;t notice. In our case, we took a tradeoff on availability: if the application process on the server were to go down, clients are temporarily unable to load a file. These failures happen so rarely, and we’re now able to resolve them so quickly that it’s unlikely you’ll even notice.”</p>
<p>This subtlety deepens when you realize, as Brewer writes, that these properties are more continuous than strictly binary. “Availability is obviously continuous from 0 to 100 percent,” he writes, “but there are also many levels of consistency, and even partitions have nuances, including disagreement within the system about whether a partition exists.”</p>
<h2 id="how-developers-can-use-the-cap-theorem"><a href="#how-developers-can-use-the-cap-theorem">How Developers Can Use the CAP Theorem</a></h2>
<p>At first glance, the CAP theorem looks too complex or too simple to be useful to many developers.</p>
<p>If you don’t know the acronym and its nuances, it’ll feel awkward to reference and unwieldy. But once you do know the basics, your knowledge can appear misleadingly superficial. As soon as you learn what C, A, and P stand for, after all, you learn it’s not quite as simple as picking two of them.</p>
<p>For developers unfamiliar with distributed systems engineering, however, the CAP theorem provides a way into the discussion around distributed systems and a lens through which to make informed technical decisions. With just a little more understanding, developers can gain a new way of making technical decisions in distributed systems contexts.</p>
<p>As Brewer wrote twelve years after its debut, the key is to remember, “There is an incredible range of flexibility for handling partitions and recovering from them.” Therefore, he continues, “The modern CAP goal should be to maximize combinations of consistency and availability that make sense for the specific application.” As you do so, think about how you can plan for how your system will operate during a partition and how it will recover afterward.</p>
<p>In this way of thinking, the CAP theorem is less of an absolute law from on high and more like a lens through which to weigh the tradeoffs of different decisions in complex systems.</p>
<p>“This expression of CAP served its purpose,” Brewer writes, “which was to open the minds of designers to a wider range of systems and tradeoffs.” Similarly, developers can use the CAP theorem to think through priorities and their consequences.</p>
<p>Developers can let the theorem map the decision set available, and by learning from how others have navigated this matrix, they can predict which choices will have the most optimal effects. As <a href="https://newsletter.pragmaticengineer.com/p/inside-figmas-engineering-culture?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Rasmussen writes</a>, “In practice, we expect the window in which things could go wrong to be very small. Even if a server crashes, we expect customers to not lose much work. This is a tradeoff we have to make.”</p>
<p>Here, theory and practice align: There are tradeoffs you have to make. Rasmussen writes, “The challenge for us and any other engineering team is to find the right set of trade-offs for our use case.”</p>
<h2 id="dont-let-mental-models-become-blinders"><a href="#dont-let-mental-models-become-blinders">Don’t Let Mental Models Become Blinders</a></h2>
<p>The CAP theorem is extremely useful – both for experienced distributed systems engineers and developers just barely building familiarity in the field – but it can be limiting if you totalize it.</p>
<p>Ben Darnell, CTO at Cockroach Labs, <a href="https://www.cockroachlabs.com/blog/limits-of-the-cap-theorem/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">puts it well</a>, writing, “The CAP theorem focuses on a single narrow tradeoff between consistency and availability, but this doesn’t cover all the causes of unavailability or solutions to unavailability.”</p>
<p>The CAP theorem is a lens that, used well, helps you see more clearly than you could otherwise. With the CAP theorem and its nuances in mind, developers can better parse distributed systems&#x27; complexity and consider the advantages and disadvantages of their technical decisions.</p>
<h2 id="readyset-is-an-ap-system"><a href="#readyset-is-an-ap-system">Readyset Is an AP system</a></h2>
<p>Readyset augments source-of-truth relational databases in mission-critical user-facing applications. Given its position in the stack, availability (and low latencies) trump consistency: Readyset speeds up all database reads that can tolerate relaxed consistency while still ensuring that developers have a straightforward path to service other reads that require stronger forms of consistency.</p>
<p><a href="https://readyset.io/?ref=blog.readyset.io" rel="noopener noreferrer" target="_blank">Try Readyset today</a></p><!--/$--></div><div role="separator" class="bg-border-layout-soft h-(--divider-thickness) w-full" style="--divider-thickness:1.5px"></div><div class="flex flex-col laptop:flex-row items-start laptop:items-center justify-between gap-4 rounded-4xl bg-surface-layout-1 p-8"><div class="flex flex-col gap-1"><p class="text-headline-5">Want to see Readyset in action?</p><p class="text-body-small text-content-layout-3">Book a demo and see how Readyset can accelerate your database.</p></div><a href="/book-a-demo"><button type="button" class="relative flex items-center justify-center min-w-max cursor-pointer select-none transition duration-fast ease-base transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-primary-soft focus-visible:ring-offset-2 focus-visible:ring-offset-surface-layout-1 active:scale-[0.98] active:origin-center text-button-medium py-3 px-4 rounded-2xl h-10 text-content-primary-solid bg-surface-primary-solid hover:bg-surface-primary-solid-hover active:bg-surface-primary-solid-active [&amp;_#loader]:border-t-content-primary-solid"><div class="flex items-center">Book a demo<div class="h-1 w-1"></div><svg aria-hidden="true" class="inline justify-self-center stroke-current h-5 w-5 min-w-5 stroke-[1.5px]" focusable="false"><use href="/icons/sprite-stroke.svg#arrow-right"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></div></button></a></div></div></div></div><div class="relative mx-auto container px-4 tablet:px-6 laptop:px-8 max-w-[1456px] flex flex-col gap-2 mt-40" id="related-articles"><div class="w-full flex flex-col gap-8"><div class="flex flex-col items-center gap-2 max-w-2xl mx-auto"><p class="text-headline-2 text-center">Related articles</p><p class="text-body-large text-content-layout-3 text-center">Continue reading more about <!-- -->engineering<!-- -->.</p></div><div class="grid grid-cols-1 laptop:grid-cols-3 gap-6"><a href="/blog/from-parser-combinators-to-hand-written-tdop-on-adopting-sqlparser-rs-at-readyset" class="group flex flex-col rounded-4xl bg-surface-layout-1 overflow-hidden transition-shadow hover:shadow-lg"><div class="aspect-[1200/630] w-full overflow-hidden"><img src="https://cms.readyset.io/files/articles/685ec3bcd35a380001bdc84a/278e9f5c450a7a5e76662334.png" alt="From parser combinators to hand-written TDOP: On adopting sqlparser-rs at Readyset" loading="lazy" decoding="async" class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"/></div><div class="flex flex-col gap-3 p-6 flex-1"><span class="inline-block w-fit px-3 py-1 rounded-full bg-surface-layout-2 text-body-small text-content-layout-3">Engineering</span><h3 class="text-headline-5 line-clamp-2">From parser combinators to hand-written TDOP: On adopting sqlparser-rs at Readyset</h3><p class="text-body-small text-content-layout-3 line-clamp-3 flex-1">How Readyset replaced its homegrown SQL parser with sqlparser-rs, improving performance, reducing maintenance overhead, and tackling a years long backlog of parsing edge cases along the way.</p><div class="flex items-center justify-between pt-2"><div class="flex items-center gap-2"><img src="https://cms.readyset.io/files/authors/685ec350d35a380001bdc847/cf82212f951b54caa591da19.bin" alt="Michael Victor Zink" loading="lazy" decoding="async" class="w-5 h-5 rounded-full object-cover"/><span class="text-body-small text-content-layout-2">Michael Victor Zink</span></div><div class="flex items-center gap-2 text-body-small text-content-layout-3"><span>2026-05-21</span><span>·</span><span>19 min read</span></div></div></div></a><a href="/blog/how-readyset-rewrites-your-sql-inside-the-query-transformation-pipeline" class="group flex flex-col rounded-4xl bg-surface-layout-1 overflow-hidden transition-shadow hover:shadow-lg"><div class="aspect-[1200/630] w-full overflow-hidden"><img src="https://cms.readyset.io/files/articles/69e0ecfcc7c1890001704557/87812e3810a9d2486b58d8ef.png" alt="How Readyset Rewrites Your SQL: Inside the Query Transformation Pipeline" loading="lazy" decoding="async" class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"/></div><div class="flex flex-col gap-3 p-6 flex-1"><span class="inline-block w-fit px-3 py-1 rounded-full bg-surface-layout-2 text-body-small text-content-layout-3">Engineering</span><h3 class="text-headline-5 line-clamp-2">How Readyset Rewrites Your SQL: Inside the Query Transformation Pipeline</h3><p class="text-body-small text-content-layout-3 line-clamp-3 flex-1">Why Query Rewriting Matters for Dataflow
Most databases work the same way: a query arrives, the engine builds an execution plan, scans tables, joins rows, filters, aggregates, and returns the result. Every time the query runs, the work repeats from scratch. This pull-based model has served relational databases for decades, but it carries an inherent cost: read latency is proportional to the complexity of the query and the size of the data it touches.
Readyset takes a fundamentally different ap</p><div class="flex items-center justify-between pt-2"><div class="flex items-center gap-2"><img src="/images/blog-placeholder.svg" alt="Vassili Zarouba" loading="lazy" decoding="async" class="w-5 h-5 rounded-full object-cover"/><span class="text-body-small text-content-layout-2">Vassili Zarouba</span></div><div class="flex items-center gap-2 text-body-small text-content-layout-3"><span>2026-04-28</span><span>·</span><span>17 min read</span></div></div></div></a><a href="/blog/brutal-review-and-the-new-80-20-rule" class="group flex flex-col rounded-4xl bg-surface-layout-1 overflow-hidden transition-shadow hover:shadow-lg"><div class="aspect-[1200/630] w-full overflow-hidden"><img src="https://cms.readyset.io/files/articles/697c3379659cb2000121d663/8758b0dad3d18879b702eda4.png" alt="/brutal-review and the new 80/20 rule" loading="lazy" decoding="async" class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"/></div><div class="flex flex-col gap-3 p-6 flex-1"><span class="inline-block w-fit px-3 py-1 rounded-full bg-surface-layout-2 text-body-small text-content-layout-3">Engineering</span><h3 class="text-headline-5 line-clamp-2">/brutal-review and the new 80/20 rule</h3><p class="text-body-small text-content-layout-3 line-clamp-3 flex-1">(Mistakes and em-dashes are my own.)
We have a Claude Code command in our monorepo which is a good example of what I’m calling the &quot;80/20 token rule&quot;: if it takes 20M LLM tokens to write a feature, you should spend 80M on ensuring quality: safety measures, testing, and of course code review. If software quality was an open problem before, then agentic engineering has blown it even more wide opener.
At a high level, here&#x27;s what it does:
1. Read the patch to review and all related code.
2. Ha</p><div class="flex items-center justify-between pt-2"><div class="flex items-center gap-2"><img src="https://cms.readyset.io/files/authors/685ec350d35a380001bdc847/cf82212f951b54caa591da19.bin" alt="Michael Victor Zink" loading="lazy" decoding="async" class="w-5 h-5 rounded-full object-cover"/><span class="text-body-small text-content-layout-2">Michael Victor Zink</span></div><div class="flex items-center gap-2 text-body-small text-content-layout-3"><span>2026-02-03</span><span>·</span><span>22 min read</span></div></div></div></a></div></div></div><div class="relative mx-auto container px-4 tablet:px-6 laptop:px-8 max-w-[1456px] flex flex-col gap-2 mt-20 mb-12" id="hero"><div class="w-full gap-4 flex flex-col"><div class="rounded-[80px] bg-surface-layout-1 w-full"><div class="flex flex-col justify-center items-center gap-8 w-full max-w-3xl mx-auto py-44"><h2 class="text-display-medium text-center">Still scaling the hard way?</h2><p class="text-body-large text-content-layout-3 text-center">Modern applications demand instant performance, even under unpredictable load. Readyset helps you eliminate slow queries, stabilize latency, and scale confidently.</p><div class="flex justify-center items-center gap-4"><a href="/book-a-demo"><button type="button" class="relative flex items-center justify-center min-w-max cursor-pointer select-none transition duration-fast ease-base transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-primary-soft focus-visible:ring-offset-2 focus-visible:ring-offset-surface-layout-1 active:scale-[0.98] active:origin-center text-button-medium py-3 px-4 rounded-3xl h-12 text-content-primary-soft border border-border-primary-soft bg-transparent hover:bg-surface-primary-soft-hover active:bg-surface-primary-soft-active [&amp;_#loader]:border-t-content-primary-soft"><div class="flex items-center">Contact Sales<div class="h-1 w-1"></div><svg aria-hidden="true" class="inline justify-self-center stroke-current h-5 w-5 min-w-5 stroke-[1.5px]" focusable="false"><use href="/icons/sprite-stroke.svg#arrow-right"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></div></button></a><a href="/book-a-demo"><button type="button" class="relative flex items-center justify-center min-w-max cursor-pointer select-none transition duration-fast ease-base transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-primary-soft focus-visible:ring-offset-2 focus-visible:ring-offset-surface-layout-1 active:scale-[0.98] active:origin-center text-button-medium py-3 px-4 rounded-3xl h-12 text-content-primary-solid bg-surface-primary-solid hover:bg-surface-primary-solid-hover active:bg-surface-primary-solid-active [&amp;_#loader]:border-t-content-primary-solid"><div class="flex items-center">Start for free<div class="h-1 w-1"></div><svg aria-hidden="true" class="inline justify-self-center stroke-current h-5 w-5 min-w-5 stroke-[1.5px]" focusable="false"><use href="/icons/sprite-stroke.svg#arrow-right"></use></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></div></button></a></div></div><div role="separator" class="bg-border-layout-soft h-(--divider-thickness) w-full" style="--divider-thickness:1.5px"></div><div class="flex justify-between items-center w-full py-12 px-12"><div class="flex flex-col gap-2"><p class="text-headline-2 text-content-layout-1 text-left">Revolutionize your database performance with Readyset</p><p class="text-body-large text-content-layout-2">Serve requests at sub-millisecond latencies with the modern database scaling and query caching system for MySQL and PostgreSQL.</p></div><div class="hidden laptop:block"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 145 33" class="fill-current text-content-layout-1 h-6"><path d="M16 31.328c0 .736-.597 1.333-1.333 1.333H4a4 4 0 0 1-4-4V17.994c0-.736.597-1.333 1.333-1.333H16v14.667Z"></path><path d="M21.333 11.328v5.333h-4c-.736 0-1.333.597-1.333 1.333v4h-5.333v-5.333h4c.736 0 1.333-.597 1.333-1.333v-4h5.333Z"></path><path d="M32 15.328c0 .736-.597 1.333-1.333 1.333H16V1.994c0-.736.597-1.333 1.333-1.333H28a4 4 0 0 1 4 4v10.667Z"></path><path fill-rule="evenodd" d="M91.272 5.367h2.864V23.25h-2.864v-1.99c-1.145 1.45-2.665 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.9 0 3.42.722 4.557 2.164V5.367Zm-3.997 15.308c1.146 0 2.096-.386 2.852-1.157.763-.779 1.145-1.74 1.145-2.885 0-1.152-.382-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.764.77-1.145 1.732-1.145 2.884 0 1.145.381 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm-24.258-2.898c.05-.364.075-.737.075-1.119 0-1.956-.652-3.581-1.955-4.874-1.295-1.302-2.918-1.953-4.87-1.953-1.278 0-2.444.295-3.498.883a6.442 6.442 0 0 0-2.466 2.438c-.597 1.028-.896 2.172-.896 3.432 0 1.948.68 3.577 2.042 4.887 1.37 1.31 3.084 1.965 5.143 1.965 1.203 0 2.32-.24 3.35-.722 1.037-.48 1.892-1.144 2.564-1.99l-1.93-1.653c-.39.514-.938.94-1.643 1.28-.698.34-1.453.51-2.267.51-1.054 0-1.959-.277-2.714-.833-.747-.563-1.237-1.314-1.47-2.25h10.535Zm-9.19-4.538c.69-.556 1.494-.834 2.416-.834.93 0 1.74.278 2.428.834.697.555 1.154 1.289 1.37 2.2h-7.584c.233-.911.69-1.645 1.37-2.2Zm21.469-3.166h2.863V23.25h-2.864v-1.99c-1.145 1.45-2.664 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.901 0 3.42.722 4.558 2.164v-1.922Zm-3.998 10.602c1.146 0 2.096-.386 2.852-1.157.764-.779 1.145-1.74 1.145-2.885 0-1.152-.381-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.763.77-1.145 1.732-1.145 2.884 0 1.145.382 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm35.186-10.602h3.188L102.941 25.6l-1.027 2.356h-3.319c.461-.939 1.313-2.68 1.718-3.537l.697-1.443-5.51-12.902h3.275l3.842 9.532 3.867-9.532Zm8.586 13.363c-2.092 0-3.894-.664-5.405-1.99l1.482-2.015c1.071 1.02 2.362 1.53 3.873 1.53.755 0 1.374-.124 1.855-.373.482-.257.722-.61.722-1.057a.93.93 0 0 0-.161-.535c-.1-.157-.225-.29-.374-.398-.141-.108-.353-.211-.635-.31-.282-.1-.531-.179-.747-.237a25.515 25.515 0 0 0-.884-.224l-.934-.224a16.527 16.527 0 0 1-.909-.286 6.683 6.683 0 0 1-.909-.373 5.835 5.835 0 0 1-.76-.497 2.716 2.716 0 0 1-.647-.672 3.57 3.57 0 0 1-.561-1.952c0-.862.241-1.6.722-2.213a4.153 4.153 0 0 1 1.868-1.343c.764-.29 1.627-.436 2.59-.436 1.901 0 3.549.577 4.944 1.729l-1.507 2.014c-.996-.845-2.125-1.268-3.387-1.268-.672 0-1.228.112-1.668.336-.432.224-.648.551-.648.982 0 .166.029.315.087.448a.93.93 0 0 0 .299.36c.15.108.291.2.423.274.133.075.328.153.586.236l.66.187.772.174c.373.083.68.157.921.224.249.058.552.149.909.273a4.943 4.943 0 0 1 1.669.87c.266.2.477.42.635.66.166.232.299.514.398.845.108.332.162.693.162 1.082 0 .87-.245 1.63-.734 2.276-.49.638-1.142 1.115-1.955 1.43-.806.315-1.723.473-2.752.473Zm20.26-6.778c0 .382-.025.755-.075 1.12h-10.534c.232.936.722 1.687 1.469 2.25.755.556 1.66.833 2.715.833.813 0 1.569-.17 2.266-.51.706-.34 1.254-.766 1.644-1.28l1.93 1.654c-.673.845-1.528 1.508-2.565 1.99-1.03.48-2.146.72-3.35.72-2.059 0-3.773-.654-5.143-1.964-1.361-1.31-2.042-2.94-2.042-4.887 0-1.26.299-2.404.897-3.432a6.436 6.436 0 0 1 2.465-2.438c1.054-.588 2.221-.883 3.499-.883 1.951 0 3.574.651 4.869 1.953 1.303 1.293 1.955 2.918 1.955 4.874Zm-6.849-4.253c-.921 0-1.726.278-2.415.834-.681.555-1.138 1.289-1.37 2.2h7.583c-.216-.911-.672-1.645-1.37-2.2-.689-.556-1.498-.834-2.428-.834Zm15.99.255h-3.674v6.212c0 .597.162 1.049.486 1.355.332.299.801.448 1.407.448.573 0 1.166-.15 1.781-.448v2.674c-.706.356-1.499.535-2.379.535-1.37 0-2.403-.361-3.1-1.082-.698-.722-1.046-1.729-1.046-3.022V12.66h-2.205v-2.587h2.205V5.367h2.851v4.706h3.674v2.587ZM48.869 9.873h-.49c-1.673 0-3.033.712-4.08 2.135v-1.935h-2.887V23.25h2.887v-6.434c0-1.222.36-2.189 1.08-2.9.728-.72 1.729-1.08 3-1.08h.49V9.873Z" clip-rule="evenodd"></path></svg></div></div><div role="separator" class="bg-border-layout-soft h-(--divider-thickness) w-full" style="--divider-thickness:1.5px"></div><div class="grid grid-cols-1 laptop:grid-cols-[1fr_1fr_2fr] w-full py-12 px-12 gap-8"><div class="flex flex-col gap-4"><p class="text-headline-5 text-content-layout-1 text-left">Product</p><div class="flex flex-col gap-2"><a href="/products/readyset-cloud" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Readyset Cloud</a><a href="/products/readyset-private" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Readyset Private</a><a href="/products/readyset-community" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Readyset Community</a><a href="/tools/querypilot" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">QueryPilot</a><a href="/tools/rdst" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">rdst CLI</a><a href="/pricing" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Pricing</a></div></div><div class="flex flex-col gap-8"><div class="flex flex-col gap-4"><p class="text-headline-5 text-content-layout-1 text-left">Resources</p><div class="flex flex-col gap-2"><a class="text-content-layout-2 hover:text-content-layout-1 transition-colors active" href="/blog" data-status="active" aria-current="page">Blog</a><a href="/case-studies" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Case Studies</a><a href="/resources/company" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Company</a><a href="https://docs.readyset.io" target="_blank" rel="noopener noreferrer" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Documentation</a></div></div><div class="flex flex-col gap-4"><p class="text-headline-5 text-content-layout-1 text-left">Legal</p><div class="flex flex-col gap-2"><a href="/privacy-policy" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Privacy Policy</a><a href="/term-of-use" class="text-content-layout-2 hover:text-content-layout-1 transition-colors">Terms of Service</a></div></div></div><div class="flex flex-col gap-4"><p class="text-headline-5 text-content-layout-1 text-left">Join our newsletter</p><p class="text-body-small text-content-layout-3 text-left">Stay updated with the latest news, insights, and developments from Readyset — straight to your inbox.</p><form class="flex flex-col gap-2 w-full"><div class="flex gap-2 w-full"><div class="relative w-full text-content-layout-1"><input type="email" class="flex h-10 w-full rounded-lg border-(length:--border-base) border-border-layout-1 bg-surface-layout-2 px-3 py-2 text-body-medium placeholder:text-content-layout-3 focus-visible:outline-none focus-visible:shadow-focus disabled:cursor-not-allowed disabled:opacity-50" aria-label="Email address" placeholder="your@email.address" autoComplete="email" value=""/></div><button type="submit" class="relative flex items-center justify-center min-w-max cursor-pointer select-none transition duration-fast ease-base transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-primary-soft focus-visible:ring-offset-2 focus-visible:ring-offset-surface-layout-1 active:scale-[0.98] active:origin-center text-button-medium py-3 px-4 rounded-2xl h-10 text-content-primary-solid bg-surface-primary-solid hover:bg-surface-primary-solid-hover active:bg-surface-primary-solid-active [&amp;_#loader]:border-t-content-primary-solid"><div class="flex items-center">Subscribe</div></button></div></form></div></div><div role="separator" class="bg-border-layout-soft h-(--divider-thickness) w-full" style="--divider-thickness:1.5px"></div><div class="flex flex-col laptop:flex-row laptop:justify-between laptop:items-center gap-4 w-full py-12 px-12"><div class="flex items-center gap-6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 145 33" class="fill-current text-content-layout-1 h-6"><path d="M16 31.328c0 .736-.597 1.333-1.333 1.333H4a4 4 0 0 1-4-4V17.994c0-.736.597-1.333 1.333-1.333H16v14.667Z"></path><path d="M21.333 11.328v5.333h-4c-.736 0-1.333.597-1.333 1.333v4h-5.333v-5.333h4c.736 0 1.333-.597 1.333-1.333v-4h5.333Z"></path><path d="M32 15.328c0 .736-.597 1.333-1.333 1.333H16V1.994c0-.736.597-1.333 1.333-1.333H28a4 4 0 0 1 4 4v10.667Z"></path><path fill-rule="evenodd" d="M91.272 5.367h2.864V23.25h-2.864v-1.99c-1.145 1.45-2.665 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.9 0 3.42.722 4.557 2.164V5.367Zm-3.997 15.308c1.146 0 2.096-.386 2.852-1.157.763-.779 1.145-1.74 1.145-2.885 0-1.152-.382-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.764.77-1.145 1.732-1.145 2.884 0 1.145.381 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm-24.258-2.898c.05-.364.075-.737.075-1.119 0-1.956-.652-3.581-1.955-4.874-1.295-1.302-2.918-1.953-4.87-1.953-1.278 0-2.444.295-3.498.883a6.442 6.442 0 0 0-2.466 2.438c-.597 1.028-.896 2.172-.896 3.432 0 1.948.68 3.577 2.042 4.887 1.37 1.31 3.084 1.965 5.143 1.965 1.203 0 2.32-.24 3.35-.722 1.037-.48 1.892-1.144 2.564-1.99l-1.93-1.653c-.39.514-.938.94-1.643 1.28-.698.34-1.453.51-2.267.51-1.054 0-1.959-.277-2.714-.833-.747-.563-1.237-1.314-1.47-2.25h10.535Zm-9.19-4.538c.69-.556 1.494-.834 2.416-.834.93 0 1.74.278 2.428.834.697.555 1.154 1.289 1.37 2.2h-7.584c.233-.911.69-1.645 1.37-2.2Zm21.469-3.166h2.863V23.25h-2.864v-1.99c-1.145 1.45-2.664 2.175-4.557 2.175-1.204 0-2.296-.294-3.275-.882a6.299 6.299 0 0 1-2.304-2.45c-.548-1.036-.822-2.193-.822-3.47 0-1.276.274-2.433.822-3.469a6.209 6.209 0 0 1 2.304-2.437c.98-.597 2.071-.896 3.275-.896 1.901 0 3.42.722 4.558 2.164v-1.922Zm-3.998 10.602c1.146 0 2.096-.386 2.852-1.157.764-.779 1.145-1.74 1.145-2.885 0-1.152-.381-2.114-1.145-2.884-.756-.78-1.706-1.17-2.852-1.17-1.154 0-2.117.39-2.889 1.17-.763.77-1.145 1.732-1.145 2.884 0 1.145.382 2.106 1.145 2.885.772.771 1.735 1.157 2.89 1.157Zm35.186-10.602h3.188L102.941 25.6l-1.027 2.356h-3.319c.461-.939 1.313-2.68 1.718-3.537l.697-1.443-5.51-12.902h3.275l3.842 9.532 3.867-9.532Zm8.586 13.363c-2.092 0-3.894-.664-5.405-1.99l1.482-2.015c1.071 1.02 2.362 1.53 3.873 1.53.755 0 1.374-.124 1.855-.373.482-.257.722-.61.722-1.057a.93.93 0 0 0-.161-.535c-.1-.157-.225-.29-.374-.398-.141-.108-.353-.211-.635-.31-.282-.1-.531-.179-.747-.237a25.515 25.515 0 0 0-.884-.224l-.934-.224a16.527 16.527 0 0 1-.909-.286 6.683 6.683 0 0 1-.909-.373 5.835 5.835 0 0 1-.76-.497 2.716 2.716 0 0 1-.647-.672 3.57 3.57 0 0 1-.561-1.952c0-.862.241-1.6.722-2.213a4.153 4.153 0 0 1 1.868-1.343c.764-.29 1.627-.436 2.59-.436 1.901 0 3.549.577 4.944 1.729l-1.507 2.014c-.996-.845-2.125-1.268-3.387-1.268-.672 0-1.228.112-1.668.336-.432.224-.648.551-.648.982 0 .166.029.315.087.448a.93.93 0 0 0 .299.36c.15.108.291.2.423.274.133.075.328.153.586.236l.66.187.772.174c.373.083.68.157.921.224.249.058.552.149.909.273a4.943 4.943 0 0 1 1.669.87c.266.2.477.42.635.66.166.232.299.514.398.845.108.332.162.693.162 1.082 0 .87-.245 1.63-.734 2.276-.49.638-1.142 1.115-1.955 1.43-.806.315-1.723.473-2.752.473Zm20.26-6.778c0 .382-.025.755-.075 1.12h-10.534c.232.936.722 1.687 1.469 2.25.755.556 1.66.833 2.715.833.813 0 1.569-.17 2.266-.51.706-.34 1.254-.766 1.644-1.28l1.93 1.654c-.673.845-1.528 1.508-2.565 1.99-1.03.48-2.146.72-3.35.72-2.059 0-3.773-.654-5.143-1.964-1.361-1.31-2.042-2.94-2.042-4.887 0-1.26.299-2.404.897-3.432a6.436 6.436 0 0 1 2.465-2.438c1.054-.588 2.221-.883 3.499-.883 1.951 0 3.574.651 4.869 1.953 1.303 1.293 1.955 2.918 1.955 4.874Zm-6.849-4.253c-.921 0-1.726.278-2.415.834-.681.555-1.138 1.289-1.37 2.2h7.583c-.216-.911-.672-1.645-1.37-2.2-.689-.556-1.498-.834-2.428-.834Zm15.99.255h-3.674v6.212c0 .597.162 1.049.486 1.355.332.299.801.448 1.407.448.573 0 1.166-.15 1.781-.448v2.674c-.706.356-1.499.535-2.379.535-1.37 0-2.403-.361-3.1-1.082-.698-.722-1.046-1.729-1.046-3.022V12.66h-2.205v-2.587h2.205V5.367h2.851v4.706h3.674v2.587ZM48.869 9.873h-.49c-1.673 0-3.033.712-4.08 2.135v-1.935h-2.887V23.25h2.887v-6.434c0-1.222.36-2.189 1.08-2.9.728-.72 1.729-1.08 3-1.08h.49V9.873Z" clip-rule="evenodd"></path></svg><ul class="flex items-center gap-3"><li><a href="https://github.com/readysettech/readyset" aria-label="Readyset on GitHub" target="_blank" rel="noopener noreferrer" class="text-content-layout-3 hover:text-content-layout-1 transition-colors block"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="size-5"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.31.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2Z"></path></svg></a></li><li><a href="https://www.linkedin.com/company/readysettech" aria-label="Readyset on LinkedIn" target="_blank" rel="noopener noreferrer" class="text-content-layout-3 hover:text-content-layout-1 transition-colors block"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="size-5"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.026-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286ZM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.063 2.063 0 1 1 2.063 2.065Zm1.782 13.019H3.555V9H7.12v11.452ZM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.226.792 24 1.771 24h20.451C23.2 24 24 23.226 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003Z"></path></svg></a></li><li><a href="https://x.com/readysetio" aria-label="Readyset on X" target="_blank" rel="noopener noreferrer" class="text-content-layout-3 hover:text-content-layout-1 transition-colors block"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="size-5"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231Zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77Z"></path></svg></a></li><li><a href="https://www.youtube.com/@readyset" aria-label="Readyset on YouTube" target="_blank" rel="noopener noreferrer" class="text-content-layout-3 hover:text-content-layout-1 transition-colors block"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="size-5"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814ZM9.545 15.568V8.432L15.818 12l-6.273 3.568Z"></path></svg></a></li><li><a href="https://go.readyset.io/community" aria-label="Readyset community Slack" target="_blank" rel="noopener noreferrer" class="text-content-layout-3 hover:text-content-layout-1 transition-colors block"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="size-5"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52ZM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313ZM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834ZM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312ZM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834ZM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312ZM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52ZM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313Z"></path></svg></a></li></ul></div><div class="flex flex-col laptop:flex-row laptop:items-center gap-2 laptop:gap-6"><button type="button" class="text-content-layout-2 hover:text-content-layout-1 transition-colors text-left cursor-pointer">Cookie preferences</button><p class="text-body-large text-content-layout-2">© <!-- -->2026<!-- --> Readyset. All rights reserved.</p></div></div></div></div></div><!--/$--><!--/$--></main><script nonce="th0//p+Gz1aytWYEh3rCRA==" class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-CgozBq9o.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-CgozBq9o.js"}}]},"/blog/$slug":$R[8]={preloads:$R[9]=["/assets/_slug-feOgb-yl.js","/assets/article-card-BslrmY68.js","/assets/newsletter-popup-C0xZnHQP.js","/assets/rich-markdown-DYApPWH1.js","/assets/index-rMShz_NE.js","/assets/use-disclosure-DaTsKJMJ.js"]}}},matches:$R[10]=[$R[11]={i:"__root__",u:1789054057941,s:"success",l:$R[12]={siteSettings:$R[13]={top_banner:$R[14]={enabled:!1,message:"",href:"",modifier:"info"},newsletter_popup:$R[15]={homepage:$R[16]={enabled:!0,title:"",description:""},blog:$R[17]={enabled:!0,title:"",description:""},blog_post:$R[18]={enabled:!0,title:"",description:""}},footer_tagline:"Revolutionize your database performance with Readyset",footer_subtagline:"Serve requests at sub-millisecond latencies with the modern database scaling and query caching system for MySQL and PostgreSQL.",footer_cta:$R[19]={title:"Still scaling the hard way?",description:"Modern applications demand instant performance, even under unpredictable load. Readyset helps you eliminate slow queries, stabilize latency, and scale confidently.",actions:$R[20]=[$R[21]={label:"Contact Sales",variant:"primary",modifier:"outline",full_width:!1,href:"/book-a-demo"},$R[22]={label:"Start for free",variant:"primary",modifier:"solid",full_width:!1,href:"/book-a-demo"}]},nav_links:$R[23]=[$R[24]={label:"Products",href:"/products/readyset-cloud",children:$R[25]=[$R[26]={label:"Readyset Community",href:"/products/readyset-community",description:"Run Readyset on your own infrastructure with full control and flexibility.",icon:"oval"},$R[27]={label:"Readyset Private",href:"/products/readyset-private",description:"Self-hosted enterprise deployment with licensed support.",icon:"secured-network"},$R[28]={label:"Readyset Cloud",href:"/products/readyset-cloud",description:"Fully managed caching for Postgres and MySQL, no infrastructure required.",icon:"cloud-server"}]},$R[29]={label:"Solutions",href:"/solutions/instant-performance",children:$R[30]=[$R[31]={label:"Instant Performance",href:"/solutions/instant-performance",description:"Sub-millisecond reads at scale.",icon:""},$R[32]={label:"Database Cost Efficiency",href:"/solutions/database-cost-efficiency",description:"Scale reads without scaling spend.",icon:""},$R[33]={label:"Drop-in Deployment",href:"/solutions/drop-in-deployment",description:"No rewrites, no schema changes.",icon:""},$R[34]={label:"Real-Time Cache Freshness",href:"/solutions/real-time-cache-freshness",description:"Cached reads that stay correct as data changes.",icon:""},$R[35]={label:"Automatic Query Caching",href:"/solutions/automatic-query-caching",description:"Auto-identified, auto-maintained caches.",icon:""},$R[36]={label:"Agent Workloads",href:"/solutions/agent-workloads",description:"Protect databases from agent-driven queries.",icon:""}]},$R[37]={label:"Resources",href:"/blog",children:$R[38]=[$R[39]={label:"Blog",href:"/blog",description:"",icon:""},$R[40]={label:"Case Studies",href:"/case-studies",description:"",icon:""},$R[41]={label:"Pricing",href:"/pricing",description:"",icon:""},$R[42]={label:"Company",href:"/resources/company",description:"",icon:""}]}],footer_links:$R[43]=[$R[44]={column_label:"Product",items:$R[45]=[$R[46]={label:"Readyset Cloud",href:"/products/readyset-cloud",external:!1},$R[47]={label:"Readyset Private",href:"/products/readyset-private",external:!1},$R[48]={label:"Readyset Community",href:"/products/readyset-community",external:!1},$R[49]={label:"QueryPilot",href:"/tools/querypilot",external:!1},$R[50]={label:"rdst CLI",href:"/tools/rdst",external:!1},$R[51]={label:"Pricing",href:"/pricing",external:!1}]},$R[52]={column_label:"Resources",items:$R[53]=[$R[54]={label:"Blog",href:"/blog",external:!1},$R[55]={label:"Case Studies",href:"/case-studies",external:!1},$R[56]={label:"Company",href:"/resources/company",external:!1},$R[57]={label:"Documentation",href:"https://docs.readyset.io",external:!0}]},$R[58]={column_label:"Legal",items:$R[59]=[$R[60]={label:"Privacy Policy",href:"/privacy-policy",external:!1},$R[61]={label:"Terms of Service",href:"/term-of-use",external:!1}]}],social_links:$R[62]=[$R[63]={platform:"github",href:"https://github.com/readysettech/readyset",label:"Readyset on GitHub"},$R[64]={platform:"linkedin",href:"https://www.linkedin.com/company/readysettech",label:"Readyset on LinkedIn"},$R[65]={platform:"twitter",href:"https://x.com/readysetio",label:"Readyset on X"},$R[66]={platform:"youtube",href:"https://www.youtube.com/@readyset",label:"Readyset on YouTube"},$R[67]={platform:"slack",href:"https://go.readyset.io/community",label:"Readyset community Slack"}],logo:$R[68]={full:"",icon:"",alt:"Readyset"},slug:"default"}},ssr:!0},$R[69]={i:"blog$slugbloga-developers-guide-to-the-cap-theorem",u:1789054057944,s:"success",l:$R[70]={article:$R[71]={id:"332a0fa5-d7fe-42d2-8330-a3e7b88ae13b",slug:"a-developers-guide-to-the-cap-theorem",title:"The Role of CAP Theorem in Modern Day Distributed Systems",excerpt:"Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems?\n\nStumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how others might feel walking into an argument amongst developers about which IDE is the best or which code editor is most productive. It’s hard to get your bearings, much less figure out what to think yourself. \n\nHenry Robinson, Senior Staff Software Engineer at Slack, put it well, writ",updatedAt:1783974545002,category:$R[72]={id:"6b1ea9f5-4c46-4514-b97e-33bae55a2a49",slug:"engineering",name:"Engineering"},tags:$R[73]=[],image:"/images/blog-placeholder.svg",hasImage:!1,date:"2023-12-14",readTime:"8 min read",authors:$R[74]=[$R[75]={id:"552f3435-f728-4436-a6a1-23dba36ed422",slug:"neda",name:"Readyset",avatar:"https://cms.readyset.io/files/authors/657385d2b4c219000125f4cd/c0376b666550a188861d4a2d.bin",bio:""}],author:$R[75],content:"**Twenty years after its debut, what is the role of the CAP theorem in modern-day distributed systems?**\n\nStumbling across the CAP theorem is like walking into a discussion (or a debate) already in progress. Imagine how others might feel walking into an argument amongst developers about which IDE is the best or which code editor is most productive. It’s hard to get your bearings, much less figure out what to think yourself. \n\nHenry Robinson, Senior Staff Software Engineer at Slack, [put it](https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io) well, writing, “No subject appears to be more controversial to distributed systems engineers than the oft-quoted, oft-misunderstood CAP theorem.” The trouble for developers, however, is that you can’t treat it like a technical detail you can otherwise breeze past. \n\nOver the years, people have claimed to have “beaten” the CAP theorem, people have questioned its usefulness and its relevance, and still others have argued it’s more relevant than ever. And at the bottom of this discourse is a proof that makes the CAP theorem more than a merely abstract argument. \n\nIn other words, developers don’t have to be distributed systems engineers to be beholden to the CAP theorem. \n\nIn this article, we’ll walk you through the CAP theorem, explain the basics of why it works, and show how developers can put it into practice without needing to become distributed systems experts themselves. \n\n## The CAP Theorem: What It Is and Why It Matters\n\nLike all great theorems and frameworks, the CAP theorem is an acronym. CAP stands for Consistency, Availability, and Partition tolerance. Once you know the acronym, the theory itself is pretty simple: A distributed system cannot simultaneously be consistent, available, and partition tolerant.\n\nBefore proceeding, there’s a little nuance to explain. \n\nAccording to the theorem, availability means that “every request received by a non-failing node in the system must result in a response.” If a client sends a data change request, the server has to accept the change. Not every server has to be available, but there must be enough individual servers available in a cluster to handle the request.\n\nAccording to the theorem, partition tolerance means that “the network will be allowed to lose arbitrarily many messages sent from one node to another.”\n\nConsistency, sometimes the most confusing element, refers to [“strong” consistency](https://medium.com/@marton.waszlavik/demystifying-cap-theorem-eventual-consistency-and-exactly-once-delivery-guarantee-ed20cf7cc877?ref=blog.readyset.io). According to the theorem, “any read operation that begins after a write operation completes must return that value, or the result of a later write operation.” \n\nDon’t confuse this sense of consistency with the one in a related concept, ACID (atomicity, consistency, isolation, durability). In ACID, consistency refers to ensuring a database is consistent before and after a transaction via integrity constraints.\n\nAs Google engineer Michael Whittaker [illustrates below](https://mwhittaker.github.io/blog/an%5Fillustrated%5Fproof%5Fof%5Fthe%5Fcap%5Ftheorem/?ref=blog.readyset.io), an inconsistent system involves a client getting stale data.\n\n![](https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/41a8c4b0a13fb4ca619236e1.png)\n\nAnd a consistent system, as Whittaker illustrates again, is one where the client gets the most up-to-date data.\n\n![](https://cms.readyset.io/files/articles/657a356d94749d0001bf2b15/3b26d4f9d45e14b163baeb58.png)\n\nEric Brewer, now vice-president of infrastructure at Google and a professor emeritus of computer science at the University of California, Berkeley, formulated the original theorem. In 2000, Brewer gave a keynote called “Towards Robust Distributed Systems” at the Principles of Distributed Computing conference. \n\nIn this keynote, he laid out the basic principles of the CAP theorem. Two years later, MIT researchers Seth Gilbert and Nancy Lynch proved the theorem in their paper “Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services.” And in the years since, others have even provided handy [illustrated guides](https://mwhittaker.github.io/blog/an%5Fillustrated%5Fproof%5Fof%5Fthe%5Fcap%5Ftheorem/?ref=blog.readyset.io) to the proof. \n\nAccording to Brewer, the [original inspiration](https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io) for the CAP theorem resulted from discussions in the mid-1990s about building “cluster-based wide-area systems,” including search engines, proxy caches, and content distribution systems. At the time, he writes, revenue goals and contract specifications ensured “system availability was at a premium.” The CAP theorem emerged due to facing this premium and hitting limits in availability or consistency.\n\nTwo decades later, the CAP theorem stands tall – whether as a monument or a target. \n\n## Consistency, Availability, and Partition Tolerance – You Can Only Pick Two (or Can You?)\n\nThe CAP theorem plays off a classic saying – “Fast, cheap, and good, but you can only pick two.” It’s an evocative way to explain tradeoffs. Just as an artist can’t turn around a beautiful portrait without a high price tag or a long timeline, distributed systems face limits after being partitioned and made to be both consistent and available.\n\nIn reality, however, the triplicate model doesn’t quite match. The inherent instability of networks makes partitioning necessary, meaning you have to choose between consistency and availability. \n\nOne of the biggest mistakes in distributed computing is the assumption that networks can be fully reliable (the first of the eight [fallacies of distributed computing](https://en.wikipedia.org/wiki/Fallacies%5Fof%5Fdistributed%5Fcomputing?ref=blog.readyset.io) described by Sun Microsystems). As [Robert Greiner](https://robertgreiner.com/cap-theorem-revisited/?ref=blog.readyset.io) writes, “Networks and parts of networks go down frequently and unexpectedly. Network failures happen to your system and you don't get to choose when they occur.”\n\nDistributed systems _have to_ tolerate partitions. That third of the CAP theorem is chosen ahead of time, leaving you only two dials to turn: Consistency and Availability. \n\nThe choice between consistency and availability can be broad or narrow, expanding to entire systems and products or narrowed to particular use cases and functions. \n\nSome companies choose to be either AP or CP, meaning they prioritize availability over consistency (or vice versa). [Cockroach Labs](https://www.cockroachlabs.com/blog/limits-of-the-cap-theorem/?ref=blog.readyset.io), for example, “chooses consistency, and is therefore a CP system in the terminology of the CAP theorem (as opposed to an AP system, which favors availability over consistency).”\n\nOther examples include [ZooKeeper](https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io) and [Facebook](https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io), which both relax availability and [Amazon Dynamo](https://www.the-paper-trail.org/page/cap-faq/?ref=blog.readyset.io) and [Yahoo’s PNUTS system](https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io), which both relax consistency.\n\nFor many systems, however, CP vs. AP is not a binary decision one needs to make at the outset and then bake into the system. Many systems are dynamic and can be configured in a CP or AP style depending on different use cases and requests. Every implementation takes place somewhere on the spectrum between the two. \n\nDaniel J. Abadi, then computer science professor at Yale University, even rewrote CAP as [PACELC](https://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf?ref=blog.readyset.io) to illustrate this spectrum: “If there is a partition (P), how does the system trade off availability and consistency (A and C); else (E), when the system is running normally in the absence of partitions, how does the system trade off latency (L) and consistency (C)?”\n\nBrewer himself points out this nuance, [writing](https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/?ref=blog.readyset.io), “The choice between C and A can occur many times within the same system at very fine granularity; not only can subsystems make different choices, but the choice can change according to the operation or even the specific data or user involved.” \n\nIn some contexts, the binary nature of this choice recedes even further. At Figma, for example, the tradeoffs are “[relatively subtle](https://newsletter.pragmaticengineer.com/p/inside-figmas-engineering-culture?ref=blog.readyset.io).”\n\n“Anyone who's looked into CAP theorem discovers that tradeoffs aren’t as scary as they first seem,” writes Figma CTO Kris Rasmussen. “They result in important but relatively subtle trade-offs most people don't notice. In our case, we took a tradeoff on availability: if the application process on the server were to go down, clients are temporarily unable to load a file. These failures happen so rarely, and we’re now able to resolve them so quickly that it’s unlikely you’ll even notice.”\n\nThis subtlety deepens when you realize, as Brewer writes, that these properties are more continuous than strictly binary. “Availability is obviously continuous from 0 to 100 percent,” he writes, “but there are also many levels of consistency, and even partitions have nuances, including disagreement within the system about whether a partition exists.”\n\n## How Developers Can Use the CAP Theorem\n\nAt first glance, the CAP theorem looks too complex or too simple to be useful to many developers. \n\nIf you don’t know the acronym and its nuances, it’ll feel awkward to reference and unwieldy. But once you do know the basics, your knowledge can appear misleadingly superficial. As soon as you learn what C, A, and P stand for, after all, you learn it’s not quite as simple as picking two of them. \n\nFor developers unfamiliar with distributed systems engineering, however, the CAP theorem provides a way into the discussion around distributed systems and a lens through which to make informed technical decisions. With just a little more understanding, developers can gain a new way of making technical decisions in distributed systems contexts. \n\nAs Brewer wrote twelve years after its debut, the key is to remember, “There is an incredible range of flexibility for handling partitions and recovering from them.” Therefore, he continues, “The modern CAP goal should be to maximize combinations of consistency and availability that make sense for the specific application.” As you do so, think about how you can plan for how your system will operate during a partition and how it will recover afterward. \n\nIn this way of thinking, the CAP theorem is less of an absolute law from on high and more like a lens through which to weigh the tradeoffs of different decisions in complex systems. \n\n“This expression of CAP served its purpose,” Brewer writes, “which was to open the minds of designers to a wider range of systems and tradeoffs.” Similarly, developers can use the CAP theorem to think through priorities and their consequences. \n\nDevelopers can let the theorem map the decision set available, and by learning from how others have navigated this matrix, they can predict which choices will have the most optimal effects. As [Rasmussen writes](https://newsletter.pragmaticengineer.com/p/inside-figmas-engineering-culture?ref=blog.readyset.io), “In practice, we expect the window in which things could go wrong to be very small. Even if a server crashes, we expect customers to not lose much work. This is a tradeoff we have to make.”\n\nHere, theory and practice align: There are tradeoffs you have to make. Rasmussen writes, “The challenge for us and any other engineering team is to find the right set of trade-offs for our use case.”\n\n## Don’t Let Mental Models Become Blinders\n\nThe CAP theorem is extremely useful – both for experienced distributed systems engineers and developers just barely building familiarity in the field – but it can be limiting if you totalize it. \n\nBen Darnell, CTO at Cockroach Labs, [puts it well](https://www.cockroachlabs.com/blog/limits-of-the-cap-theorem/?ref=blog.readyset.io), writing, “The CAP theorem focuses on a single narrow tradeoff between consistency and availability, but this doesn’t cover all the causes of unavailability or solutions to unavailability.” \n\nThe CAP theorem is a lens that, used well, helps you see more clearly than you could otherwise. With the CAP theorem and its nuances in mind, developers can better parse distributed systems' complexity and consider the advantages and disadvantages of their technical decisions. \n\n## Readyset Is an AP system\n\nReadyset augments source-of-truth relational databases in mission-critical user-facing applications. Given its position in the stack, availability (and low latencies) trump consistency: Readyset speeds up all database reads that can tolerate relaxed consistency while still ensuring that developers have a straightforward path to service other reads that require stronger forms of consistency. \n\n[Try Readyset today](https://readyset.io/?ref=blog.readyset.io)",seo:null},author:$R[75],related:$R[76]=[$R[77]={id:"3c1ab712-05cb-411b-83c0-8da565457488",slug:"from-parser-combinators-to-hand-written-tdop-on-adopting-sqlparser-rs-at-readyset",title:"From parser combinators to hand-written TDOP: On adopting sqlparser-rs at Readyset",excerpt:"How Readyset replaced its homegrown SQL parser with sqlparser-rs, improving performance, reducing maintenance overhead, and tackling a years long backlog of parsing edge cases along the way.",updatedAt:1783974524031,category:$R[72],tags:$R[78]=[],image:"https://cms.readyset.io/files/articles/685ec3bcd35a380001bdc84a/278e9f5c450a7a5e76662334.png",hasImage:!0,date:"2026-05-21",readTime:"19 min read",authors:$R[79]=[$R[80]={id:"b36944a5-9ccb-48b7-9f97-157e1b9a0116",slug:"michael-victor-zink",name:"Michael Victor Zink",avatar:"https://cms.readyset.io/files/authors/685ec350d35a380001bdc847/cf82212f951b54caa591da19.bin",bio:""}],author:$R[80],content:"",seo:null,featured:!1,mostRead:!1},$R[81]={id:"7f5419f4-081f-4496-be41-daa4459022c6",slug:"how-readyset-rewrites-your-sql-inside-the-query-transformation-pipeline",title:"How Readyset Rewrites Your SQL: Inside the Query Transformation Pipeline",excerpt:"Why Query Rewriting Matters for Dataflow\n\nMost databases work the same way: a query arrives, the engine builds an execution plan, scans tables, joins rows, filters, aggregates, and returns the result. Every time the query runs, the work repeats from scratch. This pull-based model has served relational databases for decades, but it carries an inherent cost: read latency is proportional to the complexity of the query and the size of the data it touches.\n\nReadyset takes a fundamentally different ap",updatedAt:1777903274175,category:$R[72],tags:$R[82]=[],image:"https://cms.readyset.io/files/articles/69e0ecfcc7c1890001704557/87812e3810a9d2486b58d8ef.png",hasImage:!0,date:"2026-04-28",readTime:"17 min read",authors:$R[83]=[$R[84]={id:"6fe9598c-ba80-4bdb-80c6-552c1f17784f",slug:"vassili",name:"Vassili Zarouba",avatar:"/images/blog-placeholder.svg",bio:""}],author:$R[84],content:"",seo:null},$R[85]={id:"4874a4e7-e4cb-4873-b611-05235f5f162a",slug:"brutal-review-and-the-new-80-20-rule",title:"/brutal-review and the new 80/20 rule",excerpt:"(Mistakes and em-dashes are my own.)\n\nWe have a Claude Code command in our monorepo which is a good example of what I’m calling the \"80/20 token rule\": if it takes 20M LLM tokens to write a feature, you should spend 80M on ensuring quality: safety measures, testing, and of course code review. If software quality was an open problem before, then agentic engineering has blown it even more wide opener.\n\nAt a high level, here's what it does:\n\n 1. Read the patch to review and all related code.\n 2. Ha",updatedAt:1777903363284,category:$R[72],tags:$R[86]=[],image:"https://cms.readyset.io/files/articles/697c3379659cb2000121d663/8758b0dad3d18879b702eda4.png",hasImage:!0,date:"2026-02-03",readTime:"22 min read",authors:$R[87]=[$R[80]],author:$R[80],content:"",seo:null}],preview:!1},ssr:!0}],lastMatchId:"blog$slugbloga-developers-guide-to-the-cap-theorem",dehydratedData:$R[88]={queryStream:$R[89]=($R[90]=(e) => new ReadableStream({ start: (r) => {
e.on({ next: (a) => {
try {
r.enqueue(a);
} catch (t) {
}
}, throw: (a) => {
r.error(a);
}, return: () => {
try {
r.close();
} catch (a) {
}
} });
} }))($R[91]=($R[92]=() => {
let e = [], r = [], t = true, n2 = false, a = 0, s = (l, g, S) => {
for (S = 0; S < a; S++) r[S] && r[S][g](l);
}, i = (l, g, S, d) => {
for (g = 0, S = e.length; g < S; g++) d = e[g], !t && g === S - 1 ? l[n2 ? "return" : "throw"](d) : l.next(d);
}, u = (l, g) => (t && (g = a++, r[g] = l), i(l), () => {
t && (r[g] = r[a], r[a--] = void 0);
});
return { __SEROVAL_STREAM__: true, on: (l) => u(l), next: (l) => {
t && (e.push(l), s(l, "next"));
}, throw: (l) => {
t && (e.push(l), s(l, "throw"), t = false, n2 = false, r.length = 0);
}, return: (l) => {
t && (e.push(l), s(l, "return"), t = false, n2 = true, r.length = 0);
} };
})())}})($R["tsr"]);document.currentScript.remove()</script><script type="module" async="" src="/assets/index-CgozBq9o.js" nonce="th0//p+Gz1aytWYEh3rCRA=="></script><script nonce='th0//p+Gz1aytWYEh3rCRA=='>($R=>$R[91].return(void 0))($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" nonce="th0//p+Gz1aytWYEh3rCRA==" data-cf-beacon='{"version":"2024.11.0","token":"d483087ab45f45f6a431c22e81c6c7f9","r":1,"spa":2}' crossorigin="anonymous"></script>
</body></html>