DanLevy.net

Die Welle der Datenbank-Innovationen 2025

Das kannst du der KI verdanken.

Noch ein weiterer Vector-DB-Artikel

Hier ist die Entscheidungsregel, die ich mir früher gewünscht hätte:

Wenn deine Daten aus Dateien rekonstruiert werden können und Nutzer sie hauptsächlich lesen, probiere zuerst eine Object-Storage-Datenbank. Wenn Nutzer den ganzen Tag hineinschreiben, nimm eine echte Datenbank und hör auf, S3 als eine zu verkleiden.

Das ist die nützliche Trennlinie. Nicht „Serverless ist die Zukunft.” Nicht „Vector-Datenbanken haben alles verändert.” Diese Sätze wurden bereits auf genügend Konferenz-Lanyards gedruckt.

Die KI hat die Form vieler Suchprobleme tatsächlich verändert. Plötzlich wollten kleine Teams semantische Suche, hybrides Ranking, Dokumenten-Chat, multimodale Nachschlagefunktionen und Analysen über Dateien im Object Storage. Die alte Antwort lautete: „Betreibe Postgres mit pgvector” oder „betreibe OpenSearch/Elasticsearch” oder „kaufe einen verwalteten Suchdienst”. Das sind immer noch gute Antworten, wenn die Workload sie verdient.

Aber viele Workloads tun das nicht. Sie sind leseintensiv, rekonstruierbar und tolerieren eine kurze Verzögerung zwischen Inhaltsänderung und Suchaktualisierung. Dokumentation. Katalog-Snapshots. Statische Exporte. Interne Wissensdatenbanken. Lokale Analysen. Prototyp-RAG-Systeme. Für diese Fälle hat eine neue Klasse von Tools die langweilige Architektur ungewöhnlich leistungsfähig gemacht: Baue einen Index, speichere ihn als Dateien, liefere ihn über HTTP aus.

Snapshot-Hinweis: Das Ökosystem bewegt sich schnell. Die Sterne-Zahlen, Feature-Labels und Leistungszahlen unten sind ein Snapshot vom September 2025, keine zeitlose Wertungstafel. Betrachte sie als Orientierung, dann prüfe die aktuellen Docs, bevor du eine Produktionsmigration auf eine einzige Zelle wettest.

Eine Datenbank mit anderem Namen

Diese serverlosen und CDN-fähigen Datenspeicher sind nützlich für mittlere Fälle, grob 1.000 bis 1.000.000 Datensätze oder ein paar GB, bei denen traditionelle Datenbank-Infrastruktur mehr Zeremonie als Wert sein kann:

Die gemeinsame Bewegung ist einfach: Halte die dauerhaften Daten in Dateien oder Object Storage, dann frage sie von einem Browser, einer Edge-Funktion, einem Worker oder einem leichten Service ab. Das beseitigt nicht die Komplexität. Es verschiebt die Komplexität in Build-Pipelines, Index-Aktualität, Cache-Invalidierung und Client-Fähigkeiten. Was ein vollkommen guter Trade ist, wenn Lesevorgänge dominieren.

Kampf der Checkboxen

FeaturePagefindOramaChromaLanceDBDuckDB-WASM
Volltextsuche✅ Erweitertes Stemming✅ BM25, 30 Sprachen✅ SQLite FTS✅ Tantivy✅ Vollständiges SQL
Vector-Suche✅ Kosinus-Ähnlichkeit✅ HNSW✅ IVF_PQ, HNSW, GPU⚠️ Erweiterungen
KI/RAG-IntegrationenKeine✅ Eingebaute Pipeline✅ LangChain, LlamaIndex✅ Erweitertes Reranking⚠️ Manuelles Setup
SpeicherStatische JSON/WASMSpeicher + S3-PluginsServer-basiert*S3-kompatibles LanceWASM + S3/HTTP
SchreibunterstützungNur zur Build-ZeitVollständiges CRUDVollständiges CRUDVollständiges CRUDVollständiges SQL-CRUD
LeistungUnter 100ms0,0001ms – 100msUnter 100ms3–5ms Vector, 50ms FTS10ms–1s (komplexes SQL)

