网站栏目怎么做wordpress编辑器按钮
2026/1/10 11:48:53 网站建设 项目流程
网站栏目怎么做,wordpress编辑器按钮,网站做支付功能,PHP长沙WordPress在“强结构化筛选 向量相似度搜索”的混合场景下#xff0c;传统的“MySQL#xff08;元数据#xff09; Milvus#xff08;向量#xff09;”割裂架构面临巨大的 I/O 瓶颈。本文记录了一次真实的架构升级#xff1a;我们将 1300万 数据迁移至 PostgreSQL (pgvector)。在…在“强结构化筛选 向量相似度搜索”的混合场景下传统的“MySQL元数据 Milvus向量”割裂架构面临巨大的 I/O 瓶颈。本文记录了一次真实的架构升级我们将 1300万 数据迁移至PostgreSQL (pgvector)。在保持 96% 召回率的前提下小图场景查询耗时从 27秒 骤降至 0.03秒性能提升超 400 倍同时通过HNSW 索引大幅降低了内存消耗。一、 背景当“专业”遇上“割裂”在我们的 AIoT 业务自动驾驶/视频分析中图片和文本检索是一个核心场景。业务逻辑非常典型属于混合搜索Hybrid Search输入图片或文本转为 Embedding 向量。过滤必须满足特定的元数据条件如传感器FrontWide距离100米CaseIdXXX。搜索在过滤后的范围内寻找最相似的 Top-K 结果。1.1 原有架构MySQL Milvus为了利用向量数据库的“专业能力”我们最初采用了业界通用的分库架构MySQL存储结构化元数据。Milvus存储向量数据Vector和 ID。1.2 现实的痛点这种架构在“先过滤后搜索”的场景下十分尴尬。ID 搬运工我们需要先在 MySQL 查出符合条件的数万甚至数百万个 meta_id拉回应用层再作为过滤条件传给 Milvus。网络瓶颈大量 ID 的传输造成了巨大的网络开销。资源浪费Milvus 机器规格高达384核 / 1.5T 内存索引常驻内存占 750GB维护成本极高。实测结果在小图场景下单次查询平均耗时23s - 27s基本不可用。二、 核心原理为什么 pgvector 能赢我们需要一个能将“关系型过滤”和“向量检索”在存储引擎层融合的方案。PostgreSQL pgvector插件成为了最佳选择。但在展示惊人的测试数据前我们需要先理解支撑这一切的核心算法 ——HNSW。2.1 硬核科普什么是 HNSW 算法HNSW (Hierarchical Navigable Small World分层可导航小世界)是目前业界最顶尖的向量索引算法Milvus, ES, PG 都在用。如果把向量搜索比作“在全国地图上找一家具体的咖啡店”朴素的搜索是挨家挨户敲门暴力计算而 HNSW 的做法是“坐飞机 - 转高铁 - 打车 - 步行”。它结合了两个核心思想小世界网络 (Small World)想象一下“六度分隔理论”每个人都认识几个“远方”的朋友。在数据图中绝大多数节点互不相连但任何两个节点都可以通过少数几步跳跃到达。搜索逻辑贪婪搜索Greedy Search。看哪个邻居离目标最近就跳过去直到找不到更近的。跳表分层 (Hierarchical / Skip List)为了解决“在亿级数据中平铺搜索还是很慢”的问题HNSW 引入了分层结构L2 顶层高速公路节点稀少连接跨度极大。主要用于快速定位大概区域比如从北京一下子跳到上海。L1 中间层主干道节点稍多用于修正方向。L0 底层毛细血管包含所有数据连接密集用于精确定位目标。HNSW 的搜索过程从顶层入口出发利用长连接快速逼近目标区域找到局部最优后“降落”到下一层继续逼近直到在底层找到真正的 Top-K。2.2 pgvector 的“杀手锏”索引参数调优在 PG 中我们这样创建索引CREATE INDEX ON image_vectors USING hnsw (vector vector_cosine_ops) WITH (m 64, ef_construction 300);这里有两个关键参数决定了性能与精度的平衡m 64每个节点最多存 64 个邻居边。这就好比修路路修得越多M越大越容易找到捷径不容易走进死胡同召回率越高但索引体积也越大。ef_construction 300在修路建索引的时候我们向外探索 300 个节点来寻找最佳邻居。这个值越大路网质量越高查询越准但写入越慢。正是基于 HNSW 的高效导航配合 PostgreSQL 强大的Cost-based Optimizer (查询优化器)数据库可以智能地决定是“先用 B-Tree 索引过滤数据再计算向量”还是“直接在 HNSW 图上搜索并实时过滤”彻底消除了跨系统 I/O。三、 性能大比拼实测数据说话我们抽取了1300万记录进行对比测试。3.1 惊人的性能飞跃场景用例原方案 (MySQLMilvus)新方案 (PG, 有索引未分片)性能提升准确率 (重叠率)Construction Sign27.11s0.11s246倍99.00%Forklift23.84s0.03s794倍100.00%Minicar25.82s0.06s430倍100.00%Trailer24.66s0.11s224倍86.87%全图搜索 (Bike)7.06s2.14s3.3倍97.00%数据解读在带有具体过滤条件的小图场景下PG 展现了统治级的优势平均提升 400 倍以上。在全图搜索几乎无过滤场景下PG 依然快了 3 倍左右且准确率保持在 97% 的高位。3.2 意料之外的发现分片竟然变慢了为了测试扩展性我们使用了 Citus 插件进行了分片测试结果出乎意料单表未分片0.03s - 0.11sCitus 分片后0.19s - 0.21s深度分析HNSW 算法本身极快。在1300万这个数据量级下单机计算是毫秒级的。引入分片后查询需要分发到 Worker 节点再聚合网络通信的 RTT往返时延反而超过了计算时间。结论不要盲目迷信分布式。在 PG 上单机支撑 5000万-1亿 向量数据通常是性价比最高的选择过早分片反而引入不必要的开销。3.3 索引与内存对比Milvus索引强制加载进内存占用约750GBIn-memory index。PostgreSQLHNSW 索引大小约26GB。PG 依赖操作系统的 Page Cache不需要将所有索引常驻内存对硬件要求大幅降低。四、 为什么不选 Elasticsearch既然要换为什么不选大名鼎鼎的 ES架构复杂度我们的元数据本就在关系型数据库中。使用 PG 是“原地升级”引入 ES 则是“数据异构”需要解决同步延迟和一致性问题。资源消耗ES 是 Java 进程JVM 的堆内存Heap和垃圾回收GC在高并发下是潜在的抖动源。而 PG 基于 C 语言更加轻量稳定。算法同源ES 的向量检索底层Lucene同样使用的是 HNSW 算法。在算法层面两者没有代差但在结构化数据的混合查询优化上关系型数据库出身的 PG 更胜一筹。五、 总结与建议这次从 Milvus 到 PostgreSQL 的迁移不仅是一次性能优化更是一次架构的回归与简化。主要收益极速响应查询延迟从“秒级”跨入“毫秒级”。架构极简下线了昂贵的专用向量集群一套 PG 集群搞定所有。成本降低大幅节省了内存和服务器成本。给开发者的建议如果你的场景是“复杂的元数据过滤 向量检索”PostgreSQL pgvector 目前是地表最强选择之一。理解 HNSW根据业务对准确率的要求合理调整 m 和 ef_construction。如果不需要 99% 的准确率适当降低参数可以获得更小的索引和更快的写入速度。克制分片数据量未破亿时单机 PG SSD 往往比分布式方案更快。本文基于真实业务性能测试数据整理转载请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询