Apache IoTDB C# SDK 介绍

IoTDBC#客户端详解:安装、连接与性能优化
文章介绍了如何在WindowsServer上部署IoTDB集群,使用DBeaver连接IoTDB,以及将IoTDB注册为Windows服务。重点讨论了IoTDB的底层数据文件TsFile和数据读写结构TSRecord与Tablet。此外,文章提到了Apache-IoTDB-Client-CSharpSDK,包括对最新特性的支持,并给出了预览版的发布信息。示例代码展示了如何使用C#客户端进行时间序列数据的插入操作。最后,文章强调了连接池的使用和性能优化,特别是插入数据时的接口选择策略。
部署运行你感兴趣的模型镜像

86b44e6aefa17b5506cbdb4e117dc800.png

最近今天写了IoTDB的三篇相关文章,完成了安装部署和客户端连接:

Windows Server上部署IoTDB 集群

DBeaver 连接IoTDBDriver

将IoTDB注册为Windows服务

TsFile 是 IoTDB 的底层数据文件,一种专门为时间序列数据设计的列式文件格式。IoTDB TsFile数据读写主要是下面两个结构:

  • IoTDB 提供了一个TSRecord工具,TSRecord记录了一个设备在一个时间戳下的若干测点信息。在c# 客户端里被抽象成了Row Record

  • IoTDB 提供了一个Tablet工具,Tablet记录了一个设备的多个测点的信息,按照一种表格的形式表示,这些测点具有相同的时间戳序列,因此可以应用在测点具有相同时间戳序列(每个时间戳下各个测点都具有值)的设备中。

IoTDB C# SDK  叫做 Apache-IoTDB-Client-CSharp,Github:https://github.com/eedalong/Apache-IoTDB-Client-CSharp ,Nuget 包有两个:

Apache.IoTDB和 Apache.IoTDB.Data。其中 Apache.IoTDB.Data 是对ADO .NET支持,以.NET 读取数据库的方式方便不同使用习惯的用户, C#客户端也及时更新支持最新的Apache IoTDB的特性,如对齐序列插入、SchemaTemplate操纵接口的 支持、支持插入空值的Tablet结构等。

最近刚刚发布了对IoTDB 1.0版本的支持的1.0.0.1预览版已经发布,欢迎各位试用并提issue~: https://www.nuget.org/packages/Apache.IoTDB/1.0.0.1-alpha

使用示例

// 参数定义
string host = "localhost";
int port = 6667;
int pool_size = 2;

// 初始化session
var session_pool = new SessionPool(host, port, pool_size);

// 开启session
await session_pool.Open(false);

// 创建时间序列
await session_pool.CreateTimeSeries("root.test_group.test_device.ts1", TSDataType.TEXT, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);
await session_pool.CreateTimeSeries("root.test_group.test_device.ts2", TSDataType.BOOLEAN, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);
await session_pool.CreateTimeSeries("root.test_group.test_device.ts3", TSDataType.INT32, TSEncoding.PLAIN, Compressor.UNCOMPRESSED);

// 插入record
var measures = new List<string>{"ts1", "ts2", "ts3"};
var values = new List<object> { "test_text", true, (int)123 };
var timestamp = 1;
var rowRecord = new RowRecord(timestamp, values, measures);
await session_pool.InsertRecordAsync("root.test_group.test_device", rowRecord);

// 插入Tablet
var timestamp_lst = new List<long>{ timestamp + 1 };
var value_lst = new List<object> {new() {"iotdb", true, (int) 12}};
var tablet = new Tablet("root.test_group.test_device", measures, value_lst, timestamp_ls);
await session_pool.InsertTabletAsync(tablet);

// 关闭Session
await session_pool.Close();


详细接口信息可以参考接口文档

连接池

C#客户端暴露的所有接口均为异步接口。使用C#客户端从首先建立一个SessionPool开始,建立SessionPool时需要指定服务器的IP 、Port 以及 SessionPool的大小,SessionPool的大小代表本地与服务器建立的连接的数目。为了实现并发客户端请求,客户端提供了针对原生接口的连接池(SessionPool),由于SessionPool本身为Session的超集,当SessionPoolpool_size参数设置为1时,退化为原来的Session

客户端 使用ConcurrentQueue数据结构封装了一个客户端队列,以维护与服务端的多个连接,当调用Open()接口时,会在该队列中创建指定个数的客户端,同时通过System.Threading.Monitor类实现对队列的同步访问。

当请求发生时,会尝试从连接池中寻找一个空闲的客户端连接,如果没有空闲连接,那么程序将需要等待直到有空闲连接

当一个连接被用完后,他会自动返回池中等待下次被使用

在使用连接池后,客户端的并发性能提升明显,这篇文档展示了使用线程池比起单线程所带来的性能提升

ByteBuffer

在传入RPC接口参数时,需要对Record和Tablet两种数据结构进行序列化,我们主要通过封装的ByteBuffer类实现

在封装字节序列的基础上,我们进行了内存预申请与内存倍增的优化,减少了序列化过程中内存的申请和释放,在一个拥有20000行的Tablet上进行序列化测试时,速度比起原生的数组动态增长具有35倍的性能加速,详见以下两篇文档:

  • ByteBuffer详细介绍

  • ByteBuffer性能测试文档

