跳至正文

普通数据库存菜谱,向量数据库存味道——这 3 个区别让我省了 3 天开发时间

上个月接了个私活,帮一个做图片推荐的小程序写后台。老板的要求很简单:用户上传一张猫咪照片,系统自动推荐 10 张最像的猫咪图。

我第一反应:这还不简单?用普通数据库存图片标签就行了。比如给每张图打上“橘猫”、“加菲”、“英短”这些关键词,用户上传的图识别出标签,然后 SQL 查一下不就完了?

结果第一天就被打脸了。

用户上传的是一只歪头吐舌头的橘猫,系统识别出“橘猫”标签,但数据库里存了 3 万张橘猫图,有蹲着的、跑着的、睡着的、翻白眼的——按照普通数据库的查法,它只能把所有橘猫图都列出来,根本不知道哪个是“歪头吐舌头”的风格。

这时候一个搞 AI 的朋友跟我说:你特么用错工具了。你要的不是普通数据库,是向量数据库。

我花了 3 天时间把项目重构了一遍,把普通 MySQL 换成了向量数据库。结果呢?原来推荐结果像抽奖,10 张里有 3 张能看就算赢。现在 10 张里至少 8 张是用户想要的,老板当场加钱。

今天就用大白话聊聊这俩数据库到底差在哪。我保证不甩什么“高维空间”、“余弦相似度”这种劝退词,全拿生活里的例子说。

普通数据库存菜谱,向量数据库存味道

想象你是个美食博主,手机里存了 1000 道菜的做法。

普通数据库就像一本菜谱目录:按菜名排序,按食材分类,按烹饪时间分页。你想找“用鸡翅做的菜”,翻到“鸡”字开头那页就行。这就是普通数据库的玩法——精确匹配。你说“鸡翅”,它给你列所有带鸡翅的菜,一个不多一个不少。

但如果你说:“我想找一道味道跟可乐鸡翅差不多的菜,但不要鸡翅。”普通数据库就傻了。它不知道“可乐鸡翅的味道”是个什么东西,因为菜谱里没这个字段。

向量数据库就不一样了。它存的不是菜名和食材,而是每道菜的“味道向量”。比如可乐鸡翅的味道向量是 [甜 7 分, 咸 4 分, 焦糖香 8 分, 肉香 6 分],红烧肉的味道向量是 [甜 5 分, 咸 6 分, 酱香 9 分, 肉香 8 分]。你问“跟可乐鸡翅味道像但不用鸡翅”,它就去算每个菜的味道向量跟可乐鸡翅的距离,找出最接近的那几个——红烧肉可能排第一,因为它味道相近,只是食材不同。

这就是核心区别:普通数据库存的是“是什么”,向量数据库存的是“像什么”。

你找女朋友,普通数据库帮你搜“女、25岁、喜欢猫”,向量数据库帮你搜“长得像刘亦菲那个感觉的”

我有个哥们用交友软件,他的要求很具体:“性格像前女友,但别那么爱生气”。普通数据库没法处理这种需求,因为“性格”不是一个可以精确匹配的字段。但向量数据库可以——它把每个人的性格描述、兴趣爱好、聊天记录都转成向量,然后找跟“前女友的性格向量”最接近,但“生气指数向量”更低的那些人。

说白了,普通数据库适合回答“是不是”的问题,向量数据库适合回答“像不像”的问题。

普通数据库找东西像翻字典,向量数据库找东西像闻味道

翻字典你肯定有经验:要找“苹果”这个词,你得知道它大概在 P 开头那几页。这是普通数据库的搜索方式——你得告诉它一个关键词或者一个 ID,它根据索引去查。

向量数据库不一样。它更像你去水果摊闻味道找水果。你说“我要那种酸甜的、有清香的水果”,你不需要知道它叫什么名字,只需要描述那个感觉。老板闻一圈,拿起一个百香果说:“这个,跟你描述的最像。”

所以向量数据库最常用的场景就是“以图搜图”、“以文搜文”、“以声搜声”。你上传一张照片,它去找长得像的照片;你写一段文字,它去找意思相近的文章;你哼一段旋律,它去找旋律相似的歌。

我那个图片推荐项目就是这样:用户上传的橘猫图,先被 AI 模型转成一个向量(比如一个 512 维的数字列表),然后向量数据库去查所有图片向量里跟这个最接近的。它不在乎图片叫什么名字、打了什么标签,它只在乎“长得像不像”。

普通数据库 1 秒查 100 万条,向量数据库 1 秒查 10 万条,但查的是“感觉”

别以为向量数据库是万能的。它有个致命弱点:慢。

普通数据库查一条记录,走个索引,毫秒级别就出来了。向量数据库要算距离,要对每个向量做数学运算,数据量一上来就卡成狗。我那个项目刚开始只存了 5000 张图,速度还行。后来加到 5 万张,每次查询要等 3 秒。最后上了专门的向量索引(比如 HNSW 算法),才把 5 万张图的查询压到 200 毫秒。

所以现实里大部分系统是“混着用”的。普通数据库管用户账号、订单记录、权限控制这些精确的东西。向量数据库只管“相似度搜索”这一件事。两个数据库之间传数据,各干各的。

比如抖音的视频推荐:用户信息、点赞记录、评论内容存在普通数据库里。但“给你推什么视频”这件事,用的是向量数据库——它把你过去看过的所有视频的向量平均一下,得到一个“你的口味向量”,然后去向量库里找跟这个向量最接近的视频。

普通数据库像图书馆管理员,向量数据库像你家楼下卖水果的大爷

图书馆管理员知道每一本书在哪个架子上,你问“《三体》在哪”,他直接带你去科幻区。但你要说“我想看一本跟《三体》感觉差不多的书”,他就得挠头了——他得去翻每本书的简介,看内容是不是硬科幻、是不是讲宇宙文明的。

卖水果的大爷不一样。你说“要那种甜的、水分多的、不用剥皮的”,他直接给你指:“这个巨峰葡萄,那个夏黑,还有这个阳光玫瑰,都符合。”他不需要知道水果叫什么名字,他只知道它们的味道和口感。

这就是向量数据库最擅长的事:模糊匹配、感觉匹配、语义匹配。

说人话就是:如果你要做“猜你喜欢”、“相关推荐”、“以图搜图”、“语音识别”,别用普通数据库,直接上向量数据库。如果你要做“查余额”、“删订单”、“改密码”,老老实实用普通数据库。

最后说句大实话:别被“向量”这俩字吓住

我当初听到“向量数据库”四个字,第一反应是“告辞,这玩意儿肯定要数学好”。结果真上手了才发现,大部分向量数据库(比如 Milvus、Qdrant、Pinecone)都封装好了,你只需要把数据喂进去,它自动转成向量。就跟用普通数据库一样,写几条 API 调用就完事了。

唯一需要程序员多花点心思的,就是怎么把图片、文字、音频转成向量。这一步需要用 AI 模型(比如 CLIP、BERT、ResNet)来转,但现在的云服务商都提供了现成的接口,传一张图过去,它返回一个向量数组,你存到向量数据库里就行。

整个流程就是:用户上传图片 -> AI 模型转成向量 -> 向量数据库查相似 -> 返回结果。代码量不超过 200 行。

我那个项目上线后,老板问我:“你用了什么黑科技?用户反馈说推荐太准了,比某宝还准。”我说:“没黑科技,就是把你的菜谱换成了味道。”


📎 延伸阅读

看完这篇,如果你想:

  • 直接拿工具 → 回复”13“,我把跨境获客工具包发给你
  • 系统学习 → 点击菜单”AI训练营”,从0开始跑通AI变现

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注