ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

LanceDB JavaScript SDK 的 AnalyzePlanDistributedMetrics 类型别名:深入解析分布式查询计划的指标展示模式

LanceDB JavaScript SDK 的 AnalyzePlanDistributedMetrics 类型别名:深入解析分布式查询计划的指标展示模式 向量数据库数据库人工智能后端【免费下载链接】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),仅供参考
返回列表