首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OceanBase AI 数据库 seekdb 正式发布!到底有多强?

OceanBase AI 数据库 seekdb 正式发布!到底有多强?

作者头像
用户12028736
发布2026-02-02 12:53:53
发布2026-02-02 12:53:53
30
举报

上周,我的朋友老张在技术群里发了条消息:"我只是想做个能搜图片的相册应用,为什么要让我同时维护三套数据库?"这个抱怨瞬间引发了一场热烈讨论。 做过AI应用开发的人都懂,传统架构下,你得在MySQL里存用户权限,在Elasticsearch里建文本索引,在Milvus里跑向量检索,还要写一堆胶水代码把它们粘在一起。 这种割裂的痛苦,在OceanBase推出seekdb之后,似乎有了新的解法。但这次我不想简单复述产品特性,而是想聊聊这款数据库背后映射出的一个更深层次的变化——当数据基础设施开始理解"语义",我们构建AI应用的方式正在发生根本性的转变!

多数据库的冗余,开发者被迫成为系统集成商

老张遇到的问题不是个例。

去年我参与过一个AI智能客服项目,需求听起来很简单:用户输入问题,系统从企业知识库里找答案,还要确保不同部门员工只能看到自己权限范围内的内容。但实现起来,架构图画得像蜘蛛网。

"我们当时用PostgreSQL存用户数据和权限表,Pinecone做向量检索,MongoDB存非结构化文档,Redis做缓存,还要写个中间层协调这四个系统的查询结果。"项目负责人小李跟我吐槽,"最痛苦的是数据一致性问题。用户在MySQL里更新了权限,向量库里的索引要异步更新,中间有延迟。测试同学经常发现某个用户明明没权限了,还能搜到机密文档。"

这种架构的本质问题在于,传统数据库诞生于互联网时代,设计目标是"存储"和"检索"结构化数据。而AI应用需要的是"理解"和"关联"多模态信息——文本、向量、地理位置、时间序列,这些数据天然就该在一个上下文里被联合查询。

更要命的是性能损耗。有个做风控的朋友告诉我,他们要在毫秒级响应"过去7天交易超5万、IP地址异常且行为特征接近历史欺诈案例"的查询。传统方案是先在MySQL筛选交易记录,再把符合条件的数据ID传给向量库做相似度计算,最后Python代码合并结果。单次查询要跨三个系统,网络开销占了总耗时的40%!

当数据库结合AI,不只是功能叠加

OceanBase seekdb的出现让我重新思考一个问题:什么才是AI时代的数据基础设施?

我见过太多AI功能是用打补丁方式加上去的——在传统数据库上硬塞个向量检索插件,或者简单包装几个API接口。

seekdb的不同之处在于,它是从AI场景的需求倒推回来重新设计的架构。这个差异不是几个feature的区别,而是整个设计哲学的不同。

举个例子,混合搜索不是简单把向量查询和关键词查询的结果拼在一起。seekdb支持在一条SQL里同时完成语义召回、关键词匹配和结构化过滤,而且是在存储层就完成了标量条件的下压优化。

这意味着什么?在刚才提到的风控场景里,数据库可以先用索引快速定位"过去7天、交易额>5万、IP异常"的记录子集,再对这个小范围做向量相似度计算,而不是对全量数据跑一遍embedding检索。

前两天我试着用seekdb复现了老张的相册应用需求。以前的方案是:用户上传照片后,调用阿里云OSS存图片,把文件URL写进MySQL,然后调用CLIP模型生成向量,再插入Milvus。搜索时要根据拍摄时间、地点在MySQL里查,再拿着照片向量去Milvus做近邻搜索,最后应用层代码做Rerank。

现在只需要在seekdb里建一张表,包含image_url、location、timestamp、description几个字段。重点是seekdb的混合索引能力——我只需要在description字段上启用语义索引,数据库会自动调用内置的embedding模型把文本转成向量。查询时,一条SQL就能搞定:"找出国庆期间在长城附近、描述里提到日落的照片"。向量检索、地理位置过滤、时间范围筛选全在一个查询里完成,不需要写任何胶水代码。

