<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<h2 id="graph-database-fundamentals" class="position-relative d-flex align-items-center group">
<span>Graph Database Fundamentals</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-database-fundamentals"
aria-haspopup="dialog"
aria-label="Share link: Graph Database Fundamentals">
<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>
</h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script><p>Graph databases represent a fundamental shift in how we model and query connected data. Unlike traditional relational databases that use tables and joins, graph databases store data as nodes (entities) and relationships (connections), making them naturally suited for highly connected datasets where relationships are as important as the data itself.</p>
<h3 id="what-is-a-graph-database" class="position-relative d-flex align-items-center group">
<span>What is a Graph Database?</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-a-graph-database"
aria-haspopup="dialog"
aria-label="Share link: What is a Graph Database?">
<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>A graph database is a database management system that uses graph structures with nodes, relationships, and properties to represent and store data. The graph relates the data items in the store to a collection of nodes and edges, where edges represent the relationships between nodes.</p>
<h4 id="core-components" class="position-relative d-flex align-items-center group">
<span>Core Components</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-components"
aria-haspopup="dialog"
aria-label="Share link: Core Components">
<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>Nodes</strong>: Represent entities (people, products, locations, etc.)</li>
<li><strong>Relationships</strong>: Connect nodes and represent how entities relate</li>
<li><strong>Properties</strong>: Key-value pairs attached to nodes and relationships</li>
<li><strong>Labels</strong>: Categorize nodes into groups (optional, implementation-specific)</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="py">example</span><span class="p">:</span><span class="w"> </span><span class="nc">Person</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="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="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">user123</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="w"> </span><span class="py">Johnson</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">alice</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age</span><span class="p">:</span><span class="w"> </span><span class="nc">32</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Relationship</span><span class="w"> </span><span class="py">example</span><span class="p">:</span><span class="w"> </span><span class="nc">connecting</span><span class="w"> </span><span class="py">two</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">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="py">r</span><span class="p">:</span><span class="nc">KNOWS</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">DATE</span><span class="w"> </span><span class="err">'</span><span class="py">2020</span><span class="err">-</span><span class="py">05</span><span class="err">-</span><span class="py">15</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">context</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">college</span><span class="err">'</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></code></pre></div>
<h3 id="graph-theory-background" class="position-relative d-flex align-items-center group">
<span>Graph Theory Background</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-theory-background"
aria-haspopup="dialog"
aria-label="Share link: Graph Theory Background">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Graph databases are based on mathematical graph theory, which has been studied for centuries.</p>
<h4 id="mathematical-definition" class="position-relative d-flex align-items-center group">
<span>Mathematical Definition</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="mathematical-definition"
aria-haspopup="dialog"
aria-label="Share link: Mathematical Definition">
<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>A graph G is defined as G = (V, E) where:</p>
<ul>
<li>V is a set of vertices (nodes)</li>
<li>E is a set of edges (relationships)</li>
</ul>
<p>In property graphs (like Geode), we extend this to:</p>
<ul>
<li>Each vertex has properties: v = {label, {k₁: v₁, k₂: v₂, …}}</li>
<li>Each edge has type and properties: e = {type, {k₁: v₁, k₂: v₂, …}}</li>
</ul>
<h4 id="graph-types" class="position-relative d-flex align-items-center group">
<span>Graph Types</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-types"
aria-haspopup="dialog"
aria-label="Share link: Graph Types">
<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>Directed vs. Undirected</strong></p>
<ul>
<li><strong>Directed</strong>: Relationships have direction (A→B is different from B→A)</li>
<li><strong>Undirected</strong>: Relationships are bidirectional</li>
</ul>
<p>Most graph databases, including Geode, use directed graphs where relationships have explicit direction.</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">Directed</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">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">FOLLOWS</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">Alice</span><span class="w"> </span><span class="py">follows</span><span class="w"> </span><span class="py">Bob</span><span class="p">,</span><span class="w"> </span><span class="py">but</span><span class="w"> </span><span class="py">Bob</span><span class="w"> </span><span class="py">doesn</span><span class="err">'</span><span class="py">t</span><span class="w"> </span><span class="py">necessarily</span><span class="w"> </span><span class="py">follow</span><span class="w"> </span><span class="py">Alice</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">To</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">bidirectionally</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">b</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">a</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Alice</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Finds</span><span class="w"> </span><span class="py">relationships</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">both</span><span class="w"> </span><span class="py">directions</span><span class="w">
</span></span></span></code></pre></div><p><strong>Weighted vs. Unweighted</strong></p>
<ul>
<li><strong>Weighted</strong>: Relationships have numeric weights (distances, costs, strengths)</li>
<li><strong>Unweighted</strong>: All relationships are equal</li>
</ul>
<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">Weighted</span><span class="w"> </span><span class="py">graph</span><span class="p">:</span><span class="w"> </span><span class="nc">social</span><span class="w"> </span><span class="py">network</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">interaction</span><span class="w"> </span><span class="py">strength</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">user1</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">INTERACTS</span><span class="w"> </span><span class="p">{</span><span class="py">weight</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.85</span><span class="p">,</span><span class="w"> </span><span class="py">interactions</span><span class="p">:</span><span class="w"> </span><span class="nc">47</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">user2</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div><p><strong>Cyclic vs. Acyclic</strong></p>
<ul>
<li><strong>Cyclic</strong>: Contains cycles (paths that loop back)</li>
<li><strong>Acyclic</strong>: No cycles (directed acyclic graphs - DAGs)</li>
</ul>
<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">DAG</span><span class="w"> </span><span class="py">example</span><span class="p">:</span><span class="w"> </span><span class="nc">task</span><span class="w"> </span><span class="py">dependencies</span><span class="w"> </span><span class="p">(</span><span class="py">no</span><span class="w"> </span><span class="py">circular</span><span class="w"> </span><span class="py">dependencies</span><span class="w"> </span><span class="py">allowed</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">task1</span><span class="p">:</span><span class="nc">Task</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">DEPENDS_ON</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">task2</span><span class="p">:</span><span class="nc">Task</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">DEPENDS_ON</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">task3</span><span class="p">:</span><span class="nc">Task</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">Cyclic</span><span class="w"> </span><span class="py">example</span><span class="p">:</span><span class="w"> </span><span class="nc">social</span><span class="w"> </span><span class="py">network</span><span class="w"> </span><span class="p">(</span><span class="py">mutual</span><span class="w"> </span><span class="py">follows</span><span class="w"> </span><span class="py">create</span><span class="w"> </span><span class="py">cycles</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">alice</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">bob</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">charlie</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">alice</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="property-graph-model" class="position-relative d-flex align-items-center group">
<span>Property Graph Model</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="property-graph-model"
aria-haspopup="dialog"
aria-label="Share link: Property Graph Model">
<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 implements the <strong>property graph model</strong>, the most popular graph database model (used by Neo4j, Neptune, TigerGraph, and others).</p>
<h4 id="key-characteristics" class="position-relative d-flex align-items-center group">
<span>Key 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="key-characteristics"
aria-haspopup="dialog"
aria-label="Share link: Key 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>
</h4><ol>
<li><strong>Nodes and Relationships are First-Class Citizens</strong>: Both can have properties</li>
<li><strong>Multi-Relational</strong>: Multiple relationship types between same nodes</li>
<li><strong>Schema-Optional</strong>: Can be schema-free, schema-enforced, or hybrid</li>
<li><strong>Type System</strong>: Rich data types (strings, numbers, dates, lists, maps)</li>
</ol>
<h4 id="example-social-network" class="position-relative d-flex align-items-center group">
<span>Example: Social Network</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="example-social-network"
aria-haspopup="dialog"
aria-label="Share link: Example: Social Network">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">users</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">alice</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">city</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">San</span><span class="w"> </span><span class="py">Francisco</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">joined</span><span class="p">:</span><span class="w"> </span><span class="nc">DATE</span><span class="w"> </span><span class="err">'</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">15</span><span class="err">'</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">bob</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">Bob</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">city</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">New</span><span class="w"> </span><span class="py">York</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">joined</span><span class="p">:</span><span class="w"> </span><span class="nc">DATE</span><span class="w"> </span><span class="err">'</span><span class="py">2024</span><span class="err">-</span><span class="py">02</span><span class="err">-</span><span class="py">20</span><span class="err">'</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">charlie</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">Charlie</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">city</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Austin</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">joined</span><span class="p">:</span><span class="w"> </span><span class="nc">DATE</span><span class="w"> </span><span class="err">'</span><span class="py">2024</span><span class="err">-</span><span class="py">03</span><span class="err">-</span><span class="py">10</span><span class="err">'</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">alice</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</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">CURRENT_DATE</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">bob</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">bob</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</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">CURRENT_DATE</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">charlie</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">charlie</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</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">CURRENT_DATE</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">alice</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">content</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">post</span><span class="p">:</span><span class="nc">Post</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">Graph</span><span class="w"> </span><span class="py">Databases</span><span class="w"> </span><span class="py">101</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">created</span><span class="p">:</span><span class="w"> </span><span class="nc">CURRENT_TIMESTAMP</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">alice</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">AUTHORED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">post</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">bob</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKED</span><span class="w"> </span><span class="p">{</span><span class="py">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">CURRENT_TIMESTAMP</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">post</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">graph</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">author</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">AUTHORED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">post</span><span class="p">:</span><span class="nc">Post</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">LIKED</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">liker</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">RETURN</span><span class="w"> </span><span class="py">author</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">post</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">collect</span><span class="p">(</span><span class="py">liker</span><span class="err">.</span><span class="py">name</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">likers</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="when-to-use-graph-databases" class="position-relative d-flex align-items-center group">
<span>When to Use 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="when-to-use-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: When to Use 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>
</h3>
<h4 id="ideal-use-cases" class="position-relative d-flex align-items-center group">
<span>Ideal Use Cases</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="ideal-use-cases"
aria-haspopup="dialog"
aria-label="Share link: Ideal Use Cases">
<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>1. Social Networks</strong></p>
<ul>
<li>Friend connections, followers, recommendations</li>
<li>Natural graph structure with nodes (users) and relationships (connections)</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span><span class="py">who</span><span class="w"> </span><span class="py">like</span><span class="w"> </span><span class="py">similar</span><span class="w"> </span><span class="py">content</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">me</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">friend</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">fof</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">me</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">fof</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">fof</span><span class="w"> </span><span class="err"><></span><span class="w"> </span><span class="py">me</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">me</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">interest</span><span class="p">:</span><span class="nc">Interest</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">fof</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">fof</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">interest</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">common_interests</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">common_interests</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>2. Recommendation Engines</strong></p>
<ul>
<li>Collaborative filtering, content recommendations, personalization</li>
</ul>
<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">Recommend</span><span class="w"> </span><span class="py">products</span><span class="w"> </span><span class="py">based</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">similar</span><span class="w"> </span><span class="py">users</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u1</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">p</span><span class="p">:</span><span class="nc">Product</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">u2</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u2</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">rec</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u1</span><span class="p">)</span><span class="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">rec</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">rec</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">u2</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">recommendation_strength</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">recommendation_strength</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>3. Fraud Detection</strong></p>
<ul>
<li>Pattern matching for suspicious behavior, money laundering detection</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">circular</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">patterns</span><span class="w"> </span><span class="p">(</span><span class="py">potential</span><span class="w"> </span><span class="py">money</span><span class="w"> </span><span class="py">laundering</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSFER</span><span class="err">*</span><span class="py">3</span><span class="err">.</span><span class="mf">.5</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">a</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">all</span><span class="p">(</span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">amount</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10000</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">all</span><span class="p">(</span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">DURATION</span><span class="w"> </span><span class="err">'</span><span class="py">P7D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">path</span><span class="p">,</span><span class="w"> </span><span class="py">reduce</span><span class="p">(</span><span class="py">total</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">total</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_amount</span><span class="w">
</span></span></span><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">total_amount</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>4. Knowledge Graphs</strong></p>
<ul>
<li>Semantic networks, ontologies, Wikipedia-style interconnected knowledge</li>
</ul>
<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">Explore</span><span class="w"> </span><span class="py">knowledge</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">connections</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">entity</span><span class="p">:</span><span class="nc">Entity</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">Albert</span><span class="w"> </span><span class="py">Einstein</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="p">[</span><span class="py">r1</span><span class="p">:</span><span class="nc">RELATED_TO</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">related</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">-</span><span class="p">[</span><span class="py">r2</span><span class="p">:</span><span class="nc">RELATED_TO</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">further</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">entity</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="kd">type</span><span class="p">(</span><span class="nc">r1</span><span class="p">),</span><span class="w"> </span><span class="py">related</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="kd">type</span><span class="p">(</span><span class="nc">r2</span><span class="p">),</span><span class="w"> </span><span class="py">further</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>5. Network and Infrastructure Management</strong></p>
<ul>
<li>IT systems, telecommunications, power grids, logistics networks</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">impact</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">server</span><span class="w"> </span><span class="py">failure</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">failed</span><span class="p">:</span><span class="nc">Server</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">srv</span><span class="err">-</span><span class="py">42</span><span class="err">'</span><span class="p">})</span><span class="err"><-</span><span class="p">[:</span><span class="nc">DEPENDS_ON</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">affected</span><span class="p">:</span><span class="nc">Service</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">affected</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">affected</span><span class="err">.</span><span class="py">criticality</span><span class="p">,</span><span class="w"> </span><span class="py">affected</span><span class="err">.</span><span class="py">users_affected</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">affected</span><span class="err">.</span><span class="py">criticality</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>6. Access Control and Authorization</strong></p>
<ul>
<li>Role hierarchies, permission inheritance, complex authorization rules</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">user</span><span class="w"> </span><span class="py">has</span><span class="w"> </span><span class="py">permission</span><span class="w"> </span><span class="p">(</span><span class="py">direct</span><span class="w"> </span><span class="py">or</span><span class="w"> </span><span class="py">inherited</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_ROLE</span><span class="err">*</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">r</span><span class="p">:</span><span class="nc">Role</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_PERMISSION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Permission</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">action</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$action</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">resource</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$resource</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">has_permission</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="when-not-to-use-graph-databases" class="position-relative d-flex align-items-center group">
<span>When NOT to Use 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="when-not-to-use-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: When NOT to Use 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>1. Simple Tabular Data</strong></p>
<p>If your data has few relationships and mostly consists of independent records, relational databases are simpler and more efficient.</p>
<p><strong>2. High-Volume Transactional Systems</strong></p>
<p>For pure OLTP with simple queries (e.g., account balance lookups), traditional RDBMS may be faster.</p>
<p><strong>3. Large Binary Objects</strong></p>
<p>Graph databases are not optimized for storing large files, videos, or images. Use object storage (S3) and store references in the graph.</p>
<p><strong>4. Pure Aggregations Without Relationships</strong></p>
<p>For time-series data or analytics without relationship traversal, specialized databases (InfluxDB, ClickHouse) may be better.</p>
<h3 id="graph-database-architecture" class="position-relative d-flex align-items-center group">
<span>Graph Database 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="graph-database-architecture"
aria-haspopup="dialog"
aria-label="Share link: Graph Database 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="storage-strategies" class="position-relative d-flex align-items-center group">
<span>Storage Strategies</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="storage-strategies"
aria-haspopup="dialog"
aria-label="Share link: Storage Strategies">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>1. Native Graph Storage</strong></p>
<p>Stores graph structure using adjacency lists or similar graph-native formats (Geode, Neo4j).</p>
<p>Advantages:</p>
<ul>
<li>Optimized for traversals</li>
<li>Index-free adjacency (no joins needed)</li>
<li>High performance for graph queries</li>
</ul>
<p><strong>2. Non-Native Storage</strong></p>
<p>Uses relational or document storage underneath with graph abstraction layer.</p>
<p>Advantages:</p>
<ul>
<li>Leverages existing database infrastructure</li>
<li>Familiar backup/recovery tools</li>
</ul>
<p>Disadvantages:</p>
<ul>
<li>Slower traversals (requires joins)</li>
<li>Limited scalability for deep queries</li>
</ul>
<h4 id="query-processing" class="position-relative d-flex align-items-center group">
<span>Query Processing</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="query-processing"
aria-haspopup="dialog"
aria-label="Share link: Query Processing">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Graph Traversal Algorithms</strong></p>
<ol>
<li><strong>Breadth-First Search (BFS)</strong>: Explore neighbors level by level</li>
<li><strong>Depth-First Search (DFS)</strong>: Explore deeply before backtracking</li>
<li><strong>Bidirectional Search</strong>: Search from both endpoints simultaneously</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">BFS</span><span class="w"> </span><span class="py">implicitly</span><span class="w"> </span><span class="py">used</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">shortest</span><span class="w"> </span><span class="py">path</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">SHORTEST</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">b</span><span class="p">:</span><span class="nc">Person</span><span class="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">a</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Alice</span><span class="err">'</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">b</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Bob</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">path</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Index Usage</strong></p>
<p>Graph databases use indexes for:</p>
<ul>
<li>Finding starting nodes (e.g., by property value)</li>
<li>Filtering during traversal</li>
<li>Accelerating aggregations</li>
</ul>
<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">Index</span><span class="w"> </span><span class="py">scan</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">find</span><span class="w"> </span><span class="py">starting</span><span class="w"> </span><span class="py">node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">person_name</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">name</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">uses</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">find</span><span class="w"> </span><span class="err">'</span><span class="py">Alice</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">then</span><span class="w"> </span><span class="py">traverses</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">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">2</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="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="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="graph-query-languages" class="position-relative d-flex align-items-center group">
<span>Graph Query Languages</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-query-languages"
aria-haspopup="dialog"
aria-label="Share link: Graph Query Languages">
<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="gql-graph-query-language" class="position-relative d-flex align-items-center group">
<span>GQL (Graph 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="gql-graph-query-language"
aria-haspopup="dialog"
aria-label="Share link: GQL (Graph 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>ISO/IEC 39075:2024 standard implemented by Geode.</p>
<p><strong>Advantages</strong>:</p>
<ul>
<li>International standard (like SQL for relational)</li>
<li>Vendor-neutral</li>
<li>Modern design (learned from SQL, Cypher, SPARQL)</li>
<li>Pattern matching syntax</li>
<li>Strong typing</li>
</ul>
<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">GQL</span><span class="w"> </span><span class="py">syntax</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">b</span><span class="p">:</span><span class="nc">Person</span><span class="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">a</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">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">b</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">since</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="cypher" class="position-relative d-flex align-items-center group">
<span>Cypher</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="cypher"
aria-haspopup="dialog"
aria-label="Share link: Cypher">
<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>Neo4j’s proprietary language (influenced GQL).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">-- Cypher syntax (very similar to GQL)
</span></span><span class="line"><span class="cl">MATCH (a:Person)-[r:KNOWS]->(b:Person)
</span></span><span class="line"><span class="cl">WHERE a.age > 30
</span></span><span class="line"><span class="cl">RETURN a.name, b.name, r.since
</span></span></code></pre></div>
<h4 id="gremlin" class="position-relative d-flex align-items-center group">
<span>Gremlin</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="gremlin"
aria-haspopup="dialog"
aria-label="Share link: Gremlin">
<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>Apache TinkerPop’s imperative traversal language.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-groovy" data-lang="groovy"><span class="line"><span class="cl"><span class="c1">// Gremlin syntax (procedural)
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">g</span><span class="o">.</span><span class="na">V</span><span class="o">().</span><span class="na">hasLabel</span><span class="o">(</span><span class="s1">'Person'</span><span class="o">)</span>
</span></span><span class="line"><span class="cl"> <span class="o">.</span><span class="na">has</span><span class="o">(</span><span class="s1">'age'</span><span class="o">,</span> <span class="n">gt</span><span class="o">(</span><span class="mi">30</span><span class="o">))</span>
</span></span><span class="line"><span class="cl"> <span class="o">.</span><span class="na">outE</span><span class="o">(</span><span class="s1">'KNOWS'</span><span class="o">)</span>
</span></span><span class="line"><span class="cl"> <span class="o">.</span><span class="na">inV</span><span class="o">()</span>
</span></span><span class="line"><span class="cl"> <span class="o">.</span><span class="na">path</span><span class="o">()</span>
</span></span></code></pre></div>
<h4 id="sparql" class="position-relative d-flex align-items-center group">
<span>SPARQL</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="sparql"
aria-haspopup="dialog"
aria-label="Share link: SPARQL">
<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>W3C standard for RDF/semantic graphs.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sparql" data-lang="sparql"><span class="line"><span class="cl"><span class="c"># SPARQL syntax (for RDF triples)</span>
</span></span><span class="line"><span class="cl"><span class="k">SELECT</span> <span class="nv">?aName</span> <span class="nv">?bName</span> <span class="nv">?since</span>
</span></span><span class="line"><span class="cl"><span class="k">WHERE</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nv">?a</span> <span class="nn">rdf</span><span class="p">:</span><span class="nt">type</span> <span class="p">:</span><span class="nt">Person</span> <span class="p">.</span>
</span></span><span class="line"><span class="cl"> <span class="nv">?a</span> <span class="p">:</span><span class="nt">knows</span> <span class="nv">?b</span> <span class="p">.</span>
</span></span><span class="line"><span class="cl"> <span class="nv">?a</span> <span class="p">:</span><span class="nt">age</span> <span class="nv">?age</span> <span class="p">.</span>
</span></span><span class="line"><span class="cl"> <span class="nv">?a</span> <span class="p">:</span><span class="nt">name</span> <span class="nv">?aName</span> <span class="p">.</span>
</span></span><span class="line"><span class="cl"> <span class="nv">?b</span> <span class="p">:</span><span class="nt">name</span> <span class="nv">?bName</span> <span class="p">.</span>
</span></span><span class="line"><span class="cl"> <span class="k">FILTER</span> <span class="p">(</span><span class="nv">?age</span> <span class="o">></span> <span class="mi">30</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h3 id="comparison-with-other-database-types" class="position-relative d-flex align-items-center group">
<span>Comparison with Other Database Types</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="comparison-with-other-database-types"
aria-haspopup="dialog"
aria-label="Share link: Comparison with Other Database Types">
<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-sql" class="position-relative d-flex align-items-center group">
<span>vs. Relational Databases (SQL)</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-sql"
aria-haspopup="dialog"
aria-label="Share link: vs. Relational Databases (SQL)">
<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><table>
<thead>
<tr>
<th>Aspect</th>
<th>Graph DB</th>
<th>Relational DB</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Model</strong></td>
<td>Nodes and relationships</td>
<td>Tables and foreign keys</td>
</tr>
<tr>
<td><strong>Relationships</strong></td>
<td>First-class citizens</td>
<td>Represented by joins</td>
</tr>
<tr>
<td><strong>Schema</strong></td>
<td>Flexible (optional)</td>
<td>Rigid (required)</td>
</tr>
<tr>
<td><strong>Joins</strong></td>
<td>Index-free adjacency</td>
<td>Expensive JOIN operations</td>
</tr>
<tr>
<td><strong>Use Case</strong></td>
<td>Connected data queries</td>
<td>Structured tabular data</td>
</tr>
<tr>
<td><strong>Performance</strong></td>
<td>Fast multi-hop traversals</td>
<td>Slow for deep joins</td>
</tr>
</tbody>
</table>
<p><strong>Example: Find friends of friends</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">Graph</span><span class="w"> </span><span class="py">DB</span><span class="p">:</span><span class="w"> </span><span class="nc">natural</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">fast</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">me</span><span class="p">:</span><span class="nc">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">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">fof</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">fof</span><span class="w"> </span><span class="err"><></span><span class="w"> </span><span class="py">me</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">fof</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="c1">-- Relational: requires self-joins
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">SELECT</span><span class="w"> </span><span class="n">f2</span><span class="p">.</span><span class="n">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">FROM</span><span class="w"> </span><span class="n">persons</span><span class="w"> </span><span class="n">me</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">JOIN</span><span class="w"> </span><span class="n">friendships</span><span class="w"> </span><span class="n">f1</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">me</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f1</span><span class="p">.</span><span class="n">person1_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">JOIN</span><span class="w"> </span><span class="n">persons</span><span class="w"> </span><span class="n">friend</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">f1</span><span class="p">.</span><span class="n">person2_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">friend</span><span class="p">.</span><span class="n">id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">JOIN</span><span class="w"> </span><span class="n">friendships</span><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">friend</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f2</span><span class="p">.</span><span class="n">person1_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">JOIN</span><span class="w"> </span><span class="n">persons</span><span class="w"> </span><span class="n">fof</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">f2</span><span class="p">.</span><span class="n">person2_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fof</span><span class="p">.</span><span class="n">id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">WHERE</span><span class="w"> </span><span class="n">me</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Alice'</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">fof</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o"><></span><span class="w"> </span><span class="n">me</span><span class="p">.</span><span class="n">id</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="vs-document-databases-mongodb-etc" class="position-relative d-flex align-items-center group">
<span>vs. Document Databases (MongoDB, etc.)</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-document-databases-mongodb-etc"
aria-haspopup="dialog"
aria-label="Share link: vs. Document Databases (MongoDB, etc.)">
<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><table>
<thead>
<tr>
<th>Aspect</th>
<th>Graph DB</th>
<th>Document DB</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Relationships</strong></td>
<td>Explicit and navigable</td>
<td>Embedded or referenced</td>
</tr>
<tr>
<td><strong>Queries</strong></td>
<td>Pattern matching</td>
<td>Key-value or document lookup</td>
</tr>
<tr>
<td><strong>Consistency</strong></td>
<td>ACID (Geode)</td>
<td>Eventual (most)</td>
</tr>
<tr>
<td><strong>Use Case</strong></td>
<td>Relationship-heavy</td>
<td>Document-centric</td>
</tr>
</tbody>
</table>
<p><strong>Document DB Limitation</strong>: Relationships require application-level joins or denormalization.</p>
<h4 id="vs-key-value-stores-redis-dynamodb" class="position-relative d-flex align-items-center group">
<span>vs. Key-Value Stores (Redis, DynamoDB)</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-key-value-stores-redis-dynamodb"
aria-haspopup="dialog"
aria-label="Share link: vs. Key-Value Stores (Redis, DynamoDB)">
<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><table>
<thead>
<tr>
<th>Aspect</th>
<th>Graph DB</th>
<th>Key-Value Store</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Data Model</strong></td>
<td>Complex graph</td>
<td>Simple key-value pairs</td>
</tr>
<tr>
<td><strong>Query Power</strong></td>
<td>Rich pattern matching</td>
<td>Get by key only</td>
</tr>
<tr>
<td><strong>Relationships</strong></td>
<td>First-class</td>
<td>Not supported</td>
</tr>
<tr>
<td><strong>Performance</strong></td>
<td>Fast traversals</td>
<td>Fastest single-key lookup</td>
</tr>
</tbody>
</table>
<h4 id="vs-other-graph-databases" class="position-relative d-flex align-items-center group">
<span>vs. Other 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-other-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: vs. Other 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 vs. Neo4j</strong></p>
<ul>
<li><strong>Standards</strong>: Geode uses GQL (ISO standard); Neo4j uses Cypher (proprietary)</li>
<li><strong>Architecture</strong>: Both native graph storage</li>
<li><strong>ACID</strong>: Both full ACID</li>
<li><strong>Licensing</strong>: Geode open-source Apache 2.0; Neo4j dual-licensed (GPL/commercial)</li>
</ul>
<p><strong>Geode vs. Amazon Neptune</strong></p>
<ul>
<li><strong>Deployment</strong>: Geode on-premise or any cloud; Neptune AWS-only</li>
<li><strong>Query Language</strong>: Geode GQL; Neptune Gremlin/SPARQL</li>
<li><strong>Cost</strong>: Geode open-source; Neptune pay-per-instance</li>
</ul>
<p><strong>Geode vs. TigerGraph</strong></p>
<ul>
<li><strong>Language</strong>: GQL vs. GSQL</li>
<li><strong>Performance</strong>: Both high-performance; different optimization strategies</li>
<li><strong>ACID</strong>: Geode full ACID; TigerGraph eventual consistency in distributed mode</li>
</ul>
<h3 id="acid-properties-in-graph-databases" class="position-relative d-flex align-items-center group">
<span>ACID Properties in 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="acid-properties-in-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: ACID Properties in 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>
</h3><p>Geode implements full ACID compliance:</p>
<ul>
<li><strong>Atomicity</strong>: Transactions are all-or-nothing</li>
<li><strong>Consistency</strong>: Data integrity constraints are enforced</li>
<li><strong>Isolation</strong>: Concurrent transactions don’t interfere</li>
<li><strong>Durability</strong>: Committed data persists across failures</li>
</ul>
<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">ACID</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">example</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">u123</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">balance</span><span class="p">:</span><span class="w"> </span><span class="nc">1000</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">u2</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">u456</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">balance</span><span class="p">:</span><span class="w"> </span><span class="nc">500</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Transfer</span><span class="w"> </span><span class="py">money</span><span class="w"> </span><span class="py">atomically</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">sender</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">u123</span><span class="err">'</span><span class="p">}),</span><span class="w"> </span><span class="p">(</span><span class="py">receiver</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">u456</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">sender</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">sender</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">receiver</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">receiver</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">100</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Either</span><span class="w"> </span><span class="py">both</span><span class="w"> </span><span class="py">updates</span><span class="w"> </span><span class="py">happen</span><span class="p">,</span><span class="w"> </span><span class="py">or</span><span class="w"> </span><span class="py">neither</span><span class="w"> </span><span class="py">does</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="getting-started-with-graph-databases" class="position-relative d-flex align-items-center group">
<span>Getting Started with 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="getting-started-with-graph-databases"
aria-haspopup="dialog"
aria-label="Share link: Getting Started with 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>
</h3>
<h4 id="1-model-your-domain" class="position-relative d-flex align-items-center group">
<span>1. Model Your Domain</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="1-model-your-domain"
aria-haspopup="dialog"
aria-label="Share link: 1. Model Your Domain">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Identify entities (nodes) and relationships:</p>
<ul>
<li><strong>Entities</strong>: What are the “things” in your system?</li>
<li><strong>Relationships</strong>: How do these things connect?</li>
<li><strong>Properties</strong>: What attributes describe entities and relationships?</li>
</ul>
<h4 id="2-install-geode" class="position-relative d-flex align-items-center group">
<span>2. Install 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="2-install-geode"
aria-haspopup="dialog"
aria-label="Share link: 2. Install 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>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Download and start Geode</span>
</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">geode serve --listen 0.0.0.0:3141
</span></span></code></pre></div>
<h4 id="3-create-your-first-graph" class="position-relative d-flex align-items-center group">
<span>3. Create Your First Graph</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="3-create-your-first-graph"
aria-haspopup="dialog"
aria-label="Share link: 3. Create Your First Graph">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Define</span><span class="w"> </span><span class="py">your</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span><span class="p">(</span><span class="py">optional</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">Geode</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">alice</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="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">bob</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">Bob</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">28</span><span class="p">})</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">alice</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</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">DATE</span><span class="w"> </span><span class="err">'</span><span class="py">2020</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">'</span><span class="p">}]</span><span class="err">-></span><span class="p">(</span><span class="py">bob</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="4-query-your-graph" class="position-relative d-flex align-items-center group">
<span>4. Query Your Graph</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="4-query-your-graph"
aria-haspopup="dialog"
aria-label="Share link: 4. Query Your Graph">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">Alice</span><span class="err">'</span><span class="py">s</span><span class="w"> </span><span class="py">friends</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">alice</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="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">age</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="5-explore-and-iterate" class="position-relative d-flex align-items-center group">
<span>5. Explore and Iterate</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="5-explore-and-iterate"
aria-haspopup="dialog"
aria-label="Share link: 5. Explore and Iterate">
<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>Try different queries, add more data, experiment with 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">More</span><span class="w"> </span><span class="py">complex</span><span class="w"> </span><span class="py">pattern</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="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">friend</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">fof</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Alice</span><span class="err">'</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">fof</span><span class="w"> </span><span class="err"><></span><span class="w"> </span><span class="py">p</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">fof</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">connections</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">connections</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ol>
<li><strong>Model Relationships Explicitly</strong>: Don’t hide relationships in properties</li>
<li><strong>Use Meaningful Relationship Types</strong>: <code>KNOWS</code> is better than <code>RELATED_TO</code></li>
<li><strong>Index Frequently Queried Properties</strong>: Speed up node lookups</li>
<li><strong>Avoid Dense Nodes</strong>: Nodes with millions of relationships can slow queries</li>
<li><strong>Use Parameterized Queries</strong>: Enable query plan caching</li>
<li><strong>Monitor Query Performance</strong>: Profile slow queries with PROFILE command</li>
</ol>
<h3 id="conclusion" class="position-relative d-flex align-items-center group">
<span>Conclusion</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="conclusion"
aria-haspopup="dialog"
aria-label="Share link: Conclusion">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Graph databases represent a paradigm shift from traditional relational databases, offering natural modeling and efficient querying of connected data. Geode’s implementation of the ISO/IEC 39075:2024 GQL standard provides enterprise-grade graph capabilities with ACID guarantees, making it suitable for production workloads ranging from social networks to fraud detection to knowledge graphs.</p>
<p>Explore the documentation below to dive deeper into specific aspects of graph database theory, architecture, and practical implementation with Geode.</p>
Tag
1 article
Graph Database Fundamentals
Complete guide to graph database concepts, architecture, and theory. Learn about nodes, relationships, property graphs, graph models, query languages, when to use graph databases, and how they differ from relational, document, and other NoSQL databases.