
MorletDB 发布 Postgres 扩展,用于存储和检索波形数据
来源标题:Show HN: MorletDB is a Postgres extension for waveforms
MorletDB 是一个 PostgreSQL 扩展,把波形作为完整录音(含采样率、单位、校准和采集元数据)存储,而非拆散成行或向量。它支持按区间查询相似信号,方便工程师或 AI agent 回溯原始样本。作者称其处理高频传感器数据时比所有时序数据库都快。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
ἁρμονίη ἀφανὴς φανερῆς κρείττων. ——赫拉克利特,残篇 B54
MorletDB 是一个用于波形存档的 PostgreSQL 扩展。 选定一个时间区间,然后问一句“我们以前见过这样的信号吗?”——每个答案都是一段录音 以及一个可以回读的采样区间,供工程师或 AI agent 使用。 AI agents · 安装 · 使用 · 研究 · 探索 · 证据 · 网站
记录,而非行。一段记录是一个通道,带有采样率、单位、 校准信息及其采集元数据。MorletDB 在 PostgreSQL 内部保持这一单位完整, 而不是把样本散落到行或向量中。
为你的 agent 提供信号证据以供推理。调查型 agent 可以在回答之前搜索 你的录音存档:我们以前见过这样的信号吗? MorletDB 提供匹配的区间及其原始样本;你的应用 将它们连接到分析工具、维护记录或实验记录。 该工具是纯 SQL,因此它以 agent 的数据库角色、行级安全 和限制来运行:
-- 一个 agent 可以调用的有界工具:针对源区间和资产返回相似区间 CREATE FUNCTION agent_similar_intervals(recording text, from_sample bigint, to_sample bigint, asset text, k integer DEFAULT 5) RETURNS TABLE (recording_id text, start_sample bigint, end_sample bigint, distance float8) LANGUAGE sql STABLE AS $$ SELECT recording_id, start_sample, end_sample, distance FROM morlet_search_envelope_probes('signals', recording, from_sample, to_sample, jsonb_build_object('asset', asset), least(k, 20)) $$; -- 以及将证据带入分析:morlet_read_interval('signals', recording_id, start, end)
用例 agent 做什么 异常调查 外部检测器标记一个区间;agent 检查它是否与早先的事件相似,以及在何种运行条件下发生 自主工厂工作流 在机器运行之间收集信号证据,再提出维护、质量检查或升级建议;你的应用决定哪些操作需要审批 工程调查 检索早先的测试运行,以解释发生变化的瞬态,并附带实验元数据 研究与标注助手 收集相似区间供人工复核、标注或模型评估
用 Claude 试一试:agent 演示用 Docker 加载四天的公开地震 记录,并让 Claude Code 或 Claude Desktop 通过只读的 MCP 服务器调查一次地震。 它找到的五个最接近匹配中有四个是其他已编目的地地震。 机器演示对一次轴承运行至失效(NASA/IMS)做同样的事: Claude 找出失效轴承首次发生变化的时间,以及其他轴承是否也出现该变化。 上面的 SQL 函数是一种集成模式;捆绑的 MCP 服务器只读。检测模型、 agent 编排和机器控制来自你的应用。在地震数据上,这种搜索 返回已编目的地地震的频率约为零延迟相似度 (E5、E5-H)的两倍; 异常工作流尚未经过评估,仅凭相似度并不能确定正常性、故障 或其成因。
Grizzbit 是 MorletDB 的无损分块编解码器:进去什么,出来就逐位相同。每个分块最多 32,768 个 float64 样本,以三种精确形式中最小的一种存储:在编码器检测到的值网格上的整数步长 (按 FLAC 的方式做预测和 Rice 编码,必要时做末位修正)、以同样方式编码的 float64 位 模式,或普通 float64。每个分块都带有 CRC-32C 校验和。 更多:docs/grizzbit.md · 编解码器一览 · 格式规范 · crates/grizzbit
完整安装与查询示例:安装与查询指南。
源码构建使用 Rust 1.99.0 和 pgrx 0.19.3。 运行发布镜像(预构建:带 pg_morlet 的 PostgreSQL 17,Linux amd64 和 arm64,附带 SBOM 和 构建溯源;不含 pgvector,因此没有探针搜索;请自行选择密码):
docker run -d --name morletdb -e POSTGRES_USER=morlet -e POSTGRES_PASSWORD=change-me
-e POSTGRES_DB=morlet -p 127.0.0.1:54329:5432 -v morletdb-data:/var/lib/postgresql/data
ghcr.io/merkhet-io/morletdb:0.3.14-alpha.1
docker exec morletdb psql -U morlet -d morlet -c "CREATE EXTENSION pg_morlet"
试试演练(为你的机器构建 PostgreSQL 17 预览版,amd64 或 arm64;导入 合成数据,找到一个已知区间并重建其匹配):
docker compose run --rm walkthrough
用 Rust 和 pgrx 从源码构建 (PostgreSQL 17、18 或 19;在 Debian/Ubuntu 上请先安装 build-essential bison flex libreadline-dev zlib1g-dev libclang-dev clang pkg-config libssl-dev):
cargo install cargo-pgrx --version 0.19.3 --locked cargo pgrx init --pg17 download # 或 --pg18、--pg19 /path/to/pg_config,或 --pg17 /path/to/pg_config cd extensions/pg_morlet cargo pgrx install --release --pg-config "$(sed -n 's/^pg17 = "(.*)"/\1/p' ~/.pgrx/config.toml)"
然后,在你的数据库中:
CREATE EXTENSION pg_morlet; CREATE EXTENSION vector; -- 可选:仅用于探针搜索(pgvector 0.8 或更高版本)
从 Python 使用:摄取 NumPy 波形,读取精确区间,并用 Python SDK(sdk/python,alpha)搜索相似区间,从可运行的快速入门开始。
让 AI agent 通过只读的 MCP 服务器调查你的录音(Claude Code、 Claude Desktop 及其他 MCP 客户端):MorletDB for AI agents。
MorletDB 可与什么配合使用(PostgreSQL、pgvector、Docker、MCP、Grafana、Python 和 Jupyter、文件格式), 以及每一项如何验证:集成。
导入你自己的文件(WAV、EDF、miniSEED、CSV)并获得第一个搜索查询: 从文件到第一次搜索。
支持的版本、CI 覆盖范围和本地测试命令: PostgreSQL 兼容性。升级现有 安装:现有安装。
-- 集合存放录音、原始分块和搜索表示 SELECT morlet_create_stream_collection('public', 'signals'); SELECT morlet_enable_envelopes('signals'); -- 一段录音 = 一个通道:id、采样率、通道、单位、元数据 SELECT morlet_start_recording('signals', 'pump-7', 25600, 'accel_x', 'g', '{"asset": "P7"}');
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。