<?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: NodeDB</title>
    <description>The latest articles on DEV Community by NodeDB (@nodedb).</description>
    <link>https://dev.to/nodedb</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.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12894%2Ff2ea7bd7-b4b7-4864-a4a8-6c645bd17b7b.png</url>
      <title>DEV Community: NodeDB</title>
      <link>https://dev.to/nodedb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nodedb"/>
    <language>en</language>
    <item>
      <title>How a Database Really Works Underneath</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Sun, 05 Apr 2026 04:16:12 +0000</pubDate>
      <link>https://dev.to/nodedb/how-a-database-really-works-underneath-27g0</link>
      <guid>https://dev.to/nodedb/how-a-database-really-works-underneath-27g0</guid>
      <description>&lt;p&gt;One question keeps coming up when people start going deeper into databases:&lt;/p&gt;

&lt;p&gt;How does a database actually work underneath?&lt;/p&gt;

&lt;p&gt;Not the &lt;strong&gt;SQL&lt;/strong&gt; part. Not the API. Not the dashboard.&lt;/p&gt;

&lt;p&gt;The real part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the data actually stored?&lt;/li&gt;
&lt;li&gt;Is it kept in memory, on disk, or both?&lt;/li&gt;
&lt;li&gt;How are rows and columns laid out?&lt;/li&gt;
&lt;li&gt;Why does a query return quickly instead of scanning everything forever?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article is a general answer to that question.&lt;/p&gt;

&lt;p&gt;Different databases make different tradeoffs, but most serious databases are built from the same small set of ideas.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;A database is usually not one magical structure.&lt;/p&gt;

&lt;p&gt;It is several layers working together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Storage Format For Data On Disk&lt;/li&gt;
&lt;li&gt;An In-Memory Layer For Hot Data&lt;/li&gt;
&lt;li&gt;One Or More Index Structures&lt;/li&gt;
&lt;li&gt;A Query Engine&lt;/li&gt;
&lt;li&gt;A Transaction / Recovery Layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you run a query, the database does not start from scratch.&lt;/p&gt;

&lt;p&gt;It uses those layers together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;find the right pages or files&lt;/li&gt;
&lt;li&gt;use indexes if they help&lt;/li&gt;
&lt;li&gt;load needed data into memory&lt;/li&gt;
&lt;li&gt;execute the query&lt;/li&gt;
&lt;li&gt;return only the rows, columns, or records you asked for&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the basic picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the data is really stored
&lt;/h2&gt;

&lt;p&gt;Most databases store durable data on disk.&lt;/p&gt;

&lt;p&gt;That can mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;regular files on SSD or HDD&lt;/li&gt;
&lt;li&gt;memory-mapped files&lt;/li&gt;
&lt;li&gt;append-only log files&lt;/li&gt;
&lt;li&gt;page files&lt;/li&gt;
&lt;li&gt;SSTables in LSM-based systems&lt;/li&gt;
&lt;li&gt;custom binary file formats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact layout changes from one database to another, but the key point is simple:&lt;/p&gt;

&lt;p&gt;Memory is fast, but temporary. Disk is slower, but durable.&lt;/p&gt;

&lt;p&gt;So the normal design is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disk is the long-term source of truth&lt;/li&gt;
&lt;li&gt;memory is the fast working area&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why databases usually use both.&lt;/p&gt;

&lt;h2&gt;
  
  
  What lives in memory
&lt;/h2&gt;

&lt;p&gt;A database does not usually load the whole dataset into RAM.&lt;/p&gt;

&lt;p&gt;Instead, it keeps the parts it needs most often in memory.&lt;/p&gt;

&lt;p&gt;This memory layer is often called a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;buffer pool&lt;/li&gt;
&lt;li&gt;page cache&lt;/li&gt;
&lt;li&gt;block cache&lt;/li&gt;
&lt;li&gt;memory table&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;depending on the database design.&lt;/p&gt;

&lt;p&gt;The job is the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep hot data close&lt;/li&gt;
&lt;li&gt;avoid repeated disk reads&lt;/li&gt;
&lt;li&gt;batch writes when possible&lt;/li&gt;
&lt;li&gt;make queries much faster than raw disk access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when people ask, "Is the data stored in memory or in files?" the honest answer is usually:&lt;/p&gt;

&lt;p&gt;Both.&lt;/p&gt;

&lt;p&gt;The durable copy is on disk. The actively used working set is often in memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the data is laid out on disk
&lt;/h2&gt;

&lt;p&gt;This depends on the database model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Row-oriented storage
&lt;/h3&gt;

&lt;p&gt;Traditional relational databases usually think in rows.&lt;/p&gt;

&lt;p&gt;If you have a table like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;users(id, name, email, created_at)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;a row-oriented system tends to store one full row together:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[id, name, email, created_at]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;then the next row:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[id, name, email, created_at]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and so on.&lt;/p&gt;

&lt;p&gt;This is good for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OLTP workloads&lt;/li&gt;
&lt;li&gt;reading one record at a time&lt;/li&gt;
&lt;li&gt;inserts and updates on complete records&lt;/li&gt;
&lt;li&gt;transactional business data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why row storage is common in systems like PostgreSQL and MySQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Column-oriented storage
&lt;/h3&gt;

&lt;p&gt;Analytical databases often store data by column instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;all &lt;code&gt;id&lt;/code&gt; values together&lt;/li&gt;
&lt;li&gt;all &lt;code&gt;name&lt;/code&gt; values together&lt;/li&gt;
&lt;li&gt;all &lt;code&gt;email&lt;/code&gt; values together&lt;/li&gt;
&lt;li&gt;all &lt;code&gt;created_at&lt;/code&gt; values together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is useful when queries read a few columns across many rows, such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT created_at, count(*) ...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;instead of loading every field of every row.&lt;/p&gt;

&lt;p&gt;This is good for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;scans&lt;/li&gt;
&lt;li&gt;aggregations&lt;/li&gt;
&lt;li&gt;compression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;because values in the same column are often similar and compress well.&lt;/p&gt;

&lt;p&gt;That is why columnar engines show up in analytics, time-series, and warehouse-style systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Document storage
&lt;/h3&gt;

&lt;p&gt;Document databases usually store self-contained records, often in binary JSON-like formats.&lt;/p&gt;

&lt;p&gt;One record may contain:&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;"Farhan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&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="s2"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rust"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"profile"&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;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"KL"&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;p&gt;Instead of fixed columns, the document keeps structure inside the record itself.&lt;/p&gt;

&lt;p&gt;This is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fields vary across records&lt;/li&gt;
&lt;li&gt;nested data matters&lt;/li&gt;
&lt;li&gt;schema flexibility matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key-value storage
&lt;/h3&gt;

&lt;p&gt;A key-value database stores data as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;key -&amp;gt; value&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is the simplest mental model.&lt;/p&gt;

&lt;p&gt;It is often very fast for direct lookup, but weaker when you want rich relational or analytical behavior unless more layers are added.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a page is
&lt;/h2&gt;

&lt;p&gt;Most databases do not read and write one row at a time directly from disk.&lt;/p&gt;

&lt;p&gt;They usually organize storage into fixed-size blocks called pages.&lt;/p&gt;

&lt;p&gt;A page might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 KB&lt;/li&gt;
&lt;li&gt;8 KB&lt;/li&gt;
&lt;li&gt;16 KB&lt;/li&gt;
&lt;li&gt;or some other fixed size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why pages?&lt;/p&gt;

&lt;p&gt;Because disks and operating systems work better with chunked reads and writes than with tiny scattered operations.&lt;/p&gt;

&lt;p&gt;So instead of asking the disk for "row 187" directly, the database often asks for:&lt;/p&gt;

&lt;p&gt;"load the page that contains row 187."&lt;/p&gt;

&lt;p&gt;That page is then decoded in memory, and the database finds the exact row inside it.&lt;/p&gt;

&lt;p&gt;This is one of the most important ideas in database internals.&lt;/p&gt;

&lt;p&gt;Rows, documents, or index entries are usually inside pages, not floating around individually on disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  How indexes make lookups fast
&lt;/h2&gt;

&lt;p&gt;Without an index, a database often has to scan everything.&lt;/p&gt;

&lt;p&gt;If you ask:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT * FROM users WHERE email = 'a@example.com'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and there is no index on &lt;code&gt;email&lt;/code&gt;, the database may need to inspect row after row until it finds matches.&lt;/p&gt;

&lt;p&gt;That is called a full scan.&lt;/p&gt;

&lt;p&gt;Indexes exist to avoid that.&lt;/p&gt;

&lt;p&gt;An index is another structure built beside the main data so the database can find locations quickly.&lt;/p&gt;

&lt;p&gt;The two most common families are:&lt;/p&gt;

&lt;h3&gt;
  
  
  B-tree indexes
&lt;/h3&gt;

&lt;p&gt;This is the classic index structure in many relational databases.&lt;/p&gt;

&lt;p&gt;A B-tree keeps values in sorted order and makes lookup efficient.&lt;/p&gt;

&lt;p&gt;That helps with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;equality lookup&lt;/li&gt;
&lt;li&gt;range queries&lt;/li&gt;
&lt;li&gt;ordered scans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;If an index exists on &lt;code&gt;email&lt;/code&gt;, the database can search the index first, find the location of the matching row, then jump to the real data.&lt;/p&gt;

&lt;p&gt;Instead of scanning 10 million rows, it may touch only a small number of pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hash indexes
&lt;/h3&gt;

&lt;p&gt;Hash indexes are optimized for direct equality lookup.&lt;/p&gt;

&lt;p&gt;They are good for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id = 123&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;exact key lookup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are usually weaker for range queries like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;id &amp;gt; 1000&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  LSM-tree style indexes
&lt;/h3&gt;

&lt;p&gt;Many modern write-heavy systems use log-structured merge trees.&lt;/p&gt;

&lt;p&gt;Instead of updating one sorted tree in place all the time, they:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write sequentially&lt;/li&gt;
&lt;li&gt;buffer changes in memory&lt;/li&gt;
&lt;li&gt;flush sorted files to disk&lt;/li&gt;
&lt;li&gt;merge those files later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This often improves write throughput, but it changes the read path and compaction behavior.&lt;/p&gt;

&lt;p&gt;Systems like RocksDB and Cassandra use LSM-style ideas.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a database finds a row quickly
&lt;/h2&gt;

&lt;p&gt;Suppose a table has an index on &lt;code&gt;email&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you search for one email, the general path looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the query parser understands what you asked for&lt;/li&gt;
&lt;li&gt;the planner checks available indexes&lt;/li&gt;
&lt;li&gt;the engine chooses the &lt;code&gt;email&lt;/code&gt; index&lt;/li&gt;
&lt;li&gt;the index search finds the row location&lt;/li&gt;
&lt;li&gt;the relevant data page is loaded into memory if needed&lt;/li&gt;
&lt;li&gt;the row is read from that page&lt;/li&gt;
&lt;li&gt;the result is returned&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is why search can feel fast.&lt;/p&gt;

&lt;p&gt;The database is not "being smart" in a mystical way. It is using pre-built structures to avoid unnecessary work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why some queries are still slow
&lt;/h2&gt;

&lt;p&gt;Indexes help, but they do not solve everything.&lt;/p&gt;

&lt;p&gt;Queries can still be slow when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is no useful index&lt;/li&gt;
&lt;li&gt;the query needs too many rows anyway&lt;/li&gt;
&lt;li&gt;the planner chooses badly&lt;/li&gt;
&lt;li&gt;the data is fragmented&lt;/li&gt;
&lt;li&gt;too much data must be read from disk&lt;/li&gt;
&lt;li&gt;joins, sorts, or aggregations become expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So performance is not only about "having an index."&lt;/p&gt;

&lt;p&gt;It is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;storage layout&lt;/li&gt;
&lt;li&gt;memory pressure&lt;/li&gt;
&lt;li&gt;access pattern&lt;/li&gt;
&lt;li&gt;query plan&lt;/li&gt;
&lt;li&gt;workload shape&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What happens on writes
&lt;/h2&gt;

