<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>Documentation tagged with <strong>scaling</strong> in the Geode graph database. This comprehensive collection covers scaling strategies, capacity planning, replication patterns, sharding techniques, and best practices for building highly scalable graph database deployments that handle enterprise workloads.</p> <h3 id="overview" class="position-relative d-flex align-items-center group"> <span>Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="overview" aria-haspopup="dialog" aria-label="Share link: Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Scaling is essential for growing graph applications that need to handle increasing data volumes, higher query throughput, or greater concurrent user loads. Geode provides multiple scaling strategies to meet different performance and availability requirements, from simple vertical scaling to complex distributed architectures.</p> <p>Scaling dimensions:</p> <ul> <li><strong>Data Volume</strong>: Growing graph size (nodes and edges)</li> <li><strong>Query Throughput</strong>: Increasing queries per second</li> <li><strong>Concurrent Users</strong>: More simultaneous connections</li> <li><strong>Geographic Distribution</strong>: Multi-region deployments</li> <li><strong>High Availability</strong>: Redundancy and fault tolerance</li> </ul> <h3 id="scaling-strategies" class="position-relative d-flex align-items-center group"> <span>Scaling Strategies</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="scaling-strategies" aria-haspopup="dialog" aria-label="Share link: Scaling Strategies"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="vertical-scaling" class="position-relative d-flex align-items-center group"> <span>Vertical Scaling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vertical-scaling" aria-haspopup="dialog" aria-label="Share link: Vertical Scaling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Scale up by adding resources to a single server:</p> <p><strong>When to Use</strong>:</p> <ul> <li>Data fits on a single machine (size depends on hardware and indexing)</li> <li>Simple operational requirements</li> <li>Cost-effective for small to medium workloads</li> <li>No application changes needed</li> </ul> <p><strong>Implementation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Before: Small instance</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 4 vCPUs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 16 GB RAM</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 500 GB SSD</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Performance: workload dependent (benchmark-specific)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># After: Large instance</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 32 vCPUs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 256 GB RAM</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - 2 TB NVMe SSD</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Performance: workload dependent (benchmark-specific)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Configuration for Vertical Scaling</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode.yaml - Optimized for large single server</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">server</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">worker_threads</span><span class="p">:</span><span class="w"> </span><span class="m">32</span><span class="w"> </span><span class="c"># Match vCPU count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_connections</span><span class="p">:</span><span class="w"> </span><span class="m">2000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">index_cache_size</span><span class="p">:</span><span class="w"> </span><span class="l">128GB </span><span class="w"> </span><span class="c"># 50% of RAM</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">query_cache_size</span><span class="p">:</span><span class="w"> </span><span class="m">50000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">worker_pool_size</span><span class="p">:</span><span class="w"> </span><span class="m">64</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">buffer_pool_size</span><span class="p">:</span><span class="w"> </span><span class="l">64GB</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">checkpoint_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15m</span><span class="w"> </span></span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Simple architecture</li> <li>No data partitioning complexity</li> <li>ACID guarantees preserved</li> <li>Lower operational overhead</li> </ul> <p><strong>Limitations</strong>:</p> <ul> <li>Single point of failure</li> <li>Limited by hardware maximum</li> <li>Expensive at large scale</li> <li>Downtime for upgrades</li> </ul> <h4 id="horizontal-scaling-read-replicas" class="position-relative d-flex align-items-center group"> <span>Horizontal Scaling (Read Replicas)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="horizontal-scaling-read-replicas" aria-haspopup="dialog" aria-label="Share link: Horizontal Scaling (Read Replicas)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Add read-only replicas to distribute query load:</p> <p><strong>Architecture</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌─────────────┐ </span></span><span class="line"><span class="cl">│ Primary │ ← Writes </span></span><span class="line"><span class="cl">│ (Master) │ </span></span><span class="line"><span class="cl">└──────┬──────┘ </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> │ Replication </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> ┌───┴────┬────────┬────────┐ </span></span><span class="line"><span class="cl"> │ │ │ │ </span></span><span class="line"><span class="cl">┌──▼──┐ ┌──▼──┐ ┌──▼──┐ ┌──▼──┐ </span></span><span class="line"><span class="cl">│Rep 1│ │Rep 2│ │Rep 3│ │Rep 4│ ← Reads </span></span><span class="line"><span class="cl">└─────┘ └─────┘ └─────┘ └─────┘ </span></span></code></pre></div><p><strong>Setup</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Start primary node</span> </span></span><span class="line"><span class="cl">geode serve <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3141 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --data-dir /data/primary <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role primary </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Start read replicas</span> </span></span><span class="line"><span class="cl">geode serve <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3141 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --data-dir /data/replica1 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role replica <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --primary-host primary.example.com:3141 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">geode serve <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --listen 0.0.0.0:3141 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --data-dir /data/replica2 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --role replica <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --primary-host primary.example.com:3141 </span></span></code></pre></div><p><strong>Application Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client with read replicas </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">import</span> <span class="s">&#34;geodedb.com/geode&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Configure connection pool with read replicas </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">config</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">geode</span><span class="p">.</span><span class="nx">Config</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Primary</span><span class="p">:</span> <span class="s">&#34;primary.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">Replicas</span><span class="p">:</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica1.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica2.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica3.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nx">ReadPreference</span><span class="p">:</span> <span class="nx">geode</span><span class="p">.</span><span class="nx">ReadPreferenceReplica</span><span class="p">,</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nx">db</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">geode</span><span class="p">.</span><span class="nf">Connect</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Writes go to primary </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">.</span><span class="nf">Exec</span><span class="p">(</span><span class="s">&#34;CREATE (u:User {name: &#39;Alice&#39;})&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1">// Reads load-balanced across replicas </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">.</span><span class="nf">Query</span><span class="p">(</span><span class="s">&#34;MATCH (u:User) RETURN u&#34;</span><span class="p">)</span> </span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Increase read throughput linearly</li> <li>High availability (replicas can failover)</li> <li>Geographic distribution</li> <li>Read-heavy workloads scale well</li> </ul> <p><strong>Limitations</strong>:</p> <ul> <li>Write throughput limited by primary</li> <li>Replication lag (eventual consistency)</li> <li>Storage duplication</li> <li>Complexity increases with replica count</li> </ul> <h4 id="horizontal-scaling-sharding" class="position-relative d-flex align-items-center group"> <span>Horizontal Scaling (Sharding)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="horizontal-scaling-sharding" aria-haspopup="dialog" aria-label="Share link: Horizontal Scaling (Sharding)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Partition data across multiple nodes:</p> <p><strong>Sharding Strategies</strong>:</p> <p><strong>1. Label-Based Sharding</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Partition by node type</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">sharding</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="l">label</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">shards</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shard1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">User, Profile]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">shard1.example.com:3141]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shard2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">Product, Category]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">shard2.example.com:3141]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shard3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">Order, Payment]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">shard3.example.com:3141]</span><span class="w"> </span></span></span></code></pre></div><p><strong>2. Hash-Based Sharding</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Partition by ID hash</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">sharding</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="l">hash</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">shards</span><span class="p">:</span><span class="w"> </span><span class="m">8</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key_property</span><span class="p">:</span><span class="w"> </span><span class="l">id</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard1.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard2.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard3.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard4.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard5.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard6.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard7.example.com:3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">shard8.example.com:3141</span><span class="w"> </span></span></span></code></pre></div><p><strong>3. Range-Based Sharding</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Partition by property ranges</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">sharding</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="l">range</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key_property</span><span class="p">:</span><span class="w"> </span><span class="l">created_at</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">shards</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">historical</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">range</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="ld">2023-01-01</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">historical.example.com:3141]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">recent</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">range</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="ld">2023-01-01</span><span class="p">,</span><span class="w"> </span><span class="ld">2025-01-01</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">recent.example.com:3141]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">current</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">range</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="ld">2025-01-01</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">current.example.com:3141]</span><span class="w"> </span></span></span></code></pre></div><p><strong>Cross-Shard Queries</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">spanning</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">shards</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Coordinator</span><span class="w"> </span><span class="py">routes</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">shards</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">merges</span><span class="w"> </span><span class="py">results</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">West</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Execution</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="nc">1</span><span class="err">.</span><span class="w"> </span><span class="py">Parse</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">at</span><span class="w"> </span><span class="py">coordinator</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">2</span><span class="err">.</span><span class="w"> </span><span class="py">Send</span><span class="w"> </span><span class="py">sub</span><span class="err">-</span><span class="py">queries</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">relevant</span><span class="w"> </span><span class="py">shards</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">3</span><span class="err">.</span><span class="w"> </span><span class="py">Merge</span><span class="w"> </span><span class="py">results</span><span class="w"> </span><span class="py">at</span><span class="w"> </span><span class="py">coordinator</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">4</span><span class="err">.</span><span class="w"> </span><span class="py">Apply</span><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">LIMIT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">5</span><span class="err">.</span><span class="w"> </span><span class="py">Return</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">client</span><span class="w"> </span></span></span></code></pre></div><p><strong>Benefits</strong>:</p> <ul> <li>Scale beyond single machine limits</li> <li>Distribute both reads and writes</li> <li>Handle massive datasets (billions of nodes)</li> <li>Geographic data locality</li> </ul> <p><strong>Limitations</strong>:</p> <ul> <li>Complex operationally</li> <li>Cross-shard queries slower</li> <li>Rebalancing data is expensive</li> <li>Transaction guarantees limited across shards</li> </ul> <h3 id="replication-patterns" class="position-relative d-flex align-items-center group"> <span>Replication Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="replication-patterns" aria-haspopup="dialog" aria-label="Share link: Replication Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="synchronous-replication" class="position-relative d-flex align-items-center group"> <span>Synchronous Replication</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="synchronous-replication" aria-haspopup="dialog" aria-label="Share link: Synchronous Replication"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Writes replicated before acknowledging to client:</p> <p><strong>Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">replication</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="l">synchronous</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">min_replicas</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="c"># Wait for 2 replicas</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">5s </span><span class="w"> </span><span class="c"># Max wait time</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Guarantees:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - No data loss on primary failure</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Consistent reads from any replica</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Higher write latency (+5-20ms)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Financial transactions</li> <li>Critical business data</li> <li>Compliance requirements</li> <li>Zero data loss tolerance</li> </ul> <h4 id="asynchronous-replication" class="position-relative d-flex align-items-center group"> <span>Asynchronous Replication</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="asynchronous-replication" aria-haspopup="dialog" aria-label="Share link: Asynchronous Replication"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Writes acknowledged immediately, replicated in background:</p> <p><strong>Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">replication</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="l">asynchronous</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_lag_target</span><span class="p">:</span><span class="w"> </span><span class="l">100ms</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">catch_up_priority</span><span class="p">:</span><span class="w"> </span><span class="l">high</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Characteristics:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Low write latency</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Possible replication lag</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Rare data loss on failure</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Higher throughput</span><span class="w"> </span></span></span></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Read-heavy workloads</li> <li>Social networks</li> <li>Content management</li> <li>Analytics</li> </ul> <h4 id="multi-master-replication" class="position-relative d-flex align-items-center group"> <span>Multi-Master Replication</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="multi-master-replication" aria-haspopup="dialog" aria-label="Share link: Multi-Master Replication"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Multiple writable nodes with conflict resolution:</p> <p><strong>Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">replication</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="l">multi-master</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">conflict_resolution</span><span class="p">:</span><span class="w"> </span><span class="l">last-write-wins</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">topology</span><span class="p">:</span><span class="w"> </span><span class="l">mesh</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Features:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Write to any node</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Automatic conflict resolution</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Geographic distribution</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Complex edge cases</span><span class="w"> </span></span></span></code></pre></div> <h3 id="load-balancing" class="position-relative d-flex align-items-center group"> <span>Load Balancing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="load-balancing" aria-haspopup="dialog" aria-label="Share link: Load Balancing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="query-router" class="position-relative d-flex align-items-center group"> <span>Query Router</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-router" aria-haspopup="dialog" aria-label="Share link: Query Router"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Distribute queries across servers:</p> <p><strong>HAProxy Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># /etc/haproxy/haproxy.cfg </span></span><span class="line"><span class="cl">frontend geode_frontend </span></span><span class="line"><span class="cl"> bind *:3141 </span></span><span class="line"><span class="cl"> mode tcp </span></span><span class="line"><span class="cl"> default_backend geode_replicas </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">backend geode_replicas </span></span><span class="line"><span class="cl"> mode tcp </span></span><span class="line"><span class="cl"> balance leastconn </span></span><span class="line"><span class="cl"> option tcp-check </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> # Health check </span></span><span class="line"><span class="cl"> tcp-check connect </span></span><span class="line"><span class="cl"> tcp-check send-binary 48454c4c4f0a # HELLO </span></span><span class="line"><span class="cl"> tcp-check expect binary 4f4b0a # OK </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> # Server pool </span></span><span class="line"><span class="cl"> server replica1 replica1.example.com:3141 check </span></span><span class="line"><span class="cl"> server replica2 replica2.example.com:3141 check </span></span><span class="line"><span class="cl"> server replica3 replica3.example.com:3141 check </span></span><span class="line"><span class="cl"> server replica4 replica4.example.com:3141 check </span></span></code></pre></div><p><strong>NGINX Stream Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nginx" data-lang="nginx"><span class="line"><span class="cl"><span class="c1"># /etc/nginx/nginx.conf </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">stream</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">upstream</span> <span class="s">geode_cluster</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">least_conn</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">replica1.example.com</span><span class="p">:</span><span class="mi">3141</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">replica2.example.com</span><span class="p">:</span><span class="mi">3141</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">replica3.example.com</span><span class="p">:</span><span class="mi">3141</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">3141</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">geode_cluster</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_connect_timeout</span> <span class="s">5s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="client-side-load-balancing" class="position-relative d-flex align-items-center group"> <span>Client-Side Load Balancing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="client-side-load-balancing" aria-haspopup="dialog" aria-label="Share link: Client-Side Load Balancing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Application manages distribution:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client with built-in load balancing </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">config</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">geode</span><span class="p">.</span><span class="nx">Config</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">Servers</span><span class="p">:</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica1.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica2.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;replica3.example.com:3141&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nx">LoadBalancer</span><span class="p">:</span> <span class="nx">geode</span><span class="p">.</span><span class="nx">RoundRobin</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">HealthCheckInterval</span><span class="p">:</span> <span class="mi">30</span> <span class="o">*</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Second</span><span class="p">,</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nx">client</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">geode</span><span class="p">.</span><span class="nf">Connect</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="c1">// Automatically distributes queries </span></span></span></code></pre></div> <h3 id="capacity-planning" class="position-relative d-flex align-items-center group"> <span>Capacity Planning</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="capacity-planning" aria-haspopup="dialog" aria-label="Share link: Capacity Planning"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="growth-modeling" class="position-relative d-flex align-items-center group"> <span>Growth Modeling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="growth-modeling" aria-haspopup="dialog" aria-label="Share link: Growth Modeling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Project resource needs (numbers below are illustrative; calibrate with your benchmarks):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># capacity_planner.py</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">math</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">estimate_resources</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">nodes_count</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">edges_count</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">avg_node_properties</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">avg_edge_properties</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">qps_target</span><span class="o">=</span><span class="mi">10000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">replication_factor</span><span class="o">=</span><span class="mi">3</span> </span></span><span class="line"><span class="cl"><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Storage calculation</span> </span></span><span class="line"><span class="cl"> <span class="n">node_storage_mb</span> <span class="o">=</span> <span class="p">(</span><span class="n">nodes_count</span> <span class="o">*</span> <span class="n">avg_node_properties</span> <span class="o">*</span> <span class="mi">50</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1_000_000</span> </span></span><span class="line"><span class="cl"> <span class="n">edge_storage_mb</span> <span class="o">=</span> <span class="p">(</span><span class="n">edges_count</span> <span class="o">*</span> <span class="n">avg_edge_properties</span> <span class="o">*</span> <span class="mi">40</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1_000_000</span> </span></span><span class="line"><span class="cl"> <span class="n">index_storage_mb</span> <span class="o">=</span> <span class="p">(</span><span class="n">node_storage_mb</span> <span class="o">+</span> <span class="n">edge_storage_mb</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.3</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">total_storage_gb</span> <span class="o">=</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="n">node_storage_mb</span> <span class="o">+</span> <span class="n">edge_storage_mb</span> <span class="o">+</span> <span class="n">index_storage_mb</span><span class="p">)</span> <span class="o">*</span> </span></span><span class="line"><span class="cl"> <span class="n">replication_factor</span> <span class="o">/</span> <span class="mi">1000</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Memory calculation (working set = 20% of data + index cache)</span> </span></span><span class="line"><span class="cl"> <span class="n">working_set_gb</span> <span class="o">=</span> <span class="n">total_storage_gb</span> <span class="o">*</span> <span class="mf">0.2</span> </span></span><span class="line"><span class="cl"> <span class="n">index_cache_gb</span> <span class="o">=</span> <span class="n">index_storage_mb</span> <span class="o">/</span> <span class="mi">1000</span> </span></span><span class="line"><span class="cl"> <span class="n">required_memory_gb</span> <span class="o">=</span> <span class="n">working_set_gb</span> <span class="o">+</span> <span class="n">index_cache_gb</span> <span class="o">+</span> <span class="mi">16</span> <span class="c1"># OS overhead</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># CPU calculation (example heuristic: 1 core per 500 QPS)</span> </span></span><span class="line"><span class="cl"> <span class="n">required_cores</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">qps_target</span> <span class="o">/</span> <span class="mi">500</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Server count (assuming 32-core, 256GB servers)</span> </span></span><span class="line"><span class="cl"> <span class="n">servers_needed</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">total_storage_gb</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2000</span> <span class="o">/</span> <span class="n">replication_factor</span><span class="p">)),</span> <span class="c1"># Storage</span> </span></span><span class="line"><span class="cl"> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">required_memory_gb</span> <span class="o">/</span> <span class="mi">200</span><span class="p">),</span> <span class="c1"># Memory</span> </span></span><span class="line"><span class="cl"> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">required_cores</span> <span class="o">/</span> <span class="mi">28</span><span class="p">)</span> <span class="c1"># CPU (leave headroom)</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;total_storage_gb&#34;</span><span class="p">:</span> <span class="n">total_storage_gb</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;required_memory_gb&#34;</span><span class="p">:</span> <span class="n">required_memory_gb</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;required_cores&#34;</span><span class="p">:</span> <span class="n">required_cores</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;servers_needed&#34;</span><span class="p">:</span> <span class="n">servers_needed</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Example: 100M nodes, 500M edges, 10k QPS</span> </span></span><span class="line"><span class="cl"><span class="n">resources</span> <span class="o">=</span> <span class="n">estimate_resources</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">nodes_count</span><span class="o">=</span><span class="mi">100_000_000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">edges_count</span><span class="o">=</span><span class="mi">500_000_000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">qps_target</span><span class="o">=</span><span class="mi">10_000</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Storage: </span><span class="si">{</span><span class="n">resources</span><span class="p">[</span><span class="s1">&#39;total_storage_gb&#39;</span><span class="p">]</span><span class="si">:</span><span class="s2">.0f</span><span class="si">}</span><span class="s2"> GB&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Memory: </span><span class="si">{</span><span class="n">resources</span><span class="p">[</span><span class="s1">&#39;required_memory_gb&#39;</span><span class="p">]</span><span class="si">:</span><span class="s2">.0f</span><span class="si">}</span><span class="s2"> GB&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Cores: </span><span class="si">{</span><span class="n">resources</span><span class="p">[</span><span class="s1">&#39;required_cores&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Servers: </span><span class="si">{</span><span class="n">resources</span><span class="p">[</span><span class="s1">&#39;servers_needed&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span></code></pre></div> <h4 id="monitoring-for-scale" class="position-relative d-flex align-items-center group"> <span>Monitoring for Scale</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitoring-for-scale" aria-haspopup="dialog" aria-label="Share link: Monitoring for Scale"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Track scaling indicators:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Prometheus alerts for scaling triggers</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">groups</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">scaling_alerts</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rules</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># CPU saturation</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighCPUUsage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">avg(cpu_usage_percent) &gt; 70</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">15m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Consider adding CPU capacity&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Memory pressure</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighMemoryUsage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">memory_usage_percent &gt; 80</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">10m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Add more RAM or replicas&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Storage growth</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">StorageGrowth</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">rate(storage_bytes_used[7d]) &gt; 0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Storage growing, plan expansion&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Query latency</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighQueryLatency</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">p99_query_duration_ms &gt; 500</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">15m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Query performance degrading&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Connection saturation</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">ConnectionPoolExhaustion</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">(active_connections / max_connections) &gt; 0.8</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Near connection limit&#34;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="high-availability" class="position-relative d-flex align-items-center group"> <span>High Availability</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="high-availability" aria-haspopup="dialog" aria-label="Share link: High Availability"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="failover-configuration" class="position-relative d-flex align-items-center group"> <span>Failover Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="failover-configuration" aria-haspopup="dialog" aria-label="Share link: Failover Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Automatic primary failover:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-ha.yaml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">high_availability</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">election_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">heartbeat_interval</span><span class="p">:</span><span class="w"> </span><span class="l">2s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">min_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">cluster</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nodes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l">node1.example.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">priority</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w"> </span><span class="c"># Preferred primary</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l">node2.example.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">priority</span><span class="p">:</span><span class="w"> </span><span class="m">90</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l">node3.example.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">priority</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Automatic failover on primary failure</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># - Quorum elects new primary (highest priority)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># - Clients redirect to new primary</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># - Old primary rejoins as replica</span><span class="w"> </span></span></span></code></pre></div> <h4 id="health-checks" class="position-relative d-flex align-items-center group"> <span>Health Checks</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="health-checks" aria-haspopup="dialog" aria-label="Share link: Health Checks"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Monitor node health:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Kubernetes readiness probe</span> </span></span><span class="line"><span class="cl">livenessProbe: </span></span><span class="line"><span class="cl"> exec: </span></span><span class="line"><span class="cl"> command: </span></span><span class="line"><span class="cl"> - geode </span></span><span class="line"><span class="cl"> - health </span></span><span class="line"><span class="cl"> - --check </span></span><span class="line"><span class="cl"> - readiness </span></span><span class="line"><span class="cl"> initialDelaySeconds: <span class="m">30</span> </span></span><span class="line"><span class="cl"> periodSeconds: <span class="m">10</span> </span></span><span class="line"><span class="cl"> timeoutSeconds: <span class="m">5</span> </span></span><span class="line"><span class="cl"> failureThreshold: <span class="m">3</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">readinessProbe: </span></span><span class="line"><span class="cl"> exec: </span></span><span class="line"><span class="cl"> command: </span></span><span class="line"><span class="cl"> - geode </span></span><span class="line"><span class="cl"> - health </span></span><span class="line"><span class="cl"> - --check </span></span><span class="line"><span class="cl"> - liveness </span></span><span class="line"><span class="cl"> initialDelaySeconds: <span class="m">10</span> </span></span><span class="line"><span class="cl"> periodSeconds: <span class="m">5</span> </span></span><span class="line"><span class="cl"> timeoutSeconds: <span class="m">3</span> </span></span><span class="line"><span class="cl"> failureThreshold: <span class="m">2</span> </span></span></code></pre></div> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="start-simple-scale-gradually" class="position-relative d-flex align-items-center group"> <span>Start Simple, Scale Gradually</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="start-simple-scale-gradually" aria-haspopup="dialog" aria-label="Share link: Start Simple, Scale Gradually"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Phase 1: Single Server</strong> (initial deployments):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">deployment</span><span class="p">:</span><span class="w"> </span><span class="l">single-server</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">8</span><span class="w"> </span><span class="l">cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="m">64</span><span class="w"> </span><span class="l">GB</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="m">500</span><span class="w"> </span><span class="l">GB SSD</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w"> </span><span class="l">workload-dependent (benchmark-specific)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Phase 2: Vertical Scaling</strong> (single-node scale-up):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">deployment</span><span class="p">:</span><span class="w"> </span><span class="l">single-server</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">32</span><span class="w"> </span><span class="l">cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="m">256</span><span class="w"> </span><span class="l">GB</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="l">TB NVMe</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w"> </span><span class="l">workload-dependent (benchmark-specific)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Phase 3: Read Replicas</strong> (read-heavy workloads):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">deployment</span><span class="p">:</span><span class="w"> </span><span class="l">primary + replicas</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">topology</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">primary</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span class="m">3-5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">resources_per_server</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="l">cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="m">128</span><span class="w"> </span><span class="l">GB</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="l">TB NVMe</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w"> </span><span class="l">workload-dependent (benchmark-specific)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Phase 4: Sharding</strong> (distributed datasets):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">deployment</span><span class="p">:</span><span class="w"> </span><span class="l">sharded-cluster</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">topology</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">shards</span><span class="p">:</span><span class="w"> </span><span class="m">4-8</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replicas_per_shard</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">resources_per_server</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="m">32</span><span class="w"> </span><span class="l">cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="m">256</span><span class="w"> </span><span class="l">GB</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="m">4</span><span class="w"> </span><span class="l">TB NVMe</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w"> </span><span class="l">workload-dependent (benchmark-specific)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="data-locality" class="position-relative d-flex align-items-center group"> <span>Data Locality</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="data-locality" aria-haspopup="dialog" aria-label="Share link: Data Locality"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Keep related data together:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Related</span><span class="w"> </span><span class="py">entities</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">same</span><span class="w"> </span><span class="py">shard</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">their</span><span class="w"> </span><span class="py">posts</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">same</span><span class="w"> </span><span class="py">shard</span><span class="w"> </span><span class="p">(</span><span class="py">by</span><span class="w"> </span><span class="py">user_id</span><span class="w"> </span><span class="py">hash</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">runs</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">single</span><span class="w"> </span><span class="py">shard</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">12345</span><span class="err">&#39;</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">POSTS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Post</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Bad</span><span class="p">:</span><span class="w"> </span><span class="nc">User</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">posts</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">different</span><span class="w"> </span><span class="py">shards</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Requires</span><span class="w"> </span><span class="py">cross</span><span class="err">-</span><span class="py">shard</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="p">(</span><span class="nc">slower</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="monitor-replication-lag" class="position-relative d-flex align-items-center group"> <span>Monitor Replication Lag</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitor-replication-lag" aria-haspopup="dialog" aria-label="Share link: Monitor Replication Lag"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Track replica freshness:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">replication</span><span class="w"> </span><span class="py">status</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">replica_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_update_time</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">lag_seconds</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">lag_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">replication_status</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">lag_seconds</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Alert</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">excessive</span><span class="w"> </span><span class="py">lag</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">If</span><span class="w"> </span><span class="py">lag_seconds</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">60</span><span class="p">,</span><span class="w"> </span><span class="py">investigate</span><span class="w"> </span></span></span></code></pre></div> <h4 id="connection-pooling" class="position-relative d-flex align-items-center group"> <span>Connection Pooling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="connection-pooling" aria-haspopup="dialog" aria-label="Share link: Connection Pooling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Right-size connection pools:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Connection pool sizing formula</span> </span></span><span class="line"><span class="cl"><span class="n">max_connections_per_client</span> <span class="o">=</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">server_max_connections</span> <span class="o">/</span> </span></span><span class="line"><span class="cl"> <span class="n">number_of_application_instances</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Example:</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Server max: 1000 connections</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Application instances: 20</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Per-client max: 50 connections</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">host</span><span class="o">=</span><span class="s2">&#34;geode.example.com&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">max_connections</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">min_connections</span><span class="o">=</span><span class="mi">5</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="hot-spots" class="position-relative d-flex align-items-center group"> <span>Hot Spots</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="hot-spots" aria-haspopup="dialog" aria-label="Share link: Hot Spots"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Issue</strong>: One shard overloaded while others idle.</p> <p><strong>Diagnosis</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">shard</span><span class="w"> </span><span class="py">load</span><span class="w"> </span><span class="py">distribution</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">shard_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">query</span><span class="nc">_count</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg_cpu_percent</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">storage_gb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">shard_stats</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="kd">query</span><span class="nc">_count</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Solutions</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># 1. Rebalance sharding key</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">sharding</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key_property</span><span class="p">:</span><span class="w"> </span><span class="l">user_id </span><span class="w"> </span><span class="c"># High cardinality</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Not: region # Low cardinality causes hot spots</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># 2. Split hot shard</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># If shard_3 is overloaded, split into shard_3a and shard_3b</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># 3. Add caching layer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Cache hot queries at application level</span><span class="w"> </span></span></span></code></pre></div> <h4 id="replication-lag" class="position-relative d-flex align-items-center group"> <span>Replication Lag</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="replication-lag" aria-haspopup="dialog" aria-label="Share link: Replication Lag"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Issue</strong>: Replicas falling behind primary.</p> <p><strong>Solutions</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># 1. Increase replication threads</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">replication</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">parallel_workers: 8 # Default</span><span class="p">:</span><span class="w"> </span><span class="m">4</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># 2. Increase network bandwidth</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use 10GbE between primary and replicas</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># 3. Reduce write load on primary</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Batch writes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># - Use async replication for non-critical data</span><span class="w"> </span></span></span></code></pre></div> <h3 id="integration-with-geode" class="position-relative d-flex align-items-center group"> <span>Integration with Geode</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="integration-with-geode" aria-haspopup="dialog" aria-label="Share link: Integration with Geode"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Scaling integrates with Geode features:</p> <ul> <li><strong>Monitoring</strong>: Track scaling metrics via Prometheus</li> <li><strong>Transactions</strong>: ACID within shard, eventual across shards</li> <li><strong>Security</strong>: RLS policies enforced on all nodes</li> <li><strong>Backup</strong>: Coordinated backups across cluster</li> <li><strong>Upgrades</strong>: Rolling upgrades with zero downtime</li> </ul> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong>High Availability</strong>: Failover and redundancy strategies</li> <li><strong>Replication</strong>: Data replication patterns</li> <li><strong>Performance</strong>: Query performance optimization</li> <li><strong>Monitoring</strong>: Production monitoring and alerting</li> <li><strong>Deployment</strong>: Production deployment patterns</li> <li><strong>Cloud</strong>: Cloud-specific scaling strategies</li> </ul> <hr> <p>Browse the tagged content below to discover comprehensive guides, tutorials, and best practices for scaling Geode. Learn how to build highly scalable graph database deployments that handle enterprise workloads with high availability and optimal performance.</p>

Related Articles