TDengine写入2000万数据查询体验

最近在寻找时序数据库,想应用在公司的项目上。
上一篇文章实验了InfluxDB:windows上使用influx2.7学习,还学习了flux语言,最后发现宽表查询比较困难,就放弃了,于是决定试试国产时序数据库TDengine

参考

官方文档:https://docs.taosdata.com/

windows安装TDengine

从3.0.71版本之后,TDengine就不提供Server版本的安装包了:
在这里插入图片描述
那就安装3.0.71版本吧,下载地址:https://www.taosdata.com/assets-download/3.0/TDengine-server-3.0.7.1-Windows-x64.exe
下载之后,点击安装,会默认安装到C:\TDengine目录下:
在这里插入图片描述
点击taosd.exe即可运行TDengine数据库服务

2000万示例数据

我准备了一个csv数据,可百度网盘下载:链接:https://pan.baidu.com/s/1FlcFkh8cF1WEAOMrmrb9JQ?pwd=o579
提取码:o579,有4G多(解压后的csv文件),大概有19610118条数据,最后全部写入到tdengine,只占500M不到,非常节省空间

创建数据库

打开taos.exe,输入如下命令,创建一个名称叫tony的数据库

create database tony precision 'ns'

注意1:precision 'ns'这一句是让数据库支持纳秒,不加这句的话默认是毫秒。需要支持纳秒的原因:因为在读取data.csv的行的时候,生成sql语句的ts字段用的是DateTime.Now,需要数据库支持纳秒来区分时间,否则插入的ts有可能一样,会被当做更新行。

注意2:最新版本的TDengine(截止到写文章的时候,是3.2.3.0)的linux安装包版本使用precision 'ns'无效,亲测,可能是自己的使用方式不对,所以想跟着本文章学习,最好使用3.0.71版本

编写C#程序写入数据

使用C#,将data.csv中的19610118条数据写入到数据库
创建一个控制台程序,引用Nuget:

<PackageReference Include="TDengine.Connector" Version="3.1.2" />

编写代码如下(包含自动创建表):

// See https://aka.ms/new-console-template for more information
using System.Diagnostics;
using TDengine.Driver;
using TDengine.Driver.Client;Console.WriteLine("Hello, World!");var builder = new ConnectionStringBuilder("host=localhost;port=6030;username=root;password=taosdata");
using (var client = DbDriver.Open(builder))
{Console.WriteLine("connected");var affectRow = client.Exec(@"create TABLE IF NOT exists tony.batinfo(ts timestamp,batcode varchar(50),logintime varchar(50),devicecode varchar(20),processid int,flowid int,batterypos int,capacity1 float ,capacity2 float ,voltage1 float ,voltage2 float ,current1 float ,current2 float ,ocv1 float ,ocv2 float ,ir1 float ,ir2 float,batid float);");if (affectRow > 0){Console.WriteLine("create table success!");}string csvPath = "G:\\BatInfo_2021\\data.csv";//写入Stopwatch stopwatch = Stopwatch.StartNew();using (var stream = new StreamReader(csvPath)){int count = 0;int totalCount = 0;while (true){var line = await stream.ReadLineAsync();if (line == null) break;count++;totalCount++;if (totalCount == 1) continue;//第1行舍弃var strs = line.Split(',');if (count >= 10000){count = 0;Console.WriteLine($"has read {totalCount} lines,ellapse time {stopwatch.ElapsedMilliseconds / (double)1000} seconds");}var batCodeStr = strs[0];var loginTimeStr = strs[1];var deviceCodeStr = strs[2];var processIdStr = strs[3];var flowIdStr = strs[4];var batteryPos = strs[7];var capacity1Str = strs[12];var capacity2Str = strs[13];var voltage1Str = strs[18];var voltage2Str = strs[19];var current1Str = strs[24];var current2Str = strs[25];var ocv1Str = strs[28];var ocv2Str = strs[29];var ir1Str = strs[33];var ir2Str = strs[34];var batIdStr = strs[71];var sql = @$"insert into tony.batinfo values('{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff")}','{batCodeStr}','{loginTimeStr}','{deviceCodeStr}',{ConvertToDouble(processIdStr, 0)},{ConvertToDouble(flowIdStr, 0)},{ConvertToDouble(batteryPos, 0)},{ConvertToDouble(capacity1Str, 0)},{ConvertToDouble(capacity2Str, 0)},{ConvertToDouble(voltage1Str, 0)},{ConvertToDouble(voltage2Str, 0)},{ConvertToDouble(current1Str, 0)},{ConvertToDouble(current2Str, 0)},{ConvertToDouble(ocv1Str, 0)},{ConvertToDouble(ocv2Str, 0)},{ConvertToDouble(ir1Str, 0)},{ConvertToDouble(ir2Str, 0)},{ConvertToDouble(batIdStr, 0)})";try{affectRow = client.Exec(sql);if (affectRow <= 0) { Console.WriteLine($"affect row:{affectRow}"); }}catch (Exception e){Console.WriteLine($"Error:{e.Message}");}}}Console.WriteLine($"finish,ellapse total seconds:{stopwatch.ElapsedMilliseconds / (double)1000}");
}double ConvertToDouble(string str, double defalutValue)
{if (double.TryParse(str, out var v)) return v;return defalutValue;
}