&lt;p&gt;Reads are only half the story.&lt;/p&gt;

&lt;p&gt;When a database writes data, it usually does not just overwrite the file carelessly.&lt;/p&gt;

&lt;p&gt;Serious databases care about crashes, partial writes, and recovery.&lt;/p&gt;

&lt;p&gt;So many of them use a write-ahead log, often called a &lt;code&gt;WAL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The general idea is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;record the change in a durable log first&lt;/li&gt;
&lt;li&gt;acknowledge the write&lt;/li&gt;
&lt;li&gt;apply or flush the data pages after that&lt;/li&gt;
&lt;li&gt;recover from the log if the system crashes mid-way&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is one reason databases can survive crashes better than a naive file format.&lt;/p&gt;

&lt;p&gt;The log is not only about speed. It is also about correctness and recovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why databases do not just use normal files directly
&lt;/h2&gt;

&lt;p&gt;People sometimes ask:&lt;/p&gt;

&lt;p&gt;Why not just save JSON files, CSV files, or objects directly?&lt;/p&gt;

&lt;p&gt;You can, for simple systems.&lt;/p&gt;

&lt;p&gt;But a real database gives you things normal files do not handle well on their own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indexing&lt;/li&gt;
&lt;li&gt;concurrency control&lt;/li&gt;
&lt;li&gt;transactions&lt;/li&gt;
&lt;li&gt;recovery&lt;/li&gt;
&lt;li&gt;query planning&lt;/li&gt;
&lt;li&gt;caching&lt;/li&gt;
&lt;li&gt;data integrity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A file can store data.&lt;/p&gt;

&lt;p&gt;A database is the machinery that makes that data searchable, writable, recoverable, and safe under load.&lt;/p&gt;

&lt;h2&gt;
  
  
  The simple mental model
&lt;/h2&gt;

&lt;p&gt;If you want the simplest mental model, think of a database like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data is stored durably on disk&lt;/li&gt;
&lt;li&gt;hot parts are kept in memory&lt;/li&gt;
&lt;li&gt;storage is organized into pages or files&lt;/li&gt;
&lt;li&gt;indexes point to where data lives&lt;/li&gt;
&lt;li&gt;a planner decides the cheapest way to answer a query&lt;/li&gt;
&lt;li&gt;logs protect writes and recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not the whole story, but it is enough to start reading database internals without feeling lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;A database is not just "a place to keep data."&lt;/p&gt;

&lt;p&gt;Underneath, it is a storage engine, memory system, indexing system, execution engine, and recovery system working together.&lt;/p&gt;

&lt;p&gt;The exact implementation changes from &lt;strong&gt;NodeDB&lt;/strong&gt; to &lt;strong&gt;PostgreSQL&lt;/strong&gt; to &lt;strong&gt;SQLite&lt;/strong&gt; to &lt;strong&gt;RocksDB&lt;/strong&gt; to &lt;strong&gt;ClickHouse&lt;/strong&gt; to &lt;strong&gt;MongoDB&lt;/strong&gt;, but the deeper ideas repeat.&lt;/p&gt;

&lt;p&gt;If you care about how databases really work, follow &lt;a href="https://dev.to/nodedb"&gt;NodeDB&lt;/a&gt;. I will keep writing more about storage engines, query planning, indexing, execution, and why database internals matter more than most application developers realize.&lt;/p&gt;

</description>
      <category>database</category>
      <category>nodedb</category>
      <category>sql</category>
      <category>storage</category>
    </item>
    <item>
      <title>How NodeDB Handles Multi-Model Differently</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Sun, 05 Apr 2026 00:09:47 +0000</pubDate>
      <link>https://dev.to/nodedb/how-nodedb-handles-multi-model-differently-o86</link>
      <guid>https://dev.to/nodedb/how-nodedb-handles-multi-model-differently-o86</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/nodedb/why-nodedb-might-be-a-better-multi-model-database-4jf5"&gt;previous article&lt;/a&gt;, I explained where &lt;strong&gt;NodeDB&lt;/strong&gt; stands in the current multi-model landscape.&lt;/p&gt;

&lt;p&gt;This post is about the next question: how does it actually work?&lt;/p&gt;

&lt;p&gt;The short answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one engine cannot do everything&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; splits the problem into core engine families, then builds specialized models on top of the right base, while keeping everything inside one database boundary.&lt;/p&gt;

&lt;p&gt;That is the core idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some models get their own real engine&lt;/li&gt;
&lt;li&gt;Some models grow from another strong native engine&lt;/li&gt;
&lt;li&gt;The planner knows the difference&lt;/li&gt;
&lt;li&gt;The user does not have to split the stack into more databases just because the workload widened&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Start from the core, not from the label
&lt;/h2&gt;

&lt;p&gt;When people say "multi-model database", the phrase usually hides one of several shortcuts.&lt;/p&gt;

&lt;p&gt;It can means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One strong database with extensions.&lt;/li&gt;
&lt;li&gt;One document system with a broader marketing surface.&lt;/li&gt;
&lt;li&gt;Several services under one product name.&lt;/li&gt;
&lt;li&gt;One generalized storage shape being stretched across too many models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not the route I wanted.&lt;/p&gt;

&lt;p&gt;The starting question for &lt;strong&gt;NodeDB&lt;/strong&gt; was simpler and harder at the same time:&lt;/p&gt;

&lt;p&gt;What are the real engine families needed if this database is supposed to handle broad workloads without turning every new requirement into more stitching?&lt;/p&gt;

&lt;p&gt;The current answer is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document&lt;/li&gt;
&lt;li&gt;Strict&lt;/li&gt;
&lt;li&gt;Graph&lt;/li&gt;
&lt;li&gt;Vector&lt;/li&gt;
&lt;li&gt;Columnar&lt;/li&gt;
&lt;li&gt;Key-Value&lt;/li&gt;
&lt;li&gt;Full-Text Search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then there are models that should be native, but do not need a fully separate engine family if they already have the right base:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-Series On Columnar&lt;/li&gt;
&lt;li&gt;Spatial On Columnar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That split matters because it avoids two bad extremes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pretending every model is the same under the hood&lt;/li&gt;
&lt;li&gt;Creating a separate mini-database for every capability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The core engine families
&lt;/h2&gt;

&lt;p&gt;The concrete part is what these engines actually are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Document&lt;/code&gt; is the flexible record engine. In NodeDB that means schemaless records, MessagePack storage, and CRDT-oriented sync paths for local-first use cases.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Strict&lt;/code&gt; is the structured record engine. It is closer to row-oriented access, uses a different storage shape, and is meant for workloads that care about predictable fields and faster direct access, not just schema validation on top of documents.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Graph&lt;/code&gt; is not document plus links. It has its own adjacency structures, traversal path, and graph-native operations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Vector&lt;/code&gt; is not "just add embeddings somewhere." It has its own ANN path, quantization path, and distance behavior.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Columnar&lt;/code&gt; is the analytical base: compression, scan-heavy reads, predicate pushdown, and the kind of layout you want when the workload is closer to analytics than OLTP.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Key-Value&lt;/code&gt; exists for direct lookup workloads that should be simple and cheap instead of routed through a heavier model.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Full-Text Search&lt;/code&gt; has its own ranking and tokenization behavior. BM25, stemming, stop-word handling, fuzzy matching, and hybrid retrieval should not be faked with normal filtering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the part many multi-model products blur. The names are easy. The backing engine choices are the hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why strict matters so much
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Strict&lt;/code&gt; is especially important here, because this is where a lot of multi-model systems get vague.&lt;/p&gt;

&lt;p&gt;From the outside, &lt;code&gt;Strict&lt;/code&gt; can look like document plus schema rules. That is not enough.&lt;/p&gt;

&lt;p&gt;In NodeDB, &lt;code&gt;Strict&lt;/code&gt; exists because structured workloads need a different path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed field expectations&lt;/li&gt;
&lt;li&gt;Different storage behavior&lt;/li&gt;
&lt;li&gt;Different access patterns&lt;/li&gt;
&lt;li&gt;Different planner assumptions&lt;/li&gt;
&lt;li&gt;Different performance goals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the repo direction today, strict is treated as a row-like storage mode with direct field access, not just a document collection that rejects invalid writes.&lt;/p&gt;

&lt;p&gt;That distinction matters. If a multi-model database cannot give structured data a serious path of its own, then the "multi-model" story is already weak for a large class of real applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Specialized models should grow from the right foundation
&lt;/h2&gt;

&lt;p&gt;This is where &lt;code&gt;Time-Series&lt;/code&gt; and &lt;code&gt;Spatial&lt;/code&gt; fit.&lt;/p&gt;

&lt;p&gt;I do not think every model deserves its own isolated engine family just for the sake of appearances. Sometimes the right design is to start from a strong native base and specialize from there.&lt;/p&gt;

&lt;p&gt;In NodeDB, that base is &lt;code&gt;Columnar&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That is why time-series sits there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Columnar layout fits scan-heavy reads&lt;/li&gt;
&lt;li&gt;Compression matters&lt;/li&gt;
&lt;li&gt;Aggregation matters&lt;/li&gt;
&lt;li&gt;Retention and rollups matter more than point-update behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current repo direction already reflects this. Time-series is described as a columnar profile with ILP ingest, continuous aggregation, PromQL support, and time-oriented SQL functions.&lt;/p&gt;

&lt;p&gt;Spatial follows the same idea. It belongs near columnar because analytical and geospatial workloads often overlap, but it still has its own native behavior: spatial indexes, geohash/H3-style locality tools, and geometry predicates.&lt;/p&gt;

&lt;p&gt;So the pattern is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separate engine families where the workload is genuinely different&lt;/li&gt;
&lt;li&gt;Specialized native profiles where another engine already gives the right foundation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How NodeDB keeps coherence
&lt;/h2&gt;

&lt;p&gt;This is the part that decides whether the whole design works or falls apart.&lt;/p&gt;

&lt;p&gt;If you only collect engines under one brand, you still have not solved multi-model. You have just moved the boxes closer together.&lt;/p&gt;

&lt;p&gt;The harder problem is coherence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does a mixed workload stay in one system?&lt;/li&gt;
&lt;li&gt;How does the planner choose the right path for each model?&lt;/li&gt;
&lt;li&gt;How do you avoid weakening every model just to make the interface look uniform?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For NodeDB, the answer is not one generic query path for everything. That would flatten the models.&lt;/p&gt;

&lt;p&gt;The answer is dedicated query and planner treatment where model semantics really differ, while still keeping them in one database boundary.&lt;/p&gt;

&lt;p&gt;That is especially important for &lt;code&gt;Strict&lt;/code&gt;, because strict should not be planned like schemaless document. It should give the planner stronger assumptions.&lt;/p&gt;

&lt;p&gt;It is also important for &lt;code&gt;Vector&lt;/code&gt;, &lt;code&gt;Graph&lt;/code&gt;, and &lt;code&gt;Full-Text Search&lt;/code&gt;, because each of them has search and ranking behavior that should not be reduced to ordinary filtering.&lt;/p&gt;

&lt;p&gt;So coherence here means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One database boundary&lt;/li&gt;
&lt;li&gt;Shared system-level coordination&lt;/li&gt;
&lt;li&gt;Model-specific execution paths where needed&lt;/li&gt;
&lt;li&gt;Fewer cross-system hops when workloads mix&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a more useful definition than simply saying "one query language" or "one product."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this is different from pseudo multi-model
&lt;/h2&gt;

&lt;p&gt;This is the distinction I care about most.&lt;/p&gt;

&lt;p&gt;Pseudo multi-model usually fails in one of two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything is pushed through one generic core, so the models exist but feel weak&lt;/li&gt;
&lt;li&gt;Every serious model becomes another extension, service, or external database, so the models stay stronger but the user absorbs the integration cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; is trying to stay between those two failures.&lt;/p&gt;

&lt;p&gt;That is why the design is split the way it is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real engine families where the workload needs real specialization&lt;/li&gt;
&lt;li&gt;Native profiles where a strong base already exists&lt;/li&gt;
&lt;li&gt;Planner-level respect for the differences&lt;/li&gt;
&lt;li&gt;One database boundary for mixed workloads&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this means in practice
&lt;/h2&gt;

