IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 探索 TDengine在《图码联侦》项目中的应用可行性及实践研究 -> 正文阅读

[大数据]探索 TDengine在《图码联侦》项目中的应用可行性及实践研究

【本文正在参与 “拥抱开源 | 涛思数据 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 maven

git clone https://github.com/taosdata/TDengine.git
cd TDengine

mkdir 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 shell
 
TDengine 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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:37:33  更:2021-07-10 14:38:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 19:12:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码