关于 db-specialized-fit
db-specialized-fit 是面向向量、时序、图和搜索引擎的数据库审计技能。它检查特定引擎的架构与性能配置,结合静态分析和可选的在线验证,而非套用通用关系数据库规则。
主要功能
- 01检查向量维度和距离度量
- 02审查向量索引及筛选搜索
- 03检查时序分区和数据保留
- 04检查图遍历索引与关系
- 05审查搜索映射和分片设置
适用场景
- 01发现代码中声明的嵌入模型与向量维度不匹配
- 02审查时序数据的索引和保留策略
- 03检查图遍历入口是否建立索引
- 04检查搜索映射是否存在动态字段风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill db-specialized-fit安装后在 Claude Code 中输入/db-specialized-fit确认已加载。
详细介绍
db-specialized-fit (M20) — 向量 · 时间序列 · 图 · 搜索
M20 涵盖用途专一的引擎,其正确性取决于通用关系型审计会忽略的参数。子模块带有字母(M20a..M20d);评分器会在范式配置文件中将它们映射到上级 M20(references/scoring-model.md 中的向量 / 时间序列 / 图类别)。
M20a — 向量(pgvector、Qdrant、Pinecone、Weaviate)
涉及: 设计(Métrica & dimensión、Modelo-version、Metadata/filtro)+ 性能(Índice & params、Búsqueda filtrada、Recall-vs-latencia)。
- 维度匹配 — 列/集合的维度应与嵌入模型的输出维度相等(例如,text-embedding-3-small 对应
vector(1536))。不匹配属于严重错误(设计,严重级别 5)。 - 距离度量匹配 — 索引度量(cosine / L2 / inner-product)应与模型训练时使用的度量相匹配;不匹配会在无提示的情况下严重损害召回率。仅当模型在仓库中声明时才评为严重级别 5;否则标记为
directional,且不封顶(遵循 scoring-model 的诚实规则)。 - 存在并调优索引 — 声明 HNSW(
m、ef_construction、ef_search)或 IVFFlat(lists/probes),而不是在大型表上使用暴力顺序扫描(性能)。 - 记录模型版本 — 嵌入应与模型版本绑定,以便重新嵌入(设计)。
- 过滤搜索 — 用于前置/后置过滤的元数据本身也应建立索引(性能)。
M20b — 时间序列 / OLAP(TimescaleDB、InfluxDB、ClickHouse)
涉及: 设计(Hypertable-fit、Retención、Precisión-ts & tz)+ 性能(Chunk/retención、Continuous-agg、Compresión、Query)。
- 超表 / 分区适配 — 大型仅追加时间数据应采用超表 / 按时间分区,并使用合理的块间隔(不能是一个巨型块,也不能有数百万个微小块)。
- 声明连续聚合 / 汇总表,用于仪表盘查询,而不是扫描原始行。
- 压缩 / TTL 保留策略 — 应为冷块设置策略;原始数据保留时间应有限。
- 时间戳精度与时区 — 使用
timestamptz/UTC,而非无时区的本地时间(沿用 M4 规则)。
M20c — 图(Neo4j)
涉及: 设计(Modelado-aristas、Nodos/traversal)+ 性能(Índice-lookup、Traversal、Supernodo)。
- 边建模 — 关系应具有正确的方向/类型;遍历需要的地方应包含关系属性;不要将关系建模为会削弱图引擎优势的节点对表。
- 索引支持查找 — 用作遍历起点的入口节点属性应具有索引/约束(
CREATE CONSTRAINT ... IS UNIQUE),这样遍历就不会从全标签扫描开始。 - 超级节点风险 — 关系度数极高、会显著增加遍历成本的节点(性能)。提升严重级别需要实时度数证据;否则标记为
directional。
M20d — 搜索(Elasticsearch、OpenSearch)
涉及: 设计(映射/分析器正确性)+ 性能(查询/分片布局)。
- 映射与分析器 — 字段应显式设置映射(不要依赖动态映射来处理分析文本);分析器应与语言匹配;应谨慎选择 keyword 或 text。
- 避免映射爆炸 / 无界动态字段;分片数量应与索引大小相称。
Tier-0 静态检查
解析声明的架构/配置:pgvector vector(N) 列 + CREATE INDEX ... USING hnsw/ivfflat;Qdrant/Pinecone 集合配置(size、distance);Timescale create_hypertable/add_*_policy;ClickHouse ENGINE = MergeTree ... ORDER BY;Neo4j 约束/索引 DDL;ES mappings/settings JSON。交叉检查声明的嵌入模型维度/度量与仓库代码中引用的任何模型 id。
Tier-1 验证查询
- pgvector:
SELECT indexdef FROM pg_indexes WHERE indexdef ILIKE '%hnsw%' OR indexdef ILIKE '%ivfflat%';以及使用\d <table>检查vector(N)的维度。 - Timescale:
SELECT * FROM timescaledb_information.hypertables;和...continuous_aggregates;。 - Neo4j:
SHOW INDEXES;、SHOW CONSTRAINTS;,以及超节点的每节点度数(MATCH (n) RETURN ...)。 - ES:
GET /<index>/_mapping、GET /<index>/_settings。如果无法访问引擎 →needs_api。
发现项
按 schema/finding.schema.json 输出。示例 ID:
M20a.embeddings.dim_mismatch—vector(768),但模型输出 1536(fail,严重性 5,轴为design; 如果模型 ID 在仓库中,则置信度为established)。M20a.embeddings.metric_mismatch— 索引使用 L2,但模型按余弦距离训练(fail;仅当模型已声明时严重性为 5, 否则为 warn/directional,轴为both)。M20a.embeddings.no_ann_index— 向量搜索进行顺序扫描(warn,严重性 4,轴为performance)。M20b.metrics.no_hypertable— 大型时间表不是超表(warn,严重性 4,轴为both)。M20c.users.unindexed_traversal_root— 遍历起始属性未建立索引(warn,严重性 3,轴为perf)。 每个发现项:evidence.observed引用真实 DDL/集合配置的原文(已隐藏密钥);verification.reproduce是上文使用$DATABASE_URL的可运行命令;verification.method为schema_introspect、index_check、ddl_parse或explain_plan;expected_impact包含{axis, confidence, magnitude, rationale}— 使用分档值,绝不提供单独的百分比。
诚信原则
- 绝不声称索引配置的召回率或延迟数值 —
magnitude仅使用分档值。 - 仅当仓库中已声明嵌入模型(持久事实)时,指标/维度不匹配才会触发上限。
推断出的不匹配为
directional,且绝不触发上限。超节点/热分区的严重性 5 需要实时度数 证据;否则标记为directional或needs_api,绝不可默默判定通过。