&lt;p&gt;If NodeDB works the way I want it to work, the practical result should be different in a few concrete ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graph queries should follow graph-native structures and algorithms instead of pretending edges are just another document field.&lt;/li&gt;
&lt;li&gt;Vector search should use a real ANN path with its own indexing and quantization choices, not a thin side feature.&lt;/li&gt;
&lt;li&gt;Strict collections should behave like a serious structured model with stronger planner assumptions and faster direct field access.&lt;/li&gt;
&lt;li&gt;Time-series should inherit the strengths of columnar execution instead of being simulated on top of an unsuitable engine.&lt;/li&gt;
&lt;li&gt;Spatial should get native spatial behavior without forcing the user into another database.&lt;/li&gt;
&lt;li&gt;A workload that mixes records, vectors, search, and graph should stay inside one system instead of turning into a chain of remote calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those tests are better than asking whether the product can list many model names.&lt;/p&gt;




&lt;h2&gt;
  
  
  The risk
&lt;/h2&gt;

&lt;p&gt;This approach is harder for obvious reasons.&lt;/p&gt;

&lt;p&gt;It is easier to start with fewer engines.&lt;br&gt;
It is easier to flatten more behavior into one generic layer.&lt;br&gt;
It is easier to delay the planner work.&lt;br&gt;
It is easier to turn more models into later add-ons.&lt;/p&gt;

&lt;p&gt;The risk is whether NodeDB can keep this depth and coherence once real workloads start pushing every corner of the design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I still prefer this route
&lt;/h2&gt;

&lt;p&gt;Even with that risk, I still think this is the more honest way to build a true multi-model database.&lt;/p&gt;

&lt;p&gt;The point is not only to support many models.&lt;/p&gt;

&lt;p&gt;The point is to support them with the right engine shape, the right planner behavior, and the right database boundary.&lt;/p&gt;

&lt;p&gt;If that holds up, then &lt;strong&gt;NodeDB&lt;/strong&gt; becomes interesting for a real reason, not just because it can claim a long feature list.&lt;/p&gt;

&lt;p&gt;If you want to follow how &lt;strong&gt;NodeDB&lt;/strong&gt; works at the engine level, where this design holds up, and where it still needs to prove itself, follow &lt;a href="https://dev.to/nodedb"&gt;NodeDB&lt;/a&gt;. I will keep sharing the architecture, tradeoffs, and deeper implementation decisions as the database evolves.&lt;/p&gt;

</description>
      <category>nodedb</category>
      <category>database</category>
      <category>designsystem</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>Why NodeDB Might Be a Better Multi-Model Database</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Sat, 04 Apr 2026 22:34:22 +0000</pubDate>
      <link>https://dev.to/nodedb/why-nodedb-might-be-a-better-multi-model-database-4jf5</link>
      <guid>https://dev.to/nodedb/why-nodedb-might-be-a-better-multi-model-database-4jf5</guid>
      <description>&lt;p&gt;After comparing the current multi-model databases, I think the category has a real opportunity.&lt;/p&gt;

&lt;p&gt;The opportunity is obvious: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern applications keep pushing different data models into the same product. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Document, graph, vector, time-series, search, spatial, sync, analytics pressure, and relational workloads do not stay in neat separate boxes for very long.&lt;/p&gt;

&lt;p&gt;The problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most current solutions require a bad compromise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some systems cover many models, but do not make them equally worth trusting. Some reduce the number of boxes in the architecture diagram, but still leave the user carrying too much integration work. Some look fine early and then start pushing the real cost into the next stage of the product.&lt;/p&gt;

&lt;p&gt;That is the gap &lt;strong&gt;NodeDB&lt;/strong&gt; is trying to enter. I am not claiming it has already solved it. I am saying it is aimed at the right problem.&lt;/p&gt;

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

&lt;p&gt;If &lt;strong&gt;PostgreSQL&lt;/strong&gt; represents seriousness, and &lt;strong&gt;ArcadeDB&lt;/strong&gt; represents engine ambition, those are two of the things I want &lt;strong&gt;NodeDB&lt;/strong&gt; to preserve.&lt;/p&gt;

&lt;p&gt;I do not want a database that wins by appearance. I do not want a product that looks broad only because it can list many model names on a landing page. And I do not want a system that becomes "multi-model" only after the user starts adding more external databases, more services, and more coordination outside the database itself.&lt;/p&gt;

&lt;p&gt;So where does &lt;strong&gt;NodeDB&lt;/strong&gt; stand in this landscape?&lt;/p&gt;

&lt;p&gt;Somewhere between respect for what already works and frustration with what still feels unfinished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; is still the_ serious baseline for engineering quality, operational trust, and technical discipline_. I take that seriously. If NodeDB cannot compete with that level of seriousness, then there is no point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArcadeDB&lt;/strong&gt; matters for a different reason. It shows that a &lt;em&gt;broader native multi-model engine can still care about engine quality&lt;/em&gt;. It is one of the few systems in this space that feels like it actually wants to own the hard parts instead of only smoothing over them at the product layer.&lt;/p&gt;

&lt;p&gt;That combination matters to me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seriousness&lt;/li&gt;
&lt;li&gt;Engine ambition&lt;/li&gt;
&lt;li&gt;Broad native model support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  What NodeDB is trying to avoid
&lt;/h2&gt;

&lt;p&gt;There are THREE patterns I want NodeDB to avoid.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;broad claims without serious implementations&lt;/strong&gt;. This is the easiest trap in the category. A database says it supports document, graph, vector, search, and time-series, but once you look closer, too many of those models do not feel strong enough to carry real workloads. I do not want &lt;strong&gt;NodeDB&lt;/strong&gt; to win by vocabulary.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;one database on the surface, but too much stitching outside the database&lt;/strong&gt;. This is the problem with extension sprawl, service sprawl, and platform sprawl. Even if each extra piece is defensible on its own, the user is still the one carrying the integration burden. I want NodeDB to reduce that burden, not rename it.&lt;/p&gt;

&lt;p&gt;The third is a &lt;strong&gt;design that works early but forces re-architecture later&lt;/strong&gt;. This is the long-term failure mode I care about most. A lot of systems feel good at the first stage, then requirements widen, and suddenly the user is back to splitting the stack again.&lt;/p&gt;

&lt;h2&gt;
  
  
  What NodeDB is trying to do differently
&lt;/h2&gt;

&lt;p&gt;The goal is not just to support more models. The goal is to support them in a way that still feels coherent in one database.&lt;/p&gt;

&lt;p&gt;That means keeping more capability inside one real database boundary instead of pushing the user toward more external systems. It means making wider support and stronger implementations grow together. And it means treating future architecture churn as a design problem now, not as something to dump on the user later.&lt;/p&gt;

&lt;p&gt;That is also why I keep all the major models in view.&lt;/p&gt;

&lt;p&gt;If &lt;strong&gt;NodeDB&lt;/strong&gt; is going to be worth building, it cannot stop at only one or two native models and call that enough. It has to think seriously about document, graph, vector, time-series, spatial, search, and relational-style workloads as part of one coherent database direction.&lt;/p&gt;

&lt;p&gt;Not because every project needs every model on day one.&lt;/p&gt;

&lt;p&gt;But because the problem does not get better if every database starts narrow and then spends years teaching users how to bolt the rest around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why that makes NodeDB interesting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; is still the new kid in the block. That is a disadvantage in obvious ways: less market trust, less ecosystem gravity, less history, less proof.&lt;/p&gt;

&lt;p&gt;It is also an advantage. It does not have to inherit every compromise that older systems normalized. It can start from a harder question: what would a multi-model database look like if it took both width and depth seriously from the beginning?&lt;/p&gt;

&lt;p&gt;That is what makes it interesting to me. Not because I think the answer is easy, but because too many current systems still make me choose between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Narrow but dependable&lt;/li&gt;
&lt;li&gt;Broad but not convincing enough&lt;/li&gt;
&lt;li&gt;Practical, but still held together by too many moving pieces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; is my attempt to push against that tradeoff. Whether it succeeds is a different question. But that is the direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how would I score &lt;strong&gt;NodeDB&lt;/strong&gt; right now?
&lt;/h2&gt;

&lt;p&gt;If I use the same seven dimensions from the previous article, this is where I would place &lt;strong&gt;NodeDB&lt;/strong&gt; today.&lt;/p&gt;

&lt;p&gt;These are not victory scores.&lt;/p&gt;

&lt;p&gt;They are directional scores from someone building the system and using it, while also being honest about what still needs time, proof, and pressure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;NodeDB is being built around broad native model support inside one real database boundary rather than around extensions, outside services, or separate databases.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;The whole point of NodeDB is to make the models strong enough to stand on their own instead of existing only as surface-level support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;The design is aiming for serious engine-level control rather than convenience-first layering, which gives it very strong upside if the implementation keeps holding up.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;I am trying to make it friendly, but that still needs to be proven in wider use, not just intended.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Keeping more capability inside one database boundary should help, but operational simplicity still has to be proven over time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;3/10&lt;/td&gt;
&lt;td&gt;This is where NodeDB is obviously weak compared with established systems. It is still young.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;It is already useful for my own work, but it has not yet been tested across enough domains and use cases to justify a higher score.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is the honest picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; scores high where I think the category still needs a stronger answer: native breadth, model strength, and the attempt to keep them inside one real database boundary instead of spreading them across too many external pieces.&lt;/p&gt;

&lt;p&gt;It scores lower where new systems are supposed to score lower: ecosystem, maturity, and broad production trust.&lt;/p&gt;

&lt;p&gt;If a new database starts with weak depth and weak direction, then low maturity just makes it easier to dismiss. But if a new database starts with a stronger technical direction, then the real question becomes whether it can survive long enough to earn the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should try it now?
&lt;/h2&gt;

&lt;p&gt;At this stage, I would not advise established production teams to switch databases just because NodeDB looks interesting.&lt;/p&gt;

&lt;p&gt;That would be irresponsible.&lt;/p&gt;

&lt;p&gt;If you already have a production system running on something stable, the migration cost, operational risk, and unknowns are still too high.&lt;/p&gt;

&lt;p&gt;But I do think &lt;strong&gt;NodeDB&lt;/strong&gt; is worth considering for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Startups&lt;/li&gt;
&lt;li&gt;New applications&lt;/li&gt;
&lt;li&gt;Greenfield systems&lt;/li&gt;
&lt;li&gt;Teams that know they will need broader native model support early&lt;/li&gt;
&lt;li&gt;Builders who want to try a different multi-model direction before they get locked into extension sprawl or service sprawl&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not "everyone should move now."&lt;/p&gt;

&lt;p&gt;More like: if you are early, if your requirements are broad, and if you want to bet on a database trying to solve this problem differently, then NodeDB is worth serious attention.&lt;/p&gt;

&lt;p&gt;In the next post, I will go deeper into how &lt;strong&gt;NodeDB&lt;/strong&gt; handles multi-model differently and why I think that design matters more than just claiming support for more models&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/NodeDB-Lab/nodedb" rel="noopener noreferrer"&gt;NodeDB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nodedb</category>
      <category>database</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Comparing Today's Multi-Model Databases</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Sat, 04 Apr 2026 02:41:42 +0000</pubDate>
      <link>https://dev.to/nodedb/comparing-todays-multi-model-databases-4c31</link>
      <guid>https://dev.to/nodedb/comparing-todays-multi-model-databases-4c31</guid>
      <description>&lt;p&gt;Multi-model databases sound simple on paper.&lt;/p&gt;

&lt;p&gt;One database, many data models, less architecture sprawl.&lt;/p&gt;

&lt;p&gt;That is the pitch.&lt;/p&gt;

&lt;p&gt;The reality is less neat.&lt;/p&gt;

&lt;p&gt;Once you look closely, "multi-model" can mean very different things. Sometimes it means one engine with several models that actually work together. Sometimes it means one database plus a growing pile of attached capabilities. Sometimes it means multiple APIs over one cloud platform. Sometimes it means a strong idea that still has rough execution.&lt;/p&gt;

