代码编织梦想

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

apache iotdb 初步使用以及遇到的问题-爱代码爱编程

0,遇到的问题  1)日志显示跟flink的冲突,需要排除 <dependency> <groupId>org.apache.iotdb</groupId> <artifactId>flink-iotdb-connector</artifactId> <versi

apache iotdb_高性能轻体量物联网数据库Apache IoTDB-爱代码爱编程

Apache IoTDB概述 Apache IoTDB(物联网数据库)是为时间序列数据设计的集成数据管理引擎。它为用户提供数据收集,存储和分析服务。它具有体量轻、性能高、易使用的特点,完美对接Hadoop与Spark生态,Apache IoTDB可以满足大规模数据存储,高速数据提取和复杂数据分析,因此适用于工业物联网应用中海量时间序列数据高速写入和复

Apache IoTDB 在大唐先一的应用案例-爱代码爱编程

正文 1141 字,预计阅读时间 3 分钟。 大唐先一科技是一家聚焦电力、能源行业系统解决方案的公司。所以,一款简单易用的实时数据库是不可或缺的。公司服务的电厂、分子公司遍布全国,因此各种实时数据库也是五花八门,给运维人员造成不小的困难。借着近年来大数据技术的发展,公司曾借助开源技术开发完成了一款分布式实时数据库XDB5.0。在经历压测后该款数

Apache IoTDB:整合Grafana并实现数据显示-爱代码爱编程

1.声明 当前内容主要用于记录当前在使用IOTDB与Grafana这个进行整合的过程 当前版本:IOTDB 0.11.2,Grafana 7.4.3,当前内容来源官方文档 2.拉取simple-json-datasource插件 git clone https://github.com/grafana/simple-json-datasource.

# Apache IoTDB(0.12.x) 的客户端接口的使用与学习-爱代码爱编程

Apache IoTDB 的客户端接口 1、JDBC接口 首先导入你对应iotdb版本的pom依赖: <dependencies> <dependency> <groupId>org.apache.iotdb</groupId> <artifactId>

我的第一次实质性开源贡献——Apache IoTDB-爱代码爱编程

前言 虽然之前也在Github上尝试提过一些PR,但都是一些doc、typo等类型的入门实践。真正算得上有一定实质性工作,要数最近在Apache IoTDB上提交的一个功能PR.如果大家对开源感兴趣的话,可以看我的一篇关于开源介绍的文章(开源介绍).如果大家对文中提到的比如Github、PR等词汇不熟悉建议可以先去学习一下Git,注册使用Githu

Apache IoTDB v0.13 发布-爱代码爱编程

Release Announcement   version 0.13   Apache IoTDB v0.13 已经发布,此版本新增对齐序列存储模型,增加了对触发器等功能的支持;优化了现有 SQL 语法,并增加了新的语法支持;提升了查询功能,增加了对连续查询、嵌套表达式等的支持;优化了数据写入的过程,提升了系统文件合并的性能;拓展了与外部系

清华自研时间序列数据库Apache IoTDB原理解析-爱代码爱编程

云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法、算力、数据集整体的服务体系及智能运维业务场景的解决方案交流社区。该社区致力于传播 AIOps 技术,旨在与各行业客户、用户、研究者和开发者们共同解决智能运维行业技术难题,推动 AIOps 技术在企业中落地,建设健康共赢的AIOps 开发者生态。 智能运维领域的数据特点 指标数

一文带你使用Apache IoTDB系统监控模块-爱代码爱编程

在Apache IoTDB 0.13.0版本开始,我们引入了系统监控模块,本文主要介绍了如何在单机版开启系统监控模块,并且使用Prometheus + Grafana完成系统监控的可视化。 相关配置信息 Apache IoTDB:0.13.0,可以前往官网下载Prometheus:2.30.3,可以前往官网下载Grafana:8.4.2,可以前往官网下

Apache IoTDB’s UDF源码分析(1)-爱代码爱编程

目录 前言 命令行注册UDF函数(Create Function xxx as "全限定类名") 语法分析  生成物理计划 执行物理计划进行函数注册  Select带有UDF函数的查询 前言         继上个月开始了Apache IoTDB的源码贡献,闲来有空时,便会看看感兴趣模块的代码。这次主要跟大家分享一下自己对Apac

新手入门贡献Apache IoTDB-爱代码爱编程

名词解释 Issue: 开源社区的一个任务的统称,通常会有一个Issue 列表,用于表示各种任务,比如功能Issue,Bug Issue, Improvement Issue等。PR(Pull Request): 个人理解是一种工作流程,当你在本地感觉开发好或者说完成某个Issue(不一定是代码,有可能是文档等工作)时,准备提交到社区仓库的master分

Apache IoTDB介绍-爱代码爱编程

什么是时序数据库 时序数据库-为万物互联插上一双翅膀 – 有态度的HBase/Spark/BigData 总体介绍 Apache IoTDB 始于清华大学软件学院,是一款时序数据库。主要使用场景是在物联网相关行业,如:车联网、风力发电、地铁、飞机监控等等,具体应用案例及公司详情可以查看:IoTDB在实际公司中的使用信息收集。它采用了列式存储、数据编码

2022 apache iotdb 物联网生态大会 | 早鸟超值获票福利第一弹!(限时 3 天)_apache iotdb的博客-爱代码爱编程

2022  Apache IoTDB  物联网生态大会重磅来袭 - 超值获票福利第一弹 - 期待、好奇 Apache IoTDB V1.0 (分布式)? 想了解 Apache IoTDB 在各领域龙头企业的实践案例? 共同探究如何更好的设计物联网场景数据管理架构? 享受与权威院士和行业大咖的知识交流? 不用再等啦!12 月 3

apache iotdb v1.0.0安装试用小结( linux环境)-爱代码爱编程

1 简介 Apache IoTDB 是一个开源物联网时序数据库。 github地址:https://github.com/apache/iotdb 2 下载 下载地址:https://iotdb.apache.org

2022 iotdb summit:京东刘刚《apache iotdb 在京东万物互联场景中的应用》-爱代码爱编程

12 月 3 日、4日,2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本,并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例,深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态,企业如何与开源社区紧密配合,实现共赢。 我们邀请到京东科技

linux下安装apache iotdb_linux iotdb 离线安装-爱代码爱编程

下载与安装 官方给出三种安装方式,这里只演示使用二进制文件安装。 准备工作 安装1.8以上的JDK运行环境,并且配置环境变量JAVA_HOME。设置max open files为65535,避免"too ma

iotdb 的c# 客户端发布 0.13.0.7-爱代码爱编程

    IoTDB C# Client 0.13.0.7 已经发布, 此版本更新的内容为笔者为Apache-IoTDB-Client-CSharp实现了Ado.Net的兼容层,降低了对IoTDB的使用门槛。于此同时, IoTSharp也开始支持了IoTDB的数据入库,随着晚些时候IoTSharp 2.7 版本的发布,此版本更新和IoTDB的健康检查也

如何使用 apache iotdb 触发器-爱代码爱编程

Apache IoTDB 触发器提供了一种侦听序列数据变动的机制。配合用户自定义逻辑,可完成告警、数据转发等功能。 触发器基于 Java 反射机制实现。用户通过简单实现 Java 接口,即可实现数据侦听。IoTDB 允许用户动态注册、卸载触发器,在注册、卸载期间,无需启停服务器。 本文将说明如何在 Apache IoTDB 1.0 版本使用触