让我印象最深的是seekdb内置的AI Function功能

它允许你在SQL里直接调用大模型能力,这听起来像个小改进,但实际上改变了开发者和数据库的交互方式。

我参与过一个电商搜索优化项目。用户输入"适合送给程序员女朋友的礼物",我们需要理解意图、召回候选商品、用大模型做Rerank,最后返回结果。

传统流程是:应用代码调用数据库查询,拿到商品列表后,再把每个商品的标题、描述拼成prompt,调用OpenAI API做打分,最后按分数排序。这个过程中,数据要在数据库、应用服务器、AI服务之间来回传输三次。

如果用seekdb的AI_RERANK函数,这个逻辑可以压缩到一条SQL里执行:

代码语言:javascript
复制
-- 注册重排序模型和端点
CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_rerank');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_rerank_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_rerank', '{
    "type": "rerank",
    "model_name": "BAAI/bge-reranker-v2-m3"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_rerank_endpoint', '{
    "ai_model_name": "ob_rerank",
    "url": "https://api.siliconflow.cn/v1/rerank",
    -- 需替换为实际的 access_key
    "access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "provider": "siliconflow"
}');

-- 尝试重排序
SELECT AI_RERANK("ob_rerank", "Apple", '["apple", "banana", "fruit", "vegetable"]');

-- 返回结果
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| AI_RERANK("ob_rerank", "Apple", '["apple", "banana", "fruit", "vegetable"]')                                                                                                                                                   |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [{"index": 0, "relevance_score": 0.9911285638809204}, {"index": 1, "relevance_score": 0.0030552432872354984}, {"index": 2, "relevance_score": 0.0003349370090290904}, {"index": 3, "relevance_score": 0.00001892922773549799}] |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

数据库内部完成向量召回、大模型重排,只把最终结果返回给应用层,特别适用于 RAG 场景。数据不出数据库,网络传输减少,延迟降低,而且避免了在应用层暴露原始数据带来的权限泄露风险。

这种变化的本质是:数据库不再只是哑巴仓库,而是具备了一定的认知能力。它开始理解数据的语义,能执行复杂的智能计算,甚至可以根据上下文做推理。开发者和数据库的关系,从"我存你取"变成了"我问你答"。

从原型到生产,那道让人崩溃的鸿沟

聊技术产品不能只谈理想场景,得看它能不能扛住真实业务的考验。

做过企业级应用的人都知道,Demo和生产环境之间隔着一道巨大的鸿沟。现实中,有太多项目在POC阶段表现完美,一上线就各种问题:并发上来性能崩了,数据量增长索引炸了,多租户场景权限管理乱了。

代码语言:javascript
复制
# 使用 pip 安装,会自动识别默认的 Python 版本和平台
pip install pyseekdb

# 如果您的 pip 版本比较低,请先升级 pip 后再安装
pip install --upgrade pip

# 通过 Python SDK 体验 seekdb(Embedding Functions 示例)

import pyseekdb

# ==================== Step 1: Create Client Connection ====================
# You can use embedded mode, server mode, or OceanBase mode
# For this example, we'll use server mode (you can change to embedded or OceanBase)

# Embedded mode (local SeekDB)
client = pyseekdb.Client()
# Alternative: Server mode (connecting to remote SeekDB server)
# client = pyseekdb.Client(
#     host="127.0.0.1",
#     port=2881,
#     database="test",
#     user="root",
#     password=""
# )

# Alternative: Remote server mode (OceanBase Server)
# client = pyseekdb.Client(
#     host="127.0.0.1",
#     port=2881,
#     tenant="test",  # OceanBase default tenant
#     database="test",
#     user="root",
#     password=""
# )

# ==================== Step 2: Create a Collection with Embedding Function ====================
# A collection is like a table that stores documents with vector embeddings
collection_name = "my_simple_collection"

# Create collection with default embedding function
# The embedding function will automatically convert documents to embeddings
collection = client.create_collection(
    name=collection_name,
)

