热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探索TDengine在《图码联侦》项目中的应用可行性及实践研究(new)

【本文正在参与“拥抱开源|涛思数据TDengine有奖征稿】https:marketing.csdn.netp0ada836ca30caa924b9baae0fd33857c目

【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】

https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c

目录

图码项目介绍及问题

TDengine探索可行性研究

TDengine安装与使用

源码安装

docker使用

主要操作

JAVA 客户端连接

性能考虑

taosdump使用

taosimport

taosdemo

缺点发掘与结论




图码项目介绍及问题

    图码联合侦测系统,是在视频监控技术的深度应用基础上,结合安防中重要的移动设备特征码IMSI等,在即使不接入身份证、电话号码等特征的限制下,也依然可以通过IMSI与人像的碰撞算法,得到彼此的匹配关系,建立“一人一档”的档案库。在技术上,结合了“图像”与“码”的关系,根据碰撞算法,建立了彼此的关联;在应用场景中,针对现实中系统对接难度大、数据互通困难的现状,相对于大平台而言,它拥有极简的布署优势,通过建立的档案库,可以快速帮助公安定位观测对象的身份,极大辅助公安技侦与破案。

   在大数据处理这 块,采用了mycat + mysql (主备)的架构。

   优点就是充分利用成熟的数据库的技术优势 ,可以无缝的替换传统的非大数据的持久层,给程序员无感知的替换;这种架构,门槛也比较低,起步只需要8G8核就可以正常启动运行,不像hadoop,spark等大数据架构,起步就要五台较高性能的主机,才能保证基础的运行。

   缺点 :架构师需要具备比较强的专业知识 ,做好这块的架构与布署工作,及相关的监控。比如主备的设置,负载均衡,容量的扩展或者替换,数据的迁移等; 在体量上,受限于mycat1.X的10亿数据的限制,及时的动态查询会有性能的问题。

 

   如果有一种技术,可以代替mycat+mysql,又不用用户去考虑其中的负载均衡,容量管理等细节,也不用考虑容量受限等问题,那就减轻了产品在架构上的负担,可以更加专注自己的业务。

  这个时候 ,我在CSDN上看到了关于涛思科技TDengine的介绍。


TDengine探索可行性研究

   让我们先上涛思科技对于TDengine的产品特征介绍:

    TDengine是涛思数据专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度,且核心代码,包括集群功能全部开源(开源协议,AGPL v3.0)。

10 倍以上性能提升。定义了创新的数据存储结构,单核每秒就能处理至少2万次请求,插入数百万个数据点,读出一千万以上数据点,比现有通用数据库快了十倍以上。
硬件或云服务成本降至1/5。由于超强性能,计算资源不到通用大数据方案的1/5;通过列式存储和先进的压缩算法,存储空间不到通用数据库的1/10。
全栈时序数据处理引擎。将数据库、消息队列、缓存、流式计算等功能融合一起,应用无需再集成Kafka/Redis/HBase/Spark等软件,大幅降低应用开发和维护成本。
强大的分析功能。无论是十年前还是一秒钟前的数据,指定时间范围即可查询。数据可在时间轴上或多个设备上进行聚合。即席查询可通过Shell/Python/R/Matlab随时进行。
与第三方工具无缝连接。不用一行代码,即可与Telegraf, Grafana, EMQ X, Prometheus, Matlab, R集成。后续还将支持MQTT, OPC, Hadoop,Spark等, BI工具也将无缝连接。
零运维成本、零学习成本。安装、集群一秒搞定,无需分库分表,实时备份。标准SQL,支持JDBC,RESTful,支持Python/Java/C/C++/Go/Node.JS, 与MySQL相似,零学习成本

再看看它的适用场景 ,具体参考链接:https://www.taosdata.com/cn/documentation/evaluation#scenes

 其中有一句话吸引了我 ,”TDengine是面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品“ 这样它的定位就很好地匹配了我们《图码联侦》项目的数据特点,类似于IOT的时序大数据。

    但看到后面一句:

”采用TDengine,可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。但需要指出的是,因充分利用了物联网时序数据的特点,它无法用来处理网络爬虫、微博、微信、电商、ERP、CRM等通用型数据。“

   我觉得会有大的问题,因为一个系统不仅要有大数据,而且普通 的CRM等普通业务也要处理啊,难道要因为另外定义一个数据源来处理这些?

   however,这样疑虑并不妨碍我对TDengine的继续探讨一番。


TDengine安装与使用


源码安装

可以参考我前面实验的记录 链接:https://blog.csdn.net/dualvencsdn/article/details/115202910

