S3杀不死向量数据库!但支持数据库的未来是对象存储

2025-11-26

By 黄浩原

S3杀不死向量数据库!但支持数据库的未来是对象存储

向量数据库的摩尔定律时代,这次是真的来了。

先看两组关键数据:

  • 未经索引优化的向量数据库,检索成本是传统 noSQL 的十倍。

  • AI 笔记软件里,向量检索成本已经高于大模型调用成本。

大模型加速普及,向量检索作为核心 infra,正迎来爆发。但数据不会说谎:传统内存型向量数据库,面对激增的海量非结构化数据,成本已难以为继。

在这一背景下,AWS 推出了 S3Vector 服务。它借助对象存储的经济性,给出了高性价比的向量检索入门方案。

那么问题来了,对象存储会彻底替代内存吗? S3Vector 会彻底取代向量数据库吗?如果不能,如何将S3Vector与向量数据库搭配使用?我们又如何将 S3Vector 的数据做好迁移?

本文将逐一解答这些疑问。

01 S3Vector实测,对象存储能彻底替代内存吗

S3Vector 的特点十分明确:成本优势显著,但能力有限,绝非万能解决方案。

先说优点,极具竞争力的价格:

  • 存储成本低至 $0.06/GB

  • 存 4 亿向量,月查询 1000 万次,总成本仅 $1217

再讲缺点,S3Vector 的天花板”很明显,主要在 3 个方面:

  1. 速度慢,有上限

    • collection size :s3 单个表最多 50m vectors,最多支持 10000 个表放一个 bullet point.

    • 查冷数据:100 万条要等 500 毫秒,1000 万条要等 700 毫秒;

    • 查热数据:每秒最多查 200 次(200 QPS),超过就会限流;

    • 写数据慢:每秒写不到 2MB(Milvus 能到每秒1 GB),不适用大量数据频繁变更的场景。

  2. 召回率不够,还没法调

    • 正常情况下Recall只有 85%~90%,没有可调的参数;

    • 加过滤条件(比如 “只查 2024 年的数据”)后,召回率直接掉到 50% 以下;

    • 如果删了一半数据,想查前 20 个结果(Top20),可能只能返回 15 个。

  3. 功能太基础

    • 一次最多查 30 个结果(topk 不超 30);

    • 每条数据的附加信息(比如备注、标签)有大小限制;

    • 没有 混合查询、多租户 这些企业常用的功能。

也就是说,如果只是针对海量非结构化数据做最基础的检索与管理、查询速度要求不高、用得也不频繁(比如每天查几次),那它几乎没对手。

但如果有数据的冷热管理需求,或者有混合检索、多租管理这样的企业功能,那么就需要一个新的思路,将S3的低成本与传统向量数据库的企业级功能做一个结合。

02 Zilliz Cloud 分层存储:兼顾低成本与企业级功能

近期,Zilliz 存储扩展型即将全新升级为“分层存储型”,推出冷热温三层存储架构,做到以接近S3的成本,兼顾企业级功能与性能(如有需求,可公众号后台留言)。

过去,在传统的 Zilliz Cloud 架构中,无论是性能型、容量型还是存储扩展型,都要求全量数据加载到:内存(性能型)或者磁盘(容量型)。全量加载模式虽能保证查询性能,但面对大规模数据时,资源成本极高。

分层存储架构(内存 + 磁盘 + 对象存储)直接颠覆这一模式 —— 用智能缓存替代全量加载。

  • 热数据:缓存在 EC2 实例内存,保障极致访问速度;

  • 温数据:存于磁盘,平衡性能与成本;

  • 冷数据:存于 S3 等对象存储,将存储成本压到最低。

它的核心优势,是动态分层:将高频访问数据,自动 升层到内存 / 磁盘,确保高性能;长期未访问数据,自动降层 到对象存储,降低成本。

更关键的是,这不是简单的 LRU (最近最少使用)策略。系统会结合数据访问模式、用户行为、业务特征做智能预判。比如多租户场景下,能提前识别潜在活跃用户及其活跃时间段,将数据预加载到高层存储。

最终实现:热数据保性能,冷数据降成本,存储成本逼近 S3,活跃数据访问体验不打折。

这套架构,精准匹配两大核心场景:

场景一:大规模多租户应用

这类应用的典型特征:租户总量大(千万级),但活跃率低(仅 1%-5%),有明确活跃时间段。典型代表是 AI 编程助手(每个订阅即租户)、情感聊天应用(每个用户即租户)。

分层存储的价值的在于:企业不用为全量租户付高价,就能以高性能支撑大规模用户基数。

  • 95% 不活跃租户数据:存于接近 S3 成本的底层存储,大幅压低成本;

  • 5% 活跃租户数据:享受接近性能型 / 容量型的服务质量,保障用户体验。

场景二:大规模数据近实时分析

