Apache IoTDB C# SDK 介绍

apache,iotdb,c#,sdk,介绍 · 浏览次数 : 817

小编点评

**IoTDB 三篇相关文章** 1. **Apache-IoTDB-Client-CSharp API 接口文档** 2. **Apache-IoTDB-Client-CSharp 时间序列数据性能分析报告** 3. ** Apache-IoTDB-Client-CSharp 数据插入性能测试** **摘要** 这三篇文章介绍了 Apache-IoTDB C#客户端的 API 接口文档、时间序列数据性能分析报告和数据插入性能测试。这些文档提供了有关如何使用 C# 客户端从 IoTDB 中获取和插入数据所需的信息。 **主要内容** **API 接口文档**介绍了客户端 API 的接口,包括用于创建会话、创建和插入数据等操作的接口。 **时间序列数据性能分析报告**分析了针对时间序列数据格式的性能,包括插入、更新和删除操作的性能。 **数据插入性能测试**测试了不同数据插入模式的性能,包括 insert_tablet 和 insert_records 接口。

正文

    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倍的性能加速,详见以下两篇文档:

    在库里 有一个 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# SDK 介绍相似的内容:

    Apache IoTDB C# SDK 介绍

    最近今天写了IoTDB的三篇相关文章,完成了安装部署和客户端连接:Windows Server上部署IoTDB 集群DBeaver 连接IoTDBDriver将IoTDB注册为Windows服务TsFile 是 IoTDB 的底层数据文件,一种专门为时间序列数据设计的列式文件格式。IoTDB TsF

    工业数据分析为什么要用FusionInsight MRS IoTDB?

    摘要:MRS IoTDB,它是华为FusionInsight MRS大数据套件中的时序数据库产品,在深度参与Apache IoTDB社区开源版的基础上推出的高性能企业级时序数据库产品。 本文分享自华为云社区《工业数据分析为什么要用FusionInsight MRS IoTDB?》,作者:高深广 。

    Windows Server上部署IoTDB 集群

    本文是参考官方的 IoTDB 集群版(1.0.0)的安装及启动教程:https://iotdb.apache.org/zh/UserGuide/V1.0.x/Cluster/Cluster-Setup.html ,在Windows Server 2019上部署集群的实践记录。前置检查使用微软发布的O

    玄机-第二章日志分析-apache日志分析

    玄机-第二章日志分析-apache日志分析 简介 账号密码 root apacherizhi ssh root@IP 1、提交当天访问次数最多的IP,即黑客IP: 2、黑客使用的浏览器指纹是什么,提交指纹的md5: 3、查看index.php页面被访问的次数,提交次数: 4、查看黑客IP访问了多少次...

    Apache的配置详解

    目录httpd配置1. 工作模式1.1 Prefork 模式1.2 Worker 模式1.3. Event 模式总结1.4 调整工作模式2. httpd配置文件解析2.1 ServerRoot2.2 Listen2.3 Include2.4 User & Group2.5 ServerAdmin2.

    Doris failed to initialize storage reader. tablet=106408, res=[NOT_IMPLEMENTED_ERROR]to be implemented

    Apache Doris 2.3 以下的版本会存在一个 bug,导致数据在合并时存在异常,在后续查询该字段数据时会提示 [1105] [HY000]: errCode = 2, detailMessage = (192.168.15.228)[CANCELLED]failed to initiali

    Apache基于IP和端口

    Apache基于IP 步骤1:添加并配置虚拟网卡 添加虚拟网卡:通常在虚拟机环境中,可以通过虚拟机软件(如VMware或VirtualBox)的网络设置来添加额外的网络适配器。 配置IP地址:编辑/etc/sysconfig/network-scripts/ifcfg-ethX文件,,并将它们设置为

    我是如何从零到成为 Apache 顶级项目的 Committer

    最近收到了 Apache Pulsar 和 Apache HertzBeat社区的邀请邮件,成为了这两个项目的 Committer。 一路走来我从最开始的打游击战的闲散人员到如今活跃在各个开源项目里的“老兵”,用现在流行的话来说 Apache 的这两个 Committer 就相当于是拿到了编制,进入

    在Apache Hudi数据湖上实现近乎实时的数据分析

    介绍 在数据处理领域,数据分析师在数据湖上运行其即席查询。数据湖充当分析和生产环境之间的接口,可防止下游查询影响上游数据引入管道。为了确保数据湖中的数据处理效率,选择合适的存储格式至关重要。 Vanilla数据湖解决方案构建在具有 Hive 元存储的云对象存储之上,其中数据文件以 Parquet 格

    [转帖]nginx源码编译及优化

    Apache与nginx的区别 apache: 进程,稳定模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多 nginx: 线程,快,不稳定。多线程是共享的,一个线程出问题,其他的也会受牵连。7层调度,反向代理能力强。CDN这块nginx也用的多轻量级,同样起web 服务,比a