运行完成后,数据插入成功。

数据查询体验

点击taos.exe即可开启查询。
注意:TDengine以上都没有给任何列添加索引!!!

查询数据总量

使用tdengine查询数据总量耗时0.03s
在这里插入图片描述
相同数据量的SQL SERVER查询,耗时0.63s
在这里插入图片描述

查询电压平均值

计算将近2千万数字的平均值大概时间为0.04s
在这里插入图片描述

查询电压大于3500小于3600的记录最多10条

耗时0.2s
在这里插入图片描述

查询BatCode='111’的数据有多少条

耗时1.88s
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/317304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行&#xff08;windows&#xff09; 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

Postgresql源码(127)投影ExecProject的表达式执行分析

无论是投影还是别的计算&#xff0c;表达式执行的入口和计算逻辑都是统一的&#xff0c;这里已投影为分析表达式执行的流程。 1 投影函数 用例 create table t1(i int primary key, j int, k int); insert into t1 select i, i % 10, i % 100 from generate_series(1,1000000…

前端性能优化知识梳理

1.重要性 当我们面试的时候&#xff0c;前端性能优化方面算是必考的知识点&#xff0c;但是工作中我们又很少会重点的对项目进行前端优化&#xff0c;它真的不重要吗&#xff1f; 如果我们可以将后端响应时间缩短一半&#xff0c;整体响应时间只能减少5%~10%。而如果关注前端…

【C语言】——数据在内存中的存储

【C语言】——数据在内存中的存储 一、整数在内存中的存储1.1、整数的存储方式1.2、大小端字节序&#xff08;1&#xff09;大小端字节序的定义&#xff08;2&#xff09;判断大小端 1.3、整型练习 二、浮点数在内存中的存储2.1、引言2.2、浮点数的存储规则2.3、浮点数的存储过…

mac用Homebrew安装MySQL并配置远程登录

1. 简介 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;后被 Oracle 公司收购。MySQL 使用 SQL&#xff08;Structured Query Language&#xff09;作为查询语言&#xff0c;并提供了强大的功能和性能…

python安卓自动化pyaibote实践------学习通自动刷课

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文是一个完成一个自动播放课程&#xff0c;避免人为频繁点击脚本的构思与源码。 加油&#xff01;为实现全部电脑自动化办公而奋斗&#xff01; 为实现摆烂躺平的人生而奋斗&#xff01;&#xff01;&#xff…

Linux——socket套接字与udp通信

目录 一、理解IP地址与端口 二、socket套接字 三、TCP与UDP的关系 四、网络字节序 五、socket编程 1.socket()创建套接字 2.填充sockaddr_in 结构体 3.bind() 绑定信息 4.recvfrom()接收消息 5.sendto()发送消息 六、UdpServer代码 一、理解IP地址与端口 IP地址是In…

【C++】详解string类

