<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Real-time processing in Geode enables applications to query and analyze graph data with millisecond latency, react to data changes instantly, and maintain up-to-date materialized views. Geode’s architecture is optimized for concurrent read/write workloads with predictable performance.</p>
<h3 id="what-is-real-time-graph-processing" class="position-relative d-flex align-items-center group">
<span>What Is Real-Time Graph Processing?</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="what-is-real-time-graph-processing"
aria-haspopup="dialog"
aria-label="Share link: What Is Real-Time Graph Processing?">
<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>Real-time graph processing involves executing queries, detecting patterns, and responding to graph changes with minimal delay. Geode achieves this through:</p>
<ul>
<li>Sub-millisecond query execution via optimized indexes</li>
<li>Non-blocking MVCC for concurrent operations</li>
<li>Change data capture (CDC) for event streaming</li>
<li>Efficient incremental computation</li>
<li>Low-latency QUIC protocol</li>
</ul>
<h3 id="low-latency-query-execution" class="position-relative d-flex align-items-center group">
<span>Low-Latency Query Execution</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="low-latency-query-execution"
aria-haspopup="dialog"
aria-label="Share link: Low-Latency Query Execution">
<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="index-optimized-lookups" class="position-relative d-flex align-items-center group">
<span>Index-Optimized Lookups</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="index-optimized-lookups"
aria-haspopup="dialog"
aria-label="Share link: Index-Optimized Lookups">
<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>Geode’s indexes enable constant-time node and relationship lookups:</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">Direct</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">lookup</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">indexed</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="p">(</span><span class="err"><</span><span class="w"> </span><span class="py">1ms</span><span class="w"> </span><span class="py">typical</span><span class="p">)</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">u</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">Indexed</span><span class="w"> </span><span class="py">relationship</span><span class="w"> </span><span class="py">traversal</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">friend</span><span class="p">:</span><span class="nc">User</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">friend</span><span class="err">.</span><span class="py">user_id</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</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">Range</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">on</span><span class="w"> </span><span class="py">indexed</span><span class="w"> </span><span class="py">property</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">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">p</span><span class="err">.</span><span class="py">price</span><span class="w"> </span><span class="py">BETWEEN</span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">500</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">in_stock</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</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="err">.</span><span class="py">product_id</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="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">price</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">price</span><span class="w"> </span><span class="py">ASC</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></code></pre></div>
<h4 id="query-performance-patterns" class="position-relative d-flex align-items-center group">
<span>Query Performance 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="query-performance-patterns"
aria-haspopup="dialog"
aria-label="Share link: Query Performance 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>
</h4><p>Optimize queries for real-time execution:</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">BAD</span><span class="p">:</span><span class="w"> </span><span class="nc">Unbounded</span><span class="w"> </span><span class="py">traversal</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">start</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="nc">connected</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">connected</span><span class="err">;</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Can</span><span class="w"> </span><span class="py">traverse</span><span class="w"> </span><span class="py">millions</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">nodes</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">GOOD</span><span class="p">:</span><span class="w"> </span><span class="nc">Bounded</span><span class="w"> </span><span class="py">depth</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">early</span><span class="w"> </span><span class="py">termination</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="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">start</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="nc">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">connected</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">connected</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</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">connected</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 class="err">//</span><span class="w"> </span><span class="py">Limit</span><span class="w"> </span><span class="py">results</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">predictable</span><span class="w"> </span><span class="py">latency</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">GOOD</span><span class="p">:</span><span class="w"> </span><span class="nc">Use</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">clauses</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">filter</span><span class="w"> </span><span class="py">early</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">-></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">user_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$user_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</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="err">></span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="err">.</span><span class="py">minusDays</span><span class="p">(</span><span class="py">30</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="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="prepared-statements" class="position-relative d-flex align-items-center group">
<span>Prepared Statements</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="prepared-statements"
aria-haspopup="dialog"
aria-label="Share link: Prepared Statements">
<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>Reduce parsing overhead for frequently executed queries:</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"># Python client example</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</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 class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <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></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Prepare query once</span>
</span></span><span class="line"><span class="cl"> <span class="n">stmt</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">prepare</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {user_id: $user_id})-[:PURCHASED]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE p.created_at > $since
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.product_id, p.name, p.price
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Execute multiple times with different parameters (faster)</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">user_id</span> <span class="ow">in</span> <span class="n">user_ids</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">results</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">stmt</span><span class="o">.</span><span class="n">execute</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'user_id'</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'since'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">7</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="n">process_results</span><span class="p">(</span><span class="n">results</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="change-data-capture-cdc" class="position-relative d-flex align-items-center group">
<span>Change Data Capture (CDC)</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="change-data-capture-cdc"
aria-haspopup="dialog"
aria-label="Share link: Change Data Capture (CDC)">
<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="monitoring-graph-changes" class="position-relative d-flex align-items-center group">
<span>Monitoring Graph Changes</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-graph-changes"
aria-haspopup="dialog"
aria-label="Share link: Monitoring Graph Changes">
<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>Subscribe to data change events in real-time:</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">Enable</span><span class="w"> </span><span class="py">CDC</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">specific</span><span class="w"> </span><span class="py">labels</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CHANGE</span><span class="w"> </span><span class="py">STREAM</span><span class="w"> </span><span class="py">user_changes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FOR</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="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">EMIT</span><span class="w"> </span><span class="py">CREATED</span><span class="p">,</span><span class="w"> </span><span class="py">UPDATED</span><span class="p">,</span><span class="w"> </span><span class="py">DELETED</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="py">CREATE</span><span class="w"> </span><span class="py">CHANGE</span><span class="w"> </span><span class="py">STREAM</span><span class="w"> </span><span class="py">purchase_stream</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FOR</span><span class="w"> </span><span class="p">()</span><span class="err">-</span><span class="p">[</span><span class="py">p</span><span class="p">:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">EMIT</span><span class="w"> </span><span class="py">CREATED</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">Query</span><span class="w"> </span><span class="py">change</span><span class="w"> </span><span class="py">stream</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">POLL</span><span class="w"> </span><span class="py">CHANGE</span><span class="w"> </span><span class="py">STREAM</span><span class="w"> </span><span class="py">user_changes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SINCE</span><span class="w"> </span><span class="nv">$last_sequence_number</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></code></pre></div>
<h4 id="event-stream-processing" class="position-relative d-flex align-items-center group">
<span>Event Stream Processing</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="event-stream-processing"
aria-haspopup="dialog"
aria-label="Share link: Event Stream Processing">
<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>Process changes as they occur:</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"># Python CDC consumer</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">process_user_changes</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="k">await</span> <span class="n">Client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"geodedb://localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">last_seq</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Poll for changes</span>
</span></span><span class="line"><span class="cl"> <span class="n">changes</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">poll_change_stream</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'user_changes'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">since</span><span class="o">=</span><span class="n">last_seq</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">limit</span><span class="o">=</span><span class="mi">100</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">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">changes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">change</span><span class="p">[</span><span class="s1">'event_type'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'CREATED'</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">handle_new_user</span><span class="p">(</span><span class="n">change</span><span class="p">[</span><span class="s1">'after'</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"> <span class="k">elif</span> <span class="n">change</span><span class="p">[</span><span class="s1">'event_type'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'UPDATED'</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">handle_user_update</span><span class="p">(</span><span class="n">change</span><span class="p">[</span><span class="s1">'before'</span><span class="p">],</span> <span class="n">change</span><span class="p">[</span><span class="s1">'after'</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"> <span class="k">elif</span> <span class="n">change</span><span class="p">[</span><span class="s1">'event_type'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'DELETED'</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">handle_user_deletion</span><span class="p">(</span><span class="n">change</span><span class="p">[</span><span class="s1">'before'</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">last_seq</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s1">'sequence_number'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">changes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> <span class="c1"># Poll interval</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">handle_new_user</span><span class="p">(</span><span class="n">user_data</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Send welcome email, update cache, etc.</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">"New user: </span><span class="si">{</span><span class="n">user_data</span><span class="p">[</span><span class="s1">'user_id'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="materialized-view-maintenance" class="position-relative d-flex align-items-center group">
<span>Materialized View Maintenance</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="materialized-view-maintenance"
aria-haspopup="dialog"
aria-label="Share link: Materialized View Maintenance">
<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 derived data up-to-date using CDC:</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">Maintain</span><span class="w"> </span><span class="py">user</span><span class="w"> </span><span class="py">activity</span><span class="w"> </span><span class="py">statistics</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">real</span><span class="err">-</span><span class="py">time</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">MATERIALIZED</span><span class="w"> </span><span class="py">VIEW</span><span class="w"> </span><span class="py">user_stats</span><span class="w"> </span><span class="py">AS</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 class="py">u</span><span class="err">.</span><span class="py">user_id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">purchase_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">SUM</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_spent</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MAX</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">last_purchase</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="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="py">p</span><span class="p">:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">GROUP</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">user_id</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">Geode</span><span class="w"> </span><span class="py">automatically</span><span class="w"> </span><span class="py">updates</span><span class="w"> </span><span class="py">view</span><span class="w"> </span><span class="py">when</span><span class="w"> </span><span class="py">purchases</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">inserted</span><span class="err">/</span><span class="py">deleted</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">user</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">'</span><span class="nc">user_123</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">product</span><span class="p">:</span><span class="nc">Product</span><span class="w"> </span><span class="p">{</span><span class="py">product_id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">prod_456</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">price</span><span class="p">:</span><span class="w"> </span><span class="nc">99</span><span class="mf">.99</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">amount</span><span class="p">:</span><span class="w"> </span><span class="nc">99</span><span class="mf">.99</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">datetime</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">product</span><span class="p">)</span><span class="err">;</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_stats</span><span class="w"> </span><span class="py">automatically</span><span class="w"> </span><span class="py">reflects</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">new</span><span class="w"> </span><span class="py">purchase</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="streaming-analytics" class="position-relative d-flex align-items-center group">
<span>Streaming Analytics</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="streaming-analytics"
aria-haspopup="dialog"
aria-label="Share link: Streaming Analytics">
<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="sliding-window-aggregations" class="position-relative d-flex align-items-center group">
<span>Sliding Window Aggregations</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="sliding-window-aggregations"
aria-haspopup="dialog"
aria-label="Share link: Sliding Window Aggregations">
<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>Compute metrics over time windows:</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">Count</span><span class="w"> </span><span class="py">events</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">last</span><span class="w"> </span><span class="py">5</span><span class="w"> </span><span class="py">minutes</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">e</span><span class="p">:</span><span class="nc">Event</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">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="err">.</span><span class="py">minusMinutes</span><span class="p">(</span><span class="py">5</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">e</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">event_count_5min</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">user_id</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">unique_users_5min</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">event_count_5min</span><span class="p">,</span><span class="w"> </span><span class="py">unique_users_5min</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">Hourly</span><span class="w"> </span><span class="py">breakdown</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">real</span><span class="err">-</span><span class="py">time</span><span class="w"> </span><span class="py">dashboard</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">e</span><span class="p">:</span><span class="nc">Event</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">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="err">.</span><span class="py">minusHours</span><span class="p">(</span><span class="py">24</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">date</span><span class="err">.</span><span class="py">truncate</span><span class="p">(</span><span class="err">'</span><span class="py">hour</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">e</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">hour</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">e</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">event_count</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">hour</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">RETURN</span><span class="w"> </span><span class="py">hour</span><span class="p">,</span><span class="w"> </span><span class="py">event_count</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="session-detection" class="position-relative d-flex align-items-center group">
<span>Session Detection</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="session-detection"
aria-haspopup="dialog"
aria-label="Share link: Session Detection">
<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>Identify user sessions in real-time:</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">Detect</span><span class="w"> </span><span class="py">session</span><span class="w"> </span><span class="py">boundaries</span><span class="w"> </span><span class="p">(</span><span class="py">30</span><span class="err">-</span><span class="py">minute</span><span class="w"> </span><span class="py">inactivity</span><span class="w"> </span><span class="py">threshold</span><span class="p">)</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">PERFORMED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">e</span><span class="p">:</span><span class="nc">Event</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">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="err">.</span><span class="py">minusHours</span><span class="p">(</span><span class="py">24</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">e</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">e</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="py">ASC</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">Group</span><span class="w"> </span><span class="py">events</span><span class="w"> </span><span class="py">into</span><span class="w"> </span><span class="py">sessions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">COLLECT</span><span class="p">(</span><span class="py">e</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">events</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">UNWIND</span><span class="w"> </span><span class="py">RANGE</span><span class="p">(</span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">SIZE</span><span class="p">(</span><span class="py">events</span><span class="p">)</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">1</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">i</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">events</span><span class="p">[</span><span class="py">i</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">current_event</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">i</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">duration</span><span class="err">.</span><span class="py">between</span><span class="p">(</span><span class="py">events</span><span class="p">[</span><span class="py">i</span><span class="err">-</span><span class="py">1</span><span class="p">]</span><span class="err">.</span><span class="py">timestamp</span><span class="p">,</span><span class="w"> </span><span class="py">events</span><span class="p">[</span><span class="py">i</span><span class="p">]</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="err">.</span><span class="py">minutes</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">is_session_start</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">current_event</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">CASE</span><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">is_session_start</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">END</span><span class="p">)</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="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">current_event</span><span class="err">.</span><span class="py">timestamp</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">session_id</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">session_id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MIN</span><span class="p">(</span><span class="py">current_event</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">session_start</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MAX</span><span class="p">(</span><span class="py">current_event</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">session_end</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">current_event</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">event_count</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="concurrent-processing" class="position-relative d-flex align-items-center group">
<span>Concurrent Processing</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="concurrent-processing"
aria-haspopup="dialog"
aria-label="Share link: Concurrent Processing">
<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="non-blocking-reads" class="position-relative d-flex align-items-center group">
<span>Non-Blocking Reads</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="non-blocking-reads"
aria-haspopup="dialog"
aria-label="Share link: Non-Blocking Reads">
<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>Geode’s MVCC ensures reads never block writes:</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">Long</span><span class="err">-</span><span class="py">running</span><span class="w"> </span><span class="py">analytical</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">doesn</span><span class="err">'</span><span class="py">t</span><span class="w"> </span><span class="py">block</span><span class="w"> </span><span class="py">writes</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">-></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">WITH</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">category</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">u</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">buyer_count</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">buyer_count</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">RETURN</span><span class="w"> </span><span class="py">category</span><span class="p">,</span><span class="w"> </span><span class="py">buyer_count</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">Meanwhile</span><span class="p">,</span><span class="w"> </span><span class="py">inserts</span><span class="w"> </span><span class="py">proceed</span><span class="w"> </span><span class="py">without</span><span class="w"> </span><span class="py">waiting</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">new_user</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">'</span><span class="nc">user_new</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">product</span><span class="p">:</span><span class="nc">Product</span><span class="w"> </span><span class="p">{</span><span class="py">product_id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">prod_new</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">new_user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="w"> </span><span class="p">{</span><span class="py">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">datetime</span><span class="p">()}]</span><span class="err">-></span><span class="p">(</span><span class="py">product</span><span class="p">)</span><span class="err">;</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">Both</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">execute</span><span class="w"> </span><span class="py">concurrently</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>Maximize throughput with connection pooling:</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 connection pooling
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s">"context"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"log"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"sync"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"geodedb.com/geode"</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="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c1">// Create connection pool
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <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">Open</span><span class="p">(</span><span class="s">"geodedb://localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatal</span><span class="p">(</span><span class="nx">err</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="k">defer</span> <span class="nx">db</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1">// Configure pool
</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">SetMaxOpenConns</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span> <span class="c1">// Max connections
</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">SetMaxIdleConns</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="c1">// Keep 10 idle connections ready
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"> <span class="c1">// Execute queries concurrently
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kd">var</span> <span class="nx">wg</span> <span class="nx">sync</span><span class="p">.</span><span class="nx">WaitGroup</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p"><</span> <span class="mi">1000</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">wg</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">go</span> <span class="kd">func</span><span class="p">(</span><span class="nx">userID</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">wg</span><span class="p">.</span><span class="nf">Done</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="nx">row</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">QueryRowContext</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="s">"MATCH (u:User {user_id: $user_id}) RETURN u"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">geode</span><span class="p">.</span><span class="nf">Param</span><span class="p">(</span><span class="s">"user_id"</span><span class="p">,</span> <span class="nx">userID</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1">// Process result...
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="p">}(</span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">"user_%d"</span><span class="p">,</span> <span class="nx">i</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">wg</span><span class="p">.</span><span class="nf">Wait</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h3 id="real-time-recommendations" class="position-relative d-flex align-items-center group">
<span>Real-Time Recommendations</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="real-time-recommendations"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Recommendations">
<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="instant-personalization" class="position-relative d-flex align-items-center group">
<span>Instant Personalization</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="instant-personalization"
aria-haspopup="dialog"
aria-label="Share link: Instant Personalization">
<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>Generate recommendations with low latency:</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">Real</span><span class="err">-</span><span class="py">time</span><span class="w"> </span><span class="py">product</span><span class="w"> </span><span class="py">recommendations</span><span class="w"> </span><span class="p">(</span><span class="err"><</span><span class="w"> </span><span class="py">10ms</span><span class="w"> </span><span class="py">typical</span><span class="p">)</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">|</span><span class="nc">VIEWED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">interacted</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">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">interacted</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">interacted</span><span class="err">.</span><span class="py">last_interaction</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">10</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Use</span><span class="w"> </span><span class="py">recent</span><span class="w"> </span><span class="py">interactions</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">Find</span><span class="w"> </span><span class="py">similar</span><span class="w"> </span><span class="py">products</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">interacted</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">SIMILAR_TO</span><span class="w"> </span><span class="p">{</span><span class="py">similarity_score</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="mf">.7</span><span class="p">}]</span><span class="err">-</span><span class="p">(</span><span class="py">candidate</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">NOT</span><span class="w"> </span><span class="p">(</span><span class="py">u</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">-></span><span class="p">(</span><span class="py">candidate</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Not</span><span class="w"> </span><span class="py">already</span><span class="w"> </span><span class="py">purchased</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">Score</span><span class="w"> </span><span class="py">candidates</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">candidate</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">interacted</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">based_on_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</span><span class="p">(</span><span class="py">similarity_score</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_similarity</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">popularity_score</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">popularity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">candidate</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">based_on_count</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">avg_similarity</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.7</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">popularity</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.3</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">score</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">score</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="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">candidate</span><span class="err">.</span><span class="py">product_id</span><span class="p">,</span><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">score</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="contextual-filtering" class="position-relative d-flex align-items-center group">
<span>Contextual Filtering</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="contextual-filtering"
aria-haspopup="dialog"
aria-label="Share link: Contextual Filtering">
<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>Apply real-time context to recommendations:</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">Filter</span><span class="w"> </span><span class="py">recommendations</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">user</span><span class="err">'</span><span class="py">s</span><span class="w"> </span><span class="py">current</span><span class="w"> </span><span class="py">context</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="nv">$current_location</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">location</span><span class="p">,</span><span class="w"> </span><span class="nv">$time_of_day</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">time_hour</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">Get</span><span class="w"> </span><span class="py">base</span><span class="w"> </span><span class="py">recommendations</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="err">-</span><span class="p">[:</span><span class="nc">INTERESTED_IN</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">category</span><span class="p">:</span><span class="nc">Category</span><span class="p">)</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">category</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">IN_CATEGORY</span><span class="p">]</span><span class="err">-</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">NOT</span><span class="w"> </span><span class="p">(</span><span class="py">u</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">-></span><span class="p">(</span><span class="py">p</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">Apply</span><span class="w"> </span><span class="py">contextual</span><span class="w"> </span><span class="py">filters</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">p</span><span class="p">,</span><span class="w"> </span><span class="py">location</span><span class="p">,</span><span class="w"> </span><span class="py">time_hour</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="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="py">Location</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">availability</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">EXISTS</span><span class="p">((</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">AVAILABLE_IN</span><span class="p">]</span><span class="err">-></span><span class="p">(:</span><span class="nc">Region</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nc">location</span><span class="p">}))</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</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">Time</span><span class="err">-</span><span class="py">appropriate</span><span class="w"> </span><span class="py">products</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">time_hour</span><span class="w"> </span><span class="py">BETWEEN</span><span class="w"> </span><span class="py">9</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">21</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">available_24_7</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</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">In</span><span class="w"> </span><span class="py">stock</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">stock_quantity</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="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">relevance_score</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">10</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="err">.</span><span class="py">product_id</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="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">price</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="performance-monitoring" class="position-relative d-flex align-items-center group">
<span>Performance Monitoring</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="performance-monitoring"
aria-haspopup="dialog"
aria-label="Share link: Performance Monitoring">
<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-profiling" class="position-relative d-flex align-items-center group">
<span>Query Profiling</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-profiling"
aria-haspopup="dialog"
aria-label="Share link: Query Profiling">
<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>Analyze query performance in real-time:</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">Profile</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">execution</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">PROFILE</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="w"> </span><span class="p">{</span><span class="py">user_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="err">*</span><span class="nc">1</span><span class="err">.</span><span class="mf">.2</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">friend</span><span class="p">:</span><span class="nc">User</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">friend</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</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">friend</span><span class="err">.</span><span class="py">user_id</span><span class="p">,</span><span class="w"> </span><span class="py">friend</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">LIMIT</span><span class="w"> </span><span class="py">50</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">Returns</span><span class="w"> </span><span class="py">execution</span><span class="w"> </span><span class="py">plan</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">timing</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="err">-</span><span class="w"> </span><span class="nc">Index</span><span class="w"> </span><span class="py">seek</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.2</span><span class="py">ms</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="err">-</span><span class="w"> </span><span class="py">Traversal</span><span class="p">:</span><span class="w"> </span><span class="nc">1</span><span class="mf">.5</span><span class="py">ms</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="err">-</span><span class="w"> </span><span class="py">Filter</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.3</span><span class="py">ms</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="err">-</span><span class="w"> </span><span class="py">Total</span><span class="p">:</span><span class="w"> </span><span class="nc">2</span><span class="mf">.0</span><span class="py">ms</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="real-time-metrics" class="position-relative d-flex align-items-center group">
<span>Real-Time Metrics</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="real-time-metrics"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Metrics">
<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 system performance:</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">current</span><span class="w"> </span><span class="py">system</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">DATABASE</span><span class="w"> </span><span class="py">METRICS</span><span class="err">;</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">Returns</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="err">-</span><span class="w"> </span><span class="nc">queries_per_second</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="err">-</span><span class="w"> </span><span class="py">avg_query_latency_ms</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="err">-</span><span class="w"> </span><span class="py">active_connections</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="err">-</span><span class="w"> </span><span class="py">cache_hit_rate</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="err">-</span><span class="w"> </span><span class="py">transaction_rate</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">Track</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">statistics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="kc">QUERY</span><span class="w"> </span><span class="py">STATISTICS</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="kd">query</span><span class="nc">_time</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="err">.</span><span class="py">minusMinutes</span><span class="p">(</span><span class="py">5</span><span class="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">execution_time</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">10</span><span class="err">;</span><span class="w">
</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><ol>
<li><strong>Use Indexes</strong>: Ensure all lookup properties are indexed for constant-time access</li>
<li><strong>Limit Result Sets</strong>: Always use LIMIT to bound query execution time</li>
<li><strong>Bound Traversals</strong>: Limit path depths to prevent runaway queries</li>
<li><strong>Prepare Statements</strong>: Reuse prepared statements for frequently executed queries</li>
<li><strong>Connection Pooling</strong>: Maintain a pool of connections for concurrent workloads</li>
<li><strong>Filter Early</strong>: Apply WHERE clauses as early as possible in queries</li>
<li><strong>Monitor Latency</strong>: Track p50, p95, p99 latency metrics for all query types</li>
<li><strong>Batch Updates</strong>: Group related writes into transactions for better throughput</li>
<li><strong>Async Processing</strong>: Use CDC for asynchronous downstream processing</li>
<li><strong>Cache Strategically</strong>: Cache frequently accessed data at the application layer</li>
</ol>
<h3 id="integration-with-geode-features" class="position-relative d-flex align-items-center group">
<span>Integration with Geode Features</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-features"
aria-haspopup="dialog"
aria-label="Share link: Integration with Geode Features">
<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>Real-time processing leverages:</p>
<ul>
<li><strong>MVCC</strong>: Non-blocking concurrent reads and writes</li>
<li><strong>QUIC Protocol</strong>: Low-latency network transport with multiplexing</li>
<li><strong>Indexes</strong>: B-tree, HNSW vector, and full-text indexes for fast lookups</li>
<li><strong>CDC</strong>: Change streams for event-driven architectures</li>
<li><strong>Prepared Statements</strong>: Reduced parsing overhead for repeated queries</li>
<li><strong>Telemetry</strong>: Real-time performance metrics via Prometheus</li>
</ul>
<p>Browse the tagged content below to discover documentation, tutorials, and guides for building real-time graph applications with Geode.</p>
<h3 id="real-time-application-architecture" class="position-relative d-flex align-items-center group">
<span>Real-Time Application Architecture</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="real-time-application-architecture"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Application Architecture">
<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="event-driven-microservices" class="position-relative d-flex align-items-center group">
<span>Event-Driven Microservices</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="event-driven-microservices"
aria-haspopup="dialog"
aria-label="Share link: Event-Driven Microservices">
<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>Build responsive systems with event-driven architecture:</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"># Microservice reacting to graph changes in real-time</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span><span class="p">,</span> <span class="n">ChangeStreamConsumer</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">OrderProcessingService</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">geode_client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">geode_client</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">consumer</span> <span class="o">=</span> <span class="n">ChangeStreamConsumer</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="s1">'order_stream'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Process order events in real-time"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">consumer</span><span class="o">.</span><span class="n">stream</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">change</span><span class="o">.</span><span class="n">event_type</span> <span class="o">==</span> <span class="s1">'CREATED'</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">process_new_order</span><span class="p">(</span><span class="n">change</span><span class="o">.</span><span class="n">after</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">elif</span> <span class="n">change</span><span class="o">.</span><span class="n">event_type</span> <span class="o">==</span> <span class="s1">'UPDATED'</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_order_update</span><span class="p">(</span><span class="n">change</span><span class="o">.</span><span class="n">before</span><span class="p">,</span> <span class="n">change</span><span class="o">.</span><span class="n">after</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">process_new_order</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">order</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Handle new order with sub-10ms latency"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Validate inventory (indexed lookup, <1ms)</span>
</span></span><span class="line"><span class="cl"> <span class="n">available</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE p.stock_quantity >= $quantity
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.stock_quantity
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"product_id"</span><span class="p">:</span> <span class="n">order</span><span class="p">[</span><span class="s1">'product_id'</span><span class="p">],</span> <span class="s2">"quantity"</span><span class="p">:</span> <span class="n">order</span><span class="p">[</span><span class="s1">'quantity'</span><span class="p">]})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">available</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Reserve inventory atomically</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET p.stock_quantity = p.stock_quantity - $quantity
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (o:Order {id: $order_id, status: 'confirmed'})
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (o)-[:RESERVES]->(p)
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"product_id"</span><span class="p">:</span> <span class="n">order</span><span class="p">[</span><span class="s1">'product_id'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"quantity"</span><span class="p">:</span> <span class="n">order</span><span class="p">[</span><span class="s1">'quantity'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"order_id"</span><span class="p">:</span> <span class="n">order</span><span class="p">[</span><span class="s1">'id'</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"># Trigger downstream services (payment, shipping)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">notify_payment_service</span><span class="p">(</span><span class="n">order</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">notify_fulfillment_service</span><span class="p">(</span><span class="n">order</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="real-time-dashboard-backend" class="position-relative d-flex align-items-center group">
<span>Real-Time Dashboard Backend</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="real-time-dashboard-backend"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Dashboard Backend">
<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>Power live dashboards with streaming queries:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">WebSocket</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.websocket</span><span class="p">(</span><span class="s2">"/ws/dashboard"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">dashboard_stream</span><span class="p">(</span><span class="n">websocket</span><span class="p">:</span> <span class="n">WebSocket</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Stream real-time metrics to dashboard"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">websocket</span><span class="o">.</span><span class="n">accept</span><span class="p">()</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="k">await</span> <span class="n">Client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Compute real-time metrics every second</span>
</span></span><span class="line"><span class="cl"> <span class="n">metrics</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">gather</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Active users (last 5 minutes)</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (e:Event {type: 'user_active'})
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE e.timestamp > datetime().minusMinutes(5)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN COUNT(DISTINCT e.user_id) AS active_users
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Orders per minute</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (o:Order)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE o.created_at > datetime().minusMinutes(1)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN COUNT(o) AS orders_per_minute
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Revenue (last hour)</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (o:Order {status: 'completed'})
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE o.completed_at > datetime().minusHours(1)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN SUM(o.total) AS revenue_last_hour
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Top products</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (o:Order)-[:CONTAINS]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE o.created_at > datetime().minusHours(1)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.name, COUNT(o) AS orders
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY orders DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</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"># Send to WebSocket (< 20ms total latency)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">websocket</span><span class="o">.</span><span class="n">send_json</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"timestamp"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">(),</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"active_users"</span><span class="p">:</span> <span class="n">metrics</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'active_users'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"orders_per_minute"</span><span class="p">:</span> <span class="n">metrics</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'orders_per_minute'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"revenue_last_hour"</span><span class="p">:</span> <span class="n">metrics</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'revenue_last_hour'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"top_products"</span><span class="p">:</span> <span class="n">metrics</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">bindings</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">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Update every second</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">finally</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div>
<h4 id="live-recommendation-engine" class="position-relative d-flex align-items-center group">
<span>Live Recommendation Engine</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="live-recommendation-engine"
aria-haspopup="dialog"
aria-label="Share link: Live Recommendation Engine">
<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>Generate personalized recommendations with <10ms latency:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">RecommendationEngine</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Prepare frequently-used queries</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">similar_products_stmt</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Prepare statements for faster execution"""</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">similar_products_stmt</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">prepare</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (viewed:Product {id: $product_id})-[:SIMILAR_TO]-(similar:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE similar.in_stock = true
</span></span></span><span class="line"><span class="cl"><span class="s2"> AND NOT EXISTS {
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})-[:PURCHASED]->(similar)
</span></span></span><span class="line"><span class="cl"><span class="s2"> }
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH similar,
</span></span></span><span class="line"><span class="cl"><span class="s2"> similar.popularity_score AS popularity,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT{(similar)<-[:PURCHASED]-(:User)} AS purchase_count
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN similar.id AS product_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> similar.name AS name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> similar.price AS price,
</span></span></span><span class="line"><span class="cl"><span class="s2"> (popularity * 0.3 + purchase_count * 0.7) AS score
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY score DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT $limit
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_recommendations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Real-time recommendations with <5ms latency"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Use prepared statement for hot path</span>
</span></span><span class="line"><span class="cl"> <span class="n">recommendations</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">similar_products_stmt</span><span class="o">.</span><span class="n">execute</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"product_id"</span><span class="p">:</span> <span class="n">context</span><span class="p">[</span><span class="s1">'current_product_id'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"limit"</span><span class="p">:</span> <span class="mi">20</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"># Apply real-time personalization filters</span>
</span></span><span class="line"><span class="cl"> <span class="n">filtered</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_apply_user_preferences</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">user_id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">recommendations</span><span class="o">.</span><span class="n">rows</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="n">filtered</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">_apply_user_preferences</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">candidates</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Filter by user preferences (cached, <1ms)"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># User preferences cached in-memory or Redis</span>
</span></span><span class="line"><span class="cl"> <span class="n">prefs</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_user_preferences</span><span class="p">(</span><span class="n">user_id</span><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="n">rec</span> <span class="k">for</span> <span class="n">rec</span> <span class="ow">in</span> <span class="n">candidates</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">rec</span><span class="p">[</span><span class="s1">'price'</span><span class="p">]</span> <span class="o"><=</span> <span class="n">prefs</span><span class="p">[</span><span class="s1">'max_price'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="ow">and</span> <span class="n">rec</span><span class="p">[</span><span class="s1">'category'</span><span class="p">]</span> <span class="ow">in</span> <span class="n">prefs</span><span class="p">[</span><span class="s1">'preferred_categories'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="p">]</span>
</span></span></code></pre></div>
<h3 id="real-time-analytics-patterns" class="position-relative d-flex align-items-center group">
<span>Real-Time Analytics 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="real-time-analytics-patterns"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Analytics 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="sliding-time-windows" class="position-relative d-flex align-items-center group">
<span>Sliding Time Windows</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="sliding-time-windows"
aria-haspopup="dialog"
aria-label="Share link: Sliding Time Windows">
<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>Compute metrics over rolling time windows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">compute_rolling_metrics</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Calculate metrics over sliding windows"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="k">await</span> <span class="n">Client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># 5-minute rolling average of response times</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (req:Request)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE req.timestamp > datetime().minusMinutes(5)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH req.timestamp AS ts, req.duration_ms AS duration
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY ts
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH collect({ts: ts, duration: duration}) AS samples
</span></span></span><span class="line"><span class="cl"><span class="s2"> UNWIND range(0, SIZE(samples) - 1) AS i
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH samples[i].ts AS timestamp,
</span></span></span><span class="line"><span class="cl"><span class="s2"> [x IN samples[i..i+59] | x.duration] AS window
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN timestamp,
</span></span></span><span class="line"><span class="cl"><span class="s2"> AVG(window) AS avg_response_time,
</span></span></span><span class="line"><span class="cl"><span class="s2"> PERCENTILE_CONT(window, 0.95) AS p95_response_time
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</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">"</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'timestamp'</span><span class="p">]</span><span class="si">}</span><span class="s2">: avg=</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'avg_response_time'</span><span class="p">]</span><span class="si">}</span><span class="s2">ms, "</span>
</span></span><span class="line"><span class="cl"> <span class="sa">f</span><span class="s2">"p95=</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'p95_response_time'</span><span class="p">]</span><span class="si">}</span><span class="s2">ms"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="real-time-anomaly-detection" class="position-relative d-flex align-items-center group">
<span>Real-Time Anomaly Detection</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="real-time-anomaly-detection"
aria-haspopup="dialog"
aria-label="Share link: Real-Time Anomaly Detection">
<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>Detect anomalies as they occur:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">detect_anomalies</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Real-time anomaly detection on graph patterns"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="k">await</span> <span class="n">Client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Detect unusual user behavior patterns</span>
</span></span><span class="line"><span class="cl"> <span class="n">anomalies</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)-[a:ACTION]->(resource)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE a.timestamp > datetime().minusMinutes(5)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(a) AS action_count,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(DISTINCT resource) AS unique_resources,
</span></span></span><span class="line"><span class="cl"><span class="s2"> AVG(a.duration_ms) AS avg_duration
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE action_count > 100 -- Unusually high activity
</span></span></span><span class="line"><span class="cl"><span class="s2"> OR unique_resources > 50 -- Accessing many resources
</span></span></span><span class="line"><span class="cl"><span class="s2"> OR avg_duration < 10 -- Suspiciously fast
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> action_count,
</span></span></span><span class="line"><span class="cl"><span class="s2"> unique_resources,
</span></span></span><span class="line"><span class="cl"><span class="s2"> avg_duration,
</span></span></span><span class="line"><span class="cl"><span class="s2"> 'potential_bot' AS anomaly_type
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">anomaly</span> <span class="ow">in</span> <span class="n">anomalies</span><span class="o">.</span><span class="n">bindings</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">alert_security_team</span><span class="p">(</span><span class="n">anomaly</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">throttle_user</span><span class="p">(</span><span class="n">anomaly</span><span class="p">[</span><span class="s1">'u.id'</span><span class="p">])</span>
</span></span></code></pre></div>
<h4 id="stream-joins" class="position-relative d-flex align-items-center group">
<span>Stream Joins</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="stream-joins"
aria-haspopup="dialog"
aria-label="Share link: Stream Joins">
<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>Join real-time event streams with graph data:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">join_streams_with_graph</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Enrich event stream with graph context"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Event stream from Kafka/Kinesis</span>
</span></span><span class="line"><span class="cl"> <span class="n">event_stream</span> <span class="o">=</span> <span class="n">KafkaConsumer</span><span class="p">(</span><span class="s1">'user-events'</span><span class="p">)</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="k">await</span> <span class="n">Client</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">event_stream</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Enrich event with user graph context</span>
</span></span><span class="line"><span class="cl"> <span class="n">context</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:FRIEND]->(friend:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:MEMBER_OF]->(group:Group)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.name, u.tier,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(friend) AS friend_count,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COLLECT(group.name) AS groups
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">event</span><span class="p">[</span><span class="s1">'user_id'</span><span class="p">]})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">enriched_event</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="o">**</span><span class="n">event</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"user_context"</span><span class="p">:</span> <span class="n">context</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</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"># Forward to downstream processing</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">process_enriched_event</span><span class="p">(</span><span class="n">enriched_event</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="optimization-techniques" class="position-relative d-flex align-items-center group">
<span>Optimization Techniques</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="optimization-techniques"
aria-haspopup="dialog"
aria-label="Share link: Optimization Techniques">
<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="index-optimized-queries" class="position-relative d-flex align-items-center group">
<span>Index-Optimized Queries</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="index-optimized-queries"
aria-haspopup="dialog"
aria-label="Share link: Index-Optimized Queries">
<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>Ensure queries use indexes for consistent low latency:</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">Create</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">lookup</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</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="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">id</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</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="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</span><span class="w"> </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 class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">sku</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</span><span class="w"> </span><span class="p">(</span><span class="py">e</span><span class="p">:</span><span class="nc">Event</span><span class="p">)</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">e</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</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">Compound</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">multi</span><span class="err">-</span><span class="py">property</span><span class="w"> </span><span class="py">lookups</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</span><span class="w"> </span><span class="p">(</span><span class="py">o</span><span class="p">:</span><span class="nc">Order</span><span class="p">)</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">o</span><span class="err">.</span><span class="py">user_id</span><span class="p">,</span><span class="w"> </span><span class="py">o</span><span class="err">.</span><span class="py">status</span><span class="p">)</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">Verify</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">usage</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">EXPLAIN</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">EXPLAIN</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="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nv">$email</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</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">Should</span><span class="w"> </span><span class="py">show</span><span class="p">:</span><span class="w"> </span><span class="nc">IndexScan</span><span class="w"> </span><span class="p">(</span><span class="py">user_email_idx</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">Queries</span><span class="w"> </span><span class="py">using</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">have</span><span class="w"> </span><span class="py">predictable</span><span class="w"> </span><span class="py">latency</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="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">alice</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">})</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="err"><</span><span class="py">1ms</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="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="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="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nc">12345</span><span class="p">})</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="err"><</span><span class="py">1ms</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="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="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">o</span><span class="p">:</span><span class="nc">Order</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="nc">12345</span><span class="p">,</span><span class="w"> </span><span class="py">status</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">pending</span><span class="err">'</span><span class="p">})</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="err"><</span><span class="py">2ms</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">o</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="connection-pooling-for-high-throughput" class="position-relative d-flex align-items-center group">
<span>Connection Pooling for High Throughput</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-for-high-throughput"
aria-haspopup="dialog"
aria-label="Share link: Connection Pooling for High Throughput">
<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>Optimize connection management for concurrent workloads:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">ConnectionPool</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Configure pool for real-time workload</span>
</span></span><span class="line"><span class="cl"><span class="n">pool</span> <span class="o">=</span> <span class="n">ConnectionPool</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">"localhost"</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">min_connections</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="c1"># Always ready</span>
</span></span><span class="line"><span class="cl"> <span class="n">max_connections</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="c1"># Scale under load</span>
</span></span><span class="line"><span class="cl"> <span class="n">connection_timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="c1"># Fail fast</span>
</span></span><span class="line"><span class="cl"> <span class="n">idle_timeout</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="c1"># Reap idle connections</span>
</span></span><span class="line"><span class="cl"> <span class="n">health_check_interval</span><span class="o">=</span><span class="mi">60</span> <span class="c1"># Verify connection health</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">async</span> <span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Process request with pooled connection"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">pool</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Connection acquired from pool (no handshake overhead)</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})-[:RECENT]->(items)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN items
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Concurrent request handling</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="n">requests</span> <span class="o">=</span> <span class="p">[</span><span class="n">handle_request</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10000</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"> <span class="n">results</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">gather</span><span class="p">(</span><span class="o">*</span><span class="n">requests</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Pool manages connection allocation efficiently</span>
</span></span></code></pre></div>
<h4 id="query-result-caching" class="position-relative d-flex align-items-center group">
<span>Query Result Caching</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-result-caching"
aria-haspopup="dialog"
aria-label="Share link: Query Result Caching">
<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>Cache frequently accessed data at application layer:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">cachetools</span> <span class="kn">import</span> <span class="n">TTLCache</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">CachedClient</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># TTL cache: 1000 entries, 60-second TTL</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span> <span class="o">=</span> <span class="n">TTLCache</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">ttl</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Get user with caching"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">cache_key</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"user:</span><span class="si">{</span><span class="n">user_id</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">cache_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">[</span><span class="n">cache_key</span><span class="p">]</span> <span class="c1"># Cache hit (<0.1ms)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Cache miss - query database</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">user</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="p">[</span><span class="n">cache_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">user</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">user</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">invalidate_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Invalidate cache on updates"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">cache_key</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"user:</span><span class="si">{</span><span class="n">user_id</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">cache_key</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="production-deployment" class="position-relative d-flex align-items-center group">
<span>Production Deployment</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="production-deployment"
aria-haspopup="dialog"
aria-label="Share link: Production Deployment">
<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="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>
</h4><p>Distribute real-time queries across replicas:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">LoadBalancedClient</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Connect to multiple Geode nodes</span>
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">LoadBalancedClient</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">nodes</span><span class="o">=</span><span class="p">[</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"node1.example.com:3141"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"node2.example.com:3141"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"node3.example.com:3141"</span>
</span></span><span class="line"><span class="cl"> <span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="n">strategy</span><span class="o">=</span><span class="s2">"least_loaded"</span><span class="p">,</span> <span class="c1"># Route to least loaded node</span>
</span></span><span class="line"><span class="cl"> <span class="n">health_check_interval</span><span class="o">=</span><span class="mi">30</span> <span class="c1"># Check node health every 30s</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"># Queries automatically distributed</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">query_with_lb</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Routes to healthy, least-loaded node</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"MATCH (u:User) RETURN count(u)"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="monitoring-real-time-performance" class="position-relative d-flex align-items-center group">
<span>Monitoring Real-Time Performance</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-real-time-performance"
aria-haspopup="dialog"
aria-label="Share link: Monitoring Real-Time Performance">
<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 real-time query performance:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">prometheus_client</span> <span class="kn">import</span> <span class="n">Histogram</span><span class="p">,</span> <span class="n">Counter</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Metrics</span>
</span></span><span class="line"><span class="cl"><span class="n">query_duration</span> <span class="o">=</span> <span class="n">Histogram</span><span class="p">(</span><span class="s1">'geode_query_duration_seconds'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'Query execution time'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">query_errors</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="s1">'geode_query_errors_total'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'Total query errors'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">execute_with_metrics</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Execute query with performance tracking"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">with</span> <span class="n">query_duration</span><span class="o">.</span><span class="n">time</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">query_errors</span><span class="o">.</span><span class="n">inc</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Grafana dashboard queries Prometheus metrics:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># - P50, P95, P99 latency</span>
</span></span><span class="line"><span class="cl"><span class="c1"># - QPS (queries per second)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># - Error rate</span>
</span></span></code></pre></div><p>Browse the tagged content below to discover documentation, tutorials, and guides for building real-time graph applications with Geode.</p>
Tag
1 article
Real-Time Processing
Process graph data in real-time with Geode's low-latency query execution, change data capture, and streaming integrations. Learn to build responsive applications with millisecond query times.