魅力程序猿

  • 首页
  • Java
  • Android
  • APP
    • 扑克计分器
    • Video Wallpaper
  • 联系我
  • 关于我
  • 资助
道子
向阳而生
  1. 首页
  2. AI技术
  3. 正文

SonnetDB:.NET 生态下的高性能嵌入式时序数据库

2026年4月28日 24点热度 0人点赞 0条评论

📰 来源: 博客园


SonnetDB 是由 IoTSharp 团队(maikebing)开源发布的一款高性能时序数据库引擎,基于 C# / .NET 10 构建,采用 MIT 许可证。该项目专为 IoT 物联网、工业控制、运维监控和实时分析场景 设计,标志着 .NET 生态在时序数据领域的重大突破。

注意:GitHub 链接 github.com/IoTSharp/SonnetDB 当前返回 404,仓库可能尚未公开或处于早期开发阶段。但从官方发布信息来看,该项目已完成首个重要里程碑,具备生产级能力。

SonnetDB 在多项基准测试中展现出色的性能表现:

测试环境: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 特性
  • 追加写入模式,确保数据不丢失
  • CRC 校验保证数据完整性
  • 崩溃恢复机制保障 ACID 特性
  • 内存表(MemTable)

    • 写入缓冲区,吸收高并发写入
    • 内存中完成排序(Skip List 或类似结构)
    • 达到阈值后刷盘
  • 内存表(MemTable)

  • 写入缓冲区,吸收高并发写入
  • 内存中完成排序(Skip List 或类似结构)
  • 不可变段(Segment)

    • 只读数据文件(SSTable 风格)
    • 支持分层压缩
    • 索引加速范围查询
  • 不可变段(Segment)

  • 只读数据文件(SSTable 风格)
  • 段压缩(Compaction)

    • Size-Tiered 策略
    • 自动合并小文件,减少碎片
    • 后台异步执行,不阻塞写入
  • 段压缩(Compaction)

  • Size-Tiered 策略
  • 自动合并小文件,减少碎片
  • 后台异步执行,不阻塞写入
  • 3.3 数据生命周期管理

  • Tombstone 删除机制:逻辑删除标记,支持幂等删除操作
  • TTL 自动过期:自动清理过期数据,降低存储成本
  • 四、.NET 技术特性

    4.1 纯安全代码(Safe Code)

    SonnetDB 坚持 100% 托管代码 设计理念,不使用任何 unsafe 代码块:

    // 基于 Span<T> 和 ReadOnlySpan<T> 的零拷贝读取
    public readonly struct DataPoint
    {
        public long Timestamp { get; }
        public double Value { get; }
        
        public DataPoint(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) │
    ├────────────────────────────


    🔗 原文链接: 点击阅读原文

    标签: AI 人工智能 技术博客
    最后更新:2026年4月28日

    daozi

    这个人很懒,什么都没留下

    点赞
    < 上一篇

    文章评论

    razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复
    搜索
    联系方式

    QQ群:179730949
    QQ群:114559024
    欢迎您加入Android大家庭
    本人QQ:136049925

    赐我一丝安慰
    给我一点鼓励

    COPYRIGHT © 2023 魅力程序猿. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    豫ICP备15000477号