CentOS 7:
sudo yum install -y gcc gcc-c++ make cmake git
安装 OpenJDK 8:sudo yum install -y java-1.8.0-openjdk
安装 Apache Maven:sudo yum install -y mavengit clone https://github.com/taosdata/TDengine.git
cd TDenginemkdir debug && cd debug
cmake .. && cmake --build .在debug目录 make install /usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "Debug"
make install script: /home/dualven/TDengine/packaging/tools/make_install.sh
this is centos system
source directory: /home/dualven/TDengine
binary directory: /home/dualven/TDengine/debug
Start to install TDEngine...TDengine is installed successfully!To configure TDengine : edit /etc/taos/taos.cfg
To start TDengine : ./taosd
To access TDengine : use taos in shellTDengine is installed successfully!

docker使用

建立容器
docker run --name taos192 -p6030-6042:6030-6042/tcp -p6030-6042:6030-6042/udp -d tdengine/tdengine

防火墙放行
 firewall-cmd --zOne=public --add-port=6030-6042/tcp --permanent

firewall-cmd --zOne=public --add-port=6030-6042/udp --permanent

FQDN配置
这项很重要。为什么要配置,参考我前面的实验记录:

https://blog.csdn.net/dualvencsdn/article/details/118019565。

就是要让客户端找到它。但它自己在本身进行DB操作的时候,有时候要用到taos.cfg里的fqdn,所以远程客户端访问时,最好也用它的fqdn,如果先用ip自己访问到了它,但内部程序使用fqdn会报错。

DB error: Unable to resolve FQDN (0.011791s)

故,我们在192的主机上作出映射hosts文件: 10.60.100.192 289461ef56c4

在客户端 的文件上,也作出hosts文件的映射  10.60.100.192 289461ef56c4,

坑:要记得防火墙对于那些端口的TCP,UDP都放行才可以。


主要操作

查看配置:docker exec -it taos192 taosd -C

[root@taos192 TDengine-server-2.1.2.0]# docker exec -it taos192 taosd -C
taos global config:
==================================serverPort: 6030 arbitrator: numOfMnodes: 3 vnodeBak: 1 telemetryReporting: 1 balance: 1 balanceInterval: 300 maxTmrCtrl: 512 offlineThreshold: 864000(s)statusInterval: 1(s)minSlidingTime: 10(ms)minIntervalTime: 10(ms)maxStreamCompDelay: 20000(ms)maxFirstStreamCompDelay:10000(ms)retryStreamCompDelay: 10000(ms)streamCompDelayRatio: 0.100000 maxVgroupsPerDb: 0 maxTablesPerVnode: 1000000 minTablesPerVnode: 1000 tableIncStepPerVnode: 1000 cache: 16(Mb)blocks: 6 days: 10 keep: 3650 minRows: 100 maxRows: 4096 comp: 2 walLevel: 1 fsync: 3000 replica: 1 partitions: 4 quorum: 1 update: 0 compressMsgSize: -1 maxSQLLength: 1048576(byte)maxNumOfOrderedRes: 100000 queryBufferSize: -1(byte)retrieveBlockingModel: 0 keepColumnName: 0 timezone: locale: charset: maxShellConns: 50000 maxConnections: 5000 minimalLogDirGB: 1.000000(GB)minimalTmpDirGB: 1.000000(GB)minimalDataDirGB: 2.000000(GB)mnodeEqualVnodeNum: 4 flowctrl: 1 slaveQuery: 1 adjustMaster: 1 http: 1 mqtt: 0 monitor: 1 stream: 1 telegrafUseFieldNum: 0 gitinfo: 2019939bcc5567212d6e07af557c2c4ea540c091 gitinfoOfInternal: NULL buildinfo: Built at 2021-06-07 14:27 version: 2.1.2.0 taos local config:
==================================firstEp: secondEp: fqdn: configDir: /etc/taos logDir: /var/log/taos scriptDir: /etc/taos numOfThreadsPerCore: 1.000000 numOfCommitThreads: 4 ratioOfQueryCores: 1.000000 role: 0 monitorInterval: 30(s)rpcTimer: 300(ms)rpcForceTcp: 0 rpcMaxTime: 600(s)shellActivityTimer: 3(s)httpEnableRecordSql: 0 httpMaxThreads: 2 restfulRowLimit: 10240 numOfLogLines: 10000000 logKeepDays: 0 asyncLog: 1 debugFlag: 0 mDebugFlag: 131 dDebugFlag: 135 sDebugFlag: 135 wDebugFlag: 135 sdbDebugFlag: 131 rpcDebugFlag: 131 tmrDebugFlag: 131 cDebugFlag: 131 jniDebugFlag: 131 odbcDebugFlag: 131 uDebugFlag: 131 httpDebugFlag: 131 mqttDebugFlag: 131 monDebugFlag: 131 qDebugFlag: 131 vDebugFlag: 135 tsdbDebugFlag: 131 cqDebugFlag: 131 enableRecordSql: 0 enableCoreFile: 0 maxBinaryDisplayWidth: 30 tempDir: /tmp/

