一、项目概述

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 的经典存储架构,分为四层:

  1. 预写日志(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 生态缺乏高性能嵌入式时序数据库 的空白。凭借其:

    1. 卓越性能

      :180万点/秒写入,6.71ms 范围查询

    2. 纯.NET 实现

      :100% 托管代码,原生 LINQ 支持

    3. 嵌入式部署

      :零运维,开箱即用

    4. MIT 许可证

      :商业友好,无授权费用

    SonnetDB 为 .NET 开发者提供了一个在 IoT 场景下替代 InfluxDB、Prometheus 的优秀选择。随着 IoTSharp 生态的持续完善,SonnetDB 有望成为 .NET 领域时序数据存储的事实标准。


    参考来源

    ⚠️ 提示:SonnetDB 当前仓库可能处于早期开发或私有阶段,建议关注 IoTSharp 官方动态获取最新信息。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