&lt;p&gt;So if you are evaluating the current landscape, the label alone is not enough.&lt;/p&gt;

&lt;p&gt;You need to ask harder questions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How native is the multi-model support?&lt;/li&gt;
&lt;li&gt;Does the database feel coherent, or just broad?&lt;/li&gt;
&lt;li&gt;Does it stay pleasant once the workload becomes real?&lt;/li&gt;
&lt;li&gt;Are you buying a database, or a stack of compromises with a friendly landing page?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This post is my attempt to compare some of the most prominent multi-model options people talk about today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL + extensions&lt;/li&gt;
&lt;li&gt;SurrealDB&lt;/li&gt;
&lt;li&gt;Couchbase&lt;/li&gt;
&lt;li&gt;ArangoDB&lt;/li&gt;
&lt;li&gt;OrientDB&lt;/li&gt;
&lt;li&gt;ArcadeDB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For context, this is not a benchmark post.&lt;/p&gt;

&lt;p&gt;The ratings here are closer to review scores than benchmark numbers. They are editorial judgments about architecture, feature depth, workflow quality, operational shape, and how convincing each database feels as a serious multi-model system today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real fault lines
&lt;/h2&gt;

&lt;p&gt;Most comparison posts flatten all of these databases into one category and then act surprised when the tradeoffs look inconsistent.&lt;/p&gt;

&lt;p&gt;They are inconsistent because these systems are solving different versions of the problem.&lt;/p&gt;

&lt;p&gt;There are at least &lt;strong&gt;five distinct approaches&lt;/strong&gt; hiding under the same "multi-model" label:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extension-driven breadth&lt;/strong&gt;: PostgreSQL + extensions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native engine multi-model&lt;/strong&gt;: ArangoDB, OrientDB, ArcadeDB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document-first platform expansion&lt;/strong&gt;: Couchbase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern unified developer story&lt;/strong&gt;: SurrealDB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API / platform interpretation&lt;/strong&gt;: Cosmos DB and similar systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not think all five belong in the same category in the strict database sense, even if vendors market them that way.&lt;/p&gt;

&lt;p&gt;If you do not separate those approaches, the category stops making sense.&lt;/p&gt;

&lt;p&gt;That is also why direct one-line comparisons are often misleading. A database can score lower on native support and still be the safer production choice. Another can score higher on native support and still be the riskier operational bet.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I am judging them
&lt;/h2&gt;

&lt;p&gt;Each database gets rated on the same seven dimensions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Native multi-model support&lt;/li&gt;
&lt;li&gt;Multi-model depth&lt;/li&gt;
&lt;li&gt;Performance potential&lt;/li&gt;
&lt;li&gt;Developer experience&lt;/li&gt;
&lt;li&gt;Operational simplicity&lt;/li&gt;
&lt;li&gt;Ecosystem / maturity&lt;/li&gt;
&lt;li&gt;Production confidence&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first category matters most.&lt;/p&gt;

&lt;p&gt;I am not asking whether a database can be stretched into several roles. Many can. I am asking whether multiple models are part of the actual design, or whether the user is doing the integration work by hand.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Native multi-model support&lt;/code&gt; and &lt;code&gt;multi-model depth&lt;/code&gt; are not the same thing.&lt;/p&gt;

&lt;p&gt;A database can be very native and still be shallow. That usually means the models are built into the product and query language, but the actual implementations still feel lighter than specialized systems.&lt;/p&gt;

&lt;p&gt;A database can also be less native and still be deep. &lt;strong&gt;PostgreSQL&lt;/strong&gt; is the clearest example: many of its strongest non-relational capabilities come from extensions, but some of those extensions are still serious pieces of engineering.&lt;/p&gt;

&lt;p&gt;For this article, a higher &lt;code&gt;nativeness&lt;/code&gt; score means &lt;strong&gt;the user pays less integration penalty when new models show up&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you need to add a separate external database just to get one more model, that should hurt the score a lot.&lt;/p&gt;

&lt;p&gt;If you can stay inside the same database but need an extension, that is still a penalty, but a smaller one.&lt;/p&gt;

&lt;p&gt;If the model is already part of the same core engine or the same native database story, that should score much better.&lt;/p&gt;

&lt;p&gt;So &lt;code&gt;nativeness&lt;/code&gt; here is not just about marketing language. It is about &lt;strong&gt;how much stack stitching the user still has to do when requirements expand&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The other categories matter because the category has a bad habit of &lt;strong&gt;hiding tradeoffs behind a neat label&lt;/strong&gt;. A database can look impressive in a product diagram and still feel second-class once real workloads arrive.&lt;/p&gt;




&lt;h2&gt;
  
  
  PostgreSQL + extensions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; is not a native multi-model database in the strict sense.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Relational&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Core identity and strongest model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document / JSON&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Via &lt;code&gt;json&lt;/code&gt; / &lt;code&gt;jsonb&lt;/code&gt;, but still within PostgreSQL’s relational engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spatial&lt;/td&gt;
&lt;td&gt;Extension&lt;/td&gt;
&lt;td&gt;Usually via &lt;code&gt;PostGIS&lt;/code&gt;; powerful, but not part of the core engine identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series&lt;/td&gt;
&lt;td&gt;Extension&lt;/td&gt;
&lt;td&gt;Usually via &lt;code&gt;TimescaleDB&lt;/code&gt;; serious in practice, but not core-native PostgreSQL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector&lt;/td&gt;
&lt;td&gt;Extension&lt;/td&gt;
&lt;td&gt;Usually via &lt;code&gt;pgvector&lt;/code&gt;; practical, but still extension-led.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph&lt;/td&gt;
&lt;td&gt;Extension / Application-level&lt;/td&gt;
&lt;td&gt;Usually via &lt;code&gt;Apache AGE&lt;/code&gt; or application-side modeling, not core-native graph semantics.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It is still the practical benchmark that every serious multi-model system ends up being measured against.&lt;/p&gt;

&lt;p&gt;Why? Because PostgreSQL &lt;strong&gt;keeps absorbing more territory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Relational data is its home ground. JSON and &lt;code&gt;jsonb&lt;/code&gt; made document-style usage normal. PostGIS covers geospatial workloads. TimescaleDB pushed hard into time-series. &lt;code&gt;pgvector&lt;/code&gt; made vector search part of the conversation for mainstream teams. There are also graph-style options like Apache AGE if you want to keep pushing further.&lt;/p&gt;

&lt;p&gt;That is a remarkable amount of coverage.&lt;/p&gt;

&lt;p&gt;The problem is that coverage is not the same as coherence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL + extensions is powerful, but the integration burden shifts toward the user&lt;/strong&gt;. You decide which extension owns which problem. You learn the quirks, upgrade risks, operational differences, and uneven ergonomics between those pieces. The core database is stable. The workload-specific stack becomes your responsibility.&lt;/p&gt;

&lt;p&gt;That is the PostgreSQL tradeoff in one sentence: &lt;strong&gt;Best-in-class practical confidence, weaker multi-model integrity&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;It is not truly native multi-model. Even when extensions keep you inside the same database, the user still pays a large stitching and compatibility penalty.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;The feature depth can be excellent, but it is uneven and fragmented by extension boundaries.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;PostgreSQL is a serious engine, and some extensions are very strong, but cross-model optimization is not one coherent story.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;SQL, tools, docs, and ecosystem are excellent, though the experience becomes rougher as extensions pile up.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;Running PostgreSQL is easy by industry standards. Running a stitched stack of extensions across many projects is not.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;Nobody in this list beats PostgreSQL here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;If you want the safest broad platform, this is still the default answer.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trust review:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;extremely high, but only if you accept that you are trusting a platform plus an integration strategy, not one native multi-model engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PostgreSQL’s center is still SQL. JSON support is strong, &lt;code&gt;jsonb&lt;/code&gt; has serious operator support, and GIN indexing makes document-style querying practical. But every added model brings its own syntax, extension behavior, and planning assumptions. There is no single multi-model query language tying the whole thing together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is still one of the strongest storage and execution engines in the industry, but the important part is where the extra models live. &lt;code&gt;jsonb&lt;/code&gt; stays inside PostgreSQL. &lt;strong&gt;PostGIS&lt;/strong&gt;, &lt;strong&gt;TimescaleDB&lt;/strong&gt;, &lt;code&gt;pgvector&lt;/code&gt;, and graph-oriented options live in different layers around that core. The engine is first-class. The multi-model story is distributed across extensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only partially native. PostgreSQL can absolutely play multi-model in real production systems, but it does that through a strong core plus specialized additions, not through one database designed from day one around equally native relational, graph, vector, and time-series semantics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relational workloads&lt;/li&gt;
&lt;li&gt;Operational SQL&lt;/li&gt;
&lt;li&gt;Mature production tooling&lt;/li&gt;
&lt;li&gt;Extension-backed specialization when the team knows exactly what it is doing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-model coherence&lt;/li&gt;
&lt;li&gt;Unified multi-model query experience&lt;/li&gt;
&lt;li&gt;Workloads that force several extensions to behave like one native system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams that want the safest broad platform&lt;/li&gt;
&lt;li&gt;Companies with strong PostgreSQL expertise&lt;/li&gt;
&lt;li&gt;Workloads where extension sprawl is still manageable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams that want one native multi-model system instead of a strong core plus many additions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The safest powerful option, and still the practical benchmark, but the user pays for multi-model breadth with growing integration debt.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  SurrealDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SurrealDB&lt;/strong&gt; has one of the strongest product visions in this space.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Document&lt;/td&gt;
&lt;td&gt;Native but shallow&lt;/td&gt;
&lt;td&gt;SurrealDB itself describes the system as being, at its core, document-oriented.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph / relations&lt;/td&gt;
&lt;td&gt;Native but shallow&lt;/td&gt;
&lt;td&gt;Relations and traversal are real, but this still does not look like a deep graph-tooling database.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value style access&lt;/td&gt;
&lt;td&gt;Backed by KV storage layer&lt;/td&gt;
&lt;td&gt;The engine runs over KV backends such as RocksDB, SurrealKV, TiKV, and browser IndexedDB. This is more a storage foundation than a separate first-class model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector&lt;/td&gt;
&lt;td&gt;Native but shallow&lt;/td&gt;
&lt;td&gt;Present in the product, but not obviously a deep specialized vector engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series&lt;/td&gt;
&lt;td&gt;Native but shallow&lt;/td&gt;
&lt;td&gt;Present in the product, but their own docs admit specialized TSDBs currently do retention and compression better.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-text / search&lt;/td&gt;
&lt;td&gt;Native direction&lt;/td&gt;
&lt;td&gt;Present, but not a deep search-first system.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It understands the modern developer instinct very well: fewer hops, one system, SQL-like querying, document and graph ideas in one place, and a cleaner story than bolting together half a dozen tools. That is why it gets attention so quickly.&lt;/p&gt;

&lt;p&gt;The problem is not coverage. &lt;strong&gt;SurrealDB&lt;/strong&gt; covers a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem is depth.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Too many of its models still feel like lighter versions of the real thing. Graph is present, but not as a rich graph-tooling environment. Time-series is present, but not like a serious analytics-grade TSDB. Vector is present, but not in a way that makes it look like a best-in-class vector engine.&lt;/p&gt;

