上周跟一个做推荐系统的哥们吃饭,他张口闭口“向量数据库”,我问这玩意跟MySQL有啥区别,他噼里啪啦讲了一堆高维空间、余弦相似度、近似最近邻搜索,我当场就懵了。
直到前天我老婆让我去菜市场买韭菜,我才突然悟了。
先说说普通数据库是啥。你去菜市场买菜,进门口有个老大爷,你问“韭菜在哪”,老大爷会告诉你“往前走第三个摊位,绿油油的那堆就是”。普通数据库干的就是这事。你把数据存进去,它给你编个号,等你来找,它按编号或者分类翻出来给你。比如你存了100万个用户信息,想找“张三的电话”,它翻翻索引,嗖一下给你。快是快,但它只能找一模一样的。
但问题来了。假如你去找老大爷,问“我想买一种跟韭菜长得像、吃起来也像、但比韭菜嫩一点的东西”,老大爷就傻了。菜市场里每样东西都有固定名字和位置,老大爷的脑子里只有“韭菜在3号摊,白菜在5号摊”,他没法告诉你“跟韭菜差不多的东西在哪”。
这就是普通数据库的硬伤——它不懂“差不多”。
向量数据库就是干这个的。它不存“名字”和“位置”,它存的是“这东西长啥样”。怎么存?把每样东西变成一串数字,这串数字就叫“向量”。听着玄乎,其实就是给每个东西画一个“特征脸谱”。
打个比方。你把韭菜、葱、蒜苗、香菜都拿过来,给它们打分:长度(1到10)、粗细(1到10)、味道(1到10)、颜色(1到10)。韭菜可能是(8,2,9,7),葱是(9,4,6,6),蒜苗是(7,3,8,7)。你看,韭菜和蒜苗的分数是不是特别接近?向量数据库干的事就是:你给它一个韭菜的特征分(8,2,9,7),它把所有东西的特征分拉出来,算一算谁的分数跟这个最接近。结果发现蒜苗的(7,3,8,7)离韭菜最近,于是就告诉你:“蒜苗跟韭菜最像,要不要看看?”
这就是向量数据库的核心——它找的不是“一模一样”,而是“最像的”。
我那个做推荐的哥们后来给我看了他们公司的数据。他们用向量数据库做商品推荐,以前用关键词匹配,用户搜“红裙子”,出来的全是带“红”和“裙子”标签的,但一条酒红色的长裙可能因为标签里没写“红”就漏掉了。换了向量数据库之后,系统把每件商品的颜色、款式、材质、风格都转成向量,用户点了一条红裙子,系统就自动找出“跟这条裙子风格最像的10条”,不管标签写没写“红”都能找出来。转化率从3%直接跳到11%。
普通数据库干活靠的是“你告诉我名字,我给你找位置”。向量数据库干活靠的是“你告诉我它长啥样,我给你找长得像的”。
但别以为向量数据库就无敌了。它有个毛病——费钱。普通数据库存一个用户信息,可能就是几行文字,几十个字节。向量数据库存一张图片的特征,可能要几百个浮点数,几千个字节。存1亿条数据,光向量就要占几十个G的内存。我朋友公司上个月向量数据库的服务器账单涨了3倍,运维大哥天天骂娘。
还有一个坑。向量数据库算“最像的”这事,不是100%准的。它用的是近似算法,就是“差不多就行了”,不是“精确匹配”。你要查“张三的电话”,用普通数据库,查出来就是张三的,不会给你李四的。但用向量数据库查“跟张三很像的人”,可能给你推张三他弟。这就导致有些场景根本不能用向量数据库——银行查账、医院查病历、法院查案卷,你敢用“差不多”的算法吗?
所以现在大部分公司是两套数据库一起用。普通数据库管那些“必须精确”的事——用户账号、订单记录、支付流水。向量数据库管那些“差不多就行”的事——搜图、推荐、找相似商品。各管各的,谁也不耽误谁。
说回菜市场。现在最牛的菜市场是什么?老大爷手里拿个平板,你问“韭菜在哪”,他看一眼平板说“3号摊有”。你问“跟韭菜差不多的有啥”,他划拉两下平板说“7号摊的蒜苗也不错,9号摊的小葱也还行”。这就是普通数据库和向量数据库搭伙干活的样子。
对了,上次我老婆让我去买韭菜,我用这个思路想了一下,最后买了蒜苗回来。她问我为啥,我说“向量数据库告诉我它俩长得像”。她白了我一眼,但炒出来确实好吃。
📎 延伸阅读
看完这篇,如果你想:
- 直接拿工具 → 回复”13“,我把跨境获客工具包发给你
- 系统学习 → 点击菜单”AI训练营”,从0开始跑通AI变现