*September-2025-Snapshot: Chroma benötigt eine Server-Laufzeitumgebung und unterstützt keinen direkten S3-Object-Storage in der Weise, wie die Object-File-Tools es tun (issue #1736).

Implementierungsbeispiele

Die Syntaxunterschiede zeigen die eigentliche Spaltung: Build-Time-Suche, In-Memory-Suche, Vector-native Speicherung, multimodale Tabellen und Browser-SQL sind nicht dieselbe Produktkategorie, nur weil sie alle in KI-Demos erscheinen.

Statische Sitesuche mit Pagefind

<link href="/pagefind/pagefind-ui.css" rel="stylesheet">
<script src="/pagefind/pagefind-ui.js"></script>
<div id="search"></div>
<script>new PagefindUI({ element: "#search" });</script>

Enterprise-Multimodal mit LanceDB

Code zum Erstellen einer LanceDB-Tabelle mit automatischen OpenAI-Embeddings:

import * as lancedb from "@lancedb/lancedb";
import "@lancedb/lancedb/embedding/openai";
import { LanceSchema, getRegistry } from "@lancedb/lancedb/embedding";
import { Utf8 } from "apache-arrow";
const db = await lancedb.connect("data/multimodal-db");
const func = getRegistry()
.get("openai")
?.create({ model: "text-embedding-ada-002" });
// Schema mit automatischer Embedding-Generierung
const documentsSchema = LanceSchema({
text: func.sourceField(new Utf8()),
vector: func.vectorField(),
category: new Utf8()
});
const table = await db.createEmptyTable("documents", documentsSchema);
await table.add([
{ text: "machine learning concepts", category: "research" },
{ text: "deep learning fundamentals", category: "research" }
]);

Beispiel zum Abfragen einer LanceDB-Tabelle:

import * as lancedb from "@lancedb/lancedb";
import "@lancedb/lancedb/embedding/openai";
// "Connect" to a URL path
const db = await lancedb.connect("data/multimodal-db");
const table = db.getTable("documents");
// SQL + vector search combination
const results = await table.search("machine learning concepts")
.where("category = 'research'")
.limit(10)
.toArray();
console.log(results);

Universelle Suche mit Orama

import { create, insert, search } from '@orama/orama'
const db = create({
schema: {
title: 'string',
content: 'string',
embedding: 'vector[1536]'
}
})
await insert(db, {
title: 'Getting Started',
content: 'Learn the basics',
embedding: await generateEmbedding('Learn the basics')
})
const results = await search(db, {
term: 'basics',
mode: 'hybrid' // Combines text + vector search
})

DuckDB-WASM:

import * as duckdb from "https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@latest/dist/duckdb-browser.mjs";
const bundle = await duckdb.selectBundle(duckdb.getJsDelivrBundles());
const worker = new Worker(bundle.mainWorker);
const db = new duckdb.AsyncDuckDB(new duckdb.ConsoleLogger(), worker);
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
const conn = await db.connect();
await conn.query(`create table t as select * from (values (1,'hybrid search'),(2,'edge sql')) as v(id,txt);`);
// Optional full-text:
await conn.query(`install fts; load fts; select * from t where match_bm25(txt, 'hybrid');`);

KI-native Suche mit Chroma

import { ChromaClient } from "chromadb";
const client = new ChromaClient();
const collection = await client.createCollection({ name: "knowledge-base" });
await collection.add({
documents: ["AI will transform software development"],
metadatas: [{ source: "tech-blog", category: "AI" }],
ids: ["doc1"]
});
const results = await collection.query({
queryTexts: ["future of programming"],
where: { category: "AI" },
nResults: 5
});

Anwendungsfall-Leitfaden

Wähle Pagefind, wenn:

Wähle Orama, wenn:

Wähle Chroma, wenn:

Wähle LanceDB, wenn:

Wähle DuckDB-WASM, wenn:

Die Entscheidungsregel

Die praktische Frage ist nicht „Welche Datenbank ist die beste?”

Die praktische Frage ist: Welche Art von Veränderung muss das System absorbieren?

Der glückliche Pfad ist billig. Die Randfälle entscheiden über die Architektur.

Das große Bild

Diese Tools reduzieren die minimal erforderliche Infrastruktur für nützliche Suche. Das ist wichtig. Im Jahr 2020 implizierte „semantische Suche” oft einen Haufen Services, viel Klebe code und jemanden, der Vector-Indizes in einem Meeting erklärte, in dem die Hälfte des Raums lieber Mittag essen wollte. Im Jahr 2025 kann ein kleines Team dieselbe Produktidee mit Dateien, Embeddings und einem Wochenende prototypisieren.

Das bedeutet nicht, dass jede Suchbox zu einem RAG-System werden sollte. Es bedeutet, dass die erste Version nicht die Produktionsinfrastruktur erben muss, bevor es Produktionsbeweise gibt.

Sogar AWS bewegt sich in diese Richtung mit S3-angrenzender Vector-Sucharbeit, was ein nützliches Signal ist: Object Storage ist nicht länger nur der Dachboden, in dem alte Dateien liegen. Es wird zu einer Abfrageoberfläche.

Fang an zu experimentieren

  1. Wähle zuerst das Aktualisierungsmuster: Build-Time, stündlicher Batch, Live-Schreibvorgänge oder pro-Nutzer-Ergebnisse.
  2. Prototypisiere mit dem kleinsten ehrlichen Tool: Pagefind für statisches HTML, DuckDB für analytische Dateien, Orama für leichte App-Suche, LanceDB oder Chroma für vector-lastige Arbeit.
  3. Miss den hässlichen Teil: Indexierungszeit, Aktualität, Bundle-Größe, Berechtigungen und die erste Abfrage nach einem Cold Start.
  4. Befördere nur, wenn der Schmerz real ist: Eine verwaltete Datenbank ist leichter zu rechtfertigen, nachdem die dateibasierte Version genau zeigt, wo sie sich biegt.

Schau dir meinen praktischen Pagefind-Leitfaden für eine Hands-on-Implementierung an oder erkunde das wachsende Ökosystem edge-nativer Datenbanken, die Daten im großen Maßstab neu gestalten.

Haftungsausschluss: Ich verwende Pagefind seit Jahren und bin 2025 Contributor geworden. Ich habe mit Orama und Chroma für kleinere Projekte experimentiert und erkunde LanceDB für größere KI-Anwendungen. Keine finanziellen Verbindungen zu diesen Projekten – nur keen interest an der sich entwickelnden Datenbanklandschaft.