&lt;p&gt;The architectural reason matters here. Much of the multi-model story is being pushed through one generalized KV-backed foundation. And because that foundation can itself sit on top of other KV engines, many models end up feeling like interpretations over the same storage pattern rather than deeply specialized implementations. The product surface is broad. The engine-level realization is still shallow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;Multi-model is deeply part of the core product and engine identity, not just an add-on.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;3/10&lt;/td&gt;
&lt;td&gt;Broad and ambitious, but too many models feel much lighter than the real specialized versions they resemble.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Good enough to be interesting, but I still see more promise than proof.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Strong product storytelling, approachable model, modern appeal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Simpler than managing a stitched stack, but simplicity in concept is not the same as maturity in production.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;Still young compared with the more established systems here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;I would watch it closely, but I would still treat it as a bet rather than a settled answer.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trust review:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Medium. Easy to understand, easy to want, still much harder to trust deeply than the product story suggests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SurrealQL&lt;/strong&gt; is one of SurrealDB’s real strengths. It gives the database a strong unified surface and makes the system feel coherent much earlier than many other multi-model products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SurrealDB&lt;/strong&gt; presents itself as one native multi-model database rather than a database plus extensions. That part is fair. But once you look at the architecture docs, the system is clearly layered over a key-value backend story. That does not make it fake. It does explain the shallowness. The “many models” claim is being realized through one broader document/KV-oriented engine shape, sometimes itself sitting on top of another KV engine, rather than through several equally deep model-specific engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More native than PostgreSQL + extensions or Couchbase’s service-style expansion, but still not equally convincing across every claimed model. The claim is structurally native at the product and query layer. At the engine layer, it still feels more like one broader KV-backed system interpreting many models than several deeply realized model-specific implementations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product vision&lt;/li&gt;
&lt;li&gt;Modern developer appeal&lt;/li&gt;
&lt;li&gt;Unified story around documents, relations, and fewer system hops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hard production confidence&lt;/li&gt;
&lt;li&gt;Deep capability maturity across every advertised area&lt;/li&gt;
&lt;li&gt;Trust under heavier or less forgiving workloads&lt;/li&gt;
&lt;li&gt;Several models feeling lighter than their specialized counterparts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams willing to bet on direction&lt;/li&gt;
&lt;li&gt;Builders who care a lot about developer-facing coherence&lt;/li&gt;
&lt;li&gt;Projects where the vision aligns closely with the workload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conservative production environments that need long-proven operational confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the strongest visions in the category, but still too broad and too light in too many places to count as one of the most convincing finished implementations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Couchbase
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Couchbase&lt;/strong&gt; sits in an interesting middle ground.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Document&lt;/td&gt;
&lt;td&gt;Native core&lt;/td&gt;
&lt;td&gt;Main center of gravity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value&lt;/td&gt;
&lt;td&gt;Native core&lt;/td&gt;
&lt;td&gt;Part of the core operational model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query over JSON documents&lt;/td&gt;
&lt;td&gt;Native query layer&lt;/td&gt;
&lt;td&gt;Via &lt;code&gt;SQL++&lt;/code&gt;; not a separate model so much as a strong query surface over document data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-text search&lt;/td&gt;
&lt;td&gt;Platform service&lt;/td&gt;
&lt;td&gt;Official part of the platform, but not an equal core data model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analytics&lt;/td&gt;
&lt;td&gt;Platform service&lt;/td&gt;
&lt;td&gt;Official part of the platform, but not an equal core data model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Eventing&lt;/td&gt;
&lt;td&gt;Platform service&lt;/td&gt;
&lt;td&gt;Official part of the platform, but not an equal core data model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile sync / edge sync&lt;/td&gt;
&lt;td&gt;Platform service&lt;/td&gt;
&lt;td&gt;Official part of the platform, but not an equal core data model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph&lt;/td&gt;
&lt;td&gt;Not core native&lt;/td&gt;
&lt;td&gt;Not a real native graph database identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It is not usually the first database people name in multi-model debates, but it has quietly built a broader platform than many people realize. Document data is still the center, but key-value access, SQL++ querying, full-text search, analytics, eventing, and mobile sync make it much more than "just a document database."&lt;/p&gt;

&lt;p&gt;That broader platform story is real.&lt;/p&gt;

&lt;p&gt;So is its production credibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Couchbase&lt;/strong&gt; has been around, it has enterprise weight, and it knows how to solve operationally serious problems. If you care about distributed document-heavy workloads with search, analytics, eventing, and mobile sync, it has more depth than a lot of trendier names.&lt;/p&gt;

&lt;p&gt;But it still does not feel like the cleanest native multi-model database in the stricter sense.&lt;/p&gt;

&lt;p&gt;It feels more like a strong &lt;strong&gt;document-first platform that expanded intelligently around its center of gravity&lt;/strong&gt;, with multiple surrounding services rather than multiple equal native models.&lt;/p&gt;

&lt;p&gt;That is why I would place it closer to &lt;strong&gt;Cosmos DB&lt;/strong&gt; than to &lt;strong&gt;ArangoDB&lt;/strong&gt; in category shape, even though it is still stronger than &lt;strong&gt;Cosmos DB&lt;/strong&gt; at the database-core level. &lt;strong&gt;Couchbase&lt;/strong&gt; has a real native database center. The broader multi-model feeling comes from the platform built around that center, not from one engine where every model is equally native.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;Broader than a simple document store, but the surrounding services still mean the user is assembling a platform rather than getting one truly native equal-model engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;Real depth in document-heavy environments plus strong surrounding services, but still not equal native depth across several first-class models.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Strong distributed performance profile in the workloads it targets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;Solid, especially if you buy into SQL++ and the surrounding platform.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;Much cleaner than stitching many systems yourself, though still a substantial platform to run well.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;Mature, enterprise-known, operationally serious.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Strong for teams whose needs align with its shape, even if it is not the cleanest true multi-model engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trust review:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;High in its zone. Less compelling as a general answer to every multi-model ambition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Couchbase&lt;/strong&gt; has a clearer center than many people expect. SQL++ gives it a SQL-like way to query JSON documents, and that matters. But the broader platform also depends on distinct services like Search, Analytics, and Eventing. That means the user experience is broader than a plain document store, while still not feeling like one single multi-model language across equal models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Couchbase&lt;/strong&gt; feels like a distributed document database that grew outward into a platform. That platform is substantial: query, search, analytics, eventing, and mobile sync are all real capabilities. But they are also separate services with their own architecture, which is why the system feels platform-first more than engine-pure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Moderately native&lt;/em&gt; in the sense that the capabilities are part of the official platform, not random side tools. But it is still not native in the stricter sense of one engine equally expressing multiple models as first-class peers. It is closer to a document-first database plus first-party services than to a truly native multi-model engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document-heavy applications&lt;/li&gt;
&lt;li&gt;Mobile sync and edge-aware scenarios&lt;/li&gt;
&lt;li&gt;Distributed operational deployments with a strong platform wrapper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native multi-model purity&lt;/li&gt;
&lt;li&gt;Graph-first or deeply unified model semantics&lt;/li&gt;
&lt;li&gt;"one engine, many truly equal models" expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams centered on document workloads that also need search, analytics, events, and sync&lt;/li&gt;
&lt;li&gt;Organizations that want a mature platform more than a category-pure database design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teams specifically looking for a graph-document-key-value engine designed as one native core from the beginning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More substantial than hype-driven newcomers, especially for document-heavy and sync-aware systems, but closer to a document-first platform than to a truly native multi-model engine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ArangoDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ArangoDB&lt;/strong&gt; is one of the clearest examples of a native multi-model database.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Document&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;First-class part of the core design.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;First-class part of the core design.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Expressed through the same overall engine story.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-text search&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Via &lt;code&gt;ArangoSearch&lt;/code&gt;, natively integrated into the database.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector&lt;/td&gt;
&lt;td&gt;Native, newer&lt;/td&gt;
&lt;td&gt;Officially supported, but still newer than the older document/graph/key-value core.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series&lt;/td&gt;
&lt;td&gt;Not core native model&lt;/td&gt;
&lt;td&gt;Not a real native time-series identity in the way ArcadeDB, NodeDB, or SurrealDB claim it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Its core story has been consistent for a long time: &lt;strong&gt;document, graph, and key-value in one engine&lt;/strong&gt;, with one query language and a relatively coherent mental model.&lt;/p&gt;

&lt;p&gt;That coherence is its real strength.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArangoDB&lt;/strong&gt; does not feel like a database that accidentally became multi-model. It feels &lt;strong&gt;designed around that identity&lt;/strong&gt;. And unlike some younger systems, it has had enough time in the market to turn that identity into something operationally credible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Its biggest advantage is discipline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AQL&lt;/strong&gt; gives it a strong center. The system is not pretending to be every data product at once. That restraint makes it feel more trustworthy than several flashier databases in this category.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;Clearly native and coherent, but with a narrower native model spread than the strongest broader true multi-model systems.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Document, graph, key-value, search, and newer vector support give it real strength, but not the same broader all-model depth as the strongest true multi-model engines.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Strong enough to take seriously, without feeling like a toy unifier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Coherent query model, coherent mental model, less fragmentation than extension-led systems.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Reasonable, though not trivial.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Mature enough to be credible without having PostgreSQL-scale gravity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;One of the stronger native multi-model bets.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trust review:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;High. Not because it promises the most, but because it promises a coherent set of things and mostly behaves like it means it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArangoDB&lt;/strong&gt; benefits enormously from &lt;strong&gt;AQL&lt;/strong&gt;. That one choice gives it much of its credibility. &lt;strong&gt;AQL&lt;/strong&gt; is not just a convenience layer. It is the reason document, graph, key-value, search, and newer vector support still feel closer to one database than to a bundle of unrelated capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArangoDB&lt;/strong&gt; is explicit about being a native multi-model database, and its storage engine story supports that claim better than many competitors. Its current storage engine is based on RocksDB, but that does not reduce it to an API wrapper over someone else’s database. The important point is that the engine and query model were designed around document, graph, key-value, search, and now vector support working together as one product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Very strong&lt;/em&gt;. This is one of the clearest cases where the label matches the design, not just the marketing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native document + graph + key-value integration&lt;/li&gt;
&lt;li&gt;Coherent query experience&lt;/li&gt;
&lt;li&gt;Teams that value discipline over hype&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Newer categories where broader market buzz has moved faster&lt;/li&gt;
&lt;li&gt;Teams that want the biggest ecosystem gravity or default-enterprise familiarity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engineers who want a real native multi-model database&lt;/li&gt;
&lt;li&gt;Teams that care about coherence more than trendiness&lt;/li&gt;
&lt;li&gt;Workloads where graph and document both matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buyers who mainly optimize for market dominance, vendor comfort, or the broadest default talent pool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the cleanest narrower native multi-model databases on the market, but not the broadest expression of what a true multi-model system could become.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  OrientDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OrientDB&lt;/strong&gt; deserves more than a polite historical footnote.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Document&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Part of its original identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Part of its original identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value / object-style access&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Part of the broader platform identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;Present, but not a central reason people choose it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector&lt;/td&gt;
&lt;td&gt;Not original native identity&lt;/td&gt;
&lt;td&gt;Not part of the original core story.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series&lt;/td&gt;
&lt;td&gt;Not original native identity&lt;/td&gt;
&lt;td&gt;Not part of the original core story.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It was early, and in many ways it helped make the category legible.&lt;/p&gt;

&lt;p&gt;Its blend of document and graph ideas was ahead of what many teams were ready to appreciate at the time, and the database still has a clear point of view: relationships should be first-class, and the graph model should not be bolted awkwardly onto a system that only really wants to be a document store.&lt;/p&gt;

&lt;p&gt;More importantly, &lt;strong&gt;OrientDB&lt;/strong&gt; matters because &lt;strong&gt;it is part of the lineage that leads directly to ArcadeDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Luca Garulli&lt;/strong&gt; created &lt;strong&gt;OrientDB&lt;/strong&gt;, and after &lt;strong&gt;SAP&lt;/strong&gt; acquired &lt;strong&gt;OrientDB&lt;/strong&gt; and the project lost momentum, he started &lt;strong&gt;ArcadeDB&lt;/strong&gt; from scratch. That history matters because &lt;strong&gt;ArcadeDB&lt;/strong&gt; is not just "another graph/document database." It is also a reaction to the limits of an earlier generation.&lt;/p&gt;