创建数据库,创建表:

 taos -s "CREATE DATABASE pdas KEEP 365 DAYS 10 BLOCKS 4 UPDATE 1;"

 taos -d pdas -f onetable.txt


CREATE STABLE dw_reportimsi( \ts timestamp,\id bigint, \device_name nchar(60),\equip_id nchar(60), \imsi nchar(60),\imei nchar(60),\source_tac bigint, \cell_no bigint,\mcc bigint,\mnc bigint, \equip_longitude nchar(60),\equip_latitude nchar(60), \belong nchar(60),\address nchar(60),\rssi nchar(60),\phone_num nchar(60) \
)tags(location binary(64), groupdId int);

 其它 参考我前面的记录:https://blog.csdn.net/dualvencsdn/article/details/118025718


JAVA 客户端连接

     这个作为java主要开发的人员,有点小坑的是,英文文档里居然没有,我开始一直看的英文,没有发现,后来在中文文档里是有这章节的

https://www.taosdata.com/cn/documentation/connector/java

   但是最全的代码demo居然是在docker的工程里,这是一个惊喜:tdengine/tdengine

   我整理了下,可以归整到一个工程,满足java各种形态的调用 。有需要的可以私信我。

1)connection pool

(2) mybatis plus

(3) jdbc

(4) mybatis 


性能考虑

为了进行性能测试,我做了一些导入工具的使用尝试。


taosdump使用

https://github.com/taosdata/TDengine

https://www.taosdata.com/blog/2020/03/09/1334.html


taosimport

根据官方研发说明,已经不太用了。这是研究了一天后,与官方客服联系上才知道的,这有点小坑。也是受了官方文档的误导:https://www.taosdata.com/blog/2020/01/18/1166.html。

howerver,还是记录下
https://github.com/taosdata/TDengine/tree/develop/importSampleData

bin/taosimport -cfg config/cfg.toml -db pdas  -cases pdas  -hnum 1 -vnum 10 -port 6030 -user root -password taosdata -host 10.60.100.192

确实不好用,比如taos 客户端,默认的 账号密码与host不用输入 ,它一定要输入 。

报错也不明显 ,怎么也找不出问题。

2021/06/22 18:00:13 main.go:404: create table error: invalid operation: illegal value or data overflow



taosdemo

倒腾一番后,发现通过taosdemo就可以体验到taos的这个数据读写速度 可以参考:

https://www.taosdata.com/cn/documentation/getting-started


缺点发掘与结论

   由于最开始的时候,没有深刻体会

 ”采用TDengine,可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。但需要指出的是,因充分利用了物联网时序数据的特点,它无法用来处理网络爬虫、微博、微信、电商、ERP、CRM等通用型数据。“这句话的含义,在实验中积极去做一些普通表的建立与测试,才深刻体验它的一些缺陷:

与官方谈话记录 

收获结论:(1) delete不支持,后续会支持(2)通过插入相同时间戳来完成 更新

(3) 对于中间数据库的使用模式,频繁对百万单表的删除与更新,这种场景 暂不支持。

小T:
修改目前可以用相同时间戳的数据来update小T:
delete只是暂时还没能支持小T:
这是我们3.0版本的计划小T:
未来一定会有的小T:
其实小T:
表的数据和数据库的时间范围是大概接近的小T:
这个是有限制的小T:
你的表不可以随意插入任意时间段的数据小T:
所以他们统一受到keep影响小T:
比如,keep 3650天小T:
你不可以插入3650天之前的数据小T:
另一个主要是目前mysql单表对于过百万建立索引后的数据的删除与修改的效率比较低——现在TDengine对于数据的更新只有相同时间戳覆盖这种办法,删除只能通过时间段自动删除(未来会支持delete)。至于您说的效率比较低,要等到我们功能做完之后再做比较了小T:
作为专门的大数据引擎,效率一定会比mysql高的

 架构建议:

(1)对于普通业务的表,可以类似mysql,mongo让 用户可以使用普通的表即可,不具备时序数据库的特征就好。难道我在一个工程里,还要为了一些最普通的表业务 ,再建立一套数据库的访问逻辑? 当然,目前阶段,如果你使用了TDengine,好像也只能使用这个方案。

(2) 对于文中的6030-6042 TCP/UDP端口,我觉得TDengine上采用的应该是阻塞式的应用访问方式  (没有读源码,只是推测),建议参考netty的架构 ,selector方式,就应该用不着这么多端口了吧。

【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】

https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c


推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 大厂首发!思源笔记docker
    JVMRedisJVM面试内存模型以及分区,需要详细到每个区放什么?GC的两种判定方法GC的三种收集方法:标记清除、标记整理、复制算法的 ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • redis之如何存储时间序列数据
    写在前面本文一起来看下redis如何处理时序数据。1:什么是时序数据随着时间的推移不断产生的数据,我们可以将其称之为时序数据,比如设 ... [详细]
author-avatar
百变精灵621126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有