DanLevy.net

גל החדשנות במסדי נתונים של 2025

תודה ל-AI

לא עוד מאמר על מסדי נתונים וקטוריים

הנה כלל ההחלטה שהייתי רוצה שהשתמשתי בו קודם:

אם הנתונים שלך ניתנים לבנייה מחדש מקבצים והמשתמשים בעיקר קוראים אותם, נסה קודם מסד נתונים מבוסס אחסון אובייקטים. אם משתמשים כותבים אליו כל היום, התחל עם מסד נתונים אמיתי והפסיק לנסות לגרום ל‑S3 להתחפש לאחד כזה.

זה הקו השימושי. לא “שרת‑חסר הוא העתיד.” לא “מסדי נתונים וקטוריים שינו הכל.” המשפטים האלה כבר הודפסו על מספיק סרטי ועידה.

AI אכן שינתה את הצורה של הרבה בעיות חיפוש. פתאום צוותים קטנים רצו חיפוש סמנטי, דירוג היברידי, צ’אט על מסמכים, חיפוש רב‑מודאלי, ואנליטיקה על קבצים שנמצאים באחסון אובייקטים. התשובה הישנה הייתה “להריץ Postgres עם pgvector” או “להפעיל OpenSearch/Elasticsearch” או “לרכוש שירות חיפוש מנוהל.” אלה עדיין תשובות טובות כשהעומס מצדיק אותן.

אבל הרבה עומסי עבודה לא. הם כבדי‑קריאה, ניתנים לבנייה מחדש, וסובלניים לעיכוב קצר בין שינוי תוכן לבין עדכון החיפוש. תיעוד. תמונות מצב של קטלוג. ייצוא סטטי. מאגרי ידע פנימיים. אנליטיקה מקומית. מערכות RAG אב‑טיפוס. עבור אלה, מחלקה חדשה של כלים הפכה את הארכיטקטורה המשעממת לחזקה במיוחד: בנה אינדקס, אחסן אותו כקבצים, הגש אותו דרך HTTP.

הערת תמונת מצב: המערכת האקולוגית נעה במהירות. ספירות הכוכבים, תוויות התכונות ומספרי הביצועים להלן הם תמונת מצב מספטמבר 2025, לא לוח תוצאות נצחי. התייחס אליהם כאל כיוון, ואז בדוק את המסמכים העדכניים לפני שאתה מהמר על העברת ייצור על תא כלשהו.

מסד נתונים בכל שם אחר

מאגרי הנתונים חסרי‑השרת והתומכים ב‑CDN האלה שימושיים למקרים בקנה מידה בינוני, בערך 1,000 עד 1,000,000 רשומות או כמה GB, שבהם תשתית מסד נתונים מסורתית יכולה להיות יותר טקס מערך:

המהלך הנפוץ פשוט: לשמור את הנתונים העמידים בקבצים או באחסון אובייקטים, ואז לשאול אותם מדפדפן, פונקציית קצה, עובד, או שירות קל משקל. זה לא מבטל את המורכבות. זה מעביר את המורכבות לצינורות בנייה, רעננות אינדקס, ביטול מטמון ויכולות צד לקוח. וזו עסקה מצוינת כשקריאות שולטות.

קרב תיבות הסימון

תכונהPagefindOramaChromaLanceDBDuckDB-WASM
חיפוש טקסט מלא✅ גזירה מתקדמת✅ BM25, 30 שפות✅ SQLite FTS✅ Tantivy✅ SQL מלא
חיפוש וקטורי✅ דמיון קוסינוס✅ HNSW✅ IVF_PQ, HNSW, GPU⚠️ הרחבות
שילובי AI/RAGאין✅ צינור מובנה✅ LangChain, LlamaIndex✅ דירוג מחדש מתקדם⚠️ הגדרה ידנית
אחסוןJSON/WASM סטטיזיכרון + תוספי S3מבוסס שרת*Lance תואם S3WASM + S3/HTTP
תמיכה בכתיבהרק בזמן בנייהCRUD מלאCRUD מלאCRUD מלאCRUD SQL מלא
ביצועיםמתחת ל-100ms0.0001ms - 100msמתחת ל-100ms3-5ms וקטורי, 50ms FTS10ms-1s (SQL מורכב)

