九月第三周 - 安排国庆游

Saturday, Sep 20, 2025 | 4 minute read | Updated at Monday, Oct 20, 2025

安排国庆游 | 迁移milvus向量到pg


🇸🇬 安排国庆出游计划

这周在忙于上班的同时,主要还在忙于安排国庆和老婆带爸妈去新加坡的事情。

今年中国的国庆正好撞上,10月3-5号的F1新加坡大奖赛,这无疑给计划增加了难度,老婆也是建议找个周末再请两天假再去,国庆去的话机票少,酒店更是贵的离谱(新加坡房价本来就贵,10月2号之后的酒店更是翻了几番,闲鱼上搜新加坡酒店,一说完预算很多人都回复没戏)。

但想了想,这次爸妈的护照都花时间办好了,作为牛马来说国庆前后也好调休一些,再拖一拖下个假期又到春节或是明年五一了,爸妈,岳父岳母都有时间不容易,不想让他们失望,新加坡留学一年毕业后就感觉时间过的很快,自己已过27岁,真“奔三”了,和爸妈平时的联系也少,都说谈恋爱的时候想真正了解一个人就和他去旅行,也正想借着这个机会让爸妈真正了解我们,也让我们真正了解爸妈。

说干就干,机票还算顺利,中间有个插曲是在周六挑了一晚上机票终于找到合适的一班晚上杭州直飞的,之后下午回来也是直飞的机票,预算在接受范围内,正要下单问爸妈要护照号时,岳父岳母这边突然出现了前期没沟通好的问题,我们以为之前说的护照都办好了是领到手了,结果只是去出入境管理局办好了,但是还要周一上班时再领,还不知道护照号。好在搜了下小红书,看到可以小程序上查办理进度,而且材料上虽然写着周一到周五去领,但实际上周日也是上班的,刚想着周日一早去领的时候发现了更好的消息,是小程序上如果办好的话就直接可以看护照号。最终岳父岳母查到果然已经办好了,于是就直接提供了护照号,果断下单。

script

酒店就没这么顺利了,周日晚上看了好久,最终就是真挑不好,理想计划是找个连住6晚的,有连住优惠还不用搬行李,但无奈价格因F1影响,在2号之后直接翻好几倍。临睡前看到有个Quincy House酒店,正好只接受6晚连订的(估计也正因这个限制当时还有房),但价格仍高于预算,老婆坚决不同意,于是就先睡觉冷静去了。

结果就是一觉醒来这个酒店都没房了。唯一的选择就是打一枪换一炮,每个酒店住的一两晚再换其他家。经过了几天下了班后的精挑细选,前4晚终于也是有住处了。

万万没想到最后两晚的酒店能如此波折。像前面所说,F1就在那两天,前面打一炮换一炮的策略确实省了一笔钱,但想着不能让爸妈对于这次“人生旅行”住的印象这么一般,自己也想感受感受高端的酒店见见世面,最后两晚想上上预算。携程、同程、Agoda、Booking都看了选不好,只好投奔闲鱼,能感觉到渠道良莠不齐,和一些卖家交流下来他们的态度也是参差不齐,有的人很会说话还会给建议,有的人甚至直接发个❓,像传说中的柜姐一样看不起你这点预算。最终没想到能被一个一开始谈的很好的那一家的套了三天,中间每次都承诺很快搞定,但每次到了约定时间要么找不到人要么就有别的理由,中间甚至订了一间故意给我希望,第二天又找个理由退掉了,说话是真好听,还说了很多行业内幕,每次还都发他们微信里的聊天截图,看着很真实。但结果就是办了三天都办不好,承诺的也是一个没兑现,软硬兼施也无济于事,最后交易以失败结束。我身心俱疲时刻,决定找找三人间捡漏,还真看到了携程上一家五星星级酒店,正好靠近机场。遂高下立判,不听老婆“劝阻”,果断拿下。

🔍 向量数据迁移可行性验证

这周完成了项目中将mysql+milvus的数据迁移到postgresql+pgvector+citus的可行性验证。因之前项目中利用关系型数据库mysql存数据中除向量以外的数据,而milvus主要存向量数据,使用下来的痛点就是需要同时维护两个数据库,而且这种方案需要查两张表,数据量大起来后查询效率很低。

现方案简化了流程:

输入图片/文字及过滤条件 → 将图片/文字转成搜索向量 → 在PostgreSQL中做相似性搜索(<=>计算余弦距离) → 输出结果。

中间用例和具体结果就不在展示了,结果如下:

通过拆分出的1300w+数据量的验证,现方案在保证结果平均重叠率的情况下,速度有了大幅提升,方案可行。

Milvus与pgvector中hnsw索引对比

原方案: 了解到HNSW索引在Milvus就叫in-memory index,默认是全部加载到内存中的,对内存要求高。

现方案: HNSW索引大小有估算公式,现在向量已知256维:

索引大小 = N × (D × 4 + m × 8) × 1.2 字节

其中N是数据量,D是向量维度,m是建立hnsw索引时的设置的参数,代表每个节点在hnsw图中的最大连接数。假设D是256维向量,m设为64,1300w记录,索引是26G;如果m设成64,1百亿记录,索引是16T。

pgvector官方文档 说明向量索引和PostgreSQL其他类型的索引一样,不需要加载到内存,但是如果加载到内存里性能会更好。

索引参数:

CREATE INDEX IF NOT EXISTS idx_vector_hnsw ON image_vectors 
USING hnsw (vector vector_cosine_ops) 
WITH (m = 64, ef_construction = 300);

© 2025 Terry's Blog

🌱 Powered by Hugo with theme Dream.

我的小猫

我的小猫,名叫皮蛋儿,23年圣诞节出生

皮蛋儿
我的老婆

人美心善,无须多言

老婆