停止重新索引:我们如何使用 sochDB 将实时搜索直接嵌入数据库
发布: (2026年2月7日 GMT+8 18:58)
6 分钟阅读
原文: Dev.to
Source: Dev.to
每次我们需要“实时搜索”时,都会被告知同样的做法:搭建搜索引擎,构建数据摄取管道,不断重新索引,并期望它保持新鲜。它起作用——直到它失效。
在本文中,我将解释为什么重新索引在实时系统中根本上是有缺陷的,以及我们是如何构建 SochDB,使搜索成为数据库的原生功能,而不是一个独立的基础设施问题。
🔍 用例:跨实时数据的即时搜索
- 实时 API(新闻、社交、定价、遥测)
- 新抓取的数据
- 流式更新,答案必须随互联网的变化而变化
🧱 SochDB 映射
| 层级 | SochDB 角色 |
|---|---|
| Ingestion | 应用程序获取实时数据(HTTP、WebSocket、Kafka、cron) |
| Storage | 用于原始数据 + 元数据的 SQL 表 |
| Vectors | 将嵌入向量与行数据一起存储 |
| Context Memory | 跟踪 已看到的内容、新鲜度、相关性 |
| Query | 混合方式:SQL 过滤 → 向量相似度 → 上下文重新排序 |
示例查询
SELECT *
FROM web_events
WHERE source = 'news'
AND published_at > now() - interval '2 hours'
ORDER BY vector_similarity(embedding, :query_vec) DESC
LIMIT 10;
💡 为什么 SochDB 胜出
- 无重新索引管道
- 无单独的搜索集群
- 新鲜度是自然的,而不是后加的
2️⃣ 实时 RAG 用于 AI 代理(代理记忆 > 搜索)
🤖 用例
LLM 代理能够:
- 浏览网页
- 调用工具
- 记住已经学到的内容
- 避免重复
🧱 SochDB 映射
| 组件 | SochDB 负责内容 |
|---|---|
| 工具输出 | 以结构化 SQL 行存储 |
| 代理记忆 | 向量 + 上下文记忆表 |
| 去重 | 上下文哈希防止重复获取 |
| 基础 | SQL 事实 + 嵌入 = 可验证的答案 |
代理循环
flowchart LR
A[User Query] --> B[Search tool]
B --> C[Store result in SochDB]
C --> D[Check memory overlap]
D --> E[Answer with citations]
这就是 代理记忆,而不仅仅是 RAG。
3️⃣ 实时个性化(随用户变化的搜索)
🧍 用例
- 电子商务
- 内容流
- 内部开发者门户
搜索结果会 因用户、因时刻而异。
🧱 SochDB 映射
| 表 | 用途 |
|---|---|
users | 个人资料和偏好 |
events | 点击、浏览、操作 |
items | 可搜索实体 |
user_context | 滚动会话记忆 |
查询流程
SELECT i.*
FROM items i
JOIN user_context uc ON uc.user_id = :uid
WHERE i.category = uc.current_interest
ORDER BY vector_similarity(i.embedding, uc.session_embedding) DESC;
无需 Redis + Elastic + 特征库混乱的个性化。
4️⃣ 实时可观测性与日志搜索(面向开发者)
🧪 用例
- 按意义而非仅关键词搜索日志
- 更快调试事件
- 本地优先调试
🧱 SochDB 映射
| Aspect | Implementation |
|---|---|
| Logs | SQL rows (structured) |
| Meaning | Vector embeddings per log |
| Context | Incident timeline memory |
| Search | Semantic + time‑windowed SQL |
示例查询
SELECT *
FROM logs
WHERE service = 'payments'
AND ts > now() - interval '15 minutes'
ORDER BY vector_similarity(embedding, :error_description) DESC;
取代 grep + Elastic + hope.
5️⃣ IoT / Edge Real‑Time Search (Offline‑First)
🌐 Use‑case
- 传感器
- 边缘网关
- 必须在无云环境下运行的智能基础设施
🧱 SochDB Mapping
| 约束 | SochDB 优势 |
|---|---|
| 离线 | 嵌入式数据库 |
| 延迟 | 无网络跳转 |
| 流式 | 仅追加的 SQL 表 |
| 推理 | 本地向量搜索 |
示例查询
SELECT *
FROM sensor_events
WHERE device_id = :edge_id
ORDER BY ts DESC
LIMIT 100;
当云优先的数据库在此完全失效时。
6️⃣ 实时知识库搜索(文档、代码、工单)
📚 使用场景
- 内部文档
- GitHub issue
- RFC
- Slack 导出
🧱 SochDB 映射
| 数据 | 存储方式 |
|---|---|
| 文档 | SQL 行 |
| 代码 | 分块嵌入 |
| 工单 | 上下文关联记忆 |
| 更新 | 即时可用 |
示例查询
SELECT *
FROM knowledge_chunks
WHERE project = 'sochdb'
ORDER BY vector_similarity(embedding, :question_vec) DESC;
无需重新索引,无搜索基础设施开销。
🧠 为什么这种映射如此强大
传统堆栈
flowchart LR
A[App] --> B[Kafka] --> C[ETL] --> D[Search Engine] --> E[Cache] --> F[Feature Store] --> G[Hope];
SochDB 堆栈
flowchart LR
A[App] --> B[SochDB];
我们很乐意听取您的反馈——无论是意见、问题,还是您正在尝试解决的难题。