&lt;p&gt;That said, being early is not the same as staying strong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OrientDB&lt;/strong&gt; still has a real multi-model identity, and its SQL-extended graph approach is more approachable than some people expect. But it does not feel like the strongest current answer anymore. Momentum matters. Ecosystem energy matters. Confidence compounds around the systems that keep attracting builders, operators, and production stories.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;OrientDB&lt;/strong&gt; now feels split between historical importance and current competitiveness. Historically, it helped define the category. Today, it feels more like an older expression of the idea than the place where the idea is moving fastest.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;Clearly part of its design identity, but narrower and more dated than the strongest current native multi-model systems.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;Real graph-document roots are there, but the current implementation now feels much shallower than the stronger systems in this category.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Respectable, though the category has moved on.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;More approachable than some graph systems, but not especially modern-feeling now.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Usable, but not where it shines.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;Historically important, currently less energetic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;Still capable, but not where I would place the strongest trust today.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*&lt;em&gt;Trust review: *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Medium-low. Historically important, still usable, but no longer the place I would look first for the strongest current answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OrientDB&lt;/strong&gt; took a pragmatic route that still deserves respect: use &lt;strong&gt;SQL&lt;/strong&gt;, then extend it for graph behavior. That made the system more approachable than graph databases that demanded a whole new way of thinking from the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OrientDB&lt;/strong&gt;’s identity was always more &lt;strong&gt;engine-native than extension-driven&lt;/strong&gt;. Graph relationships as physical links were part of its pitch and part of why it felt different from databases that only simulated graph behavior through foreign keys or application logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Strong historically. This is not a fake multi-model database. The real problem is not the category claim. The problem is that the implementation no longer feels like the sharpest current form of the category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Historical graph-document design thinking&lt;/li&gt;
&lt;li&gt;SQL-extended graph accessibility&lt;/li&gt;
&lt;li&gt;Category significance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current momentum&lt;/li&gt;
&lt;li&gt;Ecosystem energy&lt;/li&gt;
&lt;li&gt;Feeling like the sharpest modern implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Readers trying to understand the category’s evolution&lt;/li&gt;
&lt;li&gt;Teams already invested in OrientDB&lt;/li&gt;
&lt;li&gt;Cases where its model still fits and organizational trust already exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greenfield teams looking for the strongest current multi-model bet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Important historically, still usable, but now much more of a middle-to-shallow legacy native system than a leading current expression of the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  ArcadeDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ArcadeDB&lt;/strong&gt; makes the most sense when you see it as a second attempt at part of the same problem.&lt;/p&gt;

&lt;p&gt;Supported models:&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;Support&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;Document&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;First-class part of the core design.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;First-class part of the core design.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;First-class part of the core design.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Native engine capability&lt;/td&gt;
&lt;td&gt;Part of the broader native engine story.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector&lt;/td&gt;
&lt;td&gt;Native claim&lt;/td&gt;
&lt;td&gt;Part of the broader native engine story, but still less validated than older core models.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-series&lt;/td&gt;
&lt;td&gt;Native claim&lt;/td&gt;
&lt;td&gt;Part of the broader native engine story, but still less validated than older core models.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relational-style querying&lt;/td&gt;
&lt;td&gt;SQL surface&lt;/td&gt;
&lt;td&gt;Available through SQL, but not a classic relational engine identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is why I would not compare it to &lt;strong&gt;OrientDB&lt;/strong&gt; as if they were unrelated products from unrelated teams. &lt;strong&gt;ArcadeDB&lt;/strong&gt; is what happens when the original creator of &lt;strong&gt;OrientDB&lt;/strong&gt; comes back and says, in effect: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the category idea was right, but the implementation needs to be rebuilt on a stronger foundation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the interesting part.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArcadeDB&lt;/strong&gt; is not just carrying over the old multi-model ambition. It is trying to fix engine-level problems, performance limits, and architectural constraints that older systems ran into. That is why the "from scratch" part matters. If you believe multi-model databases need tighter control over storage, execution, and concurrency to compete seriously, then ArcadeDB is one of the more credible efforts in the space.&lt;/p&gt;

&lt;p&gt;Its native multi-model story is strong: &lt;strong&gt;graph&lt;/strong&gt;, &lt;strong&gt;document&lt;/strong&gt;,** key-value*&lt;em&gt;, **search&lt;/em&gt;&lt;em&gt;, **vector&lt;/em&gt;&lt;em&gt;, and **time-series&lt;/em&gt;* are part of the same broader engine story, not just a loose product slogan. It also supports multiple query styles, which makes it unusually flexible for mixed workloads.&lt;/p&gt;

&lt;p&gt;More importantly, the system looks like it cares about engine quality.&lt;/p&gt;

&lt;p&gt;That matters because many multi-model databases are conceptually attractive but mechanically thin. &lt;strong&gt;ArcadeDB&lt;/strong&gt; feels much closer to &lt;strong&gt;a database that actually wants to own the hard parts instead of only smoothing over them at the API layer&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native multi-model support&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;One of the strongest native stories in the category, with a broader native model claim than ArangoDB.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-model depth&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;Serious scope and strong implementation ambition, with broader engine-level depth than most of the field even if some newer model claims still need more long-term validation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance potential&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;The engine ambition is real, not just marketing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;Good enough, though not the smoothest or most mainstream experience.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational simplicity&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;Reasonable, but still not a default-operational choice for most teams.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem / maturity&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;Under-recognized and still relatively small in ecosystem gravity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production confidence&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;The implementation quality and technical direction inspire real confidence, even if the market signal is weaker than larger better-funded names.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trust review:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;High on implementation quality, medium on market-proven confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArcadeDB&lt;/strong&gt; is unusually broad here. It supports &lt;strong&gt;SQL&lt;/strong&gt;, &lt;strong&gt;Cypher&lt;/strong&gt;, &lt;strong&gt;Gremlin&lt;/strong&gt;, &lt;strong&gt;GraphQL&lt;/strong&gt;, a &lt;strong&gt;Java API&lt;/strong&gt;, and &lt;strong&gt;MongoDB&lt;/strong&gt; query compatibility. Normally I would see that as a warning sign. Too many query surfaces often mean a weak center. In ArcadeDB’s case, the more interesting question is whether the engine underneath is good enough to justify that breadth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine / storage shape:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;ArcadeDB&lt;/strong&gt; gets serious. Its official positioning is not just "we support many models." It is "we natively store graphs, documents, key-value, search, vectors, and time-series in a single engine." It also emphasizes ACID transactions, a persistent journal/WAL, embedded mode, server mode, and Raft-based clustering. Whether every claim is equally mature is one question. But the architectural ambition is much closer to a real database-engine argument than to pure developer-experience packaging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How native is the multi-model claim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Very strong in intent and design. If you take the official architecture story seriously, ArcadeDB is one of the most native multi-model claims in the whole category. The remaining issue is not whether it is native enough. The issue is whether the rest of the market has validated that depth at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it feels first-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native multi-model ambition&lt;/li&gt;
&lt;li&gt;Engine seriousness&lt;/li&gt;
&lt;li&gt;Graph-document-key-value style workloads that benefit from tighter core control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it feels second-class:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ecosystem gravity&lt;/li&gt;
&lt;li&gt;Market awareness&lt;/li&gt;
&lt;li&gt;Broad mainstream production trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engineers who care about engine quality&lt;/li&gt;
&lt;li&gt;Teams open to a smaller ecosystem in exchange for stronger design conviction&lt;/li&gt;
&lt;li&gt;Builders who see value in the OrientDB lineage but want a more modern rebuild&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Poor fit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organizations that optimize primarily for ecosystem size, hiring familiarity, or mainstream adoption signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short verdict:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;One of the strongest real multi-model designs available today, and better than its current market visibility suggests.&lt;/p&gt;

&lt;h2&gt;
  
  
  So which ones feel the most real?
&lt;/h2&gt;

&lt;p&gt;If I strip away brand power, cloud packaging, and category marketing, the databases that feel most convincing as actual multi-model databases are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ArcadeDB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ArangoDB&lt;/strong&gt; - but with a narrower native model spread&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SurrealDB&lt;/strong&gt; - but with much more caution because breadth is not the same as depth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OrientDB&lt;/strong&gt; -  mostly for historical importance rather than current strength&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If I include practical production reality, the picture changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt; + extensions remains the most dependable broad platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ArcadeDB&lt;/strong&gt; is more promising than its market visibility suggests, especially if you care about engine quality more than market noise&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ArangoDB&lt;/strong&gt; is one of the cleanest native multi-model bets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couchbase&lt;/strong&gt; and &lt;strong&gt;Cosmos DB&lt;/strong&gt; are strong if your priorities align with their platform shape&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SurrealDB&lt;/strong&gt; is still more of a bet on direction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the pattern I keep coming back to.&lt;/p&gt;

&lt;p&gt;And it is also why I do not use a very loose definition of multi-model here.&lt;/p&gt;

&lt;p&gt;For me, a true multi-model database is not just a system that does two or three models reasonably well. A lot of databases can do that.&lt;/p&gt;

&lt;p&gt;The harder question is &lt;strong&gt;whether the database can natively support a broader set of serious data models&lt;/strong&gt;, and &lt;strong&gt;whether those models still feel like they belong to one coherent engine instead of a stitched story&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is why &lt;strong&gt;ArangoDB&lt;/strong&gt; still earns respect from me, but it also explains why I do not treat it as the final expression of a broader true multi-model design. It is strong, but narrower.&lt;/p&gt;

&lt;p&gt;The category is real. The need is real. But the implementations are not interchangeable.&lt;/p&gt;

&lt;p&gt;Some systems are broad but not very native. Some are native but not mature enough. Some are production-safe but conceptually patchy. Some are elegant but still proving themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom-line summary table
&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;Native multi-model support&lt;/th&gt;
&lt;th&gt;Multi-model depth&lt;/th&gt;
&lt;th&gt;Performance potential&lt;/th&gt;
&lt;th&gt;Developer experience&lt;/th&gt;
&lt;th&gt;Operational simplicity&lt;/th&gt;
&lt;th&gt;Ecosystem / maturity&lt;/th&gt;
&lt;th&gt;Production confidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL + extensions&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SurrealDB&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;3/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Couchbase&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ArangoDB&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OrientDB&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;4/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ArcadeDB&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;5/10&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Or if you prefer visual summary:&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fgyrp1njt1lqz7px8vj0c.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%2Fgyrp1njt1lqz7px8vj0c.png" alt=" " width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Azure Cosmos DB is not in the table
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Azure Cosmos DB&lt;/strong&gt; is often marketed as a multi-model database, but I do not think it belongs in the same bucket as &lt;strong&gt;ArangoDB&lt;/strong&gt;, &lt;strong&gt;OrientDB&lt;/strong&gt;, &lt;strong&gt;ArcadeDB&lt;/strong&gt;, &lt;strong&gt;SurrealDB&lt;/strong&gt;, or even &lt;strong&gt;PostgreSQL + extensions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cosmos DB&lt;/strong&gt; is best understood as &lt;strong&gt;a managed distributed platform&lt;/strong&gt; with multiple APIs and compatibility layers. That can be commercially strong. It can be operationally useful. It can be the correct product choice for many Azure-heavy teams.&lt;/p&gt;

&lt;p&gt;But that is not the same thing as being a native multi-model database.&lt;/p&gt;

&lt;p&gt;If a platform exposes different APIs over its storage engine, that does not automatically make it equivalent to a database that natively models graph, document, key-value, vector, or time-series semantics inside one coherent engine and query design.&lt;/p&gt;

&lt;p&gt;In that looser definition, almost any serious platform can start claiming "multi-model" once enough compatibility layers, services, or access paths are added.&lt;/p&gt;

&lt;p&gt;That is the category confusion I want to avoid here.&lt;/p&gt;

&lt;p&gt;So I left &lt;strong&gt;Cosmos DB&lt;/strong&gt; out of the actual review table.&lt;/p&gt;

&lt;p&gt;Its real strengths are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managed global distribution&lt;/li&gt;
&lt;li&gt;Enterprise cloud operations&lt;/li&gt;
&lt;li&gt;API-level flexibility&lt;/li&gt;
&lt;li&gt;Platform packaging&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  So where does NodeDB stand in all of this?
&lt;/h3&gt;

