<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>The <strong>Overview and Introduction</strong> category provides high-level documentation about Geode, covering its architecture, key features, design philosophy, and how to get started. Whether you’re evaluating Geode for a project, learning about graph databases, or planning a production deployment, this category offers the foundational knowledge you need.</p>
<h3 id="what-is-geode" class="position-relative d-flex align-items-center group">
<span>What is Geode?</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="what-is-geode"
aria-haspopup="dialog"
aria-label="Share link: What is Geode?">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><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>Geode is a production-ready graph database that aligns with the <strong>ISO/IEC 39075:2024 Graph Query Language (GQL)</strong> standard via the full GQL conformance profile. Written in Zig for maximum performance and memory safety, Geode combines the power of graph computing with enterprise-grade reliability, achieving 100% GQL compliance and 97.4% test coverage across 1,644 passing tests.</p>
<p>Unlike traditional relational databases that struggle with connected data, or proprietary graph databases that lock you into vendor-specific query languages, Geode provides a standards-based foundation for building modern applications on graph data. The ISO GQL standard ensures your queries are portable, future-proof, and backed by international consensus on graph database best practices.</p>
<h3 id="core-architecture" class="position-relative d-flex align-items-center group">
<span>Core Architecture</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="core-architecture"
aria-haspopup="dialog"
aria-label="Share link: Core Architecture">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="built-with-zig" class="position-relative d-flex align-items-center group">
<span>Built with Zig</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="built-with-zig"
aria-haspopup="dialog"
aria-label="Share link: Built with Zig">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode is implemented in Zig, a modern systems programming language that prioritizes safety, performance, and developer ergonomics. This choice delivers several critical advantages:</p>
<p><strong>Memory Safety</strong>: Zig’s compile-time checks prevent buffer overflows, use-after-free bugs, and other memory corruption issues that plague C/C++ codebases, ensuring your data remains secure and consistent.</p>
<p><strong>Performance</strong>: Zig compiles to highly optimized machine code with zero-cost abstractions, delivering performance comparable to C while maintaining readability and safety. Geode’s query engine, transaction manager, and storage layer all benefit from Zig’s efficiency.</p>
<p><strong>Cross-Platform</strong>: Zig’s advanced cross-compilation support makes Geode trivially portable across Linux, macOS, Windows, and even embedded systems without modification.</p>
<p><strong>Explicit Control</strong>: Unlike garbage-collected languages, Zig gives Geode precise control over memory allocation and CPU cache usage, critical for database performance under high load.</p>
<h4 id="standards-based-query-language" class="position-relative d-flex align-items-center group">
<span>Standards-Based Query Language</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="standards-based-query-language"
aria-haspopup="dialog"
aria-label="Share link: Standards-Based Query Language">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode implements <strong>ISO/IEC 39075:2024</strong>, the first international standard for graph query languages. GQL unifies decades of graph database research into a single, coherent syntax that resembles SQL’s familiarity while embracing graph-native 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">Standard</span><span class="w"> </span><span class="py">GQL</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">person</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">'</span><span class="nc">Alice</span><span class="err">'</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="py">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">friend</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">25</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">occupation</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">friend</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span></code></pre></div><p>This standards alignment means:</p>
<ul>
<li><strong>No vendor lock-in</strong>: Your queries work across any GQL-compliant database</li>
<li><strong>Professional support</strong>: The ISO committee maintains and evolves the language</li>
<li><strong>Future-proof</strong>: New features arrive through standardized extensions</li>
<li><strong>Interoperability</strong>: GQL integrates smoothly with SQL systems via ISO standards alignment</li>
</ul>
<h4 id="acid-transactions" class="position-relative d-flex align-items-center group">
<span>ACID Transactions</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="acid-transactions"
aria-haspopup="dialog"
aria-label="Share link: ACID Transactions">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode provides full ACID (Atomicity, Consistency, Isolation, Durability) guarantees using <strong>Serializable Snapshot Isolation (SSI)</strong>, the strongest isolation level in database theory. Every transaction sees a consistent snapshot of the database, and concurrent transactions execute as if they ran sequentially.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">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">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">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="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">tx</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (account:Account {id: $from})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET account.balance = account.balance - $amount
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"from"</span><span class="p">:</span> <span class="mi">123</span><span class="p">,</span> <span class="s2">"amount"</span><span class="p">:</span> <span class="mf">100.00</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (account:Account {id: $to})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET account.balance = account.balance + $amount
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"to"</span><span class="p">:</span> <span class="mi">456</span><span class="p">,</span> <span class="s2">"amount"</span><span class="p">:</span> <span class="mf">100.00</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Both updates commit atomically or both roll back</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</span></span></code></pre></div><p><strong>Write-Ahead Logging (WAL)</strong> ensures durability by recording all changes to persistent storage before acknowledging commits. Even if the server crashes, committed transactions remain durable.</p>
<p><strong>Multi-Version Concurrency Control (MVCC)</strong> enables high-performance reads without blocking writes, and writes without blocking reads. Each transaction sees a consistent snapshot while others modify the database concurrently.</p>
<h4 id="quic-transport-protocol" class="position-relative d-flex align-items-center group">
<span>QUIC Transport Protocol</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="quic-transport-protocol"
aria-haspopup="dialog"
aria-label="Share link: QUIC Transport Protocol">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode uses <strong>QUIC</strong> (Quick UDP Internet Connections) as its network protocol instead of traditional TCP. QUIC, developed by Google and standardized as RFC 9000, provides:</p>
<ul>
<li><strong>Faster connection establishment</strong>: 0-RTT resumption for returning clients</li>
<li><strong>Better performance on lossy networks</strong>: Independent stream recovery</li>
<li><strong>Built-in encryption</strong>: TLS 1.3 mandatory, no plaintext fallback</li>
<li><strong>Multiplexing without head-of-line blocking</strong>: Multiple concurrent queries over one connection</li>
</ul>
<p>Client libraries automatically handle QUIC complexity, providing simple async/await interfaces:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client example
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">import</span> <span class="s">"geodedb.com/geode"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">ctx</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nx">client</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">geode</span><span class="p">.</span><span class="nf">Connect</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">log</span><span class="p">.</span><span class="nf">Fatal</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="k">defer</span> <span class="nx">client</span><span class="p">.</span><span class="nf">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">result</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">client</span><span class="p">.</span><span class="nf">Query</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"MATCH (n:Node) RETURN count(n)"</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="key-features" class="position-relative d-flex align-items-center group">
<span>Key Features</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="key-features"
aria-haspopup="dialog"
aria-label="Share link: Key Features">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="enterprise-security" class="position-relative d-flex align-items-center group">
<span>Enterprise Security</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="enterprise-security"
aria-haspopup="dialog"
aria-label="Share link: Enterprise Security">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode provides defense-in-depth security suitable for regulated industries:</p>
<ul>
<li><strong>TLS 1.3 mandatory</strong>: All network communication encrypted by default</li>
<li><strong>Row-Level Security (RLS)</strong>: Fine-grained access control at the data level</li>
<li><strong>Transparent Data Encryption (TDE)</strong>: Encryption at rest for all database files</li>
<li><strong>Field-Level Encryption (FLE)</strong>: Encrypt sensitive fields with application-controlled keys</li>
<li><strong>Audit logging</strong>: Comprehensive tracking of all database operations</li>
</ul>
<h4 id="advanced-analytics" class="position-relative d-flex align-items-center group">
<span>Advanced 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="advanced-analytics"
aria-haspopup="dialog"
aria-label="Share link: Advanced 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>
</h4><p>Geode excels at analytical workloads traditionally challenging for databases:</p>
<ul>
<li><strong>Graph algorithms</strong>: PageRank, community detection, shortest paths, centrality measures</li>
<li><strong>Vector search</strong>: HNSW indexing for semantic similarity and embeddings</li>
<li><strong>Full-text search</strong>: BM25 ranking with Unicode normalization and language-aware stemming</li>
<li><strong>Real-time analytics</strong>: MVCC enables queries on live data without blocking transactions</li>
<li><strong>Aggregations</strong>: Statistical functions, grouping, windowing, and custom aggregates</li>
</ul>
<h4 id="polyglot-client-libraries" class="position-relative d-flex align-items-center group">
<span>Polyglot Client Libraries</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="polyglot-client-libraries"
aria-haspopup="dialog"
aria-label="Share link: Polyglot Client Libraries">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode provides official client libraries for multiple languages, all following idiomatic patterns for their ecosystem:</p>
<ul>
<li><strong>Go</strong>: <code>database/sql</code> driver with connection pooling</li>
<li><strong>Python</strong>: Async client with type hints and modern asyncio patterns</li>
<li><strong>Rust</strong>: Tokio-based async with zero-cost abstractions</li>
<li><strong>Zig</strong>: Native client demonstrating Geode’s internal APIs</li>
</ul>
<p>Each client handles protocol complexity, connection management, and error handling transparently.</p>
<h3 id="getting-started" class="position-relative d-flex align-items-center group">
<span>Getting Started</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="getting-started"
aria-haspopup="dialog"
aria-label="Share link: Getting Started">
<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="installation" class="position-relative d-flex align-items-center group">
<span>Installation</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="installation"
aria-haspopup="dialog"
aria-label="Share link: Installation">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode provides multiple installation options:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># From source (requires Zig 0.1.0+)</span>
</span></span><span class="line"><span class="cl">git clone https://github.com/codeprosorg/geode
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> geode
</span></span><span class="line"><span class="cl">make build
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Using Docker</span>
</span></span><span class="line"><span class="cl">docker pull codepros/geode:latest
</span></span><span class="line"><span class="cl">docker run -p 3141:3141 codepros/geode:latest
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Using package managers</span>
</span></span><span class="line"><span class="cl">brew install geodedb/geode/geode <span class="c1"># macOS</span>
</span></span><span class="line"><span class="cl"><span class="c1"># apt install geode # Debian/Ubuntu</span>
</span></span></code></pre></div>
<h4 id="first-steps" class="position-relative d-flex align-items-center group">
<span>First Steps</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="first-steps"
aria-haspopup="dialog"
aria-label="Share link: First Steps">
<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>After installation, start the server and connect with the interactive shell:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Start server</span>
</span></span><span class="line"><span class="cl">geode serve --listen 0.0.0.0:3141
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># In another terminal, connect with shell</span>
</span></span><span class="line"><span class="cl">geode shell
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Create your first graph</span>
</span></span><span class="line"><span class="cl">geode> CREATE <span class="o">(</span>alice:Person <span class="o">{</span>name: <span class="s1">'Alice'</span>, age: 30<span class="o">})</span>
</span></span><span class="line"><span class="cl">geode> CREATE <span class="o">(</span>bob:Person <span class="o">{</span>name: <span class="s1">'Bob'</span>, age: 25<span class="o">})</span>
</span></span><span class="line"><span class="cl">geode> MATCH <span class="o">(</span>a:Person <span class="o">{</span>name: <span class="s1">'Alice'</span><span class="o">})</span>, <span class="o">(</span>b:Person <span class="o">{</span>name: <span class="s1">'Bob'</span><span class="o">})</span>
</span></span><span class="line"><span class="cl"> CREATE <span class="o">(</span>a<span class="o">)</span>-<span class="o">[</span>:KNOWS <span class="o">{</span>since: 2020<span class="o">}]</span>-><span class="o">(</span>b<span class="o">)</span>
</span></span><span class="line"><span class="cl">geode> MATCH <span class="o">(</span>a:Person<span class="o">)</span>-<span class="o">[</span>r:KNOWS<span class="o">]</span>-><span class="o">(</span>b:Person<span class="o">)</span>
</span></span><span class="line"><span class="cl"> RETURN a.name, b.name, r.since
</span></span></code></pre></div>
<h4 id="learning-path" class="position-relative d-flex align-items-center group">
<span>Learning Path</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="learning-path"
aria-haspopup="dialog"
aria-label="Share link: Learning Path">
<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><ol>
<li><strong>Understand graph concepts</strong>: Learn nodes, relationships, properties, and labels</li>
<li><strong>Master GQL basics</strong>: Pattern matching, filtering, returning results</li>
<li><strong>Explore data modeling</strong>: Design effective graph schemas for your domain</li>
<li><strong>Add complexity</strong>: Transactions, constraints, indexes, optimization</li>
<li><strong>Deploy to production</strong>: Security, monitoring, backup, scaling</li>
</ol>
<h3 id="when-to-use-geode" class="position-relative d-flex align-items-center group">
<span>When to Use Geode</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="when-to-use-geode"
aria-haspopup="dialog"
aria-label="Share link: When to Use Geode">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Geode excels in scenarios where relationships between entities are first-class citizens:</p>
<p><strong>Social Networks</strong>: Model users, posts, comments, likes, follows, and groups naturally as graphs. Query friend-of-friend connections, recommend content, detect communities.</p>
<p><strong>Fraud Detection</strong>: Identify fraud rings, money laundering patterns, and coordinated attacks by analyzing transaction networks and relationship patterns invisible in relational databases.</p>
<p><strong>Knowledge Graphs</strong>: Build semantic networks connecting entities, concepts, and facts. Power intelligent search, question answering, and recommendation systems.</p>
<p><strong>Network Infrastructure</strong>: Model physical networks (telecom, utilities, transportation) with nodes as locations and edges as connections. Optimize routing, identify bottlenecks, plan capacity.</p>
<p><strong>Access Control</strong>: Implement complex authorization with hierarchical roles, delegated permissions, and attribute-based policies expressed as graph traversals.</p>
<p><strong>Recommendation Engines</strong>: Collaborative filtering, content similarity, and hybrid approaches all leverage graph structure to suggest relevant items.</p>
<h3 id="architecture-characteristics" class="position-relative d-flex align-items-center group">
<span>Architecture Characteristics</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="architecture-characteristics"
aria-haspopup="dialog"
aria-label="Share link: Architecture Characteristics">
<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>Geode’s architecture is designed for graph workloads:</p>
<ul>
<li><strong>Storage</strong>: Memory-mapped I/O with page-level caching</li>
<li><strong>Concurrency</strong>: SSI isolation with MVCC enables high read and write parallelism</li>
<li><strong>Indexes</strong>: Six specialized index types for different access patterns</li>
<li><strong>Memory efficiency</strong>: Zig’s explicit allocators minimize overhead and fragmentation</li>
</ul>
<p>Performance tuning options include indexes, query optimization, connection pooling, and prepared statements.</p>
<h3 id="community-and-support" class="position-relative d-flex align-items-center group">
<span>Community and Support</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-and-support"
aria-haspopup="dialog"
aria-label="Share link: Community and Support">
<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>Geode is developed by CodePros with an active community of contributors:</p>
<ul>
<li><strong>GitLab</strong>: Source code, issues, and merge requests</li>
<li><strong>Documentation</strong>: Comprehensive guides, tutorials, and API references</li>
<li><strong>Professional Support</strong>: Commercial support available for production deployments</li>
<li><strong>Contributing</strong>: Open to community contributions following evidence-based development practices</li>
</ul>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/docs/getting-started/"
>Getting Started</a>
- Installation and first steps</li>
<li><a
href="/docs/architecture/"
>Architecture</a>
- Detailed system design</li>
<li><a
href="/docs/gql-reference/"
>GQL Reference</a>
- Complete query language documentation</li>
<li><a
href="/docs/client-libraries/"
>Client Libraries</a>
- Language-specific integration guides</li>
<li><a
href="/categories/security-and-compliance/"
>Security</a>
- Enterprise security features</li>
<li><a
href="/categories/performance-and-scaling/"
>Performance</a>
- Optimization and tuning</li>
<li><a
href="/categories/use-cases/"
>Use Cases</a>
- Real-world applications</li>
</ul>
<h3 id="technical-deep-dive" class="position-relative d-flex align-items-center group">
<span>Technical Deep Dive</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="technical-deep-dive"
aria-haspopup="dialog"
aria-label="Share link: Technical Deep Dive">
<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="storage-architecture" class="position-relative d-flex align-items-center group">
<span>Storage Architecture</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="storage-architecture"
aria-haspopup="dialog"
aria-label="Share link: Storage Architecture">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode’s storage layer implements a custom graph-optimized format designed for efficient traversal and updates.</p>
<p><strong>Property Graph Storage Model</strong></p>
<p>Unlike relational databases that decompose graphs into multiple tables with expensive joins, Geode stores nodes and relationships in adjacency structures that mirror the graph’s natural topology. Each node maintains direct pointers to its relationships, enabling constant-time traversal to neighbors.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Node Structure:
</span></span><span class="line"><span class="cl">- Node ID (8 bytes)
</span></span><span class="line"><span class="cl">- Labels bitmap (variable)
</span></span><span class="line"><span class="cl">- Property map offset (8 bytes)
</span></span><span class="line"><span class="cl">- Incoming edges list offset (8 bytes)
</span></span><span class="line"><span class="cl">- Outgoing edges list offset (8 bytes)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Relationship Structure:
</span></span><span class="line"><span class="cl">- Relationship ID (8 bytes)
</span></span><span class="line"><span class="cl">- Type ID (4 bytes)
</span></span><span class="line"><span class="cl">- Source node ID (8 bytes)
</span></span><span class="line"><span class="cl">- Target node ID (8 bytes)
</span></span><span class="line"><span class="cl">- Property map offset (8 bytes)
</span></span></code></pre></div><p>This layout enables efficient pattern matching: traversing from a node to its neighbors requires following a single pointer, not joining tables.</p>
<p><strong>Write-Ahead Log (WAL)</strong></p>
<p>Every transaction is recorded to a Write-Ahead Log before modifying the database. The WAL guarantees durability: even if the server crashes mid-transaction, committed changes can be replayed from the log on restart.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">WAL Entry Structure:
</span></span><span class="line"><span class="cl">[Transaction ID | Timestamp | Operation Type | Data | Checksum]
</span></span></code></pre></div><p>WAL entries are written sequentially, maximizing disk throughput. Background processes periodically checkpoint the database, allowing old WAL segments to be archived or deleted.</p>
<p><strong>MVCC Implementation</strong></p>
<p>Multi-Version Concurrency Control maintains multiple versions of data, allowing transactions to see consistent snapshots without blocking each other. When a transaction modifies a node, Geode creates a new version rather than overwriting:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Version Chain:
</span></span><span class="line"><span class="cl">v3 (current) -> v2 (committed) -> v1 (committed) -> v0 (initial)
</span></span></code></pre></div><p>Each transaction sees versions committed before it started. Obsolete versions are garbage collected after all referencing transactions complete.</p>
<h4 id="query-execution-engine" class="position-relative d-flex align-items-center group">
<span>Query Execution Engine</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="query-execution-engine"
aria-haspopup="dialog"
aria-label="Share link: Query Execution Engine">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode’s query engine transforms GQL into optimized execution plans.</p>
<p><strong>Query Pipeline</strong></p>
<ol>
<li><strong>Lexing</strong>: Break query text into tokens</li>
<li><strong>Parsing</strong>: Build Abstract Syntax Tree (AST)</li>
<li><strong>Semantic Analysis</strong>: Validate labels, properties, types</li>
<li><strong>Logical Planning</strong>: Convert AST to logical operators</li>
<li><strong>Optimization</strong>: Apply rewrite rules and cost-based optimization</li>
<li><strong>Physical Planning</strong>: Select algorithms and access methods</li>
<li><strong>Execution</strong>: Run plan and stream results</li>
</ol>
<p><strong>Cost-Based Optimization</strong></p>
<p>The optimizer estimates costs for different execution strategies using statistics about data distribution:</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">Optimizer</span><span class="w"> </span><span class="py">chooses</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="py">full</span><span class="w"> </span><span class="py">scan</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nv">$email</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">u</span><span class="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">Index</span><span class="w"> </span><span class="py">Scan</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">User</span><span class="err">.</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nc">Cost</span><span class="w"> </span><span class="py">1</span><span class="mf">.5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Full</span><span class="w"> </span><span class="py">Scan</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">User</span><span class="p">:</span><span class="w"> </span><span class="nc">Cost</span><span class="w"> </span><span class="py">150</span><span class="p">,</span><span class="py">000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Decision</span><span class="p">:</span><span class="w"> </span><span class="nc">Use</span><span class="w"> </span><span class="py">index</span><span class="w">
</span></span></span></code></pre></div><p>Statistics include node counts per label, property cardinality, and relationship counts per type. The optimizer refreshes statistics periodically or on-demand.</p>
<p><strong>Parallel Execution</strong></p>
<p>Geode parallelizes query execution across CPU cores:</p>
<ul>
<li><strong>Partition parallelism</strong>: Scan different graph regions concurrently</li>
<li><strong>Pipeline parallelism</strong>: Execute different query stages simultaneously</li>
<li><strong>Operator parallelism</strong>: Parallelize operations like hash joins and aggregations</li>
</ul>
<h4 id="network-protocol-details" class="position-relative d-flex align-items-center group">
<span>Network Protocol Details</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="network-protocol-details"
aria-haspopup="dialog"
aria-label="Share link: Network Protocol Details">
<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>QUIC Advantages Over TCP</strong></p>
<p>Traditional databases use TCP, which suffers from head-of-line blocking: a lost packet stalls all multiplexed streams. QUIC solves this with independent stream recovery. Each query runs on its own stream; packet loss on one stream doesn’t delay others.</p>
<p><strong>Connection Establishment</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Client Server
</span></span><span class="line"><span class="cl"> | |
</span></span><span class="line"><span class="cl"> |--- Initial (HELLO) ---------->|
</span></span><span class="line"><span class="cl"> |<-- Handshake (cert) ----------|
</span></span><span class="line"><span class="cl"> |--- Handshake (finished) ----->|
</span></span><span class="line"><span class="cl"> |<-- 1-RTT Ready ---------------|
</span></span><span class="line"><span class="cl"> | |
</span></span><span class="line"><span class="cl"> |--- RUN_GQL ------------------>|
</span></span><span class="line"><span class="cl"> |<-- BINDINGS ------------------|
</span></span></code></pre></div><p>First connection: 1-RTT handshake
Returning connection: 0-RTT resumption (no handshake delay)</p>
<p><strong>JSON Line Protocol</strong></p>
<p>Each message is a single-line JSON object:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">"type"</span><span class="p">:</span> <span class="s2">"RUN_GQL"</span><span class="p">,</span> <span class="nt">"query"</span><span class="p">:</span> <span class="s2">"MATCH (n) RETURN n"</span><span class="p">,</span> <span class="nt">"params"</span><span class="p">:</span> <span class="p">{}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">"type"</span><span class="p">:</span> <span class="s2">"SCHEMA"</span><span class="p">,</span> <span class="nt">"fields"</span><span class="p">:</span> <span class="p">[{</span><span class="nt">"name"</span><span class="p">:</span> <span class="s2">"n"</span><span class="p">,</span> <span class="nt">"type"</span><span class="p">:</span> <span class="s2">"node"</span><span class="p">}]}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">"type"</span><span class="p">:</span> <span class="s2">"BINDINGS"</span><span class="p">,</span> <span class="nt">"row"</span><span class="p">:</span> <span class="p">[{</span><span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="nt">"labels"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"Person"</span><span class="p">],</span> <span class="nt">"props"</span><span class="p">:</span> <span class="p">{</span><span class="err">...</span><span class="p">}}]}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">"type"</span><span class="p">:</span> <span class="s2">"DONE"</span><span class="p">}</span>
</span></span></code></pre></div><p>Line-delimited format enables streaming: clients process rows as they arrive rather than buffering entire result sets.</p>
<h3 id="deployment-scenarios" class="position-relative d-flex align-items-center group">
<span>Deployment Scenarios</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="deployment-scenarios"
aria-haspopup="dialog"
aria-label="Share link: Deployment Scenarios">
<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="development-deployment" class="position-relative d-flex align-items-center group">
<span>Development Deployment</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="development-deployment"
aria-haspopup="dialog"
aria-label="Share link: Development Deployment">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Docker for Local Development</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Pull official image</span>
</span></span><span class="line"><span class="cl">docker pull codepros/geode:v0.2.18
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Run with persistent storage</span>
</span></span><span class="line"><span class="cl">docker run -d <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --name geode-dev <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -p 3141:3141 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -v geode-data:/var/lib/geode <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -e <span class="nv">GEODE_LOG_LEVEL</span><span class="o">=</span>debug <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> codepros/geode:v0.2.18
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Connect and develop</span>
</span></span><span class="line"><span class="cl">docker <span class="nb">exec</span> -it geode-dev geode shell
</span></span></code></pre></div><p><strong>Configuration for Development</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">server</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">listen</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0.0.0:3141"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tls</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cert</span><span class="p">:</span><span class="w"> </span><span class="s2">"/etc/geode/cert.pem"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="s2">"/etc/geode/key.pem"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storage</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">data_dir</span><span class="p">:</span><span class="w"> </span><span class="s2">"/var/lib/geode/data"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">wal_dir</span><span class="p">:</span><span class="w"> </span><span class="s2">"/var/lib/geode/wal"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">logging</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="s2">"debug"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="s2">"stdout"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">performance</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">query_timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">30000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_concurrent_queries</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="production-deployment" class="position-relative d-flex align-items-center group">
<span>Production Deployment</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="production-deployment"
aria-haspopup="dialog"
aria-label="Share link: Production Deployment">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Kubernetes StatefulSet</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StatefulSet</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">serviceName</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">selector</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">matchLabels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">template</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">codepros/geode:v0.2.18</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">quic</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeMounts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/var/lib/geode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">"8Gi"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">"2000m"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">"16Gi"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">"4000m"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeClaimTemplates</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">accessModes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"ReadWriteOnce"</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l">100Gi</span><span class="w">
</span></span></span></code></pre></div><p><strong>High Availability Configuration</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-ha.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">cluster</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="s2">"distributed"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">node_id</span><span class="p">:</span><span class="w"> </span><span class="s2">"node-1"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">peers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">"node-2.geode.svc.cluster.local:3141"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">"node-3.geode.svc.cluster.local:3141"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">replication</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">factor</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">sync</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">failover</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">health_check_interval_ms</span><span class="p">:</span><span class="w"> </span><span class="m">5000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">leader_election_timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">10000</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="data-modeling-principles" class="position-relative d-flex align-items-center group">
<span>Data Modeling Principles</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-modeling-principles"
aria-haspopup="dialog"
aria-label="Share link: Data Modeling Principles">
<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="graph-schema-design" class="position-relative d-flex align-items-center group">
<span>Graph Schema Design</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-schema-design"
aria-haspopup="dialog"
aria-label="Share link: Graph Schema Design">
<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>Unlike relational schemas with rigid table structures, graph schemas are flexible. However, good design principles still apply:</p>
<p><strong>Entity as Node, Relationship as Edge</strong></p>
<p>Model domain entities (people, products, locations) as nodes. Model connections (knows, purchased, located_in) as relationships.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Clear</span><span class="w"> </span><span class="py">entity</span><span class="err">/</span><span class="py">relationship</span><span class="w"> </span><span class="py">distinction</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">alice</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">laptop</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Avoid</span><span class="p">:</span><span class="w"> </span><span class="nc">Relationships</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">create</span><span class="w"> </span><span class="py">extra</span><span class="w"> </span><span class="py">traversals</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">alice</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_ORDER</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">order</span><span class="p">:</span><span class="nc">Order</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CONTAINS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">laptop</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="p">(</span><span class="py">Use</span><span class="w"> </span><span class="py">this</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span><span class="kd">on</span><span class="py">ly</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="py">has</span><span class="w"> </span><span class="py">important</span><span class="w"> </span><span class="py">properties</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div><p><strong>Property Placement</strong></p>
<p>Properties belong on the entity they describe:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Good</span><span class="p">:</span><span class="w"> </span><span class="nc">Properties</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">correct</span><span class="w"> </span><span class="py">entity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">person</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">'</span><span class="nc">Alice</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">age</span><span class="p">:</span><span class="w"> </span><span class="nc">30</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">WORKS_AT</span><span class="w"> </span><span class="p">{</span><span class="py">since</span><span class="p">:</span><span class="w"> </span><span class="nc">2020</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">company</span><span class="p">:</span><span class="nc">Company</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">'</span><span class="nc">Acme</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></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Avoid</span><span class="p">:</span><span class="w"> </span><span class="nc">Mixing</span><span class="w"> </span><span class="py">concerns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">person</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">'</span><span class="nc">Alice</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">company_name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Acme</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="err">--</span><span class="w"> </span><span class="p">(</span><span class="py">Breaks</span><span class="w"> </span><span class="py">normalization</span><span class="err">;</span><span class="w"> </span><span class="py">updates</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">company</span><span class="w"> </span><span class="py">require</span><span class="w"> </span><span class="py">finding</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">employees</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div><p><strong>Label Strategy</strong></p>
<p>Use labels for categorization and polymorphism:</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">Multiple</span><span class="w"> </span><span class="py">labels</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">role</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">modeling</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">doc</span><span class="p">:</span><span class="nc">Document</span><span class="p">:</span><span class="nc">Confidential</span><span class="p">:</span><span class="nc">Audited</span><span class="w"> </span><span class="p">{</span><span class="py">title</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Q4</span><span class="w"> </span><span class="py">Results</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></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">specific</span><span class="w"> </span><span class="py">subtypes</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">d</span><span class="p">:</span><span class="nc">Document</span><span class="p">:</span><span class="nc">Confidential</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">d</span><span class="err">.</span><span class="py">title</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="anti-patterns-to-avoid" class="position-relative d-flex align-items-center group">
<span>Anti-Patterns to Avoid</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="anti-patterns-to-avoid"
aria-haspopup="dialog"
aria-label="Share link: Anti-Patterns to Avoid">
<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>Anti-Pattern: Dense Nodes</strong></p>
<p>Nodes with millions of relationships (super nodes) create performance bottlenecks:</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">Avoid</span><span class="p">:</span><span class="w"> </span><span class="nc">One</span><span class="w"> </span><span class="s">"Users"</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">millions</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">edges</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">users</span><span class="p">:</span><span class="nc">Users</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CONTAINS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">alice</span><span class="p">:</span><span class="nc">Person</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">users</span><span class="p">:</span><span class="nc">Users</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CONTAINS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">bob</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Traversing</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="p">:</span><span class="nc">Users</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">slow</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">Better</span><span class="p">:</span><span class="w"> </span><span class="nc">Direct</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="py">access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="nv">$email</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">Uses</span><span class="w"> </span><span class="py">index</span><span class="p">,</span><span class="w"> </span><span class="py">constant</span><span class="w"> </span><span class="py">time</span><span class="w">
</span></span></span></code></pre></div><p><strong>Anti-Pattern: Relationship Properties as Nodes</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">Avoid</span><span class="p">:</span><span class="w"> </span><span class="nc">Unnecessary</span><span class="w"> </span><span class="py">intermediate</span><span class="w"> </span><span class="py">nodes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_RATING</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">rating</span><span class="p">:</span><span class="nc">Rating</span><span class="w"> </span><span class="p">{</span><span class="py">value</span><span class="p">:</span><span class="w"> </span><span class="nc">5</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOR_PRODUCT</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Better</span><span class="p">:</span><span class="w"> </span><span class="nc">Property</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">relationship</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RATED</span><span class="w"> </span><span class="p">{</span><span class="py">score</span><span class="p">:</span><span class="w"> </span><span class="nc">5</span><span class="p">,</span><span class="w"> </span><span class="py">timestamp</span><span class="p">:</span><span class="w"> </span><span class="kd">...</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="nc">product</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="ecosystem-and-integrations" class="position-relative d-flex align-items-center group">
<span>Ecosystem and Integrations</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="ecosystem-and-integrations"
aria-haspopup="dialog"
aria-label="Share link: Ecosystem and Integrations">
<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="data-integration" class="position-relative d-flex align-items-center group">
<span>Data Integration</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-integration"
aria-haspopup="dialog"
aria-label="Share link: Data Integration">
<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>ETL from Relational Databases</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="kn">import</span> <span class="nn">psycopg2</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="k">async</span> <span class="k">def</span> <span class="nf">migrate_relational_to_graph</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Migrate PostgreSQL data to Geode."""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Extract from PostgreSQL</span>
</span></span><span class="line"><span class="cl"> <span class="n">pg_conn</span> <span class="o">=</span> <span class="n">psycopg2</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"dbname=mydb"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">pg_cursor</span> <span class="o">=</span> <span class="n">pg_conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="n">pg_cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT id, name, email FROM users"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Load into Geode</span>
</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">"localhost:3141"</span><span class="p">)</span>
</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">geode</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">email</span> <span class="ow">in</span> <span class="n">pg_cursor</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">geode</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:User {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> name: $name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> email: $email
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> <span class="s2">"email"</span><span class="p">:</span> <span class="n">email</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">pg_cursor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="n">pg_conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span></code></pre></div>
<h4 id="monitoring-and-observability" class="position-relative d-flex align-items-center group">
<span>Monitoring and Observability</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="monitoring-and-observability"
aria-haspopup="dialog"
aria-label="Share link: Monitoring and Observability">
<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>Prometheus Metrics</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Scrape Geode metrics endpoint</span>
</span></span><span class="line"><span class="cl">curl http://localhost:9090/metrics
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Sample output:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># geode_queries_total{status="success"} 15432</span>
</span></span><span class="line"><span class="cl"><span class="c1"># geode_query_duration_seconds_sum 23.45</span>
</span></span><span class="line"><span class="cl"><span class="c1"># geode_active_connections 12</span>
</span></span><span class="line"><span class="cl"><span class="c1"># geode_wal_size_bytes 1048576</span>
</span></span></code></pre></div><p><strong>Grafana Dashboards</strong></p>
<p>Pre-built dashboards visualize:</p>
<ul>
<li>Query throughput and latency</li>
<li>Transaction commit/abort rates</li>
<li>Index usage statistics</li>
<li>Memory and disk utilization</li>
<li>Connection pool health</li>
</ul>
<h4 id="application-frameworks" class="position-relative d-flex align-items-center group">
<span>Application Frameworks</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="application-frameworks"
aria-haspopup="dialog"
aria-label="Share link: Application Frameworks">
<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>GraphQL Integration</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="c1">// Express + Apollo GraphQL + Geode
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span> <span class="p">{</span> <span class="nx">ApolloServer</span><span class="p">,</span> <span class="nx">gql</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'apollo-server-express'</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="p">{</span> <span class="nx">createClient</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'@geodedb/client'</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">geode</span> <span class="o">=</span> <span class="nx">createClient</span><span class="p">(</span><span class="s1">'quic://localhost:3141'</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">typeDefs</span> <span class="o">=</span> <span class="nx">gql</span><span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb"> type Person {
</span></span></span><span class="line"><span class="cl"><span class="sb"> name: String!
</span></span></span><span class="line"><span class="cl"><span class="sb"> friends: [Person]
</span></span></span><span class="line"><span class="cl"><span class="sb"> }
</span></span></span><span class="line"><span class="cl"><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb"> type Query {
</span></span></span><span class="line"><span class="cl"><span class="sb"> person(name: String!): Person
</span></span></span><span class="line"><span class="cl"><span class="sb"> }
</span></span></span><span class="line"><span class="cl"><span class="sb">`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">resolvers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Query</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">person</span><span class="o">:</span> <span class="kr">async</span> <span class="p">(</span><span class="nx">_</span><span class="p">,</span> <span class="p">{</span> <span class="nx">name</span> <span class="p">})</span> <span class="p">=></span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">geode</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">rows</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">queryAll</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'MATCH (p:Person {name: $name}) RETURN p'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">params</span><span class="o">:</span> <span class="p">{</span> <span class="nx">name</span> <span class="p">}</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">?</span><span class="p">.</span><span class="nx">p</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nx">Person</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">friends</span><span class="o">:</span> <span class="kr">async</span> <span class="p">(</span><span class="nx">person</span><span class="p">)</span> <span class="p">=></span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="kr">const</span> <span class="nx">result</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">geodeClient</span><span class="p">.</span><span class="nx">execute</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'MATCH (p:Person {id: $id})-[:KNOWS]->(f) RETURN f'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nx">id</span><span class="o">:</span> <span class="nx">person</span><span class="p">.</span><span class="nx">id</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">result</span><span class="p">.</span><span class="nx">rows</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">r</span> <span class="p">=></span> <span class="nx">r</span><span class="p">.</span><span class="nx">f</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div>
<h3 id="comparing-geode-to-alternatives" class="position-relative d-flex align-items-center group">
<span>Comparing Geode to Alternatives</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="comparing-geode-to-alternatives"
aria-haspopup="dialog"
aria-label="Share link: Comparing Geode to Alternatives">
<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="vs-relational-databases" class="position-relative d-flex align-items-center group">
<span>vs. Relational Databases</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="vs-relational-databases"
aria-haspopup="dialog"
aria-label="Share link: vs. Relational Databases">
<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>Strengths of Geode</strong>:</p>
<ul>
<li>Native graph traversals (no joins)</li>
<li>Flexible schema evolution</li>
<li>Natural modeling of connected data</li>
</ul>
<p><strong>When to use relational</strong>:</p>
<ul>
<li>Tabular data with few relationships</li>
<li>Complex aggregations over flat data</li>
<li>Regulatory requirements for SQL</li>
</ul>
<h4 id="vs-proprietary-graph-databases" class="position-relative d-flex align-items-center group">
<span>vs. Proprietary Graph Databases</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="vs-proprietary-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: vs. Proprietary Graph Databases">
<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>Geode Advantages</strong>:</p>
<ul>
<li>ISO standard query language (no vendor lock-in)</li>
<li>Apache 2.0 license (fully open source)</li>
<li>Modern architecture (QUIC, Zig)</li>
<li>Smaller resource footprint</li>
</ul>
<p><strong>Competitor Advantages</strong>:</p>
<ul>
<li>Larger ecosystems and community</li>
<li>More mature visualization tools</li>
<li>Enterprise support contracts</li>
</ul>
<h3 id="roadmap-and-future-development" class="position-relative d-flex align-items-center group">
<span>Roadmap and Future Development</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="roadmap-and-future-development"
aria-haspopup="dialog"
aria-label="Share link: Roadmap and Future Development">
<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>Upcoming in v0.1.4</strong>:</p>
<ul>
<li>Distributed mode with automatic sharding</li>
<li>Improved query optimizer with machine learning</li>
<li>Additional graph algorithm library</li>
<li>Enhanced monitoring dashboards</li>
</ul>
<p><strong>Planned for v1.0.0</strong>:</p>
<ul>
<li>API stability guarantees</li>
<li>Extended long-term support</li>
<li>Enterprise certifications</li>
<li>Additional client language support (Java, C#, JavaScript)</li>
</ul>
<h3 id="contributing-to-geode" class="position-relative d-flex align-items-center group">
<span>Contributing to Geode</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="contributing-to-geode"
aria-haspopup="dialog"
aria-label="Share link: Contributing to Geode">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Geode welcomes contributions following evidence-based development:</p>
<ol>
<li><strong>Issues</strong>: Report bugs or request features on GitLab</li>
<li><strong>Testing</strong>: All code must include tests</li>
<li><strong>Documentation</strong>: Update docs for new features</li>
<li><strong>Code Review</strong>: All changes reviewed before merge</li>
<li><strong>CANARY Markers</strong>: Implementation requires governance markers</li>
</ol>
<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="/tags/iso-gql/"
>ISO GQL Standard</a>
- Graph Query Language specification</li>
<li><a
href="/tags/acid/"
>ACID Transactions</a>
- Transaction guarantees</li>
<li><a
href="/tags/mvcc/"
>MVCC</a>
- Concurrency control architecture</li>
<li><a
href="/tags/quic/"
>QUIC Protocol</a>
- Modern network transport</li>
<li><a
href="/docs/architecture/storage-engine/"
>Storage Engine</a>
- Storage architecture details</li>
<li><a
href="/docs/architecture/query-optimization/"
>Query Optimization</a>
- Optimization internals</li>
<li><a
href="/docs/guides/schema-design/"
>Schema Design</a>
- Schema design patterns</li>
<li><a
href="/docs/guides/migration-guide/"
>Migration Guide</a>
- Moving from other databases</li>
<li><a
href="/docs/deployment/deployment-patterns/"
>Deployment Patterns</a>
- Deployment guide</li>
</ul>
Category
1 article
Category: Overview and Introduction
Comprehensive overview of Geode graph database: architecture, features, ISO GQL conformance profile, getting started guides, and core concepts for developers and architects.