<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luis M</title>
    <description>The latest articles on DEV Community by Luis M (@synapcores).</description>
    <link>https://dev.to/synapcores</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2755752%2Fdd461b87-63a4-40f2-ba19-59333b8f06e0.jpg</url>
      <title>DEV Community: Luis M</title>
      <link>https://dev.to/synapcores</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/synapcores"/>
    <language>en</language>
    <item>
      <title>GraphRAG vs Neo4j: Which Do You Actually Need?</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 11 Oct 2026 01:40:46 +0000</pubDate>
      <link>https://dev.to/synapcores/graphrag-vs-neo4j-which-do-you-actually-need-3ln1</link>
      <guid>https://dev.to/synapcores/graphrag-vs-neo4j-which-do-you-actually-need-3ln1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj7cnsa499buehcoodi0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj7cnsa499buehcoodi0k.png" alt="GraphRAG is a retrieval pattern; Neo4j is a graph database. Different layers." width="539" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The comparison in the title is one I've been asked maybe twenty times in the last six months, and the framing is wrong every time. &lt;strong&gt;GraphRAG and Neo4j aren't competitors.&lt;/strong&gt; GraphRAG is a &lt;em&gt;retrieval pattern&lt;/em&gt; — a way of combining vector similarity with graph traversal to feed better context into an LLM. Neo4j is a &lt;em&gt;graph database&lt;/em&gt; — a piece of infrastructure where you store and query graphs. You can implement GraphRAG on Neo4j. You can also implement it on SynapCores, on Postgres+Apache AGE, on TigerGraph, or on a custom engine. The right question isn't "which one wins" — it's "for my workload, what's the right architecture?"&lt;/p&gt;

&lt;p&gt;This post is that decision. I'll walk through what Neo4j is genuinely excellent at, what implementing GraphRAG on top of it looks like, where the dual-store sync cost (Neo4j + vector DB) starts to hurt, and when a unified engine is the better choice. The examples use SynapCores SQLv2 for the unified-engine side and Cypher for the Neo4j side. The conclusion isn't "pick SynapCores" — it's "pick the architecture that matches your operational appetite."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Already leaning toward "unified engine"?&lt;/strong&gt; SynapCores runs vector search, graph traversal, and GraphRAG in one self-hosted binary — no second database to keep in sync. &lt;a href="https://synapcores.com/download" rel="noopener noreferrer"&gt;Try the free Community Edition →&lt;/a&gt; or &lt;a href="https://synapcores.com/demos" rel="noopener noreferrer"&gt;see it running GraphRAG live →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Neo4j is
&lt;/h2&gt;

&lt;p&gt;Neo4j is the dominant native graph database. It was the first commercially successful one, it invented or popularized Cypher (the graph query language that most other engines now speak), and it has fifteen-plus years of production deployments behind it. The data model is property graphs — typed nodes with properties, typed edges with properties — and the query language is among the most ergonomic any database has ever shipped.&lt;/p&gt;

&lt;p&gt;What Neo4j does excellently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native property-graph storage.&lt;/strong&gt; Indexes on labels, properties, relationships. Designed for graphs, not retrofitted from rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cypher.&lt;/strong&gt; The query language is genuinely good. &lt;code&gt;MATCH (a)-[r:KNOWS]-&amp;gt;(b) WHERE a.name = 'Alice' RETURN b&lt;/code&gt; is the right level of abstraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mature traversal performance.&lt;/strong&gt; Multi-hop walks at millisecond latency on graphs of hundreds of millions of nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production tooling.&lt;/strong&gt; Clustering, backups, multi-tenancy, monitoring. The boring stuff is solved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The ecosystem.&lt;/strong&gt; Graph data science library, visualization tools (Bloom, Neo4j Browser), integrations with everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What Neo4j doesn't do natively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector search.&lt;/strong&gt; Neo4j added vector indexes in 5.11 (~2023). They work. They are not at parity with dedicated vector databases for high-recall workloads at scale. If your vectors are the primary access pattern, Neo4j's vector index is the secondary citizen of the engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM integration.&lt;/strong&gt; No &lt;code&gt;GENERATE()&lt;/code&gt; function inside Cypher. You call out to Python/LangChain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relational joins at scale.&lt;/strong&gt; Neo4j is great at graph traversals; it's not optimized for "JOIN three tables on big indexed keys."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AutoML or in-DB training.&lt;/strong&gt; Out of scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a knock. Neo4j is a graph database. It does graphs. The tradeoff is that everything &lt;em&gt;not&lt;/em&gt; graph (vectors, LLMs, ML training) lives somewhere else — and you become responsible for keeping those somewhere-elses in sync with Neo4j.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GraphRAG is
&lt;/h2&gt;

&lt;p&gt;GraphRAG is a retrieval pattern, not a piece of software. The pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Embed the user's question.&lt;/li&gt;
&lt;li&gt;Find the top-k chunks (or nodes) by vector similarity.&lt;/li&gt;
&lt;li&gt;Walk the graph N hops out from those seeds along typed edges.&lt;/li&gt;
&lt;li&gt;Feed the resulting subgraph (chunks + nodes + edges) into the LLM context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can read the long-form on this in &lt;a href="https://synapcores.com/blog/what-is-graphrag" rel="noopener noreferrer"&gt;What Is GraphRAG?&lt;/a&gt; and the cluster-comparison in &lt;a href="https://synapcores.com/blog/graphrag-vs-traditional-rag" rel="noopener noreferrer"&gt;GraphRAG vs Traditional RAG&lt;/a&gt;. The relevant point for this post: &lt;strong&gt;GraphRAG requires a vector index AND a graph engine.&lt;/strong&gt; Two capabilities. How you provision them is the architectural decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing GraphRAG on Neo4j (the multi-store path)
&lt;/h2&gt;

&lt;p&gt;The most common architecture for GraphRAG on Neo4j is the &lt;em&gt;dual-store&lt;/em&gt; pattern: Neo4j for the graph, a separate vector database (Pinecone, Chroma, Weaviate, pgvector) for the embeddings.&lt;/p&gt;

&lt;p&gt;The flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User question
    -&amp;gt; embed via OpenAI/sentence-transformers
    -&amp;gt; top-k vector search in Pinecone
    -&amp;gt; get node IDs back
    -&amp;gt; Cypher query in Neo4j: MATCH (n) WHERE n.id IN [...] -[*1..2]- ()
    -&amp;gt; assemble chunks + subgraph
    -&amp;gt; stuff into LLM context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code-wise (Python + LangChain-ish pseudocode):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Step 1: vector search
&lt;/span&gt;&lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pinecone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;seed_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Step 2: graph traversal in Neo4j
&lt;/span&gt;&lt;span class="n"&gt;cypher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
MATCH (n:Chunk) WHERE n.id IN $ids
MATCH (n)-[r*1..2]-(m)
RETURN n, r, m
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="n"&gt;subgraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;neo4j&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cypher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;seed_ids&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 3: feed to LLM
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;format_subgraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subgraph&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Context:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works. It's the canonical pattern, and there's nothing wrong with it on a small scale. Neo4j's vector index is also an option — keeps everything in one engine, gives up some vector-search performance, simplifies operations. Both are valid.&lt;/p&gt;

&lt;p&gt;The cost shows up at scale. Specifically:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Two stores, one source of truth (sort of)
&lt;/h3&gt;

&lt;p&gt;Every node in Neo4j has a corresponding vector in Pinecone. When the node's content changes, both stores need to update. The write path becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_chunk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new_content&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;new_emb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;pinecone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;([(&lt;/span&gt;&lt;span class="n"&gt;chunk_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new_emb&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;
    &lt;span class="n"&gt;neo4j&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MATCH (n:Chunk {id: $id}) SET n.content = $c&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two writes, no transaction across them. If the Pinecone write succeeds and the Neo4j write fails (or vice versa), you have drift. Every team I've seen running this pattern at scale has built some kind of reconciliation job — usually as a nightly cron — to scan for divergence. The reconciliation works. It's tax.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Two operational footprints
&lt;/h3&gt;

&lt;p&gt;Neo4j has its own cluster topology, backup story, monitoring story, version cadence, IAM model. Pinecone (or your chosen vector DB) has another. Your on-call rotation now covers two clusters. Your DR plan covers two clusters. Your version bumps are coordinated.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The retrieval round-trip
&lt;/h3&gt;

&lt;p&gt;The flow above does two network round-trips per query: app → Pinecone → app → Neo4j → app. At 10ms each, that's 20ms of pure overhead before the LLM is called. This is fixable with batching and connection pooling, but it's a real cost that disappears when both indexes share a process.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Schema divergence
&lt;/h3&gt;

&lt;p&gt;This is the subtle one. Pinecone has a different notion of "filter" than Neo4j has of "property." When you want a hybrid query — "vectors close to X &lt;em&gt;and&lt;/em&gt; nodes connected to Y" — the filtering happens in two places and the semantics don't always line up cleanly. The application becomes the merge layer, which means bugs live in the merge logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing GraphRAG on a unified engine (the single-store path)
&lt;/h2&gt;