&lt;p&gt;It is the new kid in the block, and that is exactly what makes it interesting to me.&lt;/p&gt;

&lt;p&gt;It is trying to compete in a space full of established names, but it is not trying to copy their tradeoffs. The whole point is to chase &lt;strong&gt;both width and depth&lt;/strong&gt; at the same time: broader native model support than the narrower systems, but with more serious engine-level realization than the systems that only look broad at the product layer. That is an ambitious target, and it is obviously much easier to say than to deliver. But that is also why it is worth talking about.&lt;/p&gt;

&lt;p&gt;In the next post, I will shift from industry comparison back toward NodeDB  and explain what I want to preserve, avoid, and do differently after looking at the current landscape.&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>nodedb</category>
    </item>
    <item>
      <title>What Is a Multi-Model Database and Why It Matters</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Fri, 03 Apr 2026 22:13:27 +0000</pubDate>
      <link>https://dev.to/nodedb/what-is-a-multi-model-database-and-why-it-matters-1c8c</link>
      <guid>https://dev.to/nodedb/what-is-a-multi-model-database-and-why-it-matters-1c8c</guid>
      <description>&lt;p&gt;If you work on modern applications long enough, you will eventually run into the term "&lt;strong&gt;multi-model database&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;At first, it sounds simple. &lt;strong&gt;A database that supports more than one data model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is true, but it is still too vague to be useful.&lt;/p&gt;

&lt;p&gt;A multi-model database is a database that lets you work with different kinds of data in one system instead of forcing you to split them across several databases from the start.&lt;/p&gt;

&lt;p&gt;That usually means some combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relational data&lt;/li&gt;
&lt;li&gt;Document data&lt;/li&gt;
&lt;li&gt;Key-value access&lt;/li&gt;
&lt;li&gt;Graph relationships&lt;/li&gt;
&lt;li&gt;Time-series data&lt;/li&gt;
&lt;li&gt;Vector embeddings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every multi-model database supports all of these. Some support only two or three. Some support more. The point is not "everything at once." The point is that one database tries to cover more than one kind of workload in a meaningful way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Real applications rarely stay inside one clean data shape for long.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An application may start with relational data like users, teams, billing records, and permissions. Then it needs flexible profile data, so document storage becomes useful. Then it needs recommendation or fraud-style relationship analysis, so graph-like queries start to matter. Then search becomes important. Then event streams pile up. Then AI features arrive and now embeddings and vector similarity are part of the stack too.&lt;/p&gt;

&lt;p&gt;At that point, the classic answer is simple: use multiple databases.&lt;/p&gt;

&lt;p&gt;And sometimes that is still the right answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But it comes with a cost&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You now have to move data between systems, learn different query models, maintain different operational habits, watch consistency boundaries more carefully, and decide which database is the source of truth for which feature. That can be fine for large teams with strong platform discipline. It is much less pleasant when the application is growing quickly, the team is small, or the architecture keeps changing.&lt;/p&gt;

&lt;p&gt;That is why multi-model databases keep attracting attention.&lt;/p&gt;

&lt;p&gt;They promise a simpler center of gravity. Instead of saying "use Postgres for this, Redis for that, Elasticsearch for this, Neo4j for that, and a vector store for something else," the multi-model pitch is: maybe more of this should live together.&lt;/p&gt;




&lt;h3&gt;
  
  
  What "multi-model" actually means
&lt;/h3&gt;

&lt;p&gt;The easiest way to understand multi-model is to compare it with single-model thinking.&lt;/p&gt;

&lt;p&gt;A classic relational database is optimized around &lt;strong&gt;tables&lt;/strong&gt;, &lt;strong&gt;rows&lt;/strong&gt;, &lt;strong&gt;columns&lt;/strong&gt;, &lt;strong&gt;joins&lt;/strong&gt;, and &lt;strong&gt;transactions&lt;/strong&gt;. A document database is centered on JSON-like &lt;strong&gt;documents&lt;/strong&gt;. A graph database is centered on &lt;strong&gt;nodes&lt;/strong&gt;, &lt;strong&gt;edges&lt;/strong&gt;, and &lt;strong&gt;traversals&lt;/strong&gt;. A key-value store is centered on fast &lt;strong&gt;lookup by key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each model is good at something.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem is that applications do not care about database categories. Applications care about requirements.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If one product needs structured business records, flexible metadata, relationship-heavy queries, and semantic search, the team does not experience those as four separate academic categories. They experience them as one product that now has four kinds of data problems.&lt;/p&gt;

&lt;p&gt;A multi-model database tries to reduce that split.&lt;/p&gt;

&lt;p&gt;In the best case, it gives you one place to store and query different kinds of data without making you bolt together a whole mini data platform too early.&lt;/p&gt;

&lt;p&gt;In the weaker version, it only gives you the label.&lt;/p&gt;

&lt;p&gt;I will save that distinction for the next article.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why it is needed
&lt;/h3&gt;

&lt;p&gt;There are three common reasons people care about multi-model systems.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Application Complexity.
&lt;/h4&gt;

&lt;p&gt;Modern software is not just CRUD over tables anymore. Even fairly normal products now mix operational records, user-generated content, events, relationships, search, recommendations, and AI features. The more a product grows, the harder it becomes to pretend one narrow data model will always be enough.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Business Evolution.
&lt;/h4&gt;

&lt;p&gt;A product rarely knows all of its future data needs up front. A team may start with a clean transactional core, then later need analytics-like queries, richer content, recommendations, sync, graph-style relations, or vector search. If every new requirement forces a new database choice, the architecture keeps getting pulled apart over time.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Operational Cost.
&lt;/h4&gt;

&lt;p&gt;Every extra database adds more than a feature. It adds deployment decisions, backup strategy, monitoring, scaling behavior, failure modes, access control, migration work, and another thing the team has to understand well enough to trust in production.&lt;/p&gt;

&lt;p&gt;That is why multi-model keeps coming back as an idea.&lt;/p&gt;

&lt;p&gt;It is not only about convenience. It is also about reducing unnecessary system sprawl.&lt;/p&gt;




&lt;h3&gt;
  
  
  When people started looking at it
&lt;/h3&gt;

&lt;p&gt;Interest in multi-model databases did not suddenly appear in the 2020s.&lt;/p&gt;

&lt;p&gt;The idea has been around for a long time, but the reasons for caring about it changed over time.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Early 2000s
&lt;/h4&gt;

&lt;p&gt;You can already see early forms of this thinking in systems that tried to support multiple representations of data in one platform. MarkLogic is one of the best-known examples from that era. It started from document-oriented needs, especially XML, and later expanded to support JSON, RDF, search, and more within one system.&lt;/p&gt;

&lt;p&gt;The label "multi-model database" was not as common yet, but the underlying idea was already there: one database, more than one useful model.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Late 2000s
&lt;/h4&gt;

&lt;p&gt;Then &lt;strong&gt;NoSQL&lt;/strong&gt; took off.&lt;/p&gt;

&lt;p&gt;This period pushed developers to think beyond the relational model much more openly. Key-value stores, document databases, column-family systems, and graph databases all became more visible. Systems like &lt;strong&gt;Redis&lt;/strong&gt;, &lt;strong&gt;MongoDB&lt;/strong&gt;, &lt;strong&gt;Cassandra&lt;/strong&gt;, and &lt;strong&gt;Neo4j&lt;/strong&gt; helped define that shift. That was useful, but it also created the opposite problem: &lt;strong&gt;polyglot persistence started becoming normal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In other words, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;instead of one database doing more, teams often ended up with many databases doing different things.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gave people more flexibility, but it also made architecture and operations messier.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Early to mid 2010s
&lt;/h4&gt;

&lt;p&gt;This is when "multi-model database" became a much clearer category.&lt;/p&gt;

&lt;p&gt;More systems started presenting themselves explicitly that way. Databases such as &lt;strong&gt;OrientDB&lt;/strong&gt; and &lt;strong&gt;ArangoDB&lt;/strong&gt; are common examples from that period. The message was straightforward: why force teams to choose between document, graph, key-value, and other models if one system can cover several of them?&lt;/p&gt;

&lt;p&gt;This was a response to a real pain. Teams liked specialized databases, but they did not always like running so many of them.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Late 2010s
&lt;/h4&gt;

&lt;p&gt;Cloud platforms helped make the idea more visible to a wider audience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Cosmos DB **is one of the clearest examples from this period. It pushed the idea of a globally distributed database platform that could expose multiple APIs and support different access patterns. **Couchbase&lt;/strong&gt; also moved further in the direction of a broader platform story, mixing document workloads with search, analytics, events, and mobile synchronization.&lt;/p&gt;

&lt;p&gt;By this point, multi-model was not just a niche database argument anymore. It had become part of mainstream architecture discussions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2020+
&lt;/h3&gt;

&lt;p&gt;The pressure increased again.&lt;/p&gt;

&lt;p&gt;Applications did not become simpler. They became more mixed.&lt;/p&gt;

&lt;p&gt;By the 2020s, many teams were dealing with some combination of transactional records, flexible content, search, event streams, sync requirements, graph-like data, and later vector embeddings. Even when they did not call all of that "multi-model," they were still feeling the problem that multi-model databases were trying to address.&lt;/p&gt;

&lt;p&gt;You can see that in the kinds of systems getting attention during this period. &lt;strong&gt;SurrealDB&lt;/strong&gt; gained interest by promising a unified model across documents, relations, and SQL-style querying. &lt;strong&gt;Couchbase&lt;/strong&gt; kept pushing a broader platform story across document data, search, analytics, events, and mobile sync. &lt;strong&gt;Azure Cosmos DB&lt;/strong&gt; remained a prominent managed multi-model option. And once vector search became part of normal product design, many teams started asking whether embeddings should live closer to the rest of their application data too.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI workloads made it even more obvious.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once vector search and embeddings started showing up in normal product design, many teams had to ask a new version of the same old question: do we add one more specialized system, or should more of this live together with the rest of the application data?&lt;/p&gt;

&lt;p&gt;That is one reason the topic feels more relevant again today.&lt;/p&gt;




&lt;h3&gt;
  
  
  Does every application need a multi-model database?
&lt;/h3&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;A lot of applications are still better served by a single strong database plus a few carefully chosen supporting tools. In many cases, that is the most sensible option.&lt;/p&gt;

&lt;p&gt;And sometimes a &lt;strong&gt;specialized database&lt;/strong&gt; really is the right tool. If graph traversal is the center of the product, or time-series scale is extreme, or vector retrieval dominates the workload, a focused system may still win.&lt;/p&gt;

&lt;p&gt;So the point is not that multi-model is always better.&lt;/p&gt;

&lt;p&gt;The point is that the &lt;strong&gt;demand is real because the underlying needs are real&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Multi-model databases exist because many teams are tired of solving one growing product with a growing pile of disconnected data systems.&lt;/p&gt;

&lt;p&gt;That is the appeal.&lt;/p&gt;

&lt;p&gt;Whether a specific database actually delivers on that promise is a separate question.&lt;/p&gt;

&lt;p&gt;In the next post, I will compare some of the current multi-model databases and where they differ in practice.&lt;/p&gt;

</description>
      <category>database</category>
      <category>nosql</category>
      <category>surrealdb</category>
      <category>nodedb</category>
    </item>
    <item>
      <title>What Kind of Database I Want NodeDB to Be</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:19:35 +0000</pubDate>
      <link>https://dev.to/nodedb/what-kind-of-database-i-want-nodedb-to-be-2ep</link>
      <guid>https://dev.to/nodedb/what-kind-of-database-i-want-nodedb-to-be-2ep</guid>
      <description>&lt;p&gt;When I think about &lt;strong&gt;NodeDB&lt;/strong&gt;, I am not thinking about the longest feature list or the flashiest demo.&lt;/p&gt;

&lt;p&gt;I am thinking about a database I can trust before and after an application grows.&lt;/p&gt;

