<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>The <strong>Graph Algorithms and Analytics</strong> category provides comprehensive documentation for implementing advanced computational techniques on graph data using Geode. This collection covers everything from classical graph algorithms to modern machine learning approaches, enabling you to extract deep insights from connected data.</p> <h3 id="introduction-to-graph-algorithms" class="position-relative d-flex align-items-center group"> <span>Introduction to Graph Algorithms</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="introduction-to-graph-algorithms" aria-haspopup="dialog" aria-label="Share link: Introduction to Graph Algorithms"> <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>Graph algorithms are computational procedures designed to solve problems on graph-structured data. Unlike traditional database queries that retrieve data, graph algorithms analyze the structure and relationships within your data to discover patterns, measure importance, identify communities, and predict connections. These techniques are essential for modern applications in social networks, fraud detection, recommendation systems, knowledge graphs, and network analysis.</p> <p>Geode provides native support for executing graph algorithms through its ISO-standard GQL query language, offering both built-in operations and the flexibility to implement custom algorithms using GQL&rsquo;s powerful pattern matching and aggregation capabilities.</p> <h3 id="core-algorithm-categories" class="position-relative d-flex align-items-center group"> <span>Core Algorithm Categories</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="core-algorithm-categories" aria-haspopup="dialog" aria-label="Share link: Core Algorithm Categories"> <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="centrality-algorithms" class="position-relative d-flex align-items-center group"> <span>Centrality Algorithms</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="centrality-algorithms" aria-haspopup="dialog" aria-label="Share link: Centrality Algorithms"> <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>Centrality algorithms identify the most important nodes in a graph based on various criteria. <strong>PageRank</strong> measures influence by analyzing the quality and quantity of incoming relationships, making it ideal for ranking web pages, identifying key influencers in social networks, or finding critical infrastructure nodes. <strong>Betweenness Centrality</strong> identifies nodes that act as bridges between different parts of the graph, useful for finding bottlenecks or key intermediaries. <strong>Degree Centrality</strong> simply counts connections, while <strong>Closeness Centrality</strong> measures how quickly information can spread from a node.</p> <p>In Geode, you can compute centrality using aggregation queries:</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">Find</span><span class="w"> </span><span class="py">most</span><span class="w"> </span><span class="py">connected</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="p">(</span><span class="py">degree</span><span class="w"> </span><span class="py">centrality</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="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</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">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">connections</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">connections</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></code></pre></div> <h4 id="community-detection" class="position-relative d-flex align-items-center group"> <span>Community 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="community-detection" aria-haspopup="dialog" aria-label="Share link: Community 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>Community detection algorithms identify clusters of nodes that are more densely connected to each other than to the rest of the graph. <strong>Label Propagation</strong> is a fast, scalable approach where nodes adopt labels from their neighbors through iterative voting. <strong>Louvain Modularity</strong> optimizes for modularity, a measure of community structure quality. <strong>Weakly Connected Components</strong> finds isolated groups with no connections between them.</p> <p>These algorithms are crucial for market segmentation, detecting fraud rings, organizing knowledge bases, and understanding social group dynamics.</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 example: Finding communities through pattern analysis</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geode_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">geode_client</span><span class="o">.</span><span class="n">open_database</span><span class="p">(</span><span class="s2">&#34;localhost:3141&#34;</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">client</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Find tightly connected user groups</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u1:User)-[:FOLLOWS]-&gt;(u2:User) </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE EXISTS { </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u2)-[:FOLLOWS]-&gt;(u1) </span></span></span><span class="line"><span class="cl"><span class="s2"> } </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u1.community, COUNT(*) AS size </span></span></span><span class="line"><span class="cl"><span class="s2"> GROUP BY u1.community </span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY size DESC </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">)</span> </span></span></code></pre></div> <h4 id="pathfinding-algorithms" class="position-relative d-flex align-items-center group"> <span>Pathfinding Algorithms</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="pathfinding-algorithms" aria-haspopup="dialog" aria-label="Share link: Pathfinding Algorithms"> <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>Pathfinding algorithms discover routes through the graph. <strong>Shortest Path</strong> finds the minimum-hop route between nodes, essential for navigation, network routing, and supply chain optimization. <strong>Dijkstra&rsquo;s Algorithm</strong> extends this to weighted graphs, considering relationship costs. <strong>All Shortest Paths</strong> finds all minimal routes, useful when multiple equivalent options exist.</p> <p>Geode&rsquo;s GQL implementation provides native pathfinding through path patterns:</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">Find</span><span class="w"> </span><span class="py">shortest</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="py">between</span><span class="w"> </span><span class="py">people</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="py">SHORTEST</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Alice</span><span class="err">&#39;</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="py">b</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Bob</span><span class="err">&#39;</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">path</span><span class="p">,</span><span class="w"> </span><span class="py">LENGTH</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">hops</span><span class="w"> </span></span></span></code></pre></div> <h4 id="graph-neural-networks-and-embeddings" class="position-relative d-flex align-items-center group"> <span>Graph Neural Networks and Embeddings</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="graph-neural-networks-and-embeddings" aria-haspopup="dialog" aria-label="Share link: Graph Neural Networks and Embeddings"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Graph Neural Networks (GNNs)</strong> learn vector representations of nodes that capture both their attributes and structural position in the graph. <strong>Node2Vec</strong> creates embeddings through random walks, enabling traditional machine learning on graph data. <strong>Graph Convolutional Networks</strong> aggregate information from neighborhoods to learn representations.</p> <p>Geode supports storing and querying vector embeddings, enabling similarity search and machine learning workflows:</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"># Store node embeddings for similarity search</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">execute</span><span class="p">(</span><span class="s2">&#34;&#34;&#34; </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.embedding = $embedding_vector </span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;product_id&#34;</span><span class="p">:</span> <span class="mi">123</span><span class="p">,</span> <span class="s2">&#34;embedding_vector&#34;</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.23</span><span class="p">,</span> <span class="mf">0.45</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.12</span><span class="p">,</span> <span class="o">...</span><span class="p">]})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Find similar products using cosine similarity</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (target:Product {id: $id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (candidate:Product) </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE candidate.id &lt;&gt; $id </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN candidate.name, </span></span></span><span class="line"><span class="cl"><span class="s2"> vector.cosine_similarity(target.embedding, candidate.embedding) AS similarity </span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY similarity 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">&#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="mi">123</span><span class="p">})</span> </span></span></code></pre></div> <h3 id="real-time-analytics" class="position-relative d-flex align-items-center group"> <span>Real-Time 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="real-time-analytics" aria-haspopup="dialog" aria-label="Share link: Real-Time 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><p>Modern applications require analytics on live, changing data. Geode&rsquo;s MVCC (Multi-Version Concurrency Control) architecture enables real-time queries without blocking writes, making it ideal for streaming analytics, live dashboards, and operational intelligence.</p> <p><strong>Real-time pattern detection</strong> identifies emerging trends as data arrives:</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">unusual</span><span class="w"> </span><span class="py">activity</span><span class="w"> </span><span class="py">patterns</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">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">TRANSACTION</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">Merchant</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">m</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">5</span><span class="err">&#39;</span><span class="w"> </span><span class="py">MINUTE</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">id</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">HAVING</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">avg_transactions_per_5min</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">suspicious_activity</span><span class="w"> </span></span></span></code></pre></div> <h3 id="fraud-detection-and-anomaly-detection" class="position-relative d-flex align-items-center group"> <span>Fraud Detection and 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="fraud-detection-and-anomaly-detection" aria-haspopup="dialog" aria-label="Share link: Fraud Detection and 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> </h3><p>Graph algorithms excel at fraud detection because fraudsters create recognizable patterns in relationship data. <strong>Ring detection</strong> identifies circular money flows, <strong>velocity checks</strong> measure transaction speed, and <strong>network analysis</strong> reveals organized fraud networks that would be invisible in traditional databases.</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">potential</span><span class="w"> </span><span class="py">fraud</span><span class="w"> </span><span class="py">rings</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">a</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSFER</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">b</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSFER</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">c</span><span class="p">:</span><span class="nc">Account</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">c</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">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">edge_timestamp</span><span class="p">(</span><span class="py">a</span><span class="p">,</span><span class="w"> </span><span class="py">b</span><span class="p">)</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">1</span><span class="err">&#39;</span><span class="w"> </span><span class="py">DAY</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">a</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">b</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">c</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">edge_amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_amount</span><span class="w"> </span></span></span></code></pre></div><p><strong>Anomaly detection</strong> uses statistical measures and machine learning to identify outliers:</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"># Detect accounts with unusual transaction patterns</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (a:Account)-[t:TRANSACTION]-&gt;() </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH a, </span></span></span><span class="line"><span class="cl"><span class="s2"> AVG(t.amount) AS avg_amount, </span></span></span><span class="line"><span class="cl"><span class="s2"> STDDEV(t.amount) AS stddev_amount, </span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(t) AS transaction_count </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE stddev_amount &gt; 0 </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (a)-[t:TRANSACTION]-&gt;() </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE ABS(t.amount - avg_amount) &gt; 3 * stddev_amount </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN a.id, t.amount, avg_amount, stddev_amount </span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span><span class="p">)</span> </span></span></code></pre></div> <h3 id="recommendation-systems" class="position-relative d-flex align-items-center group"> <span>Recommendation Systems</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="recommendation-systems" aria-haspopup="dialog" aria-label="Share link: Recommendation Systems"> <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>Graph-based recommendations leverage network structure to suggest relevant items. <strong>Collaborative filtering</strong> finds users with similar taste graphs and recommends items they&rsquo;ve liked. <strong>Content-based filtering</strong> uses node properties and embeddings. <strong>Hybrid approaches</strong> combine both for superior results.</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">Collaborative</span><span class="w"> </span><span class="py">filtering</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">me</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="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="nc">item</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">similar</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="err">-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">recommendation</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="py">EXISTS</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">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">me</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">recommendation</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="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">recommendation</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">similar</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">10</span><span class="w"> </span></span></span></code></pre></div> <h3 id="performance-considerations" class="position-relative d-flex align-items-center group"> <span>Performance Considerations</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-considerations" aria-haspopup="dialog" aria-label="Share link: Performance Considerations"> <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>When implementing graph algorithms in Geode:</p> <ol> <li><strong>Use indexes strategically</strong>: Create indexes on node labels and frequently queried properties to accelerate pattern matching</li> <li><strong>Leverage query profiling</strong>: Use <code>PROFILE</code> to understand query execution and optimize bottlenecks</li> <li><strong>Consider materialization</strong>: For frequently computed metrics, store results as node properties and update incrementally</li> <li><strong>Partition large computations</strong>: Break algorithms into smaller chunks using pagination or time windows</li> <li><strong>Utilize prepared statements</strong>: Pre-compile complex analytical queries for better performance</li> </ol> <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="py">a</span><span class="w"> </span><span class="py">centrality</span><span class="w"> </span><span class="py">computation</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">n</span><span class="p">:</span><span class="nc">Node</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</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">RETURN</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">degree</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">degree</span><span class="w"> </span><span class="py">DESC</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><p><strong>Start simple</strong>: Begin with basic aggregations and pattern matching before implementing complex algorithms. Many insights can be discovered through straightforward queries.</p> <p><strong>Validate results</strong>: Compare algorithm outputs against known ground truth when possible, especially for machine learning applications.</p> <p><strong>Monitor performance</strong>: Track query execution times and resource usage as your graph grows. What works at 1,000 nodes may need optimization at 1,000,000.</p> <p><strong>Document your models</strong>: Graph algorithms depend heavily on how you model relationships. Document which relationship types mean what and how they should be traversed.</p> <p><strong>Combine algorithms</strong>: The most powerful insights often come from combining multiple techniques - for example, using community detection to partition the graph, then running PageRank within each community.</p> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/machine-learning/" >Machine Learning</a> - Integration with ML frameworks</li> <li><a href="/tags/pagerank/" >PageRank</a> - Importance ranking algorithm</li> <li><a href="/tags/community-detection/" >Community Detection</a> - Finding clusters in graphs</li> <li><a href="/tags/fraud-detection/" >Fraud Detection</a> - Detecting fraudulent patterns</li> <li><a href="/tags/recommendations/" >Recommendations</a> - Building recommendation engines</li> <li><a href="/tags/real-time-analytics/" >Real-Time Analytics</a> - Streaming graph analytics</li> <li><a href="/tags/anomaly-detection/" >Anomaly Detection</a> - Identifying unusual patterns</li> <li><a href="/categories/query-optimization/" >Performance Optimization</a> - Optimizing analytical queries</li> </ul> <h3 id="advanced-algorithm-implementation" class="position-relative d-flex align-items-center group"> <span>Advanced Algorithm Implementation</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="advanced-algorithm-implementation" aria-haspopup="dialog" aria-label="Share link: Advanced Algorithm Implementation"> <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="implementing-custom-algorithms" class="position-relative d-flex align-items-center group"> <span>Implementing Custom Algorithms</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="implementing-custom-algorithms" aria-haspopup="dialog" aria-label="Share link: Implementing Custom Algorithms"> <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>While Geode provides built-in implementations of common algorithms, many use cases require custom analytics tailored to specific domains. GQL&rsquo;s pattern matching and aggregation capabilities enable implementing sophisticated algorithms directly in queries.</p> <p><strong>Iterative Computation with WITH Clauses</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Simplified</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">iteration</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">0</span><span class="mf">.85</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">damping_factor</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">n</span><span class="p">:</span><span class="nc">Node</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">rank</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">1</span><span class="mf">.0</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">Iterate</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">times</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">damping_factor</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">n</span><span class="p">:</span><span class="nc">Node</span><span class="p">)</span><span class="err">&lt;-</span><span class="p">[</span><span class="py">r</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">Node</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">n</span><span class="p">,</span><span class="w"> </span><span class="py">damping_factor</span><span class="p">,</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">m</span><span class="err">.</span><span class="py">rank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">degree</span><span class="p">(</span><span class="py">m</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">incoming_rank</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">rank</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">1</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">damping_factor</span><span class="p">)</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">damping_factor</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">incoming_rank</span><span class="w"> </span></span></span></code></pre></div><p><strong>Breadth-First Search Implementation</strong></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">bfs_traversal</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">start_id</span><span class="p">,</span> <span class="n">max_depth</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Implement BFS using iterative queries.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">visited</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">start_id</span><span class="p">])</span> </span></span><span class="line"><span class="cl"> <span class="n">current_level</span> <span class="o">=</span> <span class="p">[</span><span class="n">start_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">for</span> <span class="n">depth</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_depth</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">current_level</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">break</span> </span></span><span class="line"><span class="cl"> </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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n)-[:CONNECTED]-(neighbor) </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE n.id IN $current_ids </span></span></span><span class="line"><span class="cl"><span class="s2"> AND NOT neighbor.id IN $visited </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN DISTINCT neighbor.id AS id </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;current_ids&#34;</span><span class="p">:</span> <span class="n">current_level</span><span class="p">,</span> <span class="s2">&#34;visited&#34;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span><span class="n">visited</span><span class="p">)})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">next_level</span> <span class="o">=</span> <span class="p">[]</span> </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">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">next_level</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">])</span> </span></span><span class="line"><span class="cl"> <span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">])</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">current_level</span> <span class="o">=</span> <span class="n">next_level</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">visited</span> </span></span></code></pre></div> <h4 id="graph-sampling-and-statistics" class="position-relative d-flex align-items-center group"> <span>Graph Sampling and Statistics</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="graph-sampling-and-statistics" aria-haspopup="dialog" aria-label="Share link: Graph Sampling and Statistics"> <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>For very large graphs, computing exact metrics may be prohibitive. Sampling techniques provide approximate results with bounded error.</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">Random</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">sampling</span><span class="w"> </span><span class="py">for</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">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</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">random</span><span class="p">()</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">0</span><span class="mf">.01</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">1</span><span class="err">%</span><span class="w"> </span><span class="py">sample</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">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">sample_size</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">degree</span><span class="p">(</span><span class="py">n</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_degree</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">STDDEV</span><span class="p">(</span><span class="py">degree</span><span class="p">(</span><span class="py">n</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">stddev_degree</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">sample_size</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">estimated_total</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_degree</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">stddev_degree</span><span class="w"> </span></span></span></code></pre></div><p><strong>Random Walk Sampling</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Random</span><span class="w"> </span><span class="py">walk</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">exploration</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">Node</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">$start_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">EDGE</span><span class="err">*</span><span class="nc">10</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">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">WHERE</span><span class="w"> </span><span class="py">ALL</span><span class="w"> </span><span class="p">(</span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">random</span><span class="p">()</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="mf">.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">RETURN</span><span class="w"> </span><span class="py">nodes</span><span class="p">(</span><span class="py">path</span><span class="p">),</span><span class="w"> </span><span class="py">length</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="temporal-graph-analytics" class="position-relative d-flex align-items-center group"> <span>Temporal Graph 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="temporal-graph-analytics" aria-haspopup="dialog" aria-label="Share link: Temporal Graph 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><p>Temporal graphs capture how relationships evolve over time, enabling analysis of dynamic networks.</p> <h4 id="time-windowed-analysis" class="position-relative d-flex align-items-center group"> <span>Time-Windowed Analysis</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="time-windowed-analysis" aria-haspopup="dialog" aria-label="Share link: Time-Windowed Analysis"> <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><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">Analyze</span><span class="w"> </span><span class="py">community</span><span class="w"> </span><span class="py">evolution</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="py">time</span><span class="w"> </span><span class="py">windows</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="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">window_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">DATE</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">02</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">window_end</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">u1</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">r</span><span class="p">:</span><span class="nc">INTERACTION</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">u2</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">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&gt;</span><span class="p">=</span><span class="w"> </span><span class="py">window_start</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">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">window_end</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">u1</span><span class="err">.</span><span class="py">community</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">community</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">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</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 class="py">RETURN</span><span class="w"> </span><span class="py">community</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">interactions</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">interactions</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">31</span><span class="mf">.0</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">daily_avg</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">interactions</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span></code></pre></div> <h4 id="change-detection" class="position-relative d-flex align-items-center group"> <span>Change 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="change-detection" aria-haspopup="dialog" aria-label="Share link: Change 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><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">nodes</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">changing</span><span class="w"> </span><span class="py">centrality</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">n</span><span class="p">:</span><span class="nc">Node</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">n</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">centrality_last_week</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">old_centrality</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">calculate_centrality</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">new_centrality</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">ABS</span><span class="p">(</span><span class="py">new_centrality</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">old_centrality</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">old_centrality</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="mf">.5</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">n</span><span class="err">.</span><span class="py">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">old_centrality</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">new_centrality</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">new_centrality</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">old_centrality</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">old_centrality</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">pct_change</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">ABS</span><span class="p">(</span><span class="py">pct_change</span><span class="p">)</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span></code></pre></div> <h3 id="machine-learning-integration-patterns" class="position-relative d-flex align-items-center group"> <span>Machine Learning Integration 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="machine-learning-integration-patterns" aria-haspopup="dialog" aria-label="Share link: Machine Learning Integration 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="feature-engineering-from-graphs" class="position-relative d-flex align-items-center group"> <span>Feature Engineering from Graphs</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="feature-engineering-from-graphs" aria-haspopup="dialog" aria-label="Share link: Feature Engineering from Graphs"> <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>Graph structure provides rich features for machine learning models.</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">extract_node_features</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">node_id</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Extract graph-based features for ML.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">features</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n {id: $node_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (n)-[r]-() </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH n, </span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(DISTINCT r) AS degree, </span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT{(n)-[:FRIEND]-()} AS friend_count, </span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT{(n)-[:POSTED]-&gt;()} AS post_count </span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (n)-[:FRIEND*2]-(foaf) </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH n, degree, friend_count, post_count, </span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(DISTINCT foaf) AS network_size </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN degree, </span></span></span><span class="line"><span class="cl"><span class="s2"> friend_count, </span></span></span><span class="line"><span class="cl"><span class="s2"> post_count, </span></span></span><span class="line"><span class="cl"><span class="s2"> network_size, </span></span></span><span class="line"><span class="cl"><span class="s2"> friend_count::FLOAT / NULLIF(degree, 0) AS friend_ratio </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;node_id&#34;</span><span class="p">:</span> <span class="n">node_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="n">features</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">features</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span> </span></span></code></pre></div> <h4 id="graph-embedding-training" class="position-relative d-flex align-items-center group"> <span>Graph Embedding Training</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="graph-embedding-training" aria-haspopup="dialog" aria-label="Share link: Graph Embedding Training"> <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><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">numpy</span> <span class="k">as</span> <span class="nn">np</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="k">async</span> <span class="k">def</span> <span class="nf">train_node2vec_embeddings</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">dimensions</span><span class="o">=</span><span class="mi">128</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Generate Node2Vec embeddings.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Generate random walks</span> </span></span><span class="line"><span class="cl"> <span class="n">walks</span> <span class="o">=</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="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (start:Node) </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH path = (start)-[:EDGE*10..20]-(end) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN [n IN nodes(path) | n.id] AS walk </span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 10000 </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</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">rows</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">walks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;walk&#39;</span><span class="p">])</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Train Word2Vec on walks (node sequences)</span> </span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">gensim.models</span> <span class="kn">import</span> <span class="n">Word2Vec</span> </span></span><span class="line"><span class="cl"> <span class="n">model</span> <span class="o">=</span> <span class="n">Word2Vec</span><span class="p">(</span><span class="n">walks</span><span class="p">,</span> <span class="n">vector_size</span><span class="o">=</span><span class="n">dimensions</span><span class="p">,</span> <span class="n">window</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">min_count</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Store embeddings back in graph</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">node_id</span> <span class="ow">in</span> <span class="n">model</span><span class="o">.</span><span class="n">wv</span><span class="o">.</span><span class="n">index_to_key</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">embedding</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">wv</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</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">execute</span><span class="p">(</span><span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Node {id: $node_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET n.embedding = $embedding </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;node_id&#34;</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">node_id</span><span class="p">),</span> <span class="s2">&#34;embedding&#34;</span><span class="p">:</span> <span class="n">embedding</span><span class="p">})</span> </span></span></code></pre></div> <h3 id="performance-optimization-strategies" class="position-relative d-flex align-items-center group"> <span>Performance Optimization Strategies</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-optimization-strategies" aria-haspopup="dialog" aria-label="Share link: Performance Optimization Strategies"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="query-optimization-for-algorithms" class="position-relative d-flex align-items-center group"> <span>Query Optimization for Algorithms</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-optimization-for-algorithms" aria-haspopup="dialog" aria-label="Share link: Query Optimization for Algorithms"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Materialized Views for Repeated Computations</strong></p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Pre</span><span class="err">-</span><span class="py">compute</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">store</span><span class="w"> </span><span class="py">degree</span><span class="w"> </span><span class="py">centrality</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">n</span><span class="p">:</span><span class="nc">Node</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</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">WITH</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">degree</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">degree</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">degree</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">Later</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">pre</span><span class="err">-</span><span class="py">computed</span><span class="w"> </span><span class="py">values</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">n</span><span class="p">:</span><span class="nc">Node</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">n</span><span class="err">.</span><span class="py">degree</span><span class="w"> </span><span class="err">&gt;</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">n</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">degree</span><span class="w"> </span></span></span></code></pre></div><p><strong>Incremental Updates</strong></p> <p>Instead of recomputing metrics from scratch, update them incrementally:</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">update_centrality_incremental</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">new_edge_source</span><span class="p">,</span> <span class="n">new_edge_target</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Update centrality scores incrementally when edge is added.&#34;&#34;&#34;</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">execute</span><span class="p">(</span><span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (source {id: $source}), (target {id: $target}) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET source.degree = COALESCE(source.degree, 0) + 1, </span></span></span><span class="line"><span class="cl"><span class="s2"> target.degree = COALESCE(target.degree, 0) + 1 </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;source&#34;</span><span class="p">:</span> <span class="n">new_edge_source</span><span class="p">,</span> <span class="s2">&#34;target&#34;</span><span class="p">:</span> <span class="n">new_edge_target</span><span class="p">})</span> </span></span></code></pre></div> <h4 id="parallel-algorithm-execution" class="position-relative d-flex align-items-center group"> <span>Parallel Algorithm 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="parallel-algorithm-execution" aria-haspopup="dialog" aria-label="Share link: Parallel Algorithm 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> </h4><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></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">parallel_community_detection</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">communities</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Run PageRank on multiple communities in parallel.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">community_id</span> <span class="ow">in</span> <span class="n">communities</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">task</span> <span class="o">=</span> <span class="n">compute_pagerank_for_community</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">community_id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">tasks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">task</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </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">tasks</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">communities</span><span class="p">,</span> <span class="n">results</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">compute_pagerank_for_community</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">community_id</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Compute PageRank within a single community.&#34;&#34;&#34;</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Node {community: $community_id})-[r]-&gt;() </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH n, COUNT(r) AS out_degree </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN n.id, out_degree </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;community_id&#34;</span><span class="p">:</span> <span class="n">community_id</span><span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># PageRank computation logic here</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="k">await</span> <span class="n">process_pagerank</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> </span></span></code></pre></div> <h3 id="graph-algorithm-benchmarking" class="position-relative d-flex align-items-center group"> <span>Graph Algorithm Benchmarking</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="graph-algorithm-benchmarking" aria-haspopup="dialog" aria-label="Share link: Graph Algorithm Benchmarking"> <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="performance-testing" class="position-relative d-flex align-items-center group"> <span>Performance Testing</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-testing" aria-haspopup="dialog" aria-label="Share link: Performance Testing"> <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><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">time</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">statistics</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">benchmark_algorithm</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">algorithm_query</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Benchmark graph algorithm performance.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">timings</span> <span class="o">=</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">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">iterations</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">perf_counter</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">execute</span><span class="p">(</span><span class="n">algorithm_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="n">end</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">perf_counter</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="n">timings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">end</span> <span class="o">-</span> <span class="n">start</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="s1">&#39;mean&#39;</span><span class="p">:</span> <span class="n">statistics</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">timings</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;median&#39;</span><span class="p">:</span> <span class="n">statistics</span><span class="o">.</span><span class="n">median</span><span class="p">(</span><span class="n">timings</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;stddev&#39;</span><span class="p">:</span> <span class="n">statistics</span><span class="o">.</span><span class="n">stdev</span><span class="p">(</span><span class="n">timings</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;min&#39;</span><span class="p">:</span> <span class="nb">min</span><span class="p">(</span><span class="n">timings</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;max&#39;</span><span class="p">:</span> <span class="nb">max</span><span class="p">(</span><span class="n">timings</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span></code></pre></div> <h4 id="scalability-analysis" class="position-relative d-flex align-items-center group"> <span>Scalability Analysis</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="scalability-analysis" aria-haspopup="dialog" aria-label="Share link: Scalability Analysis"> <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><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="py">algorithm</span><span class="w"> </span><span class="py">performance</span><span class="w"> </span><span class="py">at</span><span class="w"> </span><span class="py">different</span><span class="w"> </span><span class="py">scales</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">n</span><span class="p">:</span><span class="nc">Node</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">:</span><span class="nc">EDGE</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.5</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">Node</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">n</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$start_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">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">m</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">reachable_nodes</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">r</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_paths</span><span class="w"> </span></span></span></code></pre></div> <h3 id="industry-specific-applications" class="position-relative d-flex align-items-center group"> <span>Industry-Specific Applications</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="industry-specific-applications" aria-haspopup="dialog" aria-label="Share link: Industry-Specific Applications"> <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="bioinformatics-protein-interaction-networks" class="position-relative d-flex align-items-center group"> <span>Bioinformatics: Protein Interaction Networks</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="bioinformatics-protein-interaction-networks" aria-haspopup="dialog" aria-label="Share link: Bioinformatics: Protein Interaction Networks"> <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><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">Find</span><span class="w"> </span><span class="py">proteins</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">same</span><span class="w"> </span><span class="py">pathway</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">p1</span><span class="p">:</span><span class="nc">Protein</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nv">$protein_name</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">INTERACTS_WITH</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">p2</span><span class="p">:</span><span class="nc">Protein</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="p">[:</span><span class="nc">PART_OF</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">pathway</span><span class="p">:</span><span class="nc">Pathway</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">pathway</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">p2</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">proteins_in_pathway</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">proteins_in_pathway</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span></code></pre></div> <h4 id="transportation-route-optimization" class="position-relative d-flex align-items-center group"> <span>Transportation: Route Optimization</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="transportation-route-optimization" aria-haspopup="dialog" aria-label="Share link: Transportation: Route Optimization"> <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><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">Find</span><span class="w"> </span><span class="py">optimal</span><span class="w"> </span><span class="py">route</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">capacity</span><span class="w"> </span><span class="py">constraints</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="py">SHORTEST</span><span class="w"> </span><span class="p">(</span><span class="py">start</span><span class="p">:</span><span class="nc">Location</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nv">$origin</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="p">[:</span><span class="nc">ROUTE</span><span class="err">*</span><span class="p">]</span><span class="err">-&gt;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="nc">end</span><span class="p">:</span><span class="nc">Location</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nv">$destination</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">WHERE</span><span class="w"> </span><span class="py">ALL</span><span class="w"> </span><span class="p">(</span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">capacity</span><span class="w"> </span><span class="err">&gt;</span><span class="p">=</span><span class="w"> </span><span class="nv">$required_capacity</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">path</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">REDUCE</span><span class="p">(</span><span class="py">cost</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">cost</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">distance</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_distance</span><span class="w"> </span></span></span></code></pre></div> <h4 id="cybersecurity-attack-graph-analysis" class="position-relative d-flex align-items-center group"> <span>Cybersecurity: Attack Graph Analysis</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="cybersecurity-attack-graph-analysis" aria-haspopup="dialog" aria-label="Share link: Cybersecurity: Attack Graph Analysis"> <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><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">Identify</span><span class="w"> </span><span class="py">critical</span><span class="w"> </span><span class="py">vulnerabilities</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">attack</span><span class="w"> </span><span class="py">paths</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">attacker</span><span class="p">:</span><span class="nc">ExternalNode</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">EXPLOITS</span><span class="err">*</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">CriticalAsset</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">path</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">n</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">nodes</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n</span><span class="p">:</span><span class="nc">Vulnerability</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">vulnerabilities</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">path</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">vulnerabilities</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">length</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">attack_steps</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">length</span><span class="p">(</span><span class="py">path</span><span class="p">)</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></code></pre></div> <h3 id="visualization-and-exploration" class="position-relative d-flex align-items-center group"> <span>Visualization and Exploration</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="visualization-and-exploration" aria-haspopup="dialog" aria-label="Share link: Visualization and Exploration"> <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>While Geode focuses on data storage and querying, visualization tools help explore algorithm results.</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">export_for_visualization</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">community_id</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Export subgraph for visualization tools.&#34;&#34;&#34;</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Node {community: $community_id})-[r]-(m:Node {community: $community_id}) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN COLLECT(DISTINCT n) AS nodes, </span></span></span><span class="line"><span class="cl"><span class="s2"> COLLECT(DISTINCT r) AS relationships </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&#34;community_id&#34;</span><span class="p">:</span> <span class="n">community_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">data</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</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">rows</span> <span class="k">else</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Export to formats like GraphML, GEXF, or D3.js JSON</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">convert_to_graphml</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;nodes&#39;</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">&#39;relationships&#39;</span><span class="p">])</span> </span></span></code></pre></div> <h3 id="error-handling-and-validation" class="position-relative d-flex align-items-center group"> <span>Error Handling and Validation</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="error-handling-and-validation" aria-haspopup="dialog" aria-label="Share link: Error Handling and Validation"> <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 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">geode_client</span> <span class="kn">import</span> <span class="n">QueryError</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">robust_algorithm_execution</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">&#34;&#34;&#34;Execute algorithm with proper error handling.&#34;&#34;&#34;</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="n">QueryError</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="k">if</span> <span class="s2">&#34;timeout&#34;</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Retry with increased timeout</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">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <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="n">timeout</span><span class="o">=</span><span class="mi">60</span> </span></span><span class="line"><span class="cl"> <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">elif</span> <span class="s2">&#34;memory&#34;</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Suggest reducing dataset</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&#34;Graph too large, consider sampling&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">else</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> </span></span></code></pre></div> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</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="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/docs/gql-reference/pattern-matching/" >GQL Pattern Matching</a> - Foundation for graph algorithms</li> <li><a href="/docs/gql-reference/aggregations/" >Aggregation Functions</a> - Statistical computations</li> <li><a href="/tags/vector-search/" >Vector Search</a> - Similarity search and embeddings</li> <li><a href="/tags/profiling/" >Query Profiling</a> - Understanding algorithm performance</li> <li><a href="/categories/best-practices/" >Best Practices</a> - Optimization techniques</li> <li><a href="/docs/query/performance-tuning/" >Performance Tuning</a> - Query optimization guide</li> <li><a href="/tags/temporal/" >Temporal Graphs</a> - Time-aware graph analytics</li> </ul>

Related Articles