向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载导读AnalyzePlanDistributedMetrics是 LanceDB 官方 JavaScript SDKlancedb/lancedb中用于控制analyzePlan()输出的类型别名它决定了在远程分布式查询场景下执行计划中各个 worker 的运行指标以何种方式展示。本文围绕该类型别名的三个取值aggregate、per_worker、full结合 SDK 的类型定义、N-API 桥接层与 Rust 核心实现讲解其语义、默认行为、底层调用链与实战用法帮助你在排查分布式查询性能问题时快速获得正确的计划视图。类型别名的定义该类型别名定义在 SDK 源码 nodejs/lancedb/query.tsexport type AnalyzePlanDistributedMetrics aggregate | per_worker | full;并在包级入口 nodejs/lancedb/index.ts 中公开导出因此在 TypeScript / JavaScript 项目中可以通过如下方式引入import * as lancedb from lancedb/lancedb; import type { AnalyzePlanDistributedMetrics } from lancedb/lancedb;它只允许三个字面量字符串作用是为QueryBase.analyzePlan()方法提供类型安全的选择约束——传入这三个取值之外的值会在类型检查阶段直接报错。三个取值的语义该类型别名的三个取值在 Rust 核心中对应三个枚举变体其权威语义注释见 rust/lancedb/src/query.rs类型取值Rust 枚举变体语义aggregateAnalyzePlanDistributedMetrics::Aggregate默认将各分布式 worker 的指标聚合成一棵合成的执行计划树输出保留历史遗留的展示格式per_workerAnalyzePlanDistributedMetrics::PerWorker为每一个分布式 worker 各渲染一棵原始的 worker 侧计划树便于逐节点定位问题fullAnalyzePlanDistributedMetrics::Full先输出聚合树再依次输出各 worker 的原始树兼顾整体概览与细节排查从源码结构可以推断full是aggregate与per_worker两种输出的叠加组合适用于既想快速了解整体聚合情况、又需要深入单 worker 明细的调试场景。使用位置analyzePlan() 方法AnalyzePlanDistributedMetrics是analyzePlan()方法的可选参数类型方法定义见 nodejs/lancedb/query.tsasync analyzePlan( distributedMetrics?: AnalyzePlanDistributedMetrics, ): Promisestring { const distributedMetricsMode distributedMetrics ?? aggregate; const inner await this.getInner(); return inner.analyzePlan(distributedMetricsMode); }关键行为要点参数可选默认aggregate未传参时SDK 自动回退到aggregate见 nodejs/lancedb/query.ts与 Rust 侧的默认值保持一致QueryExecutionOptions::default()中analyze_plan_distributed_metrics默认即Aggregate见 rust/lancedb/src/query.rs返回字符串analyzePlan()返回的是带运行时指标的查询执行计划文本每个执行步骤会内联output_rows、elapsed_compute、bytes_read、iops、requests等指标调用链TS 层 → N-API 原生方法nodejs/src/query.rs→ Rust 核心analyze_plan_with_options。底层调用链从字符串到查询参数TS 层的字符串值最终要传给 Rust 核心二者之间的转换由 N-API 桥接函数完成见 nodejs/src/query.rsfn analyze_plan_options( distributed_metrics: OptionString, ) - napi::ResultQueryExecutionOptions { let analyze_plan_distributed_metrics match distributed_metrics.as_deref().unwrap_or(aggregate) { aggregate AnalyzePlanDistributedMetrics::Aggregate, per_worker AnalyzePlanDistributedMetrics::PerWorker, full AnalyzePlanDistributedMetrics::Full, mode { return Err(napi::Error::from_reason(format!( Invalid distributedMetrics value {}. Expected one of: \ aggregate, per_worker, full, mode ))); } }; // ... }从这段实现可以确认两点运行时同样校验取值即使绕过 TypeScript 类型检查例如通过动态字符串调用传入非法值也会在原生层抛出Invalid distributedMetrics value ...错误三个合法值恰好与类型别名的三个字面量一一对应字符串映射有迹可循Rust 枚举通过as_query_param()方法将变体序列化为查询参数值见 rust/lancedb/src/query.rsAggregate → aggregate、PerWorker → per_worker、Full → full与 TS 类型别名完全对称。远程分布式计划的实际请求行为该参数仅影响远程分布式查询计划。Rust 核心在QueryExecutionOptions的字段注释中明确说明见 rust/lancedb/src/query.rs该选项只影响ExecutableQuery::analyze_plan对远程分布式查询计划的展示本地查询执行会忽略此选项。在远程表实现 rust/lancedb/src/remote/table.rs 中该选项被转换为 HTTP 请求的查询参数let mut request self .client .post(format!(/v1/table/{}/analyze_plan/, self.identifier)); if options.analyze_plan_distributed_metrics ! AnalyzePlanDistributedMetrics::Aggregate { request request.query([( distributed_metrics, options.analyze_plan_distributed_metrics.as_query_param(), )]); }值得注意的细节请求路径为POST /v1/table/{table}/analyze_plan/请求体携带查询定义aggregate默认时不附加任何查询参数服务端按默认聚合模式处理只有显式选择per_worker或full时才追加?distributed_metricsper_worker或?distributed_metricsfull这一行为有测试用例佐证在 rust/lancedb/src/remote/table.rs 的测试中传入AnalyzePlanDistributedMetrics::PerWorker后断言请求 URL 携带了(distributed_metrics, per_worker)查询对。实战示例基础用法查看带指标的执行计划import * as lancedb from lancedb/lancedb; const db await lancedb.connect(./.lancedb); const table await db.createTable(my_table, [ { vector: [1.1, 0.9], id: 1 }, ]); // 默认以 aggregate 模式输出本地查询不受该参数影响 const plan await table.query().nearestTo([0.5, 0.2]).analyzePlan(); console.log(plan);本地执行时输出的计划形如摘自 nodejs/lancedb/query.ts 的文档示例AnalyzeExec verbosetrue, metrics[] ProjectionExec: expr[id3 as id, vector0 as vector, _distance2 as _distance], metrics[output_rows1, elapsed_compute3.292µs] Take: columnsvector, _rowid, _distance, (id), metrics[output_rows1, elapsed_compute66.001µs, batches_processed1, bytes_read8, iops1, requests1] CoalesceBatchesExec: target_batch_size1024, metrics[output_rows1, elapsed_compute3.333µs] GlobalLimitExec: skip0, fetch10, metrics[output_rows1, elapsed_compute167ns] FilterExec: _distance2 IS NOT NULL, metrics[output_rows1, elapsed_compute8.542µs] SortExec: TopK(fetch10), expr[_distance2 ASC NULLS LAST], metrics[output_rows1, elapsed_compute63.25µs, row_replacements1] KNNVectorDistance: metricl2, metrics[output_rows1, elapsed_compute114.333µs, output_batches1] LanceScan: uri/path/to/data, projection[vector], row_idtrue, row_addrfalse, orderedfalse, metrics[output_rows1, elapsed_compute103.626µs, bytes_read549, iops2, requests2]远程分布式查询选择指标展示模式import * as lancedb from lancedb/lancedb; // 连接远程分布式LanceDB 表 const db await lancedb.connect({ uri: db://your-remote-endpoint }); const table await db.openTable(my_table); // 方式一仅查看聚合后的单棵计划树默认行为可省略参数 const aggregatePlan await table.query().nearestTo([0.5, 0.2]).analyzePlan(aggregate); // 方式二逐 worker 查看原始计划树定位单个节点的问题 const perWorkerPlan await table.query().nearestTo([0.5, 0.2]).analyzePlan(per_worker); // 方式三聚合树 各 worker 原始树一起输出兼顾全局与细节 const fullPlan await table.query().nearestTo([0.5, 0.2]).analyzePlan(full);配合类型使用保证编译期正确性import type { AnalyzePlanDistributedMetrics } from lancedb/lancedb; // 以受约束的类型封装可配置的展示模式 function buildAnalyzer(mode: AnalyzePlanDistributedMetrics) { return async (table: lancedb.Table) { const plan await table.query().nearestTo([0.5, 0.2]).analyzePlan(mode); return plan; }; } // 编译期通过 const analyzer buildAnalyzer(per_worker); // 编译期报错TS2345Argument of type worker is not assignable to parameter of type AnalyzePlanDistributedMetrics // buildAnalyzer(worker);使用注意事项仅对远程分布式查询生效本地文件表如lancedb.connect(./.lancedb)的执行计划是单机单进程执行distributedMetrics参数会被忽略无论传哪个值输出结构一致默认值语义不传参等价于aggregate目的是保留既有legacy输出格式若你依赖旧的聚合计划文本做解析升级 SDK 后无需改动代码三个取值是互斥的选择full不是聚合级别更高的超集配置而是聚合树与逐 worker 树的顺序拼接输出文本更长适合诊断而非日常巡检取值受运行时二次校验即便绕过类型检查传入非法字符串原生层也会抛出明确错误错误信息会列出全部合法取值见 nodejs/src/query.rs。相关源码参考类型别名定义与analyzePlan()方法nodejs/lancedb/query.ts、nodejs/lancedb/query.ts包级导出nodejs/lancedb/index.tsN-API 桥接与取值校验nodejs/src/query.rsRust 枚举定义与默认值rust/lancedb/src/query.rs、rust/lancedb/src/query.rs远程请求参数构造与测试佐证rust/lancedb/src/remote/table.rs、rust/lancedb/src/remote/table.rs赞分享向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载相关推荐TiDB执行计划解读分布式查询计划TiDB执行计划解读分布式查询计划 引言分布式数据库的查询优化挑战 你是否曾在分布式环境中遇到SQL查询性能瓶颈当数据分散在多个节点传统单机数据库的查询数据库分布式数据库后端OLAP从零开始Unitree RL Gym强化学习机器人控制完整指南从零开始Unitree RL Gym强化学习机器人控制完整指南 想要让机器人像真实生物一样灵活运动吗Unitree RL Gym是一个强大的开源框架专为U人工智能强化学习机器人具身智能Dagger TypeScript SDK 的 EngineCacheEntryID 类型别名引擎缓存条目标识符的 branded string 模式深度解析Dagger TypeScript SDK 的 EngineCacheEntryID 类型别名引擎缓存条目标识符的 branded string 模式深度解析DevOpsCI/CD后端CLI云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
【Dify】jieba智能文本切分与应用 中文文本处理中,分词是理解和利用海量语料的基础技术。高效、精准的分词不仅优化文本结构,还提升后续数据分析和应用开发的效果。
本文介绍一种自动化的中文分词工作流,依托jieba分词工具,实现原始文本的智能拆分和结构化输出。内容涵盖模型、节点、流程及多种典型应用场景… · 2026/9/24 16:02:24
【Coze】【视频】火柴人心理学【竖版】工作流 文章目录 工作流介绍 核心模型 Node节点 工作流程 大模型应用 文案生成节点 图片提示词节点 英文字幕节点 使用方法 应用场景 开发与应用 工作流介绍
今天给大家演示一个 火柴人心理学竖版视频 Coze 工作流。这个工作流将心理学知识的文案生成、字幕处理、配图提示、图像生成、… · 2026/9/24 16:02:24
游戏库项目日报 项目日报项目名称:游戏库 —— 基于 Android 原生 SQLite 的游戏管理应用 项目编号:ZZQ‑GAME‑2026‑001 日期:2026‑09‑21今日 / 本周工作处于第 1‑2 周【需求与设计】阶段。已完成完整立项文档整理,明确项目目标、功能范围、… · 2026/9/24 17:37:41
iOS 27.0 适配:statusBarFrame 废弃警告彻底解决方案 前言iOS 27.0 适配:statusBarFrame 废弃警告彻底解决方案最近升级 Xcode、适配 iOS 27.0 系统后,很多 iOS 老项目都会出现一条系统警告:-[UIApplication statusBarFrame] API has been deprecated and is a no-op on 27.0 and later.看似只是… · 2026/9/24 17:37:41
一排“储物柜“的智慧:从 C# 数组到 List<T>,看懂数据集合的进化之路 一句话概括: 数组是编译器为你划出的一排连号储物柜——快、稳、但一旦建成就不能扩建;List<T> 则是会自动扩建的智能储物间。搞懂它们的取舍,你才算真正会"存数据"。一、先从一个尴尬场景说起
你要统计班里 5 名学生的成绩。… · 2026/9/24 17:37:41
美业四端管理系统|四端数据联动踩坑复盘・上篇(预约、排班、疗程储值、会员资产同步) 📌项目简介本专栏完整记录一套面向中小型美容、美甲、皮肤管理单门店四端一体化管理系统的全栈开发过程,基于微信云开发实现,无需自建服务器,覆盖顾客、技师、管理员小程序以及 Vue3 PC 管理后台完整业务闭环。前面第四篇复盘的全… · 2026/9/24 17:37:41
学习嵌入式Day7:C语言之排序算法和字符型数组 上一篇写到一维数组,今天接着展开。一、冒泡排序算法相邻两个元素比较,小的放在前,大的放在后,最终实现升序排序。#include <stdio.h>int main(void)
{int a[10] {};int len sizeof(a)/sizeof(a[0]);int i 0;printf(&quo… · 2026/9/24 17:37:29
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44