&lt;p&gt;In the long run, I want &lt;strong&gt;NodeDB&lt;/strong&gt; to be &lt;strong&gt;easy to use&lt;/strong&gt;, &lt;strong&gt;reliable&lt;/strong&gt; in different scenarios, and &lt;strong&gt;secure&lt;/strong&gt; enough that I do not have to keep second-guessing it. I want it to be something I can start with early, keep using later, and not feel forced to replace once the project becomes more serious.&lt;/p&gt;

&lt;p&gt;I should not have to rethink the whole stack every time product requirements change. I should not have to move data somewhere else just because a new use case shows up. I should not have to accept that one part of the database is “real” while another important part is just a workaround. If the business grows, the database should still feel like a stable base, not the next reason to re-architect.&lt;/p&gt;

&lt;p&gt;But that is far in the future. The current reality is simpler: I am still building toward it.&lt;/p&gt;

&lt;p&gt;Right now, my main concern is not polish. It is not making NodeDB look finished before it is finished. It is the foundation.&lt;/p&gt;

&lt;p&gt;I want to build enough core capability early, and build it deeply enough, that I do not spend the next few years patching around missing pieces.&lt;/p&gt;




&lt;p&gt;Many databases grow by accumulation. A feature becomes important, so it gets added. Another workload appears, so another layer gets introduced. Then another extension, another plugin, another wrapper, another sidecar. Over time, the system may cover more ground, but it does not always become more coherent.&lt;/p&gt;

&lt;p&gt;From the user side, that has a cost. Query behavior becomes uneven. Operational expectations stop being consistent. One feature feels mature, another feels awkward, another works only if you accept a few strange rules. At that point, you are not really using one clean system anymore. You are managing the boundaries between several pieces that happen to live near each other.&lt;/p&gt;

&lt;p&gt;That is one of the reasons &lt;strong&gt;PostgreSQL&lt;/strong&gt; started feeling heavy for me across multiple projects.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; is good. Its ecosystem is strong. I am not arguing otherwise. But extensions do not magically become one deeply integrated system just because they run around the same database core. In practice, the burden shifts to the user. You are the one stitching capabilities together, working around different limitations, and dealing with the gaps between them.&lt;/p&gt;

&lt;p&gt;I have seen a similar pattern in databases that try to unify more from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SurrealDB&lt;/strong&gt; has a vision I understand. But my concern is the same: I do not want a database to keep piling things on top if the foundation was not designed to carry them well. Systems should evolve, of course. That is normal. But there is still a difference between growing a system and collecting features.&lt;/p&gt;

&lt;p&gt;That difference shows up in the user experience very quickly. Some capabilities exist, but they still feel second-class. The ergonomics are weaker. The query model is thinner. Performance is less predictable. Operations feel awkward. The feature works in a demo, but once it becomes central to a real workload, you start seeing the limits.&lt;/p&gt;

&lt;p&gt;That is exactly what I want to avoid with NodeDB.&lt;/p&gt;




&lt;p&gt;I want &lt;strong&gt;NodeDB&lt;/strong&gt; to reduce re-architecture later instead of causing it. I do not want to reach the next stage of a product and realize that an important capability was treated as an afterthought, so now the stack has to be rearranged. I do not want core requirements to arrive later and collide with a design that was never meant to support them properly.&lt;/p&gt;

&lt;p&gt;That is why I care so much about feature depth early.&lt;/p&gt;

&lt;p&gt;Not because users need everything on day one. And not because I think I can build everything perfectly from the start. I cannot.&lt;/p&gt;

&lt;p&gt;What I do believe is this: if an important capability is likely to matter sooner or later, I would rather think hard about how it belongs in the system early.&lt;/p&gt;




&lt;p&gt;I am not interested in a product page that lists many features. I care about whether the database actually behaves like one cohesive system. I care about whether the features feel like they belong together. I care about whether it stays usable across different scenarios without pushing the user into constant redesign or workaround.&lt;/p&gt;

&lt;p&gt;If a database claims to do everything, but half the capabilities feel weak, awkward, or fragile, that is not real completeness. I would rather build something deeper but longer than wider and shallower.&lt;/p&gt;

&lt;p&gt;So the database needs to be dependable. It has to hold up when requirements expand. It has to help the user avoid unnecessary stack changes later.&lt;/p&gt;




&lt;p&gt;Maybe this approach is wrong in some places. It is still &lt;em&gt;my opinion&lt;/em&gt;, my bias, and my way of thinking through the problem.&lt;/p&gt;

&lt;p&gt;But if &lt;strong&gt;NodeDB&lt;/strong&gt; works, I want it to work in a way that still makes sense years later, not just in the first exciting demo.&lt;/p&gt;

&lt;p&gt;In the next post, I will go deeper into the design direction behind that idea and why so many multi-model databases still feel wrong to me.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/NodeDB-Lab/nodedb" rel="noopener noreferrer"&gt;NodeDB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nodedb</category>
      <category>database</category>
    </item>
    <item>
      <title>Why I'm Building NodeDB</title>
      <dc:creator>Farhan Syah</dc:creator>
      <pubDate>Thu, 02 Apr 2026 21:26:16 +0000</pubDate>
      <link>https://dev.to/nodedb/why-im-building-nodedb-4ml</link>
      <guid>https://dev.to/nodedb/why-im-building-nodedb-4ml</guid>
      <description>&lt;p&gt;For the last few years, &lt;strong&gt;PostgreSQL&lt;/strong&gt; has been my default database.&lt;/p&gt;

&lt;p&gt;Before that, I worked with &lt;strong&gt;MySQL&lt;/strong&gt;, &lt;strong&gt;MariaDB&lt;/strong&gt;, and &lt;strong&gt;MongoDB&lt;/strong&gt;. But once I spent enough time with &lt;strong&gt;PostgreSQL&lt;/strong&gt;, it became very hard to justify anything else for most projects. It gave me the relational model I wanted, plus JSON support that was good enough to remove a lot of my reasons for using MongoDB. When I needed spatial support, I could add PostGIS. When I needed time series and partitioning, I could use TimescaleDB. For a long time, that worked very well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Then the workload started changing.
&lt;/h3&gt;

&lt;p&gt;Over the last two years, AI and ML stopped being side concerns and started becoming part of real application requirements. That meant vector search became relevant. PostgreSQL still looked like the right answer because &lt;code&gt;pgvector&lt;/code&gt; existed and, at first, it was good enough. But once I started using it across more serious workloads, I kept running into the same friction: scaling and performance concerns, filtering limitations, and dimension and storage constraints that mattered for my use cases at the time.&lt;/p&gt;

&lt;h4&gt;
  
  
  And vector was only one part of the problem.
&lt;/h4&gt;

&lt;p&gt;Then came graph needs. At that point, the pattern became very familiar. I could keep stretching PostgreSQL. I could handle graph logic manually at the application level. I could try more extensions. I could wire more tools together. And yes, any one of those decisions can be justified if you are working on one project and you are willing to absorb the complexity.&lt;/p&gt;

&lt;h4&gt;
  
  
  But I am not working on one project.
&lt;/h4&gt;

&lt;p&gt;I work on multiple projects every year, often with different requirements. That changes the economics completely. What looks reasonable in isolation turns into repeated operational and mental overhead when you keep doing it again and again. A couple of extensions are fine. Then you need another one. Then another workaround. Then another set of limitations, quirks, and edge cases to remember. Then offline-first and sync requirements enter the picture and now you are adding even more surrounding tools just to make the whole thing usable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That was the real breaking point for me.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem was not that PostgreSQL stopped being good. The problem was that PostgreSQL plus extensions plus surrounding infrastructure started becoming a stack I had to keep rebuilding across projects. It worked, but the repetition was exhausting.&lt;/p&gt;




&lt;h3&gt;
  
  
  I started looking around.
&lt;/h3&gt;

&lt;p&gt;Like many people in this space, I first looked at what already existed. If someone had already built the thing I wanted, I would rather use it than build a database from scratch.&lt;/p&gt;

&lt;p&gt;I found &lt;strong&gt;SurrealDB&lt;/strong&gt;. I liked the vision. I still think the direction is compelling: fewer hops, better developer experience, a more unified model. But when I looked deeper, especially at the implementation and tradeoffs, I was not convinced. From my perspective, it felt more like a patchwork than a database designed deeply from the ground up. Even in graph support, I did not find the level of capability I expected. The idea was attractive. The execution did not give me enough confidence.&lt;/p&gt;

&lt;p&gt;Then I looked at &lt;strong&gt;ArcadeDB&lt;/strong&gt;. In many ways, I thought it was stronger. Better coding quality, better performance characteristics, more substance. But it is JVM-based, and I wanted something smaller, tighter, and better suited to the kinds of embedded, mobile, offline-first, and mixed deployment scenarios I care about.&lt;/p&gt;

&lt;p&gt;At that point, my realistic options looked like this:&lt;/p&gt;

&lt;p&gt;Stick with &lt;strong&gt;PostgreSQL&lt;/strong&gt; and keep stacking extensions. Work around another database that did not fully fit. Or accept a polyglot architecture and keep paying the integration cost.&lt;/p&gt;

&lt;p&gt;None of those felt right to me.&lt;/p&gt;

&lt;p&gt;So I chose a &lt;strong&gt;fourth&lt;/strong&gt; option: &lt;strong&gt;build my own database&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  That is how NodeDB started in 2025.
&lt;/h3&gt;

&lt;p&gt;It started as a side project, and honestly, I did not have high expectations. If it worked, it worked. If it failed, it failed. That attitude was useful because this is not the kind of project you begin with false confidence.&lt;/p&gt;

&lt;h4&gt;
  
  
  I have already scrapped the project twice.
&lt;/h4&gt;

&lt;p&gt;This current version is the third serious attempt, and I only started building it earlier this year. The first two failures were important. They forced me to understand what I was doing wrong, what I was hand-waving, and what needed to be designed properly from the beginning instead of patched later. I do not think I would have reached this version without those failures.&lt;/p&gt;

&lt;p&gt;One thing I should mention briefly: I use AI heavily in the implementation.&lt;/p&gt;

&lt;p&gt;The code is mostly written by AI, not by me typing everything manually. That is simply the practical reality. It writes faster than I do, and often better than I do at raw throughput. But I am still the one directing, reviewing, rejecting, and understanding it. That part matters to me. If I am going to build a database seriously and support it in the future, I need to understand it all the way down.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;NodeDB&lt;/strong&gt; exists because I wanted something I could actually use across real projects without rebuilding the same database stack every time.&lt;/p&gt;

&lt;p&gt;I built it first to solve my own use cases, because that part is non-negotiable. If it does not solve my real problems, there is no point. But I also do not want to build a shallow personal tool that only works for me. I want to go deeper than that. I want something that can support broader use cases properly, with serious performance, serious design, and serious technical depth.&lt;/p&gt;

&lt;p&gt;Right now, &lt;strong&gt;NodeDB&lt;/strong&gt; is working for my use cases, but it is still evolving.&lt;/p&gt;

&lt;p&gt;I have already tested it in pilot projects, and for the kinds of problems I built it to solve, it is starting to prove itself. That does not mean the journey is done. Far from it. A database only becomes real when the design holds under pressure, when the tradeoffs are honest, and when the implementation can stand up over time.&lt;/p&gt;

&lt;p&gt;That is the challenge I have chosen.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Will I make it? Time will tell.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But this is the journey I am on, and I am going to share it openly: the design decisions, the mistakes, the database ideas, the tradeoffs, and the lessons I learn along the way.&lt;/p&gt;




&lt;p&gt;If you care about database engineering, multi-model systems, offline-first architecture, or the hard tradeoffs behind building a database from scratch, follow this journey.&lt;/p&gt;

&lt;p&gt;I will be sharing what works, what fails, what I have to redesign, and what I learn from trying to make &lt;strong&gt;NodeDB&lt;/strong&gt; real.&lt;/p&gt;

&lt;p&gt;If that sounds interesting, follow me here on dev.to and keep an eye on the next posts. I am just getting started.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/NodeDB-Lab/nodedb" rel="noopener noreferrer"&gt;NodeDB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nodedb</category>
      <category>postgres</category>
      <category>database</category>
    </item>
  </channel>
</rss>