*תמונת מצב ספטמבר 2025: Chroma דורש זמן ריצה של שרת ואינו תומך באחסון אובייקטים ישיר של S3 כמו כלי קבצי האובייקטים (issue #1736).

דוגמאות יישום

הבדלי התחביר חושפים את הפיצול האמיתי: חיפוש בזמן בנייה, חיפוש בזיכרון, אחסון וקטורי-ילידי, טבלאות רב-מודאליות ו-SQL בדפדפן אינם אותה קטגוריית מוצר רק בגלל שכולם מופיעים בהדגמות AI.

חיפוש אתר סטטי עם 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>

רב-מודאלי ברמה ארגונית עם LanceDB

קוד ליצירת טבלת LanceDB עם הטמעות OpenAI אוטומטיות:

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 with automatic embedding generation
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" }
]);

דוגמה לשאילתה בטבלת LanceDB:

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);

חיפוש אוניברסלי עם 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');`);

חיפוש ילידי AI עם 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
});

מדריך מקרי שימוש

בחר ב-Pagefind כאשר:

בחר ב-Orama כאשר:

בחר ב-Chroma כאשר:

בחר ב-LanceDB כאשר:

בחר ב-DuckDB-WASM כאשר:

כלל ההחלטה

השאלה המעשית אינה “איזה מסד נתונים הוא הטוב ביותר?”

השאלה המעשית היא: איזה סוג של שינוי המערכת חייבת לספוג?

הנתיב המאושר הוא זול. מקרי הקצה הם שמכריעים את הארכיטקטורה.

התמונה הגדולה יותר

כלים אלה מצמצמים את התשתית המינימלית האפשרית לחיפוש שימושי. זה חשוב. בשנת 2020, “חיפוש סמנטי” רמז לעתים על ערימת שירותים, הרבה קוד דבק, ומישהו שמסביר אינדקסים וקטוריים בפגישה שבה חצי מהחדר רצה ארוחת צהריים. בשנת 2025, צוות קטן יכול לבנות אב טיפוס של אותו רעיון מוצר עם קבצים, הטמעות וסוף שבוע.

זה לא אומר שכל תיבת חיפוש צריכה להפוך למערכת RAG. זה אומר שהגרסה הראשונה כבר לא חייבת לרשת תשתית ייצור לפני שיש לה ראיות ייצור.

אפילו AWS נעה בכיוון זה עם עבודת חיפוש וקטורי צמוד ל-S3, וזה אות שימושי: אחסון אובייקטים אינו עוד רק עליית הגג שבה קבצים ישנים הולכים. הוא הופך למשטח שאילתות.

התחילו להתנסות

  1. בחרו תחילה את דפוס העדכון: זמן בנייה, אצווה שעתית, כתיבות חיות, או תוצאות לפי משתמש.
  2. בנו אב טיפוס עם הכלי הכנה הקטן ביותר: Pagefind ל-HTML סטטי, DuckDB לקבצים אנליטיים, Orama לחיפוש יישומים קל, LanceDB או Chroma לעבודה כבדה-וקטורית.
  3. מדדו את החלק הכואב: זמן אינדקס, רעננות, גודל חבילה, הרשאות, והשאילתה הראשונה לאחר התחלה קרה.
  4. קדמו רק כשהכאב אמיתי: מסד נתונים מנוהל קל יותר להצדיק אחרי שהגרסה מבוססת הקבצים מראה בדיוק היכן היא מתכופפת.

עיינו במדריך המעשי שלי ל-Pagefind ליישום מעשי, או חקרו את המערכת האקולוגית הגדלה של מסדי נתונים ילידי-קצה שמעצבים מחדש נתונים בקנה מידה.

כתב ויתור: השתמשתי ב-Pagefind במשך שנים והפכתי לתורם ב-2025. התנסיתי ב-Orama וב-Chroma בפרויקטים קטנים יותר ואני בוחן את LanceDB ליישומי AI גדולים יותר. אין קשרים כספיים לפרויקטים אלה – רק עניין רב בנוף מסדי הנתונים המתפתח.