一、项目概述
SonnetDB是由 IoTSharp 团队(maikebing)开源发布的一款高性能时序数据库引擎,基于C# / .NET 10构建,采用MIT 许可证。该项目专为IoT 物联网、工业控制、运维监控和实时分析场景设计,标志着 .NET 生态在时序数据领域的重大突破。
注意:GitHub 链接
[github.com/IoTSharp/SonnetDB](https://github.com/IoTSharp/SonnetDB)当前已经可访问。 该项目已完成首个重要里程碑,具备生产级能力。
二、核心性能亮点
SonnetDB 在多项基准测试中展现出色的性能表现:
测试场景 | SonnetDB | SQLite | InfluxDB | TDengine REST |
|---|---|---|---|---|
100万点单序列写入 | 545ms (180万点/秒) | 1.5x 慢 | 9.6x 慢 | 80x 慢 |
10万行范围查询 | 6.71ms | 6.6x 慢 | 61x 慢 | - |
16,667时间桶聚合 | 42ms | - | - | - |
测试环境:i9-13900HX / Windows 11 / .NET 10.0.6 / Docker WSL2
这些 benchmark 数据表明,SonnetDB 在写入吞吐量、查询延迟和聚合计算等核心场景中,相比主流时序数据库有数量级的性能优势。
三、技术架构解析
3.1 嵌入式优先(Embedded-First)设计
SonnetDB 核心设计理念是进程内直接使用,无需独立部署服务进程,这与传统时序数据库(如 InfluxDB、TDengine)的部署模式形成鲜明对比:
┌─────────────────────────────────────────┐ │ Application Process │ │ ┌─────────────────────────────────┐ │ │ │ SonnetDB Engine │ │ │ │ ┌─────┐ ┌───────┐ ┌─────────┐ │ │ │ │ │ WAL │ │MemTable│ │Segments │ │ │ │ │ └─────┘ └───────┘ └─────────┘ │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────────┘嵌入式设计的优势在于:
- 零部署成本
:无需安装独立的数据库服务进程
- 最低延迟
:进程内数据访问,避免网络开销
- 简化运维
:单机或嵌入式场景下无需维护数据库集群
- 资源隔离
:每个应用实例拥有独立的数据存储
3.2 存储引擎四层架构
SonnetDB 采用类似 RocksDB 的经典存储架构,分为四层:
预写日志(WAL)
追加写入模式,确保数据不丢失
CRC 校验保证数据完整性
崩溃恢复机制保障 ACID 特性
内存表(MemTable)
写入缓冲区,吸收高并发写入
内存中完成排序(Skip List 或类似结构)
达到阈值后刷盘
不可变段(Segment)
只读数据文件(SSTable 风格)
支持分层压缩
索引加速范围查询
段压缩(Compaction)
Size-Tiered 策略
自动合并小文件,减少碎片
后台异步执行,不阻塞写入
3.3 数据生命周期管理
- Tombstone 删除机制
:逻辑删除标记,支持幂等删除操作
- TTL 自动过期
:自动清理过期数据,降低存储成本
四、.NET 技术特性
4.1 纯安全代码(Safe Code)
SonnetDB 坚持100% 托管代码设计理念,不使用任何
unsafe代码块:// 基于 Span<T> 和 ReadOnlySpan<T> 的零拷贝读取 publicreadonlystructDataPoint { publiclong Timestamp {get;} publicdouble Value {get;} publicDataPoint(ReadOnlySpan<byte> buffer) { // 安全地解析二进制数据,无需 unsafe Timestamp = BinaryPrimitives.ReadInt64LittleEndian(buffer.Slice(0,8)); Value = BitConverter.ToDouble(buffer.Slice(8,8)); } }这种设计确保了:
- 跨平台兼容
:完美支持 .NET 6/7/8/10 的跨平台特性
- GC 友好
:避免野指针风险,内存安全由运行时保障
- AOT 支持
:支持 .NET Native AOT 编译
4.2 LINQ 原生查询
// 原生 LINQ 查询支持 var results = db.Query<Telemetry>() .Where(t => t.DeviceId =="sensor-001") .Where(t => t.Timestamp >= startTime && t.Timestamp <= endTime) .GroupBy(t => t.Timestamp.Date) .Select(g =>new{ Date = g.Key, Avg = g.Average(x => x.Value)}) .ToList();4.3 与 IoTSharp 生态深度集成
作为 IoTSharp 生态的核心组件,SonnetDB 与平台其他组件无缝协作:
IoTSharp Platform ┌──────────────────────────────────────┐ │ 设备接入层 (MQTT/HTTP/CoAP) │ ├──────────────────────────────────────┤ │ 规则链引擎 (Rule Chain) │ ├──────────────────────────────────────┤ │ 时序存储层 │ │ ┌────────────────────────────────┐ │ │ │ SonnetDB (推荐) │ │ │ │ - 嵌入式部署 │ │ │ │ - 高吞吐写入 │ │ │ │ - 高效聚合查询 │ │ │ └────────────────────────────────┘ │ │ (可选: InfluxDB/IoTDB/TDengine) │ └──────────────────────────────────────┘五、应用场景分析
5.1 边缘计算场景
在工业边缘网关中,SonnetDB 的嵌入式特性使其成为理想选择:
无需额外部署数据库服务
低资源占用(单实例仅需几 MB)
断网后可本地缓存,离线数据不丢失
5.2 物联网设备端
智能设备可直接嵌入 SonnetDB:
// 设备端轻量级存储 var db =newSonnetDB("device.db"); db.Write(newTelemetry{ DeviceId ="sensor-001", Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), Value =23.5 });5.3 小型化应用
桌面监控工具
实验室数据采集
单机版 SCADA 系统
六、横向对比
特性
SonnetDB
InfluxDB
TDengine
TimescaleDB
部署模式
嵌入式
服务型
服务型
扩展型
.NET 原生
✅
❌
❌
❌
写入性能
180万点/秒
~20万点/秒
~100万点/秒
~50万点/秒
许可证
MIT
MIT
AGPL
Apache 2.0
生态集成
IoTSharp
通用
工业物联网
PostgreSQL 生态
七、总结与展望
SonnetDB 的出现填补了.NET 生态缺乏高性能嵌入式时序数据库的空白。凭借其:
- 卓越性能
:180万点/秒写入,6.71ms 范围查询
- 纯.NET 实现
:100% 托管代码,原生 LINQ 支持
- 嵌入式部署
:零运维,开箱即用
- MIT 许可证
:商业友好,无授权费用
SonnetDB 为 .NET 开发者提供了一个在 IoT 场景下替代 InfluxDB、Prometheus 的优秀选择。随着 IoTSharp 生态的持续完善,SonnetDB 有望成为 .NET 领域时序数据存储的事实标准。
参考来源:
IoTSharp 官方公众号:SonnetDB 高性能开源时序数据库引擎正式发布
IoTSharp 官网:https://iotsharp.net/
GitHub:https://github.com/IoTSharp/IoTSharp
⚠️ 提示:SonnetDB 当前仓库可能处于早期开发或私有阶段,建议关注 IoTSharp 官方动态获取最新信息。