<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<h2 id="data-consistency-models" class="position-relative d-flex align-items-center group">
<span>Data Consistency Models</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-consistency-models"
aria-haspopup="dialog"
aria-label="Share link: Data Consistency Models">
<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>Data consistency is a fundamental concern in distributed graph databases, governing how and when changes become visible across multiple nodes. Geode provides flexible consistency models that allow you to balance between strong guarantees and high performance, depending on your application requirements. This comprehensive guide explores consistency theory, practical implementation strategies, and configuration options for building reliable distributed graph systems.</p>
<h3 id="understanding-consistency" class="position-relative d-flex align-items-center group">
<span>Understanding Consistency</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="understanding-consistency"
aria-haspopup="dialog"
aria-label="Share link: Understanding Consistency">
<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>In distributed systems, consistency refers to the agreement of data across multiple replicas. When a write operation completes on one node, consistency models define when and how that change becomes visible to readers on other nodes. Different consistency models offer different trade-offs between availability, latency, and correctness guarantees.</p>
<p>For graph databases, consistency is particularly important because graph queries often traverse multiple relationships, and inconsistent views can lead to incomplete or incorrect query results. Geode’s consistency mechanisms ensure that graph semantics are preserved even in distributed deployments.</p>
<h3 id="consistency-models-in-geode" class="position-relative d-flex align-items-center group">
<span>Consistency Models in 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="consistency-models-in-geode"
aria-haspopup="dialog"
aria-label="Share link: Consistency Models in Geode">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="strong-consistency-linearizability" class="position-relative d-flex align-items-center group">
<span>Strong Consistency (Linearizability)</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="strong-consistency-linearizability"
aria-haspopup="dialog"
aria-label="Share link: Strong Consistency (Linearizability)">
<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 consistency provides the strongest guarantee: every read returns the most recent write, and all operations appear to occur atomically in a global order. This model is essential for applications requiring strict correctness guarantees.</p>
<p><strong>Use Cases</strong>:</p>
<ul>
<li>Financial transactions and accounting systems</li>
<li>Inventory management with stock tracking</li>
<li>Audit logs and compliance systems</li>
<li>Critical infrastructure control systems</li>
</ul>
<p><strong>Configuration</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Default consistency model</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">default_model</span><span class="p">:</span><span class="w"> </span><span class="s2">"strong"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Strong consistency settings</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strong</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Use synchronous replication</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_mode</span><span class="p">:</span><span class="w"> </span><span class="s2">"synchronous"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Require acknowledgment from majority</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"majority"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Read from leader only</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_from</span><span class="p">:</span><span class="w"> </span><span class="s2">"leader"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Timeout for consistency operations</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">5000</span><span class="w">
</span></span></span></code></pre></div><p><strong>Example Usage</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">This</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">uses</span><span class="w"> </span><span class="py">strong</span><span class="w"> </span><span class="py">consistency</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">default</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">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">account</span><span class="p">:</span><span class="nc">Account</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">$from_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SET</span><span class="w"> </span><span class="py">account</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">account</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nv">$amount</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">dest</span><span class="p">:</span><span class="nc">Account</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">$to_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SET</span><span class="w"> </span><span class="py">dest</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">dest</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="nv">$amount</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">t</span><span class="p">:</span><span class="nc">Transaction</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="nv">$tx_id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">amount</span><span class="p">:</span><span class="w"> </span><span class="nv">$amount</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">account</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">SENT</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">t</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">t</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECEIVED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">dest</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="py">COMMIT</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="eventual-consistency" class="position-relative d-flex align-items-center group">
<span>Eventual Consistency</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="eventual-consistency"
aria-haspopup="dialog"
aria-label="Share link: Eventual Consistency">
<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>Eventual consistency guarantees that if no new updates are made, all replicas will eventually converge to the same state. This model provides high availability and performance at the cost of temporary inconsistencies.</p>
<p><strong>Use Cases</strong>:</p>
<ul>
<li>Social media feeds and timelines</li>
<li>Analytics and reporting systems</li>
<li>Content delivery and caching</li>
<li>Collaborative editing with conflict resolution</li>
</ul>
<p><strong>Configuration</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">default_model</span><span class="p">:</span><span class="w"> </span><span class="s2">"eventual"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">eventual</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Maximum staleness tolerance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_staleness_ms</span><span class="p">:</span><span class="w"> </span><span class="m">1000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Asynchronous replication</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_mode</span><span class="p">:</span><span class="w"> </span><span class="s2">"asynchronous"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Read from any replica</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_from</span><span class="p">:</span><span class="w"> </span><span class="s2">"any"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Anti-entropy interval</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">anti_entropy_interval_ms</span><span class="p">:</span><span class="w"> </span><span class="m">60000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Conflict resolution strategy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">conflict_resolution</span><span class="p">:</span><span class="w"> </span><span class="s2">"last_write_wins"</span><span class="w">
</span></span></span></code></pre></div><p><strong>Example Usage</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">eventual</span><span class="w"> </span><span class="py">consistency</span><span class="w"> </span><span class="py">tolerance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">POSTED</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">Post</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$user_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">24</span><span class="err">'</span><span class="w"> </span><span class="py">HOUR</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">content</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created</span><span class="p">,</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">consistency</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">eventual</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">max_staleness</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">5s</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="causal-consistency" class="position-relative d-flex align-items-center group">
<span>Causal Consistency</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="causal-consistency"
aria-haspopup="dialog"
aria-label="Share link: Causal Consistency">
<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>Causal consistency ensures that causally related operations are seen in the same order by all nodes, while allowing concurrent operations to be seen in different orders. This model is ideal for maintaining meaningful ordering without sacrificing performance.</p>
<p><strong>Use Cases</strong>:</p>
<ul>
<li>Comment threads and discussions</li>
<li>Event sourcing systems</li>
<li>Distributed workflow engines</li>
<li>Real-time collaboration systems</li>
</ul>
<p><strong>Configuration</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">default_model</span><span class="p">:</span><span class="w"> </span><span class="s2">"causal"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">causal</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Track causality using vector clocks</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">causality_tracking</span><span class="p">:</span><span class="w"> </span><span class="s2">"vector_clocks"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Session guarantees</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">session_guarantees</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_your_writes</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">monotonic_reads</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">monotonic_writes</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">writes_follow_reads</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Maximum causality chain length</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_chain_length</span><span class="p">:</span><span class="w"> </span><span class="m">1000</span><span class="w">
</span></span></span></code></pre></div><p><strong>Example Usage</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">Causal</span><span class="w"> </span><span class="py">consistency</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">comment</span><span class="w"> </span><span class="py">thread</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="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">ISOLATION</span><span class="w"> </span><span class="py">LEVEL</span><span class="w"> </span><span class="py">CAUSAL</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">parent</span><span class="w"> </span><span class="py">comment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">parent</span><span class="p">:</span><span class="nc">Comment</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="nv">$parent_id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">content</span><span class="p">:</span><span class="w"> </span><span class="nv">$parent_content</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="err">;</span><span class="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">reply</span><span class="w"> </span><span class="p">(</span><span class="py">causally</span><span class="w"> </span><span class="py">dependent</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">parent</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">reply</span><span class="p">:</span><span class="nc">Comment</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="nv">$reply_id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">content</span><span class="p">:</span><span class="w"> </span><span class="nv">$reply_content</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">timestamp</span><span class="p">:</span><span class="w"> </span><span class="nc">current_timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">reply</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">REPLY_TO</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">parent</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="py">COMMIT</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">All</span><span class="w"> </span><span class="py">readers</span><span class="w"> </span><span class="py">will</span><span class="w"> </span><span class="py">see</span><span class="w"> </span><span class="py">parent</span><span class="w"> </span><span class="py">before</span><span class="w"> </span><span class="py">reply</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">parent</span><span class="p">:</span><span class="nc">Comment</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">REPLY_TO</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">reply</span><span class="p">:</span><span class="nc">Comment</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">parent</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$parent_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">parent</span><span class="p">,</span><span class="w"> </span><span class="py">reply</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">consistency</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">causal</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="tunable-consistency" class="position-relative d-flex align-items-center group">
<span>Tunable Consistency</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="tunable-consistency"
aria-haspopup="dialog"
aria-label="Share link: Tunable Consistency">
<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>Tunable consistency allows per-operation control over consistency guarantees, enabling applications to optimize the consistency-performance trade-off for each operation.</p>
<p><strong>Configuration</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Enable tunable consistency</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tunable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Define consistency levels</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">levels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">critical</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"all"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"quorum"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">10000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">standard</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"quorum"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"one"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">5000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">relaxed</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"one"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="s2">"one"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="m">1000</span><span class="w">
</span></span></span></code></pre></div><p><strong>Example Usage</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">Critical</span><span class="w"> </span><span class="py">write</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">strong</span><span class="w"> </span><span class="py">guarantees</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">order</span><span class="p">:</span><span class="nc">Order</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">$order_id</span><span class="p">,</span><span class="w"> </span><span class="nc">status</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">pending</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">consistency_level</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">critical</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">Standard</span><span class="w"> </span><span class="py">read</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">display</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">order</span><span class="p">:</span><span class="nc">Order</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">$order_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">order</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">consistency_level</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">standard</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">Relaxed</span><span class="w"> </span><span class="py">read</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">analytics</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">order</span><span class="p">:</span><span class="nc">Order</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">order</span><span class="err">.</span><span class="py">created</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">1</span><span class="err">'</span><span class="w"> </span><span class="py">DAY</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">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">daily_orders</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">consistency_level</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">relaxed</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="session-guarantees" class="position-relative d-flex align-items-center group">
<span>Session Guarantees</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="session-guarantees"
aria-haspopup="dialog"
aria-label="Share link: Session Guarantees">
<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>Session guarantees provide consistency within a client session, ensuring predictable behavior across multiple operations.</p>
<h4 id="read-your-writes" class="position-relative d-flex align-items-center group">
<span>Read-Your-Writes</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="read-your-writes"
aria-haspopup="dialog"
aria-label="Share link: Read-Your-Writes">
<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>Guarantees that a client always sees its own writes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">session_guarantees</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_your_writes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Track writes per session</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tracking</span><span class="p">:</span><span class="w"> </span><span class="s2">"session_based"</span><span class="w">
</span></span></span></code></pre></div><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">Write</span><span class="w"> </span><span class="py">operation</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">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="w"> </span><span class="nc">name</span><span class="p">:</span><span class="w"> </span><span class="nv">$name</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">session_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$session_id</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Immediate</span><span class="w"> </span><span class="py">read</span><span class="w"> </span><span class="py">sees</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">write</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTION</span><span class="w"> </span><span class="p">(</span><span class="py">session_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$session_id</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Always</span><span class="w"> </span><span class="py">returns</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">created</span><span class="w"> </span><span class="py">user</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="monotonic-reads" class="position-relative d-flex align-items-center group">
<span>Monotonic Reads</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="monotonic-reads"
aria-haspopup="dialog"
aria-label="Share link: Monotonic Reads">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Ensures that successive reads return increasingly up-to-date data:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">session_guarantees</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">monotonic_reads</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Use read timestamps</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mechanism</span><span class="p">:</span><span class="w"> </span><span class="s2">"read_timestamps"</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="monotonic-writes" class="position-relative d-flex align-items-center group">
<span>Monotonic Writes</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="monotonic-writes"
aria-haspopup="dialog"
aria-label="Share link: Monotonic Writes">
<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>Guarantees that writes from a session are applied in order:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">session_guarantees</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">monotonic_writes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Order writes per session</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ordering</span><span class="p">:</span><span class="w"> </span><span class="s2">"session_sequence"</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="consistency-and-transactions" class="position-relative d-flex align-items-center group">
<span>Consistency and Transactions</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="consistency-and-transactions"
aria-haspopup="dialog"
aria-label="Share link: Consistency and Transactions">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="acid-properties" class="position-relative d-flex align-items-center group">
<span>ACID Properties</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"
aria-haspopup="dialog"
aria-label="Share link: ACID Properties">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode transactions provide full ACID guarantees:</p>
<p><strong>Atomicity</strong>: All operations in a transaction succeed or fail together.</p>
<p><strong>Consistency</strong>: Transactions move the database from one valid state to another.</p>
<p><strong>Isolation</strong>: Concurrent transactions don’t interfere with each other.</p>
<p><strong>Durability</strong>: Committed transactions are permanently stored.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">transactions</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Isolation levels</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">isolation</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">default_level</span><span class="p">:</span><span class="w"> </span><span class="s2">"serializable"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">levels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">read_uncommitted</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">read_committed</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">repeatable_read</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">snapshot</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">serializable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Durability settings</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">durability</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Sync to disk before commit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">fsync_mode</span><span class="p">:</span><span class="w"> </span><span class="s2">"always"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Write-ahead logging</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">wal</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">sync_mode</span><span class="p">:</span><span class="w"> </span><span class="s2">"synchronous"</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="transaction-isolation-levels" class="position-relative d-flex align-items-center group">
<span>Transaction Isolation Levels</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="transaction-isolation-levels"
aria-haspopup="dialog"
aria-label="Share link: Transaction Isolation Levels">
<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>Configure isolation level for consistency guarantees:</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">Serializable</span><span class="w"> </span><span class="py">isolation</span><span class="w"> </span><span class="p">(</span><span class="py">strongest</span><span class="p">)</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="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">ISOLATION</span><span class="w"> </span><span class="py">LEVEL</span><span class="w"> </span><span class="py">SERIALIZABLE</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Account</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SET</span><span class="w"> </span><span class="py">a</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">a</span><span class="err">.</span><span class="py">balance</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="nv">$amount</span><span class="err">;</span><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></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Snapshot</span><span class="w"> </span><span class="py">isolation</span><span class="w"> </span><span class="p">(</span><span class="py">good</span><span class="w"> </span><span class="py">performance</span><span class="p">)</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="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">ISOLATION</span><span class="w"> </span><span class="py">LEVEL</span><span class="w"> </span><span class="py">SNAPSHOT</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">f</span><span class="p">)</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">follower_count</span><span class="err">;</span><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></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Read</span><span class="w"> </span><span class="py">committed</span><span class="w"> </span><span class="p">(</span><span class="py">minimal</span><span class="w"> </span><span class="py">locking</span><span class="p">)</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="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">ISOLATION</span><span class="w"> </span><span class="py">LEVEL</span><span class="w"> </span><span class="py">READ</span><span class="w"> </span><span class="py">COMMITTED</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">price</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">inventory</span><span class="err">;</span><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></code></pre></div>
<h3 id="quorum-based-consistency" class="position-relative d-flex align-items-center group">
<span>Quorum-Based Consistency</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="quorum-based-consistency"
aria-haspopup="dialog"
aria-label="Share link: Quorum-Based Consistency">
<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 uses quorum mechanisms to balance consistency and availability:</p>
<h4 id="read-and-write-quorums" class="position-relative d-flex align-items-center group">
<span>Read and Write Quorums</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="read-and-write-quorums"
aria-haspopup="dialog"
aria-label="Share link: Read and Write Quorums">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">quorum</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Number of replicas</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_factor</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Write quorum (W)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Read quorum (R)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Ensure W + R > N for strong consistency</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">validate_quorum</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div><p><strong>Strong Consistency</strong>: Set <code>W + R > N</code> where N is replication factor.</p>
<p><strong>High Availability</strong>: Set <code>W + R ≤ N</code> for better availability.</p>
<h4 id="quorum-configuration-examples" class="position-relative d-flex align-items-center group">
<span>Quorum Configuration Examples</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="quorum-configuration-examples"
aria-haspopup="dialog"
aria-label="Share link: Quorum Configuration Examples">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Strong consistency (W=3, R=1, N=3)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># All writes must succeed before acknowledgment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Reads always return latest data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">strong_consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_factor</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Balanced (W=2, R=2, N=3)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Tolerates one node failure</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Strong consistency with good performance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">balanced</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_factor</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># High availability (W=1, R=1, N=3)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Tolerates two node failures</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Eventual consistency</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">high_availability</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_factor</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">write_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">read_quorum</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="conflict-resolution" class="position-relative d-flex align-items-center group">
<span>Conflict Resolution</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="conflict-resolution"
aria-haspopup="dialog"
aria-label="Share link: Conflict Resolution">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>When eventual consistency allows conflicts, Geode provides resolution strategies:</p>
<h4 id="last-write-wins-lww" class="position-relative d-flex align-items-center group">
<span>Last-Write-Wins (LWW)</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="last-write-wins-lww"
aria-haspopup="dialog"
aria-label="Share link: Last-Write-Wins (LWW)">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">conflict_resolution</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="s2">"last_write_wins"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Use logical clocks for ordering</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timestamp_source</span><span class="p">:</span><span class="w"> </span><span class="s2">"hybrid_logical_clock"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Conflict detection window</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">detection_window_ms</span><span class="p">:</span><span class="w"> </span><span class="m">1000</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="multi-value-registers" class="position-relative d-flex align-items-center group">
<span>Multi-Value Registers</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="multi-value-registers"
aria-haspopup="dialog"
aria-label="Share link: Multi-Value Registers">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Keep all conflicting values and let application resolve:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">conflict_resolution</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="s2">"multi_value"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Maximum concurrent values to track</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_values</span><span class="p">:</span><span class="w"> </span><span class="m">10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Expose conflicts to application</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expose_conflicts</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="custom-conflict-resolution" class="position-relative d-flex align-items-center group">
<span>Custom Conflict Resolution</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="custom-conflict-resolution"
aria-haspopup="dialog"
aria-label="Share link: Custom Conflict Resolution">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">consistency</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">conflict_resolution</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">strategy</span><span class="p">:</span><span class="w"> </span><span class="s2">"custom"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># User-defined resolution function</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resolver</span><span class="p">:</span><span class="w"> </span><span class="s2">"merge_by_priority"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Conflict resolution metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metadata_properties</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">priority</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">source_node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">timestamp</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="monitoring-consistency" class="position-relative d-flex align-items-center group">
<span>Monitoring Consistency</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="monitoring-consistency"
aria-haspopup="dialog"
aria-label="Share link: Monitoring Consistency">
<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="consistency-metrics" class="position-relative d-flex align-items-center group">
<span>Consistency Metrics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="consistency-metrics"
aria-haspopup="dialog"
aria-label="Share link: Consistency Metrics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Track consistency-related metrics:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">monitoring</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">consistency_metrics</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Metrics to collect</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metrics</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">replication_lag_ms</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">consistency_violations_total</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">quorum_failures_total</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">conflict_resolutions_total</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">stale_reads_total</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">transaction_aborts_by_isolation_level</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c"># Export to Prometheus</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">prometheus</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">9090</span><span class="w">
</span></span></span></code></pre></div><p>Key metrics to monitor:</p>
<ul>
<li><code>geode_replication_lag_ms</code>: Time lag between primary and replicas</li>
<li><code>geode_consistency_violations_total</code>: Detected consistency violations</li>
<li><code>geode_quorum_failures_total</code>: Failed quorum operations</li>
<li><code>geode_stale_reads_total</code>: Reads that returned stale data</li>
<li><code>geode_transaction_conflicts_total</code>: Transaction conflicts</li>
</ul>
<h4 id="consistency-verification" class="position-relative d-flex align-items-center group">
<span>Consistency Verification</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="consistency-verification"
aria-haspopup="dialog"
aria-label="Share link: Consistency Verification">
<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>Verify consistency across replicas:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check replica consistency</span>
</span></span><span class="line"><span class="cl">geode consistency verify <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --graph<span class="o">=</span>production <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --sample-rate<span class="o">=</span>0.1 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --report<span class="o">=</span>consistency-report.json
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Measure replication lag</span>
</span></span><span class="line"><span class="cl">geode consistency lag <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --graph<span class="o">=</span>production <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --interval<span class="o">=</span>10s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Detect consistency violations</span>
</span></span><span class="line"><span class="cl">geode consistency detect-violations <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --graph<span class="o">=</span>production <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --window<span class="o">=</span>1h
</span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="choosing-consistency-models" class="position-relative d-flex align-items-center group">
<span>Choosing Consistency Models</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="choosing-consistency-models"
aria-haspopup="dialog"
aria-label="Share link: Choosing Consistency Models">
<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>
<p><strong>Default to Strong Consistency</strong>: Use strong consistency unless you have specific performance requirements and can tolerate stale reads.</p>
</li>
<li>
<p><strong>Use Eventual Consistency for Analytics</strong>: Read-heavy analytical queries can often tolerate eventual consistency for better performance.</p>
</li>
<li>
<p><strong>Apply Causal Consistency for Ordering</strong>: When operation ordering matters but strict consistency is not required, use causal consistency.</p>
</li>
<li>
<p><strong>Tune Per-Operation</strong>: Use tunable consistency to optimize critical paths while relaxing guarantees for non-critical operations.</p>
</li>
</ol>
<h4 id="configuration-guidelines" class="position-relative d-flex align-items-center group">
<span>Configuration Guidelines</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="configuration-guidelines"
aria-haspopup="dialog"
aria-label="Share link: Configuration Guidelines">
<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><ul>
<li>Start with strong consistency and relax only when necessary</li>
<li>Monitor replication lag and set appropriate staleness thresholds</li>
<li>Configure session guarantees for multi-operation workflows</li>
<li>Use appropriate isolation levels for transaction workloads</li>
<li>Set quorum values based on availability requirements</li>
</ul>
<h4 id="testing-consistency" class="position-relative d-flex align-items-center group">
<span>Testing Consistency</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="testing-consistency"
aria-haspopup="dialog"
aria-label="Share link: Testing Consistency">
<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"># Inject delays to test eventual consistency</span>
</span></span><span class="line"><span class="cl">geode consistency <span class="nb">test</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --scenario<span class="o">=</span>delayed_replication <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --delay-ms<span class="o">=</span><span class="m">1000</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --duration<span class="o">=</span>5m
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Simulate network partitions</span>
</span></span><span class="line"><span class="cl">geode consistency <span class="nb">test</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --scenario<span class="o">=</span>network_partition <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --partition-nodes<span class="o">=</span>node1,node2
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Verify ACID properties</span>
</span></span><span class="line"><span class="cl">geode consistency <span class="nb">test</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --scenario<span class="o">=</span>acid_compliance <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --isolation-level<span class="o">=</span>serializable
</span></span></code></pre></div>
<h3 id="troubleshooting" class="position-relative d-flex align-items-center group">
<span>Troubleshooting</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="troubleshooting"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="common-consistency-issues" class="position-relative d-flex align-items-center group">
<span>Common Consistency Issues</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="common-consistency-issues"
aria-haspopup="dialog"
aria-label="Share link: Common Consistency Issues">
<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>Stale Reads</strong>: Clients reading outdated data.</p>
<p><em>Solution</em>: Increase read quorum, reduce staleness tolerance, or use strong consistency.</p>
<p><strong>Replication Lag</strong>: Replicas falling behind primary.</p>
<p><em>Solution</em>: Increase replication bandwidth, reduce write throughput, or add more replicas.</p>
<p><strong>Quorum Failures</strong>: Unable to achieve quorum for operations.</p>
<p><em>Solution</em>: Reduce quorum requirements, add more nodes, or investigate network issues.</p>
<p><strong>Transaction Conflicts</strong>: High abort rates due to conflicts.</p>
<p><em>Solution</em>: Reduce transaction scope, use optimistic locking, or adjust isolation level.</p>
<h4 id="diagnostic-queries" class="position-relative d-flex align-items-center group">
<span>Diagnostic Queries</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="diagnostic-queries"
aria-haspopup="dialog"
aria-label="Share link: Diagnostic Queries">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">replication</span><span class="w"> </span><span class="py">status</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">dbms</span><span class="err">.</span><span class="py">cluster</span><span class="err">.</span><span class="py">replication_status</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">YIELD</span><span class="w"> </span><span class="py">node_id</span><span class="p">,</span><span class="w"> </span><span class="py">lag_ms</span><span class="p">,</span><span class="w"> </span><span class="py">status</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">View</span><span class="w"> </span><span class="py">active</span><span class="w"> </span><span class="py">transactions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">dbms</span><span class="err">.</span><span class="py">transactions</span><span class="err">.</span><span class="py">list</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">YIELD</span><span class="w"> </span><span class="py">transaction_id</span><span class="p">,</span><span class="w"> </span><span class="py">isolation_level</span><span class="p">,</span><span class="w"> </span><span class="py">start_time</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">Check</span><span class="w"> </span><span class="py">consistency</span><span class="w"> </span><span class="py">configuration</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">dbms</span><span class="err">.</span><span class="py">config</span><span class="err">.</span><span class="py">get</span><span class="p">(</span><span class="err">'</span><span class="py">consistency</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">YIELD</span><span class="w"> </span><span class="py">key</span><span class="p">,</span><span class="w"> </span><span class="py">value</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="cap-theorem-considerations" class="position-relative d-flex align-items-center group">
<span>CAP Theorem Considerations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="cap-theorem-considerations"
aria-haspopup="dialog"
aria-label="Share link: CAP Theorem Considerations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>In distributed systems, the CAP theorem states you can have at most two of:</p>
<ul>
<li><strong>Consistency</strong>: All nodes see the same data</li>
<li><strong>Availability</strong>: All requests receive a response</li>
<li><strong>Partition Tolerance</strong>: System continues despite network partitions</li>
</ul>
<p>Geode’s consistency models map to CAP choices:</p>
<p><strong>Strong Consistency (CP)</strong>: Prioritizes consistency and partition tolerance, may sacrifice availability during partitions.</p>
<p><strong>Eventual Consistency (AP)</strong>: Prioritizes availability and partition tolerance, allows temporary inconsistencies.</p>
<p><strong>Tunable Consistency</strong>: Allows per-operation trade-offs between CP and AP.</p>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/tags/clustering/"
>Clustering</a>
- Database clustering and multi-node deployment</li>
<li><a
href="/tags/replication/"
>Replication</a>
- Data replication strategies</li>
<li><a
href="/tags/transactions/"
>Transactions</a>
- Transaction management and ACID properties</li>
<li><a
href="/tags/performance/"
>Performance</a>
- Performance optimization</li>
</ul>
<h3 id="further-reading" class="position-relative d-flex align-items-center group">
<span>Further Reading</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="further-reading"
aria-haspopup="dialog"
aria-label="Share link: Further Reading">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/docs/architecture/distributed-architecture/"
>Distributed Architecture</a>
- Distributed systems design</li>
<li><a
href="/docs/transactions/advanced-patterns/"
>Transaction Patterns</a>
- Advanced transaction usage</li>
<li><a
href="/docs/architecture/distributed-systems/"
>Distributed Systems</a>
- Distributed systems architecture</li>
</ul>
Related Articles
No articles found with this tag yet.
Back to Home