&lt;p&gt;The alternative: an engine where the graph and the vector index share storage and the planner. SynapCores does this; so do a few other unified engines now. The same GraphRAG query becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;chunks&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(:&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
  &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;props&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="n"&gt;GRAPH&lt;/span&gt; &lt;span class="k"&gt;MATCH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Chunk&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Entity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recency&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One query. One round-trip. One transaction. The planner picks the order — usually vector seed first, then graph expansion — and fuses the operations. No reconciliation job because there's nothing to reconcile.&lt;/p&gt;

&lt;p&gt;The cost on this side is: the unified engine is younger than Neo4j, has a smaller ecosystem, and (if you've already invested in Neo4j operations) requires switching cost. We're being honest about this in &lt;a href="https://synapcores.com/blog/why-traditional-databases-fail-modern-ai" rel="noopener noreferrer"&gt;Why Traditional Databases Fail Modern AI Workloads&lt;/a&gt; — the unified-engine argument is structural, not "Neo4j bad."&lt;/p&gt;

&lt;h2&gt;
  
  
  A decision matrix
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvk86sdp70acdz36j6rtw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvk86sdp70acdz36j6rtw.png" alt="Decision quadrant: Neo4j vs unified engine by workload weight" width="799" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Real talk, here's how I actually advise teams:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Choose Neo4j + vector DB&lt;/th&gt;
&lt;th&gt;Choose unified engine&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;You're already deeply on Neo4j&lt;/td&gt;
&lt;td&gt;Strong yes&lt;/td&gt;
&lt;td&gt;Switching cost is real&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graphs are the &lt;em&gt;dominant&lt;/em&gt; workload, vectors are a side feature&lt;/td&gt;
&lt;td&gt;Yes — Neo4j is purpose-built&lt;/td&gt;
&lt;td&gt;Unified engine is unnecessary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vectors are dominant, graph is for occasional relationship queries&lt;/td&gt;
&lt;td&gt;Dual-store sync is overkill&lt;/td&gt;
&lt;td&gt;Yes — one engine is simpler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Both vector and graph are equally first-class&lt;/td&gt;
&lt;td&gt;Sync cost real; pay it consciously&lt;/td&gt;
&lt;td&gt;Yes — designed for this case&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greenfield project, no existing investment&lt;/td&gt;
&lt;td&gt;Possible but operationally heavier&lt;/td&gt;
&lt;td&gt;Yes — fewer moving parts on day one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You need mature graph data science library (PageRank at scale, community detection, etc.)&lt;/td&gt;
&lt;td&gt;Yes — Neo4j ecosystem is unmatched here&lt;/td&gt;
&lt;td&gt;Unified engines have less in this area&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You need &lt;code&gt;GENERATE()&lt;/code&gt; and &lt;code&gt;EMBED()&lt;/code&gt; callable from queries&lt;/td&gt;
&lt;td&gt;Need a Python layer&lt;/td&gt;
&lt;td&gt;Native — see &lt;a href="https://synapcores.com/blog/what-is-sqlv2" rel="noopener noreferrer"&gt;SQLv2&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team has graph-DB ops experience&lt;/td&gt;
&lt;td&gt;Strong yes&lt;/td&gt;
&lt;td&gt;Either&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small team without graph-DB ops experience&lt;/td&gt;
&lt;td&gt;Operational tax is high&lt;/td&gt;
&lt;td&gt;Lower tax&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A summary: &lt;strong&gt;Neo4j is the right answer when graphs are the workload.&lt;/strong&gt; A &lt;strong&gt;unified engine is the right answer when AI workloads (vectors + graphs + LLMs) are the workload and you'd rather not assemble five services.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Neo4j genuinely wins, in detail
&lt;/h2&gt;

&lt;p&gt;I want to give Neo4j its due. There are workloads where it's the cleanest choice and where adding a unified engine to the comparison is silly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pure graph workloads.&lt;/strong&gt; Knowledge graphs in life sciences, social network analysis, supply chains. The vector dimension is incidental; the graph is the whole game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph data science.&lt;/strong&gt; GDS library — community detection, centrality algorithms, link prediction, embeddings &lt;em&gt;of&lt;/em&gt; graph nodes (Node2Vec, GraphSAGE). Mature, fast, well-supported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cypher mastery on the team.&lt;/strong&gt; If you have Cypher experts, leaning into Neo4j amortizes that expertise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The ecosystem.&lt;/strong&gt; Bloom for visualization, integrations with every BI tool, a fifteen-year corpus of patterns and conference talks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those bullets describe your project, the dual-store sync cost is a price worth paying. The vector dimension is the secondary concern, not the primary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a unified engine genuinely wins
&lt;/h2&gt;

&lt;p&gt;The flip side. Where I'd default to a unified engine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent memory / GraphRAG as the &lt;em&gt;primary&lt;/em&gt; product feature.&lt;/strong&gt; Both layers (vectors and graph) are first-class. Sync is friction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want LLM calls inside the query.&lt;/strong&gt; &lt;code&gt;GENERATE()&lt;/code&gt; in SQL collapses three round-trips into one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want in-DB ML training.&lt;/strong&gt; &lt;code&gt;CREATE MODEL&lt;/code&gt; + &lt;code&gt;PREDICT()&lt;/code&gt; are first-class — see &lt;a href="https://synapcores.com/blog/what-is-in-database-machine-learning" rel="noopener noreferrer"&gt;What Is In-Database Machine Learning?&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don't have graph-DB ops budget.&lt;/strong&gt; Running one engine is meaningfully cheaper than running two, especially at small team size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency budget is tight on relational queries.&lt;/strong&gt; One round-trip vs two matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A worked migration scenario
&lt;/h2&gt;

&lt;p&gt;Let's say you're already on Neo4j and you're evaluating whether to move to a unified engine. Here's the honest assessment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;If your graph is well under 100M nodes and you have light vector volume:&lt;/strong&gt; the unified engine usually pays back inside a quarter. The sync code you can delete is bigger than the migration cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If your graph is large and graph-native (deep traversals, complex algorithms, GDS dependency):&lt;/strong&gt; stay on Neo4j. Add a vector DB. The unified engine isn't worth the migration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you're net-new and the requirements include both layers:&lt;/strong&gt; start unified. Adopt Neo4j if and when the graph workload outgrows the unified engine.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same advice in one line: &lt;strong&gt;migrate when the sync tax exceeds the migration cost.&lt;/strong&gt; Don't migrate for ideology.&lt;/p&gt;

&lt;h2&gt;
  
  
  How GraphRAG-the-pattern translates between the two
&lt;/h2&gt;

&lt;p&gt;Just to be concrete: the GraphRAG pattern itself is portable. You can implement it on either side. The architectural choice is about &lt;em&gt;the operational shape of the implementation&lt;/em&gt;, not about whether GraphRAG is possible.&lt;/p&gt;

&lt;p&gt;On Neo4j (dual-store):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vector_db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;subgraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;neo4j&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MATCH (n) WHERE n.id IN $ids MATCH (n)-[*1..2]-(m) RETURN ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subgraph&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a unified engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;chunks&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(:&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
  &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;GENERATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Answer using: '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;STRING_AGG&lt;/span&gt;&lt;span class="p"&gt;(...))&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="n"&gt;GRAPH&lt;/span&gt; &lt;span class="k"&gt;MATCH&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Chunk&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same pattern. Different operational story.&lt;/p&gt;

&lt;h3&gt;
  
  
  Want the guided version?
&lt;/h3&gt;

&lt;p&gt;If you'd rather follow a step-by-step build than read pseudocode, we put&lt;br&gt;
together &lt;a href="https://synapcores.com/build-agents" rel="noopener noreferrer"&gt;Build AI Agents with SynapCores&lt;/a&gt; — a runnable&lt;br&gt;
tutorial that goes from importing data, to your first agent in Python, to&lt;br&gt;
your first agent in Node.js, to wiring in exactly this GraphRAG pattern, to&lt;br&gt;
shipping a durable production agent with &lt;code&gt;CREATE AGENT&lt;/code&gt;. Every step runs on&lt;br&gt;
the free Community Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run these GraphRAG patterns yourself
&lt;/h3&gt;

&lt;p&gt;Each is a copy-paste recipe you can run on the free Community Edition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/016_graphrag_qna" rel="noopener noreferrer"&gt;GraphRAG: hybrid vector + graph multi-hop Q&amp;amp;A&lt;/a&gt; — the pattern above, end to end&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/013_money_laundering" rel="noopener noreferrer"&gt;Multi-hop money-laundering layering detection&lt;/a&gt; — graph traversal for AML&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/030_meeting_minutes_kg" rel="noopener noreferrer"&gt;Knowledge graph from meeting minutes&lt;/a&gt; — build the graph from raw text&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/007_supply_chain_impact" rel="noopener noreferrer"&gt;Supply-chain blast radius of a vendor failure&lt;/a&gt; — impact analysis over relationships&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "GraphRAG vs Neo4j" how-to cluster
&lt;/h3&gt;

&lt;p&gt;If you're weighing the two architectures in this post, these five certified how-to&lt;br&gt;
guides make it concrete. Each builds a real GraphRAG use case on a unified engine&lt;br&gt;
with a single &lt;code&gt;[:SIMILAR_TO]&lt;/code&gt; semantic hop plus &lt;code&gt;llm_score&lt;/code&gt; inline ranking — and&lt;br&gt;
shows, side by side, what the &lt;em&gt;same&lt;/em&gt; capability costs on a Neo4j + vector-DB stack&lt;br&gt;
(four systems and a sync job). All certified on Community Edition v1.14.0-ce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/graphrag-vs-neo4j-knowledge-base" rel="noopener noreferrer"&gt;GraphRAG vs Neo4j: a knowledge base that answers multi-hop questions&lt;/a&gt; — &lt;strong&gt;start here&lt;/strong&gt;, the core pattern end to end&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/graphrag-vs-neo4j-fraud-ring-detection" rel="noopener noreferrer"&gt;Fraud-ring detection across accounts, devices, and behavior&lt;/a&gt; — catch collusion single-account rules miss&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/graphrag-vs-neo4j-supply-chain-impact" rel="noopener noreferrer"&gt;Supply-chain impact analysis and part substitution&lt;/a&gt; — "what breaks if this supplier fails, and what substitutes?"&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/graphrag-vs-neo4j-customer-360-qa" rel="noopener noreferrer"&gt;A customer-360 knowledge graph that recommends the next action&lt;/a&gt; — account context + similar resolved cases&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/graphrag-vs-neo4j-product-recommendations" rel="noopener noreferrer"&gt;Product recommendations that blend co-purchase and semantics&lt;/a&gt; — cold-start cross-sell in one query&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparing Neo4j with other graph databases?
&lt;/h2&gt;

&lt;p&gt;If you're choosing a graph database rather than a retrieval pattern, these head-to-head comparisons cover the usual shortlist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/compare/dgraph-vs-neo4j" rel="noopener noreferrer"&gt;Dgraph vs Neo4j&lt;/a&gt; — distributed and GraphQL-native vs the mature Cypher standard&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/compare/tigergraph-vs-neo4j" rel="noopener noreferrer"&gt;TigerGraph vs Neo4j&lt;/a&gt; — GSQL, scale-out analytics, and GenAI support&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/compare/redisgraph-vs-neo4j" rel="noopener noreferrer"&gt;FalkorDB vs Neo4j&lt;/a&gt; — low-latency agent memory, and what happened to RedisGraph&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/compare/pgvector-vs-neo4j" rel="noopener noreferrer"&gt;pgvector vs Neo4j&lt;/a&gt; and &lt;a href="https://synapcores.com/compare/pinecone-vs-neo4j" rel="noopener noreferrer"&gt;Pinecone vs Neo4j&lt;/a&gt; — when you need vectors, graph, or both&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/graphrag-vs-neo4j" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>graphrag</category>
      <category>neo4j</category>
      <category>ai</category>
      <category>database</category>
    </item>
    <item>
      <title>Best AI-Native Databases in 2026: 9 Options Compared</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 11 Oct 2026 01:40:42 +0000</pubDate>
      <link>https://dev.to/synapcores/best-ai-native-databases-in-2026-9-options-compared-3opn</link>
      <guid>https://dev.to/synapcores/best-ai-native-databases-in-2026-9-options-compared-3opn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64sa6qhymefc4i78idrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64sa6qhymefc4i78idrq.png" alt="One engine: vector, graph, SQL, AutoML and LLM in a single SynapCores binary" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Best AI-native database" is a search people type with a specific anxiety behind it: the category is new, the marketing is loud, and almost everything claims to be AI-native whether or not the architecture earns the label. This page gives you the short answer first — a shortlist of the nine databases worth evaluating in 2026 and what each is best for — and then the criteria that separate a genuinely AI-native engine from a traditional database wearing the label, so you can decide for your own workload.&lt;/p&gt;

&lt;p&gt;I will be upfront that SynapCores is our engine, so treat that entry accordingly. The criteria, though, are the ones I would give a friend with no stake in the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an AI-native database?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;AI-native database&lt;/strong&gt; is a database where the data models AI applications need — &lt;strong&gt;vectors, graphs, and relational rows&lt;/strong&gt; — and &lt;strong&gt;model inference&lt;/strong&gt; (embeddings, predictions, LLM calls) live inside one engine and one query plan, instead of being spread across a relational database, a vector store, a graph database, and a model server glued together with sync jobs. A database that only "added a vector column" is AI-ready, not AI-native. For the full architecture, see the &lt;a href="https://synapcores.com/blog/ai-native-database-guide" rel="noopener noreferrer"&gt;AI-native database platform guide&lt;/a&gt; and &lt;a href="https://synapcores.com/blog/ai-native-database-architecture" rel="noopener noreferrer"&gt;how the engine is built&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shortlist: best AI-native databases in 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Vector&lt;/th&gt;
&lt;th&gt;Graph&lt;/th&gt;
&lt;th&gt;SQL&lt;/th&gt;
&lt;th&gt;In-database ML&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SynapCores&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified AI-native engine&lt;/td&gt;
&lt;td&gt;One self-hosted engine for vector + graph + SQL + ML, agent memory, MCP&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native (AutoML, &lt;code&gt;EMBED()&lt;/code&gt;, &lt;code&gt;PREDICT()&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostgreSQL + pgvector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relational + extension&lt;/td&gt;
&lt;td&gt;AI as a feature inside an existing Postgres app&lt;/td&gt;
&lt;td&gt;Extension&lt;/td&gt;
&lt;td&gt;Add-on&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;External&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Neo4j&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Graph database&lt;/td&gt;
&lt;td&gt;Graph-centric problems, knowledge graphs&lt;/td&gt;
&lt;td&gt;Secondary&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Cypher&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pinecone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managed vector database&lt;/td&gt;
&lt;td&gt;Fully managed vector search at scale&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Weaviate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector database&lt;/td&gt;
&lt;td&gt;Open-source vector search with hybrid (keyword + vector) search&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Via modules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qdrant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector database&lt;/td&gt;
&lt;td&gt;Fast, filter-heavy vector search, self-hosted or cloud&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Milvus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector database&lt;/td&gt;
&lt;td&gt;Very large-scale vector collections&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MongoDB Atlas Vector Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Document DB + vectors&lt;/td&gt;
&lt;td&gt;Teams already on MongoDB&lt;/td&gt;
&lt;td&gt;Integrated&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;External&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Snowflake (Cortex)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud warehouse + AI functions&lt;/td&gt;
&lt;td&gt;AI over historical analytics data&lt;/td&gt;
&lt;td&gt;Analytical&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Functions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Quick answer — what is the best database for AI-native application development?&lt;/strong&gt; If your hardest queries combine similarity search, relationships, filters, and predictions, a &lt;strong&gt;unified AI-native engine&lt;/strong&gt; such as SynapCores is the lowest-glue option, because one engine answers them in one query. If vector search alone is your whole problem, a dedicated vector database (Pinecone, Qdrant, Weaviate, Milvus) is the right specialist. If AI is a small feature on an existing transactional app, PostgreSQL + pgvector is the pragmatic choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SynapCores&lt;/strong&gt; unifies vector, graph, SQL, and in-database AutoML in a &lt;strong&gt;single self-hosted binary&lt;/strong&gt;, with native &lt;strong&gt;MCP&lt;/strong&gt; support and an &lt;strong&gt;OpenClaw long-term-memory&lt;/strong&gt; plugin. The Community Edition is &lt;strong&gt;free&lt;/strong&gt; for macOS, Linux, and Docker. &lt;strong&gt;&lt;a href="https://synapcores.com/download" rel="noopener noreferrer"&gt;Download the free Community Edition →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on scope.&lt;/strong&gt; Capabilities marked &lt;strong&gt;(Enterprise / roadmap)&lt;/strong&gt; are part of the Enterprise tier or roadmap and are &lt;strong&gt;not in the free Community Edition today&lt;/strong&gt;. Everything unmarked is in the free CE.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What "AI-native" actually has to mean (and what it doesn't)
&lt;/h2&gt;

&lt;p&gt;The label gets diluted because "we added a vector column" is enough for some vendors to claim it. A useful definition is stricter. An AI-native database treats the data models AI workloads need — vectors, graphs, and relational data — as first-class citizens in one engine, and brings model inference inside the database rather than shipping data out to it. We make the negative case in detail in &lt;a href="https://synapcores.com/blog/why-vector-databases-are-not-ai-native-databases" rel="noopener noreferrer"&gt;Why Vector Databases Are Not AI-Native Databases&lt;/a&gt;; the short version is that a single capability, however good, is not the same as an AI-native architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The seven criteria that matter
&lt;/h2&gt;

&lt;p&gt;When you evaluate any candidate, score it honestly against these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unified data models.&lt;/strong&gt; Does it hold vectors, graph, and relational data in one engine, or are you assembling separate stores? One engine means one consistency boundary instead of sync jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native vector search.&lt;/strong&gt; Is approximate-nearest-neighbor indexing (typically &lt;a href="https://synapcores.com/blog/hnsw-explained" rel="noopener noreferrer"&gt;HNSW&lt;/a&gt;) built into the storage and visible to the query planner, or bolted on as an extension?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-database ML.&lt;/strong&gt; Can it train and run models where the data lives — &lt;code&gt;EMBED()&lt;/code&gt;, &lt;code&gt;PREDICT()&lt;/code&gt;, AutoML — or does every prediction require an external pipeline? See &lt;a href="https://synapcores.com/blog/in-database-ml-vs-external-ml-pipelines" rel="noopener noreferrer"&gt;In-Database ML vs External ML Pipelines&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph traversal for GraphRAG.&lt;/strong&gt; Can it walk typed relationships natively, so &lt;a href="https://synapcores.com/blog/what-is-graphrag" rel="noopener noreferrer"&gt;GraphRAG&lt;/a&gt; runs in one engine rather than a dual-store setup?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent and LLM integration.&lt;/strong&gt; Does it speak a standard like &lt;strong&gt;MCP&lt;/strong&gt; so agents can use it as a tool directly, and does it offer durable memory for agentic systems?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment and data control.&lt;/strong&gt; Can you self-host on your own hardware, or are you locked into a managed cloud with consumption pricing? This drives both cost and compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational simplicity.&lt;/strong&gt; How many systems do you actually run in production to deliver the feature — one binary, or five services plus glue?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The landscape, grouped honestly
&lt;/h2&gt;

&lt;p&gt;The field sorts into a few categories, and naming the categories is more useful than a leaderboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dedicated vector databases&lt;/strong&gt; — Pinecone, Weaviate, Qdrant, Chroma, Milvus. Excellent at one thing: high-recall similarity search at scale. They are the right tool when vector search genuinely is your whole problem. They are not AI-native databases by the strict definition, because graph, relational, and in-database ML are out of scope, and you assemble the rest of the stack around them. See &lt;a href="https://synapcores.com/blog/vector-database" rel="noopener noreferrer"&gt;What Is a Vector Database?&lt;/a&gt; for where they fit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relational databases with AI extensions&lt;/strong&gt; — PostgreSQL + pgvector, and similar. The pragmatic choice when AI is a feature at the edge of a transactional app. The cost shows up as you add capabilities and rebuild a multi-store stack one extension at a time, covered in &lt;a href="https://synapcores.com/blog/ai-native-database-vs-postgresql" rel="noopener noreferrer"&gt;AI-Native Database vs PostgreSQL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Graph databases adding vectors&lt;/strong&gt; — Neo4j and peers. Superb for graph-centric problems; the vector and ML sides are secondary, so AI workloads needing more than graph end up dual-store. See &lt;a href="https://synapcores.com/blog/ai-native-database-vs-neo4j" rel="noopener noreferrer"&gt;AI-Native Database vs Neo4j&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud warehouses with AI functions&lt;/strong&gt; — Snowflake, BigQuery and similar. Built for analytics over historical data, not low-latency operational AI in the request path. The distinction is in &lt;a href="https://synapcores.com/blog/ai-native-database-vs-snowflake" rel="noopener noreferrer"&gt;AI-Native Database vs Snowflake&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unified AI-native engines&lt;/strong&gt; — the smallest and newest category, where vector, graph, relational, and in-database ML genuinely share one engine. SynapCores sits here. The trade-off is honest: a unified engine does not match a specialist's depth on that specialist's single axis, but it removes the multi-store assembly problem entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  A scoring table to copy
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Vector DB&lt;/th&gt;
&lt;th&gt;Postgres + ext&lt;/th&gt;
&lt;th&gt;Graph DB&lt;/th&gt;
&lt;th&gt;Cloud warehouse&lt;/th&gt;
&lt;th&gt;Unified AI-native&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unified data models&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial (glue)&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native vector search&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Extension&lt;/td&gt;
&lt;td&gt;Secondary&lt;/td&gt;
&lt;td&gt;Analytical&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-database ML&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;External&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Functions&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph for GraphRAG&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Add-on&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent / MCP integration&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-host / data control&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Systems to operate&lt;/td&gt;
&lt;td&gt;1 of many&lt;/td&gt;
&lt;td&gt;3–5+&lt;/td&gt;
&lt;td&gt;2+&lt;/td&gt;
&lt;td&gt;1 (cloud)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to actually pick
&lt;/h2&gt;

&lt;p&gt;Do not pick from a list — pick from your workload. Write down your two or three hardest queries, the ones that combine similarity, relationships, filters, and maybe a prediction. Score each candidate on how many separate systems it would take to answer them and how much glue you would own. If a specialist answers your whole problem, use the specialist. If your hardest queries cross data models, a unified AI-native engine is usually the lower-total-cost answer, even before you count the milliseconds.&lt;/p&gt;

&lt;p&gt;The cheapest way to test the unified option is to run it. The free Community Edition installs in about 30 seconds and lets you throw your real queries at one binary.&lt;/p&gt;

&lt;p&gt;Start from a working example — each is a runnable recipe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/112_semantic_document_search" rel="noopener noreferrer"&gt;Semantic document search&lt;/a&gt; — vector search in plain SQL&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/graph/016_graphrag_qna" rel="noopener noreferrer"&gt;GraphRAG multi-hop Q&amp;amp;A&lt;/a&gt; — vector + graph in one query&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/anomaly-detection/001_credit_card_fraud_automl" rel="noopener noreferrer"&gt;Credit-card fraud detection with AutoML&lt;/a&gt; — train and predict in-database&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/recipes/agents/agentic-sales-account-research" rel="noopener noreferrer"&gt;Agentic sales account research&lt;/a&gt; — an agent with memory, in SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best AI-native database in 2026?&lt;/strong&gt;&lt;br&gt;
It depends on how many data models your workload crosses. For workloads that combine vectors, graph relationships, relational filters, and in-database ML, a unified AI-native engine like SynapCores replaces a multi-store stack with one binary. For pure similarity search, a dedicated vector database (Pinecone, Qdrant, Weaviate, Milvus) is the specialist choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is a vector database an AI-native database?&lt;/strong&gt;&lt;br&gt;
Not by the strict definition. A vector database is excellent at one capability — similarity search — but graph traversal, relational transactions, and in-database ML are out of scope. See &lt;a href="https://synapcores.com/blog/why-vector-databases-are-not-ai-native-databases" rel="noopener noreferrer"&gt;Why Vector Databases Are Not AI-Native Databases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is PostgreSQL with pgvector AI-native?&lt;/strong&gt;&lt;br&gt;
It is AI-&lt;em&gt;ready&lt;/em&gt;: vectors are an extension on a relational core, and ML runs outside the database. That is often the right pragmatic choice; the trade-offs are in &lt;a href="https://synapcores.com/blog/ai-native-database-vs-postgresql" rel="noopener noreferrer"&gt;AI-Native Database vs PostgreSQL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there an open-source or free AI-native database?&lt;/strong&gt;&lt;br&gt;
Yes. The SynapCores Community Edition is free for macOS, Linux, and Docker and includes unified vector + graph + SQL, in-database AutoML, RAG/GraphRAG, and native MCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is an AI-native relational database?&lt;/strong&gt;&lt;br&gt;
A relational (SQL) database where vector search, graph traversal, and model inference are part of the same engine and query planner — so a single SQL statement can filter rows, rank by similarity, walk relationships, and call a model. That is the design SynapCores follows; see &lt;a href="https://synapcores.com/blog/ai-native-database-architecture" rel="noopener noreferrer"&gt;how the engine is built&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://synapcores.com/download" rel="noopener noreferrer"&gt;Download Free →&lt;/a&gt; · &lt;a href="https://synapcores.com/blog/ai-native-database-guide" rel="noopener noreferrer"&gt;Read the AI-native database platform guide →&lt;/a&gt; · &lt;a href="https://synapcores.com/recipes" rel="noopener noreferrer"&gt;Browse all recipes →&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/best-ai-native-databases-2026" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>ai</category>
      <category>vectordatabase</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Replace Fivetran + Snowflake: MySQL to S3 Parquet Analytics, Self-Hosted</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 11 Oct 2026 01:40:37 +0000</pubDate>
      <link>https://dev.to/synapcores/replace-fivetran-snowflake-mysql-to-s3-parquet-analytics-self-hosted-1lnc</link>
      <guid>https://dev.to/synapcores/replace-fivetran-snowflake-mysql-to-s3-parquet-analytics-self-hosted-1lnc</guid>
      <description>&lt;p&gt;Here is the analytics stack most teams end up with, usually without ever deciding on it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The application writes to &lt;strong&gt;MySQL or PostgreSQL&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;ETL/ELT tool&lt;/strong&gt; — Fivetran, Airbyte Cloud, Stitch — copies those tables into a warehouse, billed by rows moved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snowflake&lt;/strong&gt; (or BigQuery, or Redshift) stores a second copy and bills for every minute a warehouse is running queries.&lt;/li&gt;
&lt;li&gt;Dashboards and analysts query the warehouse.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It works. It is also two vendors, two bills that both grow with your data, and a copy of your production data living on someone else's platform — all to answer questions about data you already own.&lt;/p&gt;

&lt;p&gt;This post shows a shorter path: &lt;strong&gt;export the operational tables to Parquet in your own S3 bucket on a schedule, and query that Parquet in place with plain SQL.&lt;/strong&gt; One self-hosted engine does the export, the scheduling, the verification, and the querying. The engine is SynapCores; the Community Edition is free.&lt;/p&gt;

&lt;p&gt;I'll be upfront about where this fits and where it doesn't — the honest version is at the end, and it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you are actually paying for
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The ETL tool&lt;/strong&gt; charges for moving rows. Fivetran, for example, bills on &lt;em&gt;monthly active rows&lt;/em&gt; — every row inserted, updated, or deleted in a synced table counts. Busy operational tables (orders, events, sessions) are exactly the ones that churn the most rows, so the bill tracks your growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The warehouse&lt;/strong&gt; charges for compute time. On Snowflake, a virtual warehouse burns credits for every second it is running, with a 60-second minimum each time it resumes. An X-Small warehouse uses 1 credit per hour, a Small uses 2, and each size up doubles. Dashboards that refresh every few minutes keep a warehouse awake most of the day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage&lt;/strong&gt; is the cheap part on both sides. The money is in moving the data and in running queries over it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The alternative: MySQL → Parquet in your S3 → SQL, in one engine
&lt;/h2&gt;

&lt;p&gt;SynapCores v2.0 added a data-lake export built into the database:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;connection&lt;/strong&gt; to your MySQL holds the credentials once.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;destination&lt;/strong&gt; points at your S3-compatible bucket (AWS S3, MinIO, Cloudflare R2, Wasabi). The secret is encrypted at rest and never returned by the API.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;job&lt;/strong&gt; exports tables to Parquet on a cron schedule you set — a full &lt;code&gt;snapshot&lt;/code&gt; per run for mutable tables like orders and customers, or &lt;code&gt;incremental&lt;/code&gt; daily partitions for append-only tables like events and logs.&lt;/li&gt;
&lt;li&gt;Each run reports &lt;strong&gt;rows, bytes, peak memory, and exit code&lt;/strong&gt;, and &lt;code&gt;verified_partitions&lt;/code&gt; confirms every file the job claims to have written was &lt;strong&gt;read back&lt;/strong&gt;. No silent half-runs at 3am.&lt;/li&gt;
&lt;li&gt;The Parquet is then &lt;strong&gt;registered as an external SQL table&lt;/strong&gt; and queried in place. No load step, no second copy inside a warehouse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end state looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Parquet in s3://your-bucket/..., exported nightly from MySQL&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders_snap&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'shipped'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;snapshot_dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'2026-10-09'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;region&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;snapshot_dt&lt;/code&gt; is a real partition column, so filtering on it skips whole directories in S3 instead of reading them. Amounts come back as exact &lt;code&gt;DECIMAL&lt;/code&gt;s, and the recipe walks through checking the totals against MySQL to the cent.&lt;/p&gt;

&lt;p&gt;The full, step-by-step setup — engine config, connection, destination, job, run, register, query — is in the recipe: &lt;strong&gt;&lt;a href="https://synapcores.com/recipes/data-lake/001_mysql_table_to_s3_parquet" rel="noopener noreferrer"&gt;Move a MySQL Table to S3 Parquet, Then Query It with SQL&lt;/a&gt;&lt;/strong&gt;. It takes about 20 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it fast enough to replace a warehouse for this?
&lt;/h2&gt;

&lt;p&gt;For the shape of work most teams send to a warehouse from their operational data — filters, scans, joins, rollups for dashboards — querying Parquet in place is fast. In the &lt;a href="https://synapcores.com/blog/v2-0-0-release" rel="noopener noreferrer"&gt;v2.0.0 release&lt;/a&gt; we benchmarked SynapCores against DuckDB on the same Parquet objects in the same bucket:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;SynapCores v2.0&lt;/th&gt;
&lt;th&gt;DuckDB 1.5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scan 189,361 rows of a lake table&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10.1 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;28.6 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Count a join across two lake tables&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5.5 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10.9 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Join returning 176,400 rows&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16.5 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29.1 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;GROUP BY&lt;/code&gt; one text column&lt;/td&gt;
&lt;td&gt;5.0 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.8 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We publish the row we lose: wide &lt;code&gt;GROUP BY&lt;/code&gt; aggregation is still faster on DuckDB. For dashboards and exploratory joins, millisecond answers over your own bucket are realistic.&lt;/p&gt;

&lt;p&gt;Because SynapCores speaks the &lt;strong&gt;MySQL wire protocol&lt;/strong&gt;, many BI tools and drivers that already talk to MySQL can connect to it directly — test yours before you switch.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked cost example
&lt;/h2&gt;

&lt;p&gt;Prices vary by contract, region, and edition, so treat this as a method, not a quote. Plug in your own invoice numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today (ETL + warehouse):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Warehouse compute:&lt;/em&gt; a Small warehouse (2 credits/hour) kept awake ~10 hours a day by dashboards and analysts = &lt;strong&gt;20 credits/day ≈ 600 credits/month&lt;/strong&gt;. At a typical on-demand rate of $2–$4 per credit, that is &lt;strong&gt;$1,200–$2,400/month&lt;/strong&gt; — before any bigger warehouse for month-end reports.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;ETL:&lt;/em&gt; whatever your row-based bill is. Look at your monthly active rows for the busiest tables; it is usually the line item that grows fastest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;With SynapCores CE on your own infrastructure:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Software:&lt;/em&gt; $0 — the Community Edition is free.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Server:&lt;/em&gt; one VM sized for your query load, e.g. 8 vCPU / 32 GB on-demand in a public cloud, roughly &lt;strong&gt;$250–$300/month&lt;/strong&gt;, less with reserved pricing or hardware you already run.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;S3 storage:&lt;/em&gt; about &lt;strong&gt;$23 per TB-month&lt;/strong&gt; on S3 Standard. Parquet is compressed and columnar, so operational tables usually shrink considerably.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Data movement:&lt;/em&gt; the export reads from MySQL and writes to your bucket. Keep the engine in the same region as the bucket to avoid transfer charges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The structural difference is that neither of the big variable costs — rows moved and warehouse minutes — exists anymore. Your cost becomes one server plus storage, and it stops scaling with how often people refresh a dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this fits — and where it doesn't
&lt;/h2&gt;

&lt;p&gt;This is the part to read before you cancel anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It fits well when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your analytics sources are &lt;strong&gt;your own operational databases&lt;/strong&gt; (the MySQL path is the one we have validated end to end).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nightly or scheduled freshness is fine&lt;/strong&gt; — reporting, finance, ops dashboards, analyst exploration.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;small-to-medium number of people&lt;/strong&gt; query the data, not hundreds of concurrent users.&lt;/li&gt;
&lt;li&gt;You want the data in an &lt;strong&gt;open format in your own bucket&lt;/strong&gt;, readable by any Parquet tool, not locked in a vendor's storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Keep the warehouse (or the ETL tool) when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;near-real-time replication&lt;/strong&gt; with change data capture. The export runs on a schedule: &lt;code&gt;snapshot&lt;/code&gt; copies the full table per run, and &lt;code&gt;incremental&lt;/code&gt; mode is for append-only tables — it does not replay updates and deletes.&lt;/li&gt;
&lt;li&gt;You pull from &lt;strong&gt;dozens of SaaS sources&lt;/strong&gt; (Salesforce, HubSpot, Stripe, ad platforms). Connector breadth is what ETL vendors are genuinely good at.&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;high concurrency, data sharing, or fine-grained governance&lt;/strong&gt; across a large organization — that is what a cloud warehouse is built for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plenty of teams land in the middle: move the operational-database analytics — usually the biggest and most predictable part of the bill — to S3 + SynapCores, and keep the warehouse for the cross-source, high-concurrency work. That alone removes most of the rows you pay to move and most of the minutes you pay to query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://synapcores.com/download" rel="noopener noreferrer"&gt;Download the free Community Edition&lt;/a&gt; — macOS, Linux, or Docker.&lt;/li&gt;
&lt;li&gt;Follow the recipe: &lt;a href="https://synapcores.com/recipes/data-lake/001_mysql_table_to_s3_parquet" rel="noopener noreferrer"&gt;MySQL table to S3 Parquet, then query it with SQL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Point one dashboard at the external table and compare the numbers — and the bill — for a month.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Related reading: &lt;a href="https://synapcores.com/blog/ai-native-database-vs-snowflake" rel="noopener noreferrer"&gt;AI-Native Database vs Snowflake&lt;/a&gt; · &lt;a href="https://synapcores.com/blog/v2-0-0-release" rel="noopener noreferrer"&gt;SynapCores v2.0.0 release notes&lt;/a&gt; · &lt;a href="https://synapcores.com/blog/best-ai-native-databases-2026" rel="noopener noreferrer"&gt;Best AI-native databases in 2026&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/replace-fivetran-snowflake-with-s3-parquet" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>snowflake</category>
      <category>mysql</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Using SynapCores as a LlamaIndex Vector Store + Property Graph Store</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Thu, 27 Aug 2026 12:21:24 +0000</pubDate>
      <link>https://dev.to/synapcores/using-synapcores-as-a-llamaindex-vector-store-property-graph-store-47f7</link>
      <guid>https://dev.to/synapcores/using-synapcores-as-a-llamaindex-vector-store-property-graph-store-47f7</guid>
      <description>&lt;p&gt;Most LlamaIndex setups end up with two separate backends once you go beyond plain vector search: a vector store for &lt;code&gt;VectorStoreIndex&lt;/code&gt;, and a separate graph database for &lt;code&gt;PropertyGraphIndex&lt;/code&gt; when you need relationship-aware retrieval (GraphRAG). Two services, two connection strings, two things to keep in sync.&lt;/p&gt;

&lt;p&gt;This is a walkthrough of backing both index types with &lt;a href="https://synapcores.com" rel="noopener noreferrer"&gt;SynapCores&lt;/a&gt; instead — one engine, one connection, both index types.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; synapcores &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AIDB_ACCEPT_LICENSE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; synapcores-data:/var/lib/synapcores &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/synapcores/community:latest

pip &lt;span class="nb"&gt;install &lt;/span&gt;llama-index llama-index-vector-stores-synapcores llama-index-graph-stores-synapcores
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both integration packages are independently published on PyPI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/llama-index-vector-stores-synapcores/" rel="noopener noreferrer"&gt;&lt;code&gt;llama-index-vector-stores-synapcores&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/llama-index-graph-stores-synapcores/" rel="noopener noreferrer"&gt;&lt;code&gt;llama-index-graph-stores-synapcores&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vector store — standard RAG
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;llama_index.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;VectorStoreIndex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StorageContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;llama_index.vector_stores.synapcores&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SynapCoresVectorStore&lt;/span&gt;

&lt;span class="n"&gt;vector_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresVectorStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding_dim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1536&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;storage_context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StorageContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_defaults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector_store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;vector_store&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;docs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SynapCores runs vector search, graph traversal, and SQL in one engine.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;VectorStoreIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;storage_context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;storage_context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;query_engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_query_engine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;query_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What does SynapCores combine into one engine?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vector store implements the full &lt;code&gt;BasePydanticVectorStore&lt;/code&gt; ABC — &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;delete_nodes&lt;/code&gt;, &lt;code&gt;clear&lt;/code&gt;, plus the async surface. Metadata filtering supports the full &lt;code&gt;MetadataFilters&lt;/code&gt; grammar: all 12 operators (&lt;code&gt;EQ&lt;/code&gt;, &lt;code&gt;NE&lt;/code&gt;, &lt;code&gt;GT&lt;/code&gt;/&lt;code&gt;GTE&lt;/code&gt;/&lt;code&gt;LT&lt;/code&gt;/&lt;code&gt;LTE&lt;/code&gt;, &lt;code&gt;IN&lt;/code&gt;, &lt;code&gt;NIN&lt;/code&gt;, &lt;code&gt;TEXT_MATCH&lt;/code&gt;, &lt;code&gt;TEXT_MATCH_INSENSITIVE&lt;/code&gt;, &lt;code&gt;CONTAINS&lt;/code&gt;, &lt;code&gt;IS_EMPTY&lt;/code&gt;) with &lt;code&gt;AND&lt;/code&gt;/&lt;code&gt;OR&lt;/code&gt;/&lt;code&gt;NOT&lt;/code&gt; and nested groups — so you're not giving up filtering power by moving off a dedicated vector DB.&lt;/p&gt;

&lt;p&gt;If you already have data in SynapCores from a previous run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;VectorStoreIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_vector_store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector_store&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Property graph store — GraphRAG
&lt;/h2&gt;

&lt;p&gt;This is the part that usually needs a second database. Not here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;llama_index.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PropertyGraphIndex&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;llama_index.graph_stores.synapcores&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SynapCoresPropertyGraphStore&lt;/span&gt;

&lt;span class="n"&gt;graph_store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresPropertyGraphStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;graph_index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PropertyGraphIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;property_graph_store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;graph_store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;retriever&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graph_index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;as_retriever&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;nodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;retriever&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What connects to SynapCores?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The graph store implements the full &lt;code&gt;PropertyGraphStore&lt;/code&gt; ABC with both &lt;code&gt;supports_structured_queries=True&lt;/code&gt; and &lt;code&gt;supports_vector_queries=True&lt;/code&gt; — including &lt;code&gt;get_rel_map(depth=N)&lt;/code&gt;, the depth-bounded BFS primitive that &lt;code&gt;PropertyGraphIndex.as_retriever()&lt;/code&gt; actually depends on under the hood. &lt;code&gt;structured_query()&lt;/code&gt; passes Cypher straight through with named-parameter binding if you want to write graph queries by hand instead of relying on the auto-extracted schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother
&lt;/h2&gt;

&lt;p&gt;The two index types above are hitting the &lt;em&gt;same&lt;/em&gt; SynapCores instance, over the same connection — a vector table and a graph both living in one engine, not stitched together after the fact with a sync job. If you're prototyping GraphRAG and don't want to stand up Neo4j just to try it, or you want vector and graph retrieval to compose in a single query without cross-service joins, this is what that looks like end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test coverage, for anyone evaluating this seriously
&lt;/h2&gt;

&lt;p&gt;48 tests against a live engine via docker-compose (23 vector + 25 graph), plus runnable notebooks with real HuggingFace MiniLM embeddings (384 dims):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source + tests: &lt;a href="https://github.com/SynapCores/synapcores-llamaindex" rel="noopener noreferrer"&gt;github.com/SynapCores/synapcores-llamaindex&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Notebooks: &lt;a href="https://github.com/SynapCores/synapcores-llamaindex/tree/master/notebooks" rel="noopener noreferrer"&gt;notebooks directory&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both packages are maintained independently of the LlamaIndex monorepo and published straight to PyPI, so &lt;code&gt;pip install&lt;/code&gt; is all you need — no waiting on a docs PR to land anywhere.&lt;/p&gt;

</description>
      <category>llamaindex</category>
      <category>graphrag</category>
      <category>vectordatabase</category>
      <category>rag</category>
    </item>
    <item>
      <title>Our AI Agent's Memory Kept "Remembering" the Same Thing Three Times — Here's the Bug</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Thu, 27 Aug 2026 11:59:30 +0000</pubDate>
      <link>https://dev.to/synapcores/our-ai-agents-memory-kept-remembering-the-same-thing-three-times-heres-the-bug-3259</link>
      <guid>https://dev.to/synapcores/our-ai-agents-memory-kept-remembering-the-same-thing-three-times-heres-the-bug-3259</guid>
      <description>&lt;p&gt;We shipped persistent memory for our AI agent last week. Two days later, I asked it a simple question — "do you remember what we talked about?" — and the answer came back garbled: the same sentence, repeated nine times, drowning out everything else it actually knew.&lt;/p&gt;

&lt;p&gt;That's not a hallucination. That's a real bug, and it took about twenty minutes of live debugging to find.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The memory system stores episodes — raw statements the agent hears — then a background consolidation job extracts them into structured facts on a rolling interval. Straightforward enough. Auto-capture watches the conversation and writes new episodes as they happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually happened
&lt;/h2&gt;

&lt;p&gt;I pulled the raw episode table and found this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22:50:33 | "Synapcores CE is NOT open-source please remember that"
22:52:05 | "Synapcores CE is NOT open-source please remember that"   &amp;lt;- duplicate
22:57:45 | "Synapcores CE is NOT open-source please remember that"   &amp;lt;- duplicate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same sentence. Three separate episode IDs. Three separate embeddings computed. Three consolidated facts. And critically — &lt;strong&gt;no new messages arrived between any of these captures.&lt;/strong&gt; Nothing new was said. The system just kept re-writing the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual root cause
&lt;/h2&gt;

&lt;p&gt;Auto-capture doesn't trigger only on new content — it fires on a recurring interval and re-scans a fixed window of "recent conversation." That part is a reasonable design. The bug is what happens next: it never checks whether the content in that window was already captured last cycle. Every fire is treated as fresh, unconditionally, forever, as long as the conversation stays idle.&lt;/p&gt;

&lt;p&gt;So a quiet stretch of conversation — someone steps away, or a long tool-heavy turn takes a few minutes — doesn't just do nothing. It actively re-writes the same facts over and over, silently multiplying storage and embedding cost, and degrading every future recall, because the retrieval ranking now has to wade through N duplicate copies of the same fact to find the one thing that's actually different.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is worse than it sounds
&lt;/h2&gt;

&lt;p&gt;The failure mode isn't "wastes some disk space." It's specifically that &lt;strong&gt;recall quality degrades in proportion to how long a conversation sits idle&lt;/strong&gt; — the exact opposite of what you'd want from a memory system. The longer you don't talk to your agent, the noisier its memory of you gets. That's a genuinely bad incentive structure to ship by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it stands
&lt;/h2&gt;

&lt;p&gt;Filed as a bug against the capture logic, not the storage engine — the underlying &lt;code&gt;CREATE MEMORY&lt;/code&gt; primitives (the actual write/read/consolidate pipeline) held up cleanly under a controlled retest: write, wait a full consolidation cycle, recall — correct result, first try, no duplication. The bug is specifically in &lt;em&gt;when&lt;/em&gt; auto-capture decides to fire, not in what happens once it does.&lt;/p&gt;

&lt;p&gt;The honest lesson here isn't really about our specific bug. It's that "capture on a timer" and "capture on genuinely new content" sound like the same design decision until you actually watch what happens during an idle stretch — and the only way we caught it was live-querying the actual storage tables mid-conversation, not trusting the "auto-captured 3 memories" log line that reported success every single time.&lt;/p&gt;

&lt;p&gt;If you're building anything with a background capture-and-consolidate loop — memory, caching, sync jobs, anything that re-scans a window on an interval — this is worth checking for directly: does a quiet period produce zero writes, or does it silently produce the same write again?&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>distributedsystems</category>
      <category>agentic</category>
      <category>database</category>
    </item>
    <item>
      <title>I wrote this post about Agent memory , can be use with any custom agent, and there are plugins for openClaw and Hermes

https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Thu, 20 Aug 2026 11:38:27 +0000</pubDate>
      <link>https://dev.to/synapcores/i-wrote-this-post-about-agent-memory-can-be-use-with-any-custom-agent-and-there-are-plugins-for-247c</link>
      <guid>https://dev.to/synapcores/i-wrote-this-post-about-agent-memory-can-be-use-with-any-custom-agent-and-there-are-plugins-for-247c</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf" class="crayons-story__hidden-navigation-link"&gt;Give a Fleet of AI Agents a Shared Memory in About 10 Minutes&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/synapcores" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2755752%2Fdd461b87-63a4-40f2-ba19-59333b8f06e0.jpg" alt="synapcores profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/synapcores" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Luis M
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Luis M
                
                
              
              &lt;div id="story-author-preview-content-4438342" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/synapcores" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2755752%2Fdd461b87-63a4-40f2-ba19-59333b8f06e0.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Luis M&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf" id="article-link-4438342"&gt;
          Give a Fleet of AI Agents a Shared Memory in About 10 Minutes
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agentic"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agentic&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vectordatabase"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vectordatabase&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/distributedsystems"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;distributedsystems&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/selfhosted"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;selfhosted&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agentic</category>
      <category>vectordatabase</category>
      <category>distributedsystems</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Give a Fleet of AI Agents a Shared Memory in About 10 Minutes</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Wed, 19 Aug 2026 21:40:27 +0000</pubDate>
      <link>https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf</link>
      <guid>https://dev.to/synapcores/give-a-fleet-of-ai-agents-a-shared-memory-in-about-10-minutes-4ngf</guid>
      <description>&lt;p&gt;Most "agent memory" tutorials show you how to make &lt;em&gt;one&lt;/em&gt; agent remember things. This one shows what happens when you point &lt;em&gt;two separate&lt;/em&gt; agents at the same memory backend — no message bus, no sync job, just two clients talking to one database.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;A SynapCores gateway (self-hosted, one Docker container) as the shared memory store, and two "agents" — really just two separate curl sessions, to prove the point that they don't need to know about each other.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; synapcores &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; synapcores-data:/var/lib/synapcores &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/synapcores/community:latest

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SYNAPCORES_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"aidb_..."&lt;/span&gt;   &lt;span class="c"&gt;# printed in docker logs on first boot&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SYNAPCORES_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:8080"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Agent A learns something and stores it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_URL&lt;/span&gt;&lt;span class="s2"&gt;/v1/query/execute"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"sql": "SELECT MEMORY_STORE('&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'fleet'&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;', '&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'Client Acme prefers async updates over calls'&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;') AS id"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. One SQL call. Note the namespace — &lt;code&gt;'fleet'&lt;/code&gt; — that's the shared identity every agent in the group will use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent B — a completely different process, could be a different machine — recalls it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_URL&lt;/span&gt;&lt;span class="s2"&gt;/v1/query/execute"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"sql": "SELECT content, similarity FROM MEMORY_RECALL('&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'fleet'&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;', '&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'how does Acme like to be contacted'&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;', 3)"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent B never talked to Agent A. It never saw the original sentence. It gets the fact back anyway, because the query is semantic (cosine similarity over embeddings computed server-side) not a keyword match, and both agents are reading the same &lt;code&gt;fleet&lt;/code&gt; namespace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Every popular agent-memory pattern right now (markdown vaults, local vector stores, JSONL logs next to the process) is architecturally single-instance. The memory lives where the agent runs, so a second agent — even on the same machine — has no path to it. Point two agents at the same database instead, and "shared memory" isn't a feature you build — it's what naturally happens when two clients hit the same server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it gets real
&lt;/h2&gt;

&lt;p&gt;In production you'd scope identities more deliberately than one flat &lt;code&gt;fleet&lt;/code&gt; bucket — per-team, per-role, whatever matches your actual agent topology — and use &lt;code&gt;MEMORY_UPSERT&lt;/code&gt;'s conflict-resolution policies once more than one agent might write contradictory facts. But the core mechanic — cross-instance recall with zero glue code — works exactly as shown above.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're on OpenClaw
&lt;/h2&gt;

&lt;p&gt;This ships as a drop-in plugin — auto-capture and auto-recall wired into the memory slot, no manual curl needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw plugins &lt;span class="nb"&gt;install &lt;/span&gt;clawhub:@synapcores/openclaw-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else in this post — namespaces, shared identity, conflict resolution — works the same way underneath.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://github.com/SynapCores/synapcores-openclaw-memory" rel="noopener noreferrer"&gt;https://github.com/SynapCores/synapcores-openclaw-memory&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agentic</category>
      <category>vectordatabase</category>
      <category>distributedsystems</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Anthropic Is Watermarking Every Output. The Real Risk Isn't Who Owns It — It's Who Can Prove Anything</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 16 Aug 2026 15:50:55 +0000</pubDate>
      <link>https://dev.to/synapcores/anthropic-is-watermarking-every-output-the-real-risk-isnt-who-owns-it-its-who-can-prove-44b8</link>
      <guid>https://dev.to/synapcores/anthropic-is-watermarking-every-output-the-real-risk-isnt-who-owns-it-its-who-can-prove-44b8</guid>
      <description>&lt;p&gt;Anthropic recently confirmed something worth sitting with: Claude's output carries a watermark. Right now, per Anthropic's own explanation, that watermark indicates involvement, not ownership — it doesn't change who owns what you generate.&lt;/p&gt;

&lt;p&gt;But copyright law doesn't move at the speed of model releases. Give it five to ten years. Suppose Congress or the courts eventually carve out a new category of rights for machine-generated work — a live policy question, not a hypothetical. The moment provenance becomes legally load-bearing, a company holding a mechanism that can identify billions of pieces of content as "originating from Claude" isn't just running a chatbot anymore. It's sitting on an evidentiary system.&lt;/p&gt;

&lt;p&gt;Here's the scenario that makes this concrete: a company builds a $500M software business. Five years later, during an acquisition, the buyer's legal team runs IP due diligence. A provenance scanner reports that 38% of the codebase contains AI-generated material.&lt;/p&gt;

&lt;p&gt;Now the questions start. Who owns those portions? Were they copyrightable in the first place? What terms applied when they were generated? Which employee generated them, and were they authorized to? Was the output modified enough afterward to count as human authorship?&lt;/p&gt;

&lt;p&gt;None of that requires the AI provider to claim ownership. The watermark just has to become evidence in someone else's chain-of-title fight — a copyright registration, a licensing dispute, an employment agreement, litigation. The company holding the detector controls a fact nobody else can independently verify.&lt;/p&gt;

&lt;p&gt;That's the actual risk. Not "Anthropic owns your article" — it's that persistent, provider-controlled provenance gives one company outsized evidentiary power over disputes it isn't even a party to.&lt;/p&gt;

&lt;p&gt;Which raises an uncomfortable question for anyone building on AI-assisted systems right now: when it's your codebase, your contracts, your agent decisions under scrutiny — whose record are you going to be handed? A third party's black-box watermark, produced on demand by the company with commercial incentives around how that record gets used? Or one you generated and controlled yourself, from the moment the action happened?&lt;/p&gt;

&lt;p&gt;That's not hypothetical for SynapCores users. Every agent action can write to a hash-chained, tamper-evident audit table, verifiable with a single &lt;code&gt;VERIFY TABLE&lt;/code&gt; call — proof of what happened, on infrastructure you control, not a provenance claim you have to request from someone else's system after the fact.&lt;/p&gt;

&lt;p&gt;If provenance is about to become evidence, the real question isn't whether AI providers should watermark their output. It's who you want holding the record when it matters.&lt;/p&gt;

&lt;p&gt;How the audit trail actually works: &lt;a href="https://synapcores.com/sovereign-ai" rel="noopener noreferrer"&gt;https://synapcores.com/sovereign-ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>database</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Europe Just Turned "Where Does Your Data Go?" Into a Board-Level Question</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 16 Aug 2026 15:50:42 +0000</pubDate>
      <link>https://dev.to/synapcores/europe-just-turned-where-does-your-data-go-into-a-board-level-question-4824</link>
      <guid>https://dev.to/synapcores/europe-just-turned-where-does-your-data-go-into-a-board-level-question-4824</guid>
      <description>&lt;p&gt;On August 2, 2026, the European Commission's enforcement powers for GPAI obligations under the AI Act quietly took effect. No press conference, no viral thread — just a compliance deadline that changed what "AI-ready infrastructure" is legally allowed to mean for a growing list of companies.&lt;/p&gt;

&lt;p&gt;At the same time, something bigger has been building underneath it: worldwide spend on sovereign-cloud infrastructure is forecast to hit $80B in 2026, up 35.6% year over year. The European Commission alone has committed €180M specifically to procurement that "encourages sovereign digital solutions." This isn't a slow-burn policy talking point anymore — it's a budget line.&lt;/p&gt;

&lt;p&gt;Here's the part most engineering teams haven't fully absorbed: the typical "AI-ready" stack most of us reach for by default routes data through four separate systems to do one job. A database. An embeddings API. A vector store. A graph database. An LLM API. Four vendors, four contracts, four jurisdictions your data has now legally passed through — whether you tracked that or not.&lt;/p&gt;

&lt;p&gt;For a side project, that's an engineering choice. For a CISO or DPO sitting across from an AI Act auditor, it's a liability surface with a paper trail.&lt;/p&gt;

&lt;p&gt;The questions getting asked in those rooms are converging fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does our data actually go?&lt;/li&gt;
&lt;li&gt;What jurisdiction governs each hop?&lt;/li&gt;
&lt;li&gt;Can we prove — not claim, prove — what the AI did with it?&lt;/li&gt;
&lt;li&gt;How many vendors are even in scope for our compliance boundary?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most stacks don't have good answers to all four. That gap is exactly where the next wave of infrastructure decisions is getting made — collapsing a four-vendor, four-jurisdiction chain into one accreditation boundary, with the actual SQL for keeping inference, embeddings, and audit trails inside it.&lt;/p&gt;

&lt;p&gt;Full technical breakdown: &lt;a href="https://synapcores.com/sovereign-ai" rel="noopener noreferrer"&gt;https://synapcores.com/sovereign-ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>cybersecurity</category>
      <category>database</category>
    </item>
    <item>
      <title>AI-Native Database Vector Database - User Documentation</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 24 May 2026 14:26:16 +0000</pubDate>
      <link>https://dev.to/synapcores/ai-native-database-vector-database-user-documentation-1cn1</link>
      <guid>https://dev.to/synapcores/ai-native-database-vector-database-user-documentation-1cn1</guid>
      <description>&lt;h1&gt;
  
  
  SynapCores Vector Database - User Documentation
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Document Date&lt;/strong&gt;: September 1st, 2025&lt;br&gt;
&lt;strong&gt;Version&lt;/strong&gt;: 1.0 (Public)&lt;br&gt;
&lt;strong&gt;Status&lt;/strong&gt;: Production Ready&lt;/p&gt;


&lt;h2&gt;
  
  
  Executive Summary
&lt;/h2&gt;

&lt;p&gt;SynapCores provides cloud-native vector database capabilities with advanced indexing, similarity search, and AI-powered embedding generation. This document describes how to integrate SynapCores into your applications for semantic search, recommendations, and AI-powered features.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Getting Started&lt;/li&gt;
&lt;li&gt;Embedding Generation&lt;/li&gt;
&lt;li&gt;Distance Metrics&lt;/li&gt;
&lt;li&gt;Indexing Strategies&lt;/li&gt;
&lt;li&gt;CRUD Operations&lt;/li&gt;
&lt;li&gt;SQL Integration&lt;/li&gt;
&lt;li&gt;REST API&lt;/li&gt;
&lt;li&gt;Best Practices&lt;/li&gt;
&lt;li&gt;Common Use Cases&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;SynapCores combines traditional SQL database capabilities with native vector operations, enabling you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store and search high-dimensional embeddings&lt;/li&gt;
&lt;li&gt;Perform semantic similarity searches&lt;/li&gt;
&lt;li&gt;Execute hybrid queries combining relational and vector data&lt;/li&gt;
&lt;li&gt;Generate embeddings directly within the database&lt;/li&gt;
&lt;li&gt;Scale to millions of vectors with sub-100ms query latency&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Vector Operations&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple distance metrics (Cosine, Euclidean, Dot Product, Manhattan)&lt;/li&gt;
&lt;li&gt;Advanced indexing with HNSW for fast approximate search&lt;/li&gt;
&lt;li&gt;Exact and approximate nearest neighbor search&lt;/li&gt;
&lt;li&gt;Batch operations for high throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SQL Integration&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native vector data types&lt;/li&gt;
&lt;li&gt;AI functions callable in SQL queries&lt;/li&gt;
&lt;li&gt;Join vector and relational data in a single query&lt;/li&gt;
&lt;li&gt;Standard SQL syntax with vector extensions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enterprise Features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ACID transactions&lt;/li&gt;
&lt;li&gt;Automatic data persistence&lt;/li&gt;
&lt;li&gt;Multi-tenant isolation&lt;/li&gt;
&lt;li&gt;High availability&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Create an Account
&lt;/h3&gt;

&lt;p&gt;Sign up at &lt;a href="https://synapcores.com" rel="noopener noreferrer"&gt;https://synapcores.com&lt;/a&gt; to get your API credentials.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Obtain API Token
&lt;/h3&gt;

&lt;p&gt;After creating your account, generate an API token from your dashboard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Your API token will look like this&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sc_live_abc123xyz..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Connect to Your Database
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Socket Connection (SQL Interface)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Connection via SynapCores native protocol&lt;/span&gt;
synapcores://username:password@your-instance.synapcores.com:5433/your_database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Base URL&lt;/span&gt;
https://api.synapcores.com/api/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Connection Methods&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native Socket Protocol&lt;/strong&gt;: For SQL queries and high-performance operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API&lt;/strong&gt;: For language-agnostic HTTP-based access&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Create Your First Vector Space
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Using SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;create_vector_space&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'products'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'cosine'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Using REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "products",
    "dimensions": 384,
    "distance_metric": "cosine",
    "index_type": "hnsw"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Embedding Generation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Supported Models
&lt;/h3&gt;

&lt;p&gt;SynapCores provides built-in embedding generation with multiple model options:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Dimensions&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MiniLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;384&lt;/td&gt;
&lt;td&gt;General-purpose text, fast processing&lt;/td&gt;
&lt;td&gt;⚡⚡⚡ Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BERT Base&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;768&lt;/td&gt;
&lt;td&gt;High-quality semantic understanding&lt;/td&gt;
&lt;td&gt;⚡⚡ Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BERT Large&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;td&gt;Maximum embedding quality&lt;/td&gt;
&lt;td&gt;⚡ Slower&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Generate Embeddings in SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Use default model (MiniLM)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Specify model explicitly&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'minilm'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'bert-base'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'bert-large'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;During Data Insert&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Bluetooth Headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'Premium wireless audio device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Bluetooth Headphones Premium wireless audio device'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Batch Processing&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Generate embeddings for existing data&lt;/span&gt;
&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Distance Metrics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choosing the Right Metric
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Cosine Similarity (Recommended for Text)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Text embeddings, semantic search, document similarity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Range&lt;/strong&gt;: [-1, 1] where 1 = most similar&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Comparing documents, products, or text-based content&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;comparisons&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Find similar product descriptions&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Euclidean Distance (L2)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Spatial data, image embeddings&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Range&lt;/strong&gt;: [0, ∞] where 0 = identical&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Comparing spatial coordinates or image features&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EUCLIDEAN_DISTANCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;comparisons&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Find similar images&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Dot Product
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Recommendation systems&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Range&lt;/strong&gt;: (-∞, ∞)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Computing relevance scores with normalized vectors&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;INNER_PRODUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;comparisons&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: User-item recommendations&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Manhattan Distance (L1)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Sparse high-dimensional data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Range&lt;/strong&gt;: [0, ∞]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use when&lt;/strong&gt;: Working with sparse feature vectors&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;MANHATTAN_DISTANCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;comparisons&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Indexing Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Flat Index (Exact Search)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Characteristics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guarantees 100% recall (exact results)&lt;/li&gt;
&lt;li&gt;Searches every vector (brute-force)&lt;/li&gt;
&lt;li&gt;Best for small datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt; 10,000 vectors&lt;/li&gt;
&lt;li&gt;When exact results are required&lt;/li&gt;
&lt;li&gt;Validation and benchmarking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;: 1-10ms for small datasets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Create with flat index (default)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;create_vector_space&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'small_collection'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'cosine'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  HNSW Index (Fast Approximate Search)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Characteristics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graph-based approximate nearest neighbor search&lt;/li&gt;
&lt;li&gt;10-100x faster than flat index&lt;/li&gt;
&lt;li&gt;Tunable accuracy vs. speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Use&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10K+ vectors&lt;/li&gt;
&lt;li&gt;Production applications&lt;/li&gt;
&lt;li&gt;When sub-100ms latency is required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;: 5-50ms even with millions of vectors&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Create with HNSW index&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;create_vector_space&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'large_collection'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'cosine'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'hnsw'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Index Selection Guide
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vector Count&lt;/th&gt;
&lt;th&gt;Recommended Index&lt;/th&gt;
&lt;th&gt;Expected Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt; 10K&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;1-10ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K - 100K&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;5-20ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100K - 1M&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;10-50ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1M+&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;20-100ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  CRUD Operations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Create Vector Space
&lt;/h3&gt;

&lt;p&gt;Initialize a new collection for vectors:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;create_vector_space&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'products'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;-- Space name&lt;/span&gt;
    &lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            &lt;span class="c1"&gt;-- Dimensions&lt;/span&gt;
    &lt;span class="s1"&gt;'cosine'&lt;/span&gt;        &lt;span class="c1"&gt;-- Distance metric&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "products",
    "dimensions": 384,
    "distance_metric": "cosine",
    "index_type": "hnsw"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"products"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dimensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"distance_metric"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cosine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"index_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hnsw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-09-01T10:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Insert Vectors
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Single Insert with Auto-Generated ID
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Wireless Bluetooth Headphones'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'{"product_id": "12345", "category": "electronics"}'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/products/vectors &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "vectors": [{
      "values": [0.1, 0.2, 0.3, ...],
      "metadata": {
        "product_id": "12345",
        "category": "electronics"
      }
    }]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Insert with Custom ID
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'prod_12345'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Wireless Bluetooth Headphones'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="s1"&gt;'{"category": "electronics"}'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Batch Insert (Recommended for Bulk Data)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Insert multiple vectors efficiently&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;JSON_BUILD_OBJECT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'product_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'category'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/products/vectors &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "vectors": [
      {"values": [0.1, ...], "metadata": {"product_id": "1"}},
      {"values": [0.2, ...], "metadata": {"product_id": "2"}},
      ...
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Performance Tip&lt;/strong&gt;: Batch inserts are 10-100x faster than individual inserts.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Search Vectors
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Semantic Search
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'product_id'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'category'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/products/search &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "query_text": "wireless headphones",
    "k": 10,
    "threshold": 0.7,
    "include_metadata": true
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Response&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prod_12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"product_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electronics"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prod_67890"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"product_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"67890"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electronics"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"total_results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query_time_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Hybrid Search (Vectors + Filters)
&lt;/h4&gt;

&lt;p&gt;Combine semantic search with traditional SQL filters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'noise cancelling headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'electronics'&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;in_stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'noise cancelling headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Search with Metadata Filters (REST API)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/products/search &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "query_text": "wireless headphones",
    "k": 20,
    "threshold": 0.7,
    "filter": {
      "category": "electronics",
      "in_stock": true
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Update Vectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt;
    &lt;span class="k"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Updated product description'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JSON_BUILD_OBJECT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s1"&gt;'product_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'12345'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'category'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'audio'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'updated_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'prod_12345'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; PUT https://api.synapcores.com/api/v1/vectors/collections/products/vectors/prod_12345 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "values": [0.1, 0.2, ...],
    "metadata": {
      "category": "audio",
      "updated_at": "2025-09-01T10:00:00Z"
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Delete Vectors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Delete by ID&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'prod_12345'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Delete by criteria&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'category'&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'discontinued'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Delete single vector&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; DELETE https://api.synapcores.com/api/v1/vectors/collections/products/vectors/prod_12345 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Batch delete&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/products/delete_batch &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"ids": ["prod_12345", "prod_67890"]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6. Get Vector by ID
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SQL&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadata&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;vector_spaces&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'prod_12345'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET https://api.synapcores.com/api/v1/vectors/collections/products/vectors/prod_12345 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  SQL Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vector Data Type
&lt;/h3&gt;

&lt;p&gt;Create tables with native vector columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;VECTOR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;-- 384-dimensional vector&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI Functions
&lt;/h3&gt;

&lt;h4&gt;
  
  
  EMBED() - Generate Embeddings
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Default model (MiniLM, 384 dimensions)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Specify model&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'minilm'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;-- 384d&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'bert-base'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 768d&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'bert-large'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;-- 1024d&lt;/span&gt;

&lt;span class="c1"&gt;-- Use in INSERT&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Bluetooth Headphones'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'Premium wireless audio device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Bluetooth Headphones Premium wireless audio device'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Vector Similarity Functions
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;COSINE_SIMILARITY()&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless bluetooth headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity_score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless bluetooth headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity_score&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;EUCLIDEAN_DISTANCE()&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;EUCLIDEAN_DISTANCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;query_vector&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;image_embeddings&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;INNER_PRODUCT()&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;item_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;INNER_PRODUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item_embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;relevance_score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;recommendations&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;relevance_score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;relevance_score&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced SQL Patterns
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Semantic Search with Joins
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find customers who purchased similar products&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'premium headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;order_items&lt;/span&gt; &lt;span class="n"&gt;oi&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;oi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;oi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;CURRENT_DATE&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'90 days'&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'premium headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Aggregations with Vectors
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Average similarity by category&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;product_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'premium quality'&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;avg_relevance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="n"&gt;avg_relevance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;avg_relevance&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Subqueries with Vectors
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find products similar to top sellers&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;top_products&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
    &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;order_items&lt;/span&gt; &lt;span class="n"&gt;oi&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;oi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;
    &lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;
    &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;oi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
    &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;DISTINCT&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;max_similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
&lt;span class="k"&gt;CROSS&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;top_products&lt;/span&gt; &lt;span class="n"&gt;tp&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;top_products&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;MAX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;max_similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  REST API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Base URL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.synapcores.com/api/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;All requests require Bearer token authentication:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Authorization: Bearer &amp;lt;your_api_token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Endpoints
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all collections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get collection info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/vectors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Insert vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/vectors/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get vector by ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/vectors/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update vector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/vectors/:id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete vector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search vectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/vectors/collections/:name/search/batch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Batch search&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Complete Workflow Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Create collection&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "name": "documents",
    "dimensions": 384,
    "distance_metric": "cosine",
    "index_type": "hnsw"
  }'&lt;/span&gt;

&lt;span class="c"&gt;# 2. Insert documents&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/documents/vectors &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "vectors": [{
      "id": "doc_001",
      "values": [0.1, 0.2, ...],
      "metadata": {"title": "Getting Started", "type": "guide"}
    }]
  }'&lt;/span&gt;

&lt;span class="c"&gt;# 3. Search documents&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.synapcores.com/api/v1/vectors/collections/documents/search &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$SYNAPCORES_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "query_text": "how to get started",
    "k": 10,
    "threshold": 0.7
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rate Limits
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Limit&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vectors per insert&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;Use batch operations for larger datasets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries per batch search&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;Split larger batches into multiple requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API requests per minute&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;Contact support for higher limits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Choosing Embedding Dimensions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimensions&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;384&lt;/td&gt;
&lt;td&gt;MiniLM&lt;/td&gt;
&lt;td&gt;General-purpose, cost-effective&lt;/td&gt;
&lt;td&gt;Best balance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;768&lt;/td&gt;
&lt;td&gt;BERT Base&lt;/td&gt;
&lt;td&gt;Higher quality semantic understanding&lt;/td&gt;
&lt;td&gt;2x storage cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;td&gt;BERT Large&lt;/td&gt;
&lt;td&gt;Maximum quality for critical applications&lt;/td&gt;
&lt;td&gt;3x storage cost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: Start with 384 dimensions (MiniLM) for most use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Batch Operations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Always use batch operations for&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bulk data imports&lt;/li&gt;
&lt;li&gt;Periodic reindexing&lt;/li&gt;
&lt;li&gt;Data migrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Gains&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10-100x faster than individual operations&lt;/li&gt;
&lt;li&gt;Reduced API call overhead&lt;/li&gt;
&lt;li&gt;Better throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Optimal Batch Size&lt;/strong&gt;: 100-1000 vectors per request&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Query Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Use Filters Effectively&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Good: Filter before vector search&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'electronics'&lt;/span&gt;  &lt;span class="c1"&gt;-- Traditional filter first&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cache Frequent Queries&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache popular search embeddings in your application&lt;/li&gt;
&lt;li&gt;Reuse embeddings for identical queries&lt;/li&gt;
&lt;li&gt;Reduces embedding generation overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Error Handling
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Implement Retry Logic&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;requests.adapters&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HTTPAdapter&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;requests.packages.urllib3.util.retry&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Retry&lt;/span&gt;

&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;retry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backoff_factor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;status_forcelist&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;502&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;504&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;adapter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HTTPAdapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Handle Rate Limits&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check response headers for rate limit info&lt;/li&gt;
&lt;li&gt;Implement exponential backoff&lt;/li&gt;
&lt;li&gt;Queue requests during high traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Monitoring and Observability
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Track Key Metrics in Your Application&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query latency (p50, p95, p99)&lt;/li&gt;
&lt;li&gt;Search accuracy/relevance&lt;/li&gt;
&lt;li&gt;Embedding generation time&lt;/li&gt;
&lt;li&gt;API error rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Log Important Events&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Failed embedding generations&lt;/li&gt;
&lt;li&gt;Slow queries (&amp;gt; 100ms)&lt;/li&gt;
&lt;li&gt;Rate limit hits&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Case 1: E-Commerce Semantic Search
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Create product table with embeddings&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;VECTOR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Index products&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;product_catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Search by semantic meaning&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Case 2: Content Recommendations
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find similar articles based on user reading history&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;user_interests&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;avg_embedding&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;user_reading_history&lt;/span&gt; &lt;span class="n"&gt;urh&lt;/span&gt;
    &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;urh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;article_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;article_id&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;urh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;article_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;avg_embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;articles&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;CROSS&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;user_interests&lt;/span&gt; &lt;span class="n"&gt;ui&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;article_id&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;article_id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;user_reading_history&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Case 3: Duplicate Detection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find near-duplicate documents&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;doc1_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;doc2_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="n"&gt;d1&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="n"&gt;d2&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;document_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;95&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use Case 4: Customer Support Routing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find similar resolved tickets&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(:&lt;/span&gt;&lt;span class="n"&gt;new_ticket_text&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;support_tickets&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;
    &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'resolved'&lt;/span&gt;
    &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Slow Query Performance
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;: Queries taking &amp;gt; 100ms&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify HNSW index is being used (check query plan)&lt;/li&gt;
&lt;li&gt;Reduce number of results requested (lower k value)&lt;/li&gt;
&lt;li&gt;Use metadata filters to narrow search space&lt;/li&gt;
&lt;li&gt;Consider using lower-dimensional embeddings (384 instead of 768)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  High API Error Rates
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;: Frequent 429 (rate limit) or 5xx errors&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implement exponential backoff retry logic&lt;/li&gt;
&lt;li&gt;Use batch operations instead of individual requests&lt;/li&gt;
&lt;li&gt;Contact support to increase rate limits&lt;/li&gt;
&lt;li&gt;Cache frequently used embeddings&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Unexpected Search Results
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;: Irrelevant results in semantic search&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Increase similarity threshold (try 0.8 instead of 0.7)&lt;/li&gt;
&lt;li&gt;Verify input text is being embedded correctly&lt;/li&gt;
&lt;li&gt;Check that the correct embedding model is being used&lt;/li&gt;
&lt;li&gt;Review metadata filters for correctness&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Embedding Generation Failures
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptoms&lt;/strong&gt;: EMBED() function errors or timeouts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify text length is under 512 tokens&lt;/li&gt;
&lt;li&gt;Check for special characters or encoding issues&lt;/li&gt;
&lt;li&gt;Retry with exponential backoff&lt;/li&gt;
&lt;li&gt;Contact support if errors persist&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Client Libraries
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_token&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.synapcores.com/api/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/vectors/collections/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;k&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_api_token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;products&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wireless headphones&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript/TypeScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresClient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.synapcores.com/api/v1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;apiToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;queryText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/vectors/collections/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/search`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="na"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;queryText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="nx"&gt;threshold&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SynapCoresClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_api_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;products&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wireless headphones&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Performance Expectations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Query Latency
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dataset Size&lt;/th&gt;
&lt;th&gt;Index Type&lt;/th&gt;
&lt;th&gt;Typical Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt; 10K vectors&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;1-5ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10K-100K vectors&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;5-20ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100K-1M vectors&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;10-50ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1M+ vectors&lt;/td&gt;
&lt;td&gt;HNSW&lt;/td&gt;
&lt;td&gt;20-100ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Latency measured from SynapCores servers. Add network latency for total client response time.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Throughput
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Expected Throughput&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single insert&lt;/td&gt;
&lt;td&gt;~1,000 ops/second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch insert (100 vectors)&lt;/td&gt;
&lt;td&gt;~10,000 vectors/second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search queries&lt;/td&gt;
&lt;td&gt;~5,000 queries/second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Scalability Limits
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Limit&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vectors per space&lt;/td&gt;
&lt;td&gt;10M+&lt;/td&gt;
&lt;td&gt;Tested and production-ready&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max dimensions&lt;/td&gt;
&lt;td&gt;4096&lt;/td&gt;
&lt;td&gt;Higher dimensions = slower search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch size&lt;/td&gt;
&lt;td&gt;1,000 vectors&lt;/td&gt;
&lt;td&gt;Per API request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API rate limit&lt;/td&gt;
&lt;td&gt;1,000 req/min&lt;/td&gt;
&lt;td&gt;Contact support for increases&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Support and Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer Docs&lt;/strong&gt;: &lt;a href="https://docs.synapcores.com" rel="noopener noreferrer"&gt;https://docs.synapcores.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Reference&lt;/strong&gt;: &lt;a href="https://docs.synapcores.com/api" rel="noopener noreferrer"&gt;https://docs.synapcores.com/api&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQL Guide&lt;/strong&gt;: &lt;a href="https://docs.synapcores.com/sql" rel="noopener noreferrer"&gt;https://docs.synapcores.com/sql&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Community
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Community Forum&lt;/strong&gt;: &lt;a href="https://community.synapcores.com" rel="noopener noreferrer"&gt;https://community.synapcores.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord&lt;/strong&gt;: &lt;a href="https://discord.gg/synapcores" rel="noopener noreferrer"&gt;https://discord.gg/synapcores&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack Overflow&lt;/strong&gt;: Tag your questions with &lt;code&gt;synapcores&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Support
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt;: &lt;a href="mailto:support@synapcores.com"&gt;support@synapcores.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat&lt;/strong&gt;: Available in dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status Page&lt;/strong&gt;: &lt;a href="https://status.synapcores.com" rel="noopener noreferrer"&gt;https://status.synapcores.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tutorials
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Getting Started&lt;/strong&gt;: Build your first semantic search in 15 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production Deployment&lt;/strong&gt;: Best practices for scaling to production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Patterns&lt;/strong&gt;: Hybrid search, RAG, and multi-modal applications&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;Visit &lt;a href="https://synapcores.com/pricing" rel="noopener noreferrer"&gt;https://synapcores.com/pricing&lt;/a&gt; for current pricing details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free Tier&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100K vectors&lt;/li&gt;
&lt;li&gt;1M API requests/month&lt;/li&gt;
&lt;li&gt;Community support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro Tier&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10M vectors&lt;/li&gt;
&lt;li&gt;Unlimited API requests&lt;/li&gt;
&lt;li&gt;Email support&lt;/li&gt;
&lt;li&gt;99.9% SLA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enterprise Tier&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited vectors&lt;/li&gt;
&lt;li&gt;Dedicated support&lt;/li&gt;
&lt;li&gt;Custom SLAs&lt;/li&gt;
&lt;li&gt;On-premise deployment options&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Current Limitations
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dimension Changes&lt;/strong&gt;: Vector space dimension cannot be changed after creation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metric Changes&lt;/strong&gt;: Distance metric cannot be changed after space creation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max Dimension&lt;/strong&gt;: 4096 dimensions maximum&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Size&lt;/strong&gt;: 1,000 vectors per request maximum&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Planned Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quantization for reduced storage costs&lt;/li&gt;
&lt;li&gt;GPU-accelerated search&lt;/li&gt;
&lt;li&gt;Multi-vector per document support&lt;/li&gt;
&lt;li&gt;Advanced filtered search optimizations&lt;/li&gt;
&lt;li&gt;Real-time index updates&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SynapCores provides a production-ready, cloud-native vector database with:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Semantic Search&lt;/strong&gt; - Find similar content by meaning, not keywords&lt;br&gt;
✅ &lt;strong&gt;SQL Integration&lt;/strong&gt; - Combine vector and relational queries&lt;br&gt;
✅ &lt;strong&gt;Easy to Use&lt;/strong&gt; - Simple API and SQL functions&lt;br&gt;
✅ &lt;strong&gt;High Performance&lt;/strong&gt; - Sub-100ms queries even at scale&lt;br&gt;
✅ &lt;strong&gt;Fully Managed&lt;/strong&gt; - No infrastructure to maintain&lt;/p&gt;

&lt;p&gt;Start building AI-powered applications today at &lt;a href="https://synapcores.com" rel="noopener noreferrer"&gt;https://synapcores.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Document Version&lt;/strong&gt;: 1.0 (Public)&lt;br&gt;
&lt;strong&gt;Last Updated&lt;/strong&gt;: September 1st, 2025&lt;br&gt;
&lt;strong&gt;For Technical Support&lt;/strong&gt;: &lt;a href="mailto:support@synapcores.com"&gt;support@synapcores.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Copyright © 2025 SynapCores. All rights reserved. Performance characteristics may vary based on workload patterns and network conditions.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/vector-database" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>ai</category>
      <category>rust</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI-Native Database SynapCores vs pgvector</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 24 May 2026 14:26:13 +0000</pubDate>
      <link>https://dev.to/synapcores/ai-native-database-synapcores-vs-pgvector-1i1g</link>
      <guid>https://dev.to/synapcores/ai-native-database-synapcores-vs-pgvector-1i1g</guid>
      <description>&lt;h1&gt;
  
  
  SynapCores vs pgvector: Executive Summary
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Target Audience:&lt;/strong&gt; Executives, Technical Decision Makers, Solutions Architects&lt;/p&gt;




&lt;h2&gt;
  
  
  1-Minute Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Bottom Line&lt;/strong&gt;: SynapCores and PostgreSQL pgvector serve different use cases. Choose SynapCores for AI-intensive applications requiring embedded ML and multimodal data. Choose pgvector for adding vector search to existing PostgreSQL databases with simple embedding requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;SynapCores&lt;/th&gt;
&lt;th&gt;pgvector&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI/ML Workflows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10-100x faster&lt;/td&gt;
&lt;td&gt;Requires external services&lt;/td&gt;
&lt;td&gt;SynapCores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vector Search Only&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Tie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostgreSQL Ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Full compatibility&lt;/td&gt;
&lt;td&gt;pgvector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multimodal Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native support&lt;/td&gt;
&lt;td&gt;Manual pipeline&lt;/td&gt;
&lt;td&gt;SynapCores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5-Year TCO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$2.65M&lt;/td&gt;
&lt;td&gt;$4.3M&lt;/td&gt;
&lt;td&gt;SynapCores (38% savings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time to Market&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-4 weeks&lt;/td&gt;
&lt;td&gt;1-2 days (existing PG)&lt;/td&gt;
&lt;td&gt;Depends&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  When to Choose SynapCores
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SynapCores Excels At:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI-First Applications&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recommendation systems&lt;/li&gt;
&lt;li&gt;Intelligent search&lt;/li&gt;
&lt;li&gt;Real-time ML inference&lt;/li&gt;
&lt;li&gt;Conversational AI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multimodal Data Platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Media asset management&lt;/li&gt;
&lt;li&gt;Healthcare imaging&lt;/li&gt;
&lt;li&gt;Document intelligence&lt;/li&gt;
&lt;li&gt;Video/audio analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Complex ML Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embedded AutoML (8+ algorithms)&lt;/li&gt;
&lt;li&gt;Automatic feature engineering&lt;/li&gt;
&lt;li&gt;Real-time model training&lt;/li&gt;
&lt;li&gt;Sub-millisecond predictions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Greenfield Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New AI-powered applications&lt;/li&gt;
&lt;li&gt;No PostgreSQL migration burden&lt;/li&gt;
&lt;li&gt;Simpler architecture (single platform)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key SynapCores Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10-100x faster&lt;/strong&gt; for integrated ML workflows (no external service calls)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native multimodal processing&lt;/strong&gt; (images, audio, video, PDFs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded AutoML&lt;/strong&gt; with SQL interface (no Python/ML expertise required)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-grade clustering&lt;/strong&gt; (Raft consensus, automatic failover)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;38% lower TCO&lt;/strong&gt; over 5 years ($2.65M vs $4.3M)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-copy operations&lt;/strong&gt; in Rust for maximum performance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When to Choose pgvector
&lt;/h2&gt;

&lt;h3&gt;
  
  
  pgvector Excels At:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Existing PostgreSQL Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop-in extension (no migration)&lt;/li&gt;
&lt;li&gt;Leverage existing tools and expertise&lt;/li&gt;
&lt;li&gt;Use with Ruby on Rails, Django, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simple Vector Search&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic search&lt;/li&gt;
&lt;li&gt;Document similarity&lt;/li&gt;
&lt;li&gt;Basic recommendations&lt;/li&gt;
&lt;li&gt;Embedding-only use cases&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PostgreSQL Ecosystem Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BI tools (Tableau, PowerBI)&lt;/li&gt;
&lt;li&gt;ORMs and frameworks&lt;/li&gt;
&lt;li&gt;Managed services (AWS RDS, Supabase)&lt;/li&gt;
&lt;li&gt;Compliance certifications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Budget-Constrained Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free managed tiers available&lt;/li&gt;
&lt;li&gt;Lower upfront costs&lt;/li&gt;
&lt;li&gt;Minimal learning curve&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key pgvector Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mature PostgreSQL foundation&lt;/strong&gt; (25+ years)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Universal compatibility&lt;/strong&gt; (all PostgreSQL tools work)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drop-in adoption&lt;/strong&gt; (add to existing database)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proven reliability&lt;/strong&gt; in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large community&lt;/strong&gt; and extensive documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple vector types&lt;/strong&gt; (standard, half-precision, sparse, binary)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Financial Impact
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6-Month Project Cost Comparison
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: Build AI-powered product recommendation system&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cost Item&lt;/th&gt;
&lt;th&gt;SynapCores&lt;/th&gt;
&lt;th&gt;pgvector + ML Stack&lt;/th&gt;
&lt;th&gt;Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Development&lt;/td&gt;
&lt;td&gt;$180K (2 engineers)&lt;/td&gt;
&lt;td&gt;$336K (4 engineers)&lt;/td&gt;
&lt;td&gt;$156K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;$19K&lt;/td&gt;
&lt;td&gt;$37K&lt;/td&gt;
&lt;td&gt;$18K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$199K&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$373K&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$174K (46%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5-Year Total Cost of Ownership
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;5-Year TCO&lt;/th&gt;
&lt;th&gt;Annual Average&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SynapCores&lt;/td&gt;
&lt;td&gt;$2.65M&lt;/td&gt;
&lt;td&gt;$530K/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pgvector + ML&lt;/td&gt;
&lt;td&gt;$4.3M&lt;/td&gt;
&lt;td&gt;$860K/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Savings with SynapCores&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.65M (38%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$330K/year&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why SynapCores is cheaper:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer services to operate (single platform vs 3-5 services)&lt;/li&gt;
&lt;li&gt;Lower DevOps burden (20 hrs/month vs 40 hrs/month)&lt;/li&gt;
&lt;li&gt;No external ML service costs&lt;/li&gt;
&lt;li&gt;Reduced infrastructure complexity&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Performance Comparison
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vector Search Performance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;SynapCores&lt;/th&gt;
&lt;th&gt;pgvector HNSW&lt;/th&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query Throughput&lt;/td&gt;
&lt;td&gt;50-100 QPS&lt;/td&gt;
&lt;td&gt;40 QPS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.5x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Index Build (1M vectors)&lt;/td&gt;
&lt;td&gt;1,500-2,000s&lt;/td&gt;
&lt;td&gt;4,065s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filtered Search&lt;/td&gt;
&lt;td&gt;30-60 QPS&lt;/td&gt;
&lt;td&gt;20-30 QPS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  End-to-End ML Workflow Performance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workflow&lt;/th&gt;
&lt;th&gt;SynapCores&lt;/th&gt;
&lt;th&gt;pgvector + External ML&lt;/th&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Real-time Prediction&lt;/td&gt;
&lt;td&gt;2ms&lt;/td&gt;
&lt;td&gt;80ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;40x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image Processing + Search&lt;/td&gt;
&lt;td&gt;100ms&lt;/td&gt;
&lt;td&gt;800ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Training (10K rows)&lt;/td&gt;
&lt;td&gt;500ms&lt;/td&gt;
&lt;td&gt;5,000ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch Prediction (1K rows)&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;2,000ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;40x faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key Insight&lt;/strong&gt;: SynapCores' performance advantage grows dramatically for AI/ML workflows due to eliminating network latency and serialization overhead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Comparison
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SynapCores Architecture (All-in-One)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------------------------------+
|        Your Application            |
+----------------+-------------------+
                 | (Single API call)
+----------------v-------------------+
|          SynapCores                |
|  +------------------------------+  |
|  | Data + Vectors + ML Models   |  |
|  | Everything in one database   |  |
|  +------------------------------+  |
|   2ms end-to-end latency           |
+------------------------------------+

Simplicity: Single platform
Latency: Sub-millisecond operations
Operations: One service to monitor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  pgvector Architecture (Multi-Service)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------------------------------+
|        Your Application            |
+------+----------+----------+-------+
       |          |          |
+------v----+ +---v----+ +---v--------+
|PostgreSQL | |ML API  | | Embedding  |
|+ pgvector | |(Python | | Service    |
|           | |Flask)  | | (GPU)      |
+-----------+ +--------+ +------------+
   50ms        200ms       100ms

Total: 350ms + orchestration overhead

Complexity: Multiple services
Latency: Network hops add latency
Operations: 3-5 services to monitor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Use Case Decision Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose SynapCores If:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Building AI-first application&lt;/li&gt;
&lt;li&gt;Need real-time ML inference (&amp;lt;10ms)&lt;/li&gt;
&lt;li&gt;Processing multimodal data (images, video, audio)&lt;/li&gt;
&lt;li&gt;Want embedded AutoML capabilities&lt;/li&gt;
&lt;li&gt;Starting new project (no PostgreSQL lock-in)&lt;/li&gt;
&lt;li&gt;Require production-grade clustering&lt;/li&gt;
&lt;li&gt;Multi-tenant SaaS platform&lt;/li&gt;
&lt;li&gt;Care about long-term TCO&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose pgvector If:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Already using PostgreSQL&lt;/li&gt;
&lt;li&gt;Only need basic vector search&lt;/li&gt;
&lt;li&gt;Have PostgreSQL expertise&lt;/li&gt;
&lt;li&gt;Require PostgreSQL ecosystem tools&lt;/li&gt;
&lt;li&gt;Small team or MVP project&lt;/li&gt;
&lt;li&gt;Compliance tied to PostgreSQL&lt;/li&gt;
&lt;li&gt;Using BI tools (Tableau, PowerBI)&lt;/li&gt;
&lt;li&gt;Need sparse or binary vectors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Consider Hybrid Approach If:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Large existing PostgreSQL deployment&lt;/li&gt;
&lt;li&gt;Want to test SynapCores for new features&lt;/li&gt;
&lt;li&gt;Phased migration strategy&lt;/li&gt;
&lt;li&gt;Separate OLTP (pgvector) and AI (SynapCores) workloads&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Strategic Paths
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. All-in on SynapCores
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Greenfield AI projects&lt;/li&gt;
&lt;li&gt;AI-first startups&lt;/li&gt;
&lt;li&gt;Long-term TCO optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. All-in on pgvector
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Existing PostgreSQL shops&lt;/li&gt;
&lt;li&gt;Simple vector search needs&lt;/li&gt;
&lt;li&gt;Small teams/MVPs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Hybrid Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Large enterprises&lt;/li&gt;
&lt;li&gt;Phased AI transformation&lt;/li&gt;
&lt;li&gt;Risk mitigation strategy&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The choice between SynapCores and pgvector depends on your specific use case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For vector search alone&lt;/strong&gt;: pgvector is sufficient&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For AI + vectors&lt;/strong&gt;: SynapCores is superior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For existing PostgreSQL&lt;/strong&gt;: Start with pgvector, evolve to SynapCores for AI workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bottom Line&lt;/strong&gt;: SynapCores' 38% TCO advantage and 10-100x ML performance gains make it compelling for any organization serious about AI, while pgvector remains the pragmatic choice for incremental vector search adoption.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Document Version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last Updated&lt;/strong&gt;: December 2025&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://synapcores.com" rel="noopener noreferrer"&gt;https://synapcores.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/synapcores-vs-pgvector" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>ai</category>
      <category>rust</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI-Native Database SynapCores SQLv2 vs PostgreSQL</title>
      <dc:creator>Luis M</dc:creator>
      <pubDate>Sun, 24 May 2026 14:26:10 +0000</pubDate>
      <link>https://dev.to/synapcores/ai-native-database-synapcores-sqlv2-vs-postgresql-3458</link>
      <guid>https://dev.to/synapcores/ai-native-database-synapcores-sqlv2-vs-postgresql-3458</guid>
      <description>&lt;h1&gt;
  
  
  SynapCores SQLv2 vs PostgreSQL: The Evolution of Database Systems
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The AI Database Revolution
&lt;/h2&gt;

&lt;p&gt;We built window functions (LAG, LEAD, RANK, etc.) in SynapCores, and it got us thinking about how far we've come from traditional databases like PostgreSQL.&lt;/p&gt;

&lt;p&gt;Here's what sets SynapCores apart:&lt;/p&gt;




&lt;h2&gt;
  
  
  AI-Native from Day One
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL + pgvector Approach:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Need extensions, custom operators, separate indexing&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;EXTENSION&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="n"&gt;ivfflat&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="n"&gt;vector_cosine_ops&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'[0.1, 0.2, ...]'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SynapCores Approach:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Built-in, no extensions needed&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The difference? Native embedding generation and vector search in pure SQL.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Time Series Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Complex window functions, manual partitioning&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;LAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;prev_sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;LAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;week_ago&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SynapCores:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Same syntax, but with ML-powered forecasting&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;LAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;prev_sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;PREDICT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;forecast&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PREDICT() as a window function? Yes. That's the power of unifying SQL and ML.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Semantic Search
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL + Full-Text Search:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Keyword matching, not semantic understanding&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;to_tsvector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'english'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt; &lt;span class="n"&gt;to_tsquery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'database &amp;amp; performance'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SynapCores:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Understands meaning, not just keywords&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'How do I make my database faster?'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It knows "make faster" = "performance" and "my database" = "database systems". &lt;strong&gt;True semantic understanding.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Difference
&lt;/h2&gt;

&lt;p&gt;PostgreSQL is a phenomenal database. We're not competing with it—we're building for a different era.&lt;/p&gt;

&lt;h3&gt;
  
  
  PostgreSQL was built for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Transactional workloads&lt;/li&gt;
&lt;li&gt;Complex JOINs&lt;/li&gt;
&lt;li&gt;ACID guarantees&lt;/li&gt;
&lt;li&gt;Extensibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SynapCores was built for:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;All of the above, PLUS&lt;/li&gt;
&lt;li&gt;Native vector operations&lt;/li&gt;
&lt;li&gt;Embedded ML models&lt;/li&gt;
&lt;li&gt;Semantic understanding&lt;/li&gt;
&lt;li&gt;AI-powered analytics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;In 2025, every application needs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vector search&lt;/strong&gt; (for RAG, recommendations, similarity)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddings&lt;/strong&gt; (for semantic understanding)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time series&lt;/strong&gt; (for forecasting, anomaly detection)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traditional SQL&lt;/strong&gt; (for business logic)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  With PostgreSQL, you need:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;pgvector extension&lt;/li&gt;
&lt;li&gt;Separate embedding service (OpenAI API, local models)&lt;/li&gt;
&lt;li&gt;TimescaleDB for time series&lt;/li&gt;
&lt;li&gt;Custom ML pipeline&lt;/li&gt;
&lt;li&gt;Complex orchestration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  With SynapCores, you write SQL. That's it.
&lt;/h3&gt;




&lt;h2&gt;
  
  
  Real Example: E-commerce Search
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PostgreSQL approach:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 1. Generate embeddings (external service)
&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embedding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wireless headphones&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Query with pgvector
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    SELECT * FROM products
    ORDER BY embedding &amp;lt;-&amp;gt; %s::vector
    LIMIT 10
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# 3. Re-rank with business logic
# 4. Filter out-of-stock
# 5. Apply personalization
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SynapCores approach:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- One query, all in SQL&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;product_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wireless headphones'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;PREDICT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;will_purchase&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;purchase_probability&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;in_stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;relevance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;purchase_probability&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Embedding generation, vector search, and ML prediction—all in one query.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;"But isn't this slower than PostgreSQL?"&lt;/p&gt;

&lt;p&gt;Actually, no. Because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No network round-trips&lt;/strong&gt; to external embedding services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native vector indexes&lt;/strong&gt; (HNSW) optimized for similarity search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query optimization&lt;/strong&gt; understands ML operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single query plan&lt;/strong&gt; = better cache utilization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We've seen &lt;strong&gt;3-5x faster&lt;/strong&gt; than PostgreSQL + pgvector + external embeddings for vector workloads.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;PostgreSQL revolutionized databases in the 90s and 2000s.&lt;/p&gt;

&lt;p&gt;SynapCores is doing the same for the AI era.&lt;/p&gt;

&lt;p&gt;It's not about replacing PostgreSQL—it's about giving developers tools built for 2025, not 1996.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;Here's a real query you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find products similar to what a user searched for&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;COSINE_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EMBED&lt;/span&gt;&lt;span class="p"&gt;(:&lt;/span&gt;&lt;span class="n"&gt;search_query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;user_preferences&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try doing that in PostgreSQL without multiple round-trips to external services.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;PostgreSQL&lt;/th&gt;
&lt;th&gt;SynapCores&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SQL Standard&lt;/td&gt;
&lt;td&gt;Full support&lt;/td&gt;
&lt;td&gt;Full support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACID Transactions&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector Search&lt;/td&gt;
&lt;td&gt;Extension (pgvector)&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embedding Generation&lt;/td&gt;
&lt;td&gt;External service&lt;/td&gt;
&lt;td&gt;Native (EMBED())&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ML Predictions&lt;/td&gt;
&lt;td&gt;External service&lt;/td&gt;
&lt;td&gt;Native (PREDICT())&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic Search&lt;/td&gt;
&lt;td&gt;Keyword-based&lt;/td&gt;
&lt;td&gt;True semantic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time Series&lt;/td&gt;
&lt;td&gt;Extension (TimescaleDB)&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AutoML&lt;/td&gt;
&lt;td&gt;External service&lt;/td&gt;
&lt;td&gt;Native (CREATE EXPERIMENT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal Data&lt;/td&gt;
&lt;td&gt;Manual pipelines&lt;/td&gt;
&lt;td&gt;Native (IMAGE, AUDIO, VIDEO)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OCR/Transcription&lt;/td&gt;
&lt;td&gt;External service&lt;/td&gt;
&lt;td&gt;Native functions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Document Version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last Updated&lt;/strong&gt;: December 2025&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://synapcores.com" rel="noopener noreferrer"&gt;https://synapcores.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://synapcores.com/blog/sqlv2-vs-postgresql" rel="noopener noreferrer"&gt;synapcores.com&lt;/a&gt; — SynapCores is a free, single-binary AI-native database (vector + graph + SQL + LLM).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>ai</category>
      <category>rust</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
