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.hqwc.cn/news/661630.html

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

相关文章

C语言异步编程

回调函数在异步编程中有着重要的作用&#xff0c;在接口编程应用广泛&#xff0c;实战中经常会注册一个回调函数来接收其他程序返回的数据&#xff0c;这样做的好处是调用者无需主动去获取被调用者的数据&#xff0c;仅仅需要回调&#xff0c;让被调用者去传送数据&#xff0c;…

群晖Docker部署Java jar包

安装群晖Docker组件Container Manager 打开组件,找到注册表搜索java,安装java映像 安装完成后会在映像目录里展示出来,点击运行 常规设置按需配置即可 这里要设置一个文件夹目录给这个容器来使用 一般来说给个/root来用就够了 设置完成后可以在容器目录里看到容器已经运行起来了…

图论之最短路算法模板总结

来个大致的分类&#xff1a; 朴素的迪杰斯特拉&#xff1a; 实现&#xff1a; 我们让s表示当前已经确定的最短距离的点&#xff0c;我们找到一个不在s中的距离最近的点t&#xff0c;并用t来更新其他的点。 下面是AC代码&#xff1a; #include<bits/stdc.h> using nam…

Apache SeaTunnel k8s 集群模式 Zeta 引擎部署指南

SeaTunnel提供了一种运行Zeta引擎(cluster-mode)的方法&#xff0c;可以让Kubernetes在本地运行Zeta引擎&#xff0c;实现更高效的应用程序部署和管理。在本文中&#xff0c;我们将探索SeaTunnel k8s运行zeta引擎(cluster-mode模式)的更多信息&#xff0c;了解如何更好地利用Ze…

从正文开始计算并设置第x页,共x页

如下图&#xff0c;本人正文以下内容只有34页&#xff0c;但wps/word会自动计算全部的页数&#xff0c;看到网上有许多解决方法&#xff0c;但都太麻烦&#xff0c;下面教你两步解决所有问题。 第一步&#xff0c;手动更改第1页的共x页的x为自己需要的页数。 第二步&#xff0c…

【JavaWeb Day 2 - JS 】

JavaWeb Day 2 - JS JS背景故事1. JS 引入方式2. JS 基本语法2.2 变量2.3 数据类型2.4 运算符 3. JS 函数4. JS 对象4.1 Array对象4.2 String对象4.3 JSON对象4.4 BOM对象4.4.1 windows 对象4.4.2 location 对象 4.5 DOM 对象DOM 案例 5. JS 事件监听5.1 JS 事件绑定 及 常见事…

PF-NET与3D点云补全

文章目录 点云补全 (Point Cloud Completion) 点云补全 (Point Cloud Completion) 3D点云补全问题的主要目标是估计缺失点 点云坐标。这个问题在实际解决的时候主要有2个问题&#xff0c;第一就是点云补充得过于完整&#xff0c;比如目标点云中是有缺口&#xff0c;但是补全的…

人脸识别概念解析

目录 1. 概述 2. 人脸检测 3. 人脸跟踪 4. 质量评价 5. 活体检测 6. 特征提取 7. 人脸验证 8. 人脸辨识 1. 概述 人脸识别在我们的生活中随处可见&#xff0c;例如在大楼门禁系统中&#xff0c;它取代了传统的门禁卡或密码&#xff0c;提高了进出的便捷性和安全性。在商…

Edge浏览器新特性深度解析,写作ai免费软件

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

Protobuf 通信协议

Protobuf Protobuf 简介使用技术内幕 Protobuf 简介 在移动互联网时代&#xff0c;手机流量、电量是最为有限的资源&#xff0c;而移动端的即时通讯应用无疑必须得直面这两点 解决流量过大的基本方法就是使用高度压缩的通信协议&#xff0c;而数据压缩后流量减小带来的自然结…

暴雨服务器引领信创算力新潮流

去年大模型的空前发展&#xff0c;人工智能也终于迎来了属于自己的“文艺复兴”&#xff0c;众多的模型相继发布&#xff0c;继而催生了整个行业对于智能算力需求的激增。 市场需求与技术驱动仿佛现实世界的左右脚&#xff0c;催动着世界文明的齿轮向前滚动。在全球经济角逐日…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…