自动驾驶数据、机器人大模型训练、创新药研发等领域,都有一个共性:数据总量极大,但查询频率极低(每天仅极少数人做十几次到上百次的查询,远低于在线推荐系统每秒数千次的强度)。

这类场景对成本极度敏感,研发团队愿接受秒级甚至 10 秒级响应,换取成本下降。

分层存储正好契合需求:将存储成本降到纯内存方案的几分之一,同时提供可接受的查询性能,完美平衡 低成本与 可用性能。

03 迁移教程

既然 Zilliz Cloud三层存储,可以做到与 S3 Vector 基本持平的成本,并兼顾企业级功能与性能,那么如何把 S3 Vector 的数据迁移到 Zilliz Cloud ?

我们假设您已经在 AWS 的 us-west-2 区域的 vector 桶的 books Index 下存入了 200 条书籍信息数据,每条数据包含:

  • 768 维的内容向量

  • 书名作为主键(key)

  • 作者信息存储在元数据(metadata)中

开始前的准备工作

在开始迁移之前,请确保满足以下先决条件:

  • Docker 已经正确安装。

  • 运行 VTS 的节点能够访问 S3 Vector 和 ZIlliz Cloud。

  • IAM 用户或角色具有 s3vectors:ListVectors 权限

迁移前验证

在部署和启动 VTS 服务之前,建议先验证 S3 Vector 中的数据和访问权限。

import boto3
import os

aws_access_key_id = os.getenv("AWS_ACCESS_KEY_ID")
aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY")

s3vectors = boto3.client("s3vectors", region_name="us-west-2", aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)

resp = s3vectors.list_vectors(vectorBucketName="vectors", indexName="books", returnMetadata=True, returnData=True)
for vector in resp["vectors"]:
    print(vector)

您应该可以看见 200 条数据结果

{'key': 'First foot situation land bad.', 'data': {'float32': [0.7183347940444946……]}, 'metadata': {'author': 'Wendy Jones'}}
{'key': 'Face industry bit true.', 'data': {'float32': [0.9061349630355835……]}, 'metadata': {'author': 'Steven Smith'}}
{'key': 'Republican agreement probably home choose see.', 'data': {'float32': [0.26946496963500977……]}, 'metadata': {'author': 'Misty Lynch'}}
{'key': 'Before arrive design soon finally discuss.', 'data': {'float32': [0.35728317499160767……]}, 'metadata': {'author': 'Mark Johnson'}}
…………

开始迁移

  • 拉取最新的 vts 镜像,使用 1.2.0 及以上的版本。
docker pull zilliz/vector-transport-service:v1.2.0
  • 创建一个配置文件
vim ./s3-vector_to_milvus.conf
  • 写入如下内容,根据实际情况改写
env {
  execution.parallelism = 1
  job.mode = "BATCH"
}

source {
    S3Vector {
        region = "us-west-2"
        vector_bucket_name = "vector-bucket" # 向量桶名
        index_name = "books"  # 向量索引名
        ak = "ak" # aws_access_key_id
        sk = "sk" # aws_secret_access_key
    }
}

sink {
  Milvus {
      url="https://in01-***.<region>.zilliz.com.cn:19530" 
      token="***"  
      database="default"  # 目标 database
      batch_size=1  # 每次插入的批量,批量大速度快,但使用更多的内存
    }
}

配置好后保存。

  • 使用 vts 镜像启动容器,并把配置文件映射到 docker 容器中。
docker run -v ./s3-vector_to_milvus.conf:/config/s3-vector_to_milvus.conf -it zilliz/vector-transport-service:v1.2.0 /bin/bash
  • 在 docker 容器里使用如下命令启动 vts 进程。
./bin/seatunnel.sh --config /config/s3-vector_to_milvus.conf -m local
  • 等待 vts 进程运行结束。

迁移后验证

进入 ZIlliz Cloud 控制台。

1.webp 1.webp

Vts 会自动探测 metadata 里的数据,并为每一个属性创建一个列,并使用 key 作为 pk 列。

接下来,按需给向量列创建一个索引。

2.webp 2.webp

操作 Load Collection ,即可在控制台上预览数据。

3.webp 3.webp

4.webp 4.webp

数据条数和内容都和迁移之前一致。

尾声

放眼当下,非结构化数据市场正持续增长,需求不断攀升。Zilliz Cloud 的分层存储架构,给出了理想解法:​既保留 S3 的低成本存储优势,​又具备专业向量数据库的高性能,​企业级功能。

无论你是刚接触向量检索,​还是想从 S3 Vector 升级到更专业方案,​都不妨做一下尝试。迁移只是起点。Zilliz Cloud完整的的性能优化、功能设计,​都将为您的业务带来持续价值回报。

  • 黄浩原

    黄浩原

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud

    AI Assistant