SonnetDB 最近的变化,不再只是“时序数据库多了几个 SQL 函数”。更准确地说,它正在从单一时序引擎,变成一个适合工业应用本地部署的多模型数据底座:时序点、关系维表、JSON 文档、向量、全文索引、对象桶和实时事件流逐步放到同一个进程、同一个数据目录、同一套权限模型下面。
这件事对工业现场很重要。一个真实设备平台里,数据往往不是单一形态:
- 传感器值是时序点。
- 设备、资产、站点是关系维表。
- 告警、工单、知识库是 JSON 文档。
- 语义检索需要 embedding 向量。
- 故障描述、日志、说明书需要全文搜索。
- 固件、附件、备份包需要对象桶。
- 消息队列则常常需要被观测、归档和分析。
SonnetDB 现在已经可以把其中不少能力放在一个 C# 应用里完成。下面这个最小示例先展示整体入口。
using SonnetDB.Engine;
using SonnetDB.Sql;
using SonnetDB.Sql.Execution;using var db = Tsdb.Open(new TsdbOptions
{RootDirectory = "data/multimodel-demo"
});SqlExecutor.Execute(db, """CREATE MEASUREMENT incidents (device_id TAG,severity FIELD FLOAT,embedding FIELD VECTOR(3) WITH INDEX hnsw(m=8, ef=32))""");SqlExecutor.Execute(db, """CREATE DOCUMENT COLLECTION knowledge""");SqlExecutor.Execute(db, """CREATE FULLTEXT INDEX ft_knowledge_bodyON knowledge ('$.body')USING unicode""");
这个例子里有三个关键点。
第一,VECTOR(3) 是 measurement 的 field,不是一个外部向量库的影子表。向量和时序点一起保留在 SonnetDB 的数据生命周期里。
第二,全文索引创建在 document collection 之上。文档主数据仍在 SonnetDB,DotSearch 负责派生索引和 BM25 相关性排序。
第三,对象桶和 SSE 事件流不需要把主业务拆成多个服务才能用。对象桶走 /v1/db/{db}/s3/...,事件流走 /v1/events,C# 客户端可以直接消费。
能力边界要说清楚
SonnetDB 当前没有把自己伪装成 Kafka 或 RabbitMQ。它提供的是时序、文档、搜索、对象桶和 SSE 事件订阅能力;消息队列场景里更适合用它记录队列积压、消费延迟、死信摘要和消息处理审计,而不是替代专业 broker。
这正是多模型数据库在工业场景的价值:不是什么都替代,而是把“长期要查、要审计、要搜索、要关联”的数据落在同一个可控底座里。
后面的文章会分别展开:
- 如何用 C# 写入
VECTOR并执行 KNN。 - 如何创建全文索引并按 BM25 排序。
- 如何把全文和向量融合成 Hybrid Search。
- 如何用 S3-compatible API 存固件、附件和备份。
- 如何用 SonnetDB 观测消息队列和消费链路。
- 如何把这些能力组合成 IoTSharp 数据底座。
官网地址:https://sonnetdb.com
技术文章站:https://iotpaper.net
开源仓库:https://github.com/IoTSharp/SonnetDB