在库里 有一个 IoTDB C#客⼾端性能分析报告:https://github.com/eedalong/Apache-IoTDB-Client-CSharp/blob/main/docs/time_profile_zh.pdf ,建议大家看一看,这里只说结论:

  • 在插⼊与该⽤⼾类似的结构化较强、没有空值、规整、每⾏的column固定的的数据时,建议使⽤insert_tablet接⼝,经过改善后的insert_tablet接⼝具备较好的性能,能满⾜该⽤⼾的需求

  • 数据量较⼤,但数据整体不规整或者有空值,每⾏数据的column数不定时建议使⽤insert_records接⼝,该接⼝对record数据的插⼊速度较为可观

  • 数据量⼩,需要对原有数据做出⼀定的修正 时,使⽤insert_record接⼝

参考文章:

  • Apache IoTDB C#客户端介绍: https://github.com/eedalong/Apache-IoTDB-Client-CSharp/blob/main/docs/Apache%20IoTDB%20C%23%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BB%8B%E7%BB%8D%20(6).pdf

  • IoTDB C#客⼾端性能分析报告:https://github.com/eedalong/Apache-IoTDB-Client-CSharp/blob/main/docs/time_profile_zh.pdf 

  • API 接口: https://github.com/eedalong/Apache-IoTDB-Client-CSharp/blob/main/docs/API.md

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

### Apache IoTDB 官方文档 Apache IoTDB 是一款专为物联网设计的时间序列数据库管理系统 (TSDB)[^1]。其官方文档涵盖了从基础概念到高级使用的全面指导,帮助用户深入了解如何部署、配置和管理 IoTDB 实例。 #### 文档结构 - **基本概览**:提供关于 IoTDB 的核心特性和架构的介绍。 - **快速入门指南**:通过简单的步骤引导新用户完成首次运行。 - **操作手册**:详细介绍各项功能的具体使用方法,包括数据建模、查询语言 SQL 语法等。 - **开发人员指南**:针对希望集成 IoTDB 到自己应用程序中的开发者,提供了 API 参考和其他技术细节。 - **最佳实践与案例研究**:分享实际应用场景下的经验和技巧。 --- ### Apache IoTDB 主要特性 IoTDB 凭借其独特的设计理念,在多个维度展现了卓越的能力: 1. **高性能写入与读取** - 面向时间戳优化的数据存储机制使得大批量传感器数据能够被高效记录下来的同时支持复杂的历史数据分析请求[^3]。 2. **压缩率高** - 对于典型工业场景下产生的数值型测量值具有极高的压缩效率,从而减少磁盘占用空间并降低传输成本。 3. **灵活查询模型** - 原生支持多维过滤条件以及聚合函数计算等功能强大的 SQL 查询接口允许用户轻松提取所需信息。 4. **跨平台兼容性** - 不仅限于 Java 生态环境,还拥有多种编程语言绑定版本可供选择,比如 Python、C++ 和 C# 等。 5. **易扩展插件体系** - 用户可以通过编写自定义 UDF(User Defined Function)、UDAGG (User Defined Aggregation)来增强系统的功能性。 6. **分布式集群模式** - 支持水平伸缩以满足更大规模业务需求的增长趋势。 7. **丰富的生态系统工具集** - 包括但不限于图形化界面 web workbench 工具[^2] ,简化了日常运维管理工作流程;还有专门面向特定用途打造的各种 SDKs/Libraries。 8. **开源社区活跃度高** - 得益于全球范围内众多贡献者的共同努力,持续改进产品质量和技术路线图规划透明公开。 --- ### Apache IoTDB 下载方式 最新稳定版可通过以下链接获取: - 清华大学 TUNA 开源镜像站点托管页面下载地址如下所示 [^5]: ```plaintext https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/iotdb/0.9.0-incubating/apache-iotdb-0.9.0-incubating-bin.zip ``` 解压后即可获得完整的服务器端程序包文件夹路径通常位于 `server/target/iotdb-server-{project.version}` 中 [^4]. --- ### 使用教程概述 对于初次接触该产品的朋友们来说,可以从以下几个方面入手学习如何有效利用这个强大工具解决现实世界里的挑战问题: #### 安装过程简介 按照官方指引逐步执行必要的准备工作之后便可以顺利启动服务实例 : 1. 解压已下载好的二进制分发包; 2. 修改 conf 文件夹内的配置项参数适应本地网络环境设置情况; 3. 执行 bin/start-server.sh 脚本来激活后台进程监听指定端口等待客户端连接到来。 #### 数据交互演示样例 假设我们有一个温度监控设备每隔一秒上报一次当前室温读数,则可以用下面这段伪代码表示整个生命周期周期内可能涉及的主要环节逻辑实现思路 [^3]: ```python from iotdb.Session import Session session = Session('localhost', 6667, 'root', 'root') if not session.open(False): raise Exception("Cannot connect to IoTDB") try: # 创建测点 sql_create = "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE" session.execute_non_query(sql_create) # 插入单条记录 timestamp = int(time.time() * 1000) value = random.uniform(20.0, 30.0) session.insert_record(["root.ln.wf01.wt01"], ["temperature"], [timestamp], [value]) finally: session.close() ``` 上述片段展示了怎样借助 python sdk 构造会话对象并通过标准 api 方法调用来达成目标效果。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值