探索TDengine在图码联查项目中的应用可行性及实践研究
[\【本文正在参与“拥抱开源|淘思数据TDengine\】的有奖征集]](https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c) https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c 目录 图片代码项目介绍及问题 TDengine勘探可行性研究 TDengin
[\【本文正在参与“拥抱开源|淘思数据TDengine\】的有奖征集]](https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c)
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运维等设计优化的大数据平台。还提供缓存、数据订阅和流式计算等功能,最大限度地降低研发、运维的复杂度,包括集群功能在内的所有核心代码都是开源的(开源协议,AGPL v3.0)。
性能提升超过 10 倍。定义了一种创新的数据存储结构。单核每秒至少可以处理20000个请求,插入数百万个数据点,读取超过1000万个数据点,比现有的通用数据库快十倍以上。
将硬件或云服务成本降低到1 / 5。由于其超强的性能,计算资源不到一般大数据方案的1 / 5;通过列存储和先进的压缩算法,存储空间不到一般数据库的1 / 10。
全栈顺序数据处理引擎。集成数据库、消息队列、缓存、流计算等功能,应用无需集成Kafka/Redis/HBase/Spark等软件,大大降低应用开发和维护成本。
强大的分析功能。无论是十年前还是一秒前的数据,都可以在指定的时间范围内查询。数据可以在时间线上或多个设备上聚合。可以通过 Shell/Python/R/Matlab 随时执行 Ad hoc 查询。
与第三方工具无缝连接。无需一行代码即可与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这样的普通业务。是不是因为定义了另一个数据源来处理这些?
不过,这样的疑惑并不妨碍我继续探索TDengine。
TDengine的安装和使用
源码安装
可以参考我之前实验的记录链接:https://blog.csdn.net/dualvencsdn/article/details/115202910
CentOS 7:
sudo yum install -y gcc gcc-c++ make cmake git
安装 OpenJDK 8:
须藤百胜安装-y java-1.8.0-openjdk
安装 Apache Maven:
sudo yum 安装 -y maven
git 克隆 https://github.com/taosdata/TDengine.git
cd TDengine
mkdir 调试 && cd 调试
cmake .. && cmake --build 。
留在调试目录
进行安装
/usr/bin/cmake -P cmake_install.cmake
-- 安装配置:“调试”
制作安装脚本:/home/dualven/TDengine/packaging/tools/make_install.sh
这是centos系统
源码目录:/home/dualven/TDengine
二进制目录:/home/dualven/TDengine/debug
开始安装 TDEngine...
TDengine 安装成功!
配置 TDengine : 编辑 /etc/taos/taos.cfg
启动 TDengine:./taosd
访问 TDengine:在 shell 中使用 taos
TDengine 安装成功!
docker使用情况
创建容器
docker run --name taos192 -p6030-6042:6030-6042/tcp -p6030-6042:6030-6042/udp -d tdengine/tdengine
防火墙释放
firewall-cmd --zoneu003dpublic --add-portu003d6030-6042/tcp --permanent
firewall-cmd --zoneu003dpublic --add-portu003d6030-6042/udp --permanent
FQDN 配置
这个非常重要。为什么要配置它?参考我之前的实验记录:
https://blog.csdn.net/dualvencsdn/article/details/118019565。
就是让客户找到它。不过 Taos 有时会在自己的 DB 操作中使用 CFG 中的 fqdn,所以在访问远程客户端时最好使用它的 fqdn。如果先用ip访问,但是内部程序在使用fqdn时会报错。
DB 错误:无法解析 FQDN (0.011791s)
因此,我们将hosts文件映射到192主机上: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 全局配置:
u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d
服务器端口:6030
仲裁员:
numOfMnodes:3
vnodeBak: 1
遥测报告:1
余额:1
balanceInterval: 300
maxTmrCtrl: 512
离线阈值:864000(s)
statusInterval: 1(s)
minSlidingTime: 10(ms)
minIntervalTime: 10(ms)
maxStreamCompDelay:20000(毫秒)
maxFirstStreamCompDelay:10000(ms)
重试StreamCompDelay:10000(毫秒)
streamCompDelayRatio: 0.100000
maxVgroupsPerDb: 0
maxTablesPerVnode: 1000000
minTablesPerVnode: 1000
tableIncStepPerVnode: 1000
缓存:16(Mb)
块:6
天数:10
保持:3650
最小行数:100
最大行数:4096
补偿:2
沃尔等级:1
同步:3000
复制品:1
分区:4
法定人数:1
更新:0
压缩消息大小:-1
maxSQLLength:1048576(字节)
maxNumOfOrderedRes: 100000
查询缓冲区大小:-1(字节)
检索阻塞模型:0
保持列名:0
时区:
地区:
字符集:
最大ShellConns:50000
最大连接数:5000
最小LogDirGB:1.000000(GB)
最小TmpDirGB:1.000000(GB)
最小DataDirGB:2.000000(GB)
mnodeEqualVnodeNum: 4
流量控制:1
从查询:1
调整大师:1
http: 1
MQTT: 0
显示器:1
流:1
电报UseFieldNum: 0
gitinfo: 2019939bcc5567212d6e07af557c2c4ea540c091
gitinfoOfInternal: NULL
buildinfo: 建于 2021-06-07 14:27
版本:2.1.2.0
陶斯本地配置:
u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d
第一集:
第二集:
fqdn:
配置目录:/etc/taos
日志目录:/var/log/taos
脚本目录:/etc/taos
numOfThreadsPerCore:1.000000
numOfCommitThreads:4
ratioOfQueryCores:1.000000
角色:0
监控间隔:30(s)
rpcTimer:300(毫秒)
rpcForceTcp: 0
rpcMaxTime: 600(s)
shellActivityTimer: 3(s)
httpEnableRecordSql: 0
httpMaxThreads:2
restfulRowLimit: 10240
numOfLogLines: 10000000
logKeepDays:0
异步日志:1
调试标志: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
mqtt调试标志:131
monDebugFlag:131
qDebugFlag:131
vDebugFlag:135
tsdbDebugFlag: 131
cqDebugFlag: 131
enableRecordSql: 0
启用核心文件:0
最大二进制显示宽度:30
临时目录:/tmp/
要创建数据库,请创建一个表:
taos -s "创建数据库 pdas 保持 365 天 10 块 4 更新 1;"
taos -d pdas -f onetable.txt
创建稳定的 dw_reportimsi( \
ts 时间戳,\
id 大整数,\
设备_name nchar(60),\
装备_id nchar(60), \
imsi nchar(60),\
imei nchar(60),\
来源_tac bigint,\
单元格_没有大整数,\
mcc 大整数,\
跨国公司大整数,\
装备_longitude nchar(60),\
装备_latitude nchar(60), \
属于 nchar(60),\
地址 nchar(60),\
rssi nchar(60),\
电话_num nchar(60) \
)标签(位置二进制(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)连接池
(2)mybatis plus
(3) 数据库
(4) 我的鞋
性能注意事项
为了测试性能,我尝试使用一些导入工具。
taosdump 使用
https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://github.com/taosdata/TDengine
https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://www.taosdata.com/blog/2020/03/09/1334.html
taosimport
按照官方的研发说明,已经不是很有用了。经过一天的研究,联系了官方客服才知道。是个小坑。还被官方文档误导:https://www.taosdata.com/blog/2020/01/18/1166.html。
但是,或记录它
https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=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客户端不需要输入默认账号密码和主机。必须输入。
错误报告不明显。找不到问题。
2021/06/22 18:00:13 main.go:404: create table error: invalid operation: 非法值或数据溢出
即使是陶氏
折腾了一圈,发现可以通过taosdemo体验taos的数据读写速度。请参阅:
https://www.taosdata.com/cn/documentation/getting-started
不足与结论
因为一开始,我并没有深入的了解
“TDengine可以显着降低典型的物联网、车联网和工业互联网大数据平台的总体拥有成本。但需要指出的是,由于它充分利用了物联网时间序列数据的特点。东西,不能用来处理网络爬虫、微博、微信、电商、ERP、CRM等通用数据。从而深刻体会它的一些缺陷:
正式谈话记录
结论:(1)不支持delete,后面会支持。 (2) 通过插入相同的时间戳完成更新
(3)对于中间库的使用方式,暂不支持频繁删除和更新百万单表。
小T:
修改当前可以使用相同时间戳更新的数据
小T:
删除 我只是还不能支持它
小T:
这是我们 3.0 版本计划
小T:
未来会有一些
小T:
其实
小T:
表的数据和数据库的时间范围大致接近
小T:
这是有限的
小T:
你的表不能随意插入任何时间段的数据
小T:
所以他们统一保持影响力
小T:
例如,保持 3650 天
小T:
不能插入 3650 天之前的数据
小T:
另一个主要是目前mysql对单表上百万条索引数据的删除和修改效率比较低——现在TDengine对于数据更新,只能覆盖相同的时间戳。删除只能通过时间段自动删除(以后会支持删除)。至于你提到的低效率,我们要等到我们的功能完成
小T:
作为一个特殊的大数据引擎,效率会比mysql高
架构建议:
(1)对于普通的业务表,可以类似于MySQL。 Mongo 允许用户使用普通表而不需要指定时序数据库的特性。项目中一些最常见的表业务是不是一定要建立一套数据库访问逻辑?当然,现阶段如果用TDengine的话,好像也只能用这个方案了。
(2)对于本文中的6030-6042 TCP/UDP端口,我认为TDengine应该采用阻塞应用访问方式(没看源码,只是推测)。建议参考netty的架构和选择器模式,应该不需要那么多端口。
[\【本文正在参与“拥抱开源|淘思数据TDengine\】的有奖征集]](https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c)
https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c
更多推荐
所有评论(0)