print(f"Created collection '{collection_name}' with dimension: {collection.dimension}")
print(f"Embedding function: {collection.embedding_function}")

# ==================== Step 3: Add Data to Collection ====================
# With embedding function, you can add documents directly without providing embeddings
# The embedding function will automatically generate embeddings from documents

documents = [
    "Machine learning is a subset of artificial intelligence",
    "Python is a popular programming language",
    "Vector databases enable semantic search",
    "Neural networks are inspired by the human brain",
    "Natural language processing helps computers understand text"
]

ids = ["id1", "id2", "id3", "id4", "id5"]

# Add data with documents only - embeddings will be auto-generated by embedding function
collection.add(
    ids=ids,
    documents=documents,  # embeddings will be automatically generated
    metadatas=[
        {"category": "AI", "index": 0},
        {"category": "Programming", "index": 1},
        {"category": "Database", "index": 2},
        {"category": "AI", "index": 3},
        {"category": "NLP", "index": 4}
    ]
)

print(f"\nAdded {len(documents)} documents to collection")
print("Note: Embeddings were automatically generated from documents using the embedding function")

# ==================== Step 4: Query the Collection ====================
# With embedding function, you can query using text directly
# The embedding function will automatically convert query text to query vector

# Query using text - query vector will be auto-generated by embedding function
query_text = "artificial intelligence and machine learning"

results = collection.query(
    query_texts=query_text,  # Query text - will be embedded automatically
    n_results=3# Return top 3 most similar documents
)

print(f"\nQuery: '{query_text}'")
print(f"Query results: {len(results['ids'][0])} items found")

# ==================== Step 5: Print Query Results ====================
for i in range(len(results['ids'][0])):
    print(f"\nResult {i+1}:")
    print(f"  ID: {results['ids'][0][i]}")
    print(f"  Distance: {results['distances'][0][i]:.4f}")
    if results.get('documents'):
        print(f"  Document: {results['documents'][0][i]}")
    if results.get('metadatas'):
        print(f"  Metadata: {results['metadatas'][0][i]}")

# ==================== Step 6: Cleanup ====================
# Delete the collection
client.delete_collection(collection_name)
print(f"\nDeleted collection '{collection_name}'")

seekdb的一个设计让我觉得务实:它既可以用pip install装进Python应用做嵌入式开发,也可以用Docker启动服务器模式跑在生产环境。而且因为它是OceanBase架构的轻量子集,如果业务规模起来了,可以无缝迁移到OceanBase企业版,获得分布式扩展能力,不需要重写代码。

这个设计背后的洞察是:AI应用开发者的典型路径是本地快速验证想法 → 小规模灰度测试 → 逐步放量到生产

传统架构下,你可能在本地用SQLite做开发,测试环境换成MySQL,生产环境又得迁到分布式数据库,每次切换都要改一遍代码。seekdb提供了一条平滑的演进路径,降低了从0到1的试错成本。

结语

前几天老张在群里发消息说,他用seekdb重构了相册应用,代码量从原来的3000多行缩减到800行,而且搜索准确率明显提升。"最爽的是不用半夜被数据不一致的告警吵醒了。"

但我觉得seekdb的价值不止于此。它代表的是一种趋势:数据基础设施正在从存储中心演变为智能中心。当数据库开始理解语义、支持推理,开发者终于可以把精力放在业务逻辑上,而不是花大量时间做系统集成和数据搬运。

这个变化对整个行业意味着什么?或许是AI应用开发的门槛大幅降低,让更多中小团队有能力构建智能化产品;或许是企业数字化升级的路径变得更清晰,传统系统可以低成本获得AI能力;也或许是下一代软件架构的雏形,数据库、AI模型、应用逻辑在一个统一的平台上深度融合。

而那些曾经让老张半夜崩溃的多系统集成噩梦,也许真的可以翻篇了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 臻成AI大模型 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 多数据库的冗余,开发者被迫成为系统集成商
  • 当数据库结合AI,不只是功能叠加
  • 从原型到生产,那道让人崩溃的鸿沟
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档