目录 简介 框架 构造 全缺省构造函数 ​编辑 传对象构造函数 拷贝构造 析构函数 容量 size() capacity&#xff08;&#xff09; empty() clear() reserve() ​编辑 resize() 遍历 检引用符号"[ ]"的重载 迭代器 begin() end() rbegin() rend(…

【触摸案例-控件不能响应的情况 Objective-C语言】

一、接下来,我们来说这个“控件不能响应的情况”, 1.素材里边,有一个“不接受用户交互的情况”,这么一个代码,把它打开, 把这个项目啊,复制过来,改一个名字,叫做“04-控件不能响应的情况”, 打开之后,command + R,运行一下, 在storyboard上,你也可以看得出来,我…

智慧农业设备——虫情监测系统

随着科技的不断进步和农业生产的日益现代化&#xff0c;智慧农业成为了新时代农业发展的重要方向。其中&#xff0c;虫情监测系统作为智慧农业的重要组成部分&#xff0c;正逐渐受到广大农户和农业专家的关注。 虫情监测系统是一种基于现代传感技术、图像识别技术和大数据分析技…

链表-----返回倒数第K个节点回文结构的判断相交链表

目录 1.返回倒数第K个节点 2.回文结构的判断 3.相交链表的判断&#xff0c;返回交点 1.返回倒数第K个节点 &#xff08;1&#xff09;返回链表的第k个节点&#xff0c;我们这里的做法是定义两个指针&#xff0c;这两个指针之间相差的是k这个长度&#xff1b;这个过程的实现就…

Android手势识别面试问题及回答

问题 1: 如何在Android中实现基本的手势识别&#xff1f; 答案: 在Android中&#xff0c;可以通过使用GestureDetector类来实现基本的手势识别。首先需要创建一个GestureDetector的实例&#xff0c;并实现GestureDetector.OnGestureListener接口来响应各种手势事件&#xff0c…

创建SpringBoot和RabbitMQ的整合项目

文章目录 创建SpringBoot和RabbitMQ的整合项目首先快速创建一个maven项目引入SpringBoot整合rabbitMQ的依赖在src/main目录下创建resources目录并引入配置文件写消息发送者MessageSender写消息接收者MessageReceiver写RabbitMQConfig配置类写SpringBoot启动主类CommandLineRunn…

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本&#xff1a;7.3/7.2&#xff08;测试时我用的7.2要安装sg扩展 &#xff09; 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

代码随想录算法训练营第60天|84.柱状图中最大的矩形

84. 柱状图中最大的矩形 题目链接&#xff1a;柱状图中最大的矩形 题目描述&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 解题思路&#…

24 JavaScript学习:this

this在对象方法中 在 JavaScript 中&#xff0c;this 的值取决于函数被调用的方式。在对象方法中&#xff0c;this 引用的是调用该方法的对象。 让我们看一个简单的例子&#xff1a; const person {firstName: John,lastName: Doe,fullName: function() {return this.firstN…

【webrtc】MessageHandler 3: 基于线程的消息处理:以sctp测试为例

消息处理可以用于模拟发包处理G:\CDN\rtcCli\m98\src\net\dcsctp\socket\dcsctp_socket_network_test.cc 这个实现中,onMessage还是仅对了一种消息进行处理,就是接收则模式下,打印带宽。当然,可能程序有多个消息,分别在不同的onmessage中执行?SctpActor:以一个恒定的速率…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏&#xff0c;一起随我来看看吧 游戏效果&#xff1a; 实现基本的功能&#xff1a; • 贪吃蛇地图绘制 • 蛇吃⻝物的功能&#xff1a;&#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

Flink 实时数仓(一)【实时数仓离线数仓对比】

前言 昨天技术面的时候&#xff0c;面试官说人家公司现在用的都是最新的技术&#xff0c;比如 Doris 等一些最新的工具&#xff0c;确实这些课是学校永远不会开设的&#xff0c;好在他说去了会带着我做一做。可是 ...... 学院这边确实不允许放人&#xff0c;唉&#xff0c;可惜…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时&#xff0c;又名 容器管理器。简单来说&#xff0c;它是一个守护进程&#xff0c;在单个主机上管理完整的容器生命周期&#xff1a;创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…