Lbdp网关的数据管理

老陶大作,拜读有感:
1.首选俺擅长的文件模式;
2.尽快尝试SQLite;
3.通过TDengine进入开源世界。

原文链接:https://mp.weixin.qq.com/s/6Z6XTJ2zIoPJYphvzl9VpA

除了花开疫散,我最希望的是开源的TDengine能媲美SQLite

原创 陶建辉 爱倒腾的程序员 昨天

虽然新冠状病毒的疫情没有结束,涛思数据团队都居家远程办公,还是按期在2月10日线上发布了TDengine ARM 32位与64位版,而且100%开源,只是把原计划的线下发布活动取消了。大家现在就可以到GitHub下载所有源码进行编译、运行和测试了。虽然TDengine早开源了,但仅支持X86,这次ARM版的发布,了却了我的一个心愿,就是利用TDengine体量小、性能高、资源占用少的优势,为边缘计算、嵌入式系统提供一高效、高速、简单易用的时序数据处理系统,来解决流行的SQLite在物联网、工业互联网场景下的诸多不足。

SQLite这款产品在我心目中是神一样的存在,是我3年前创立涛思数据时树的一个学习标杆。从创始人Richard Hipp 2000年开始开发起,SQLite现已经有数千亿份拷贝在各种设备里运行,包括大家熟悉的Android、Apple手机、Firefox、Chrome、Safari浏览器,众多的嵌入式盒子,包括物联网网关等都装有SQLite。它是全球装机量最大的数据库,远远超过大家熟悉的MySQL、Oracle数据库。为何SQLite如此流行?一句话,产品做到了极致。看看这些亮点:没有服务器,仅仅一个C语言库,整个数据库存放于单一跨平台的文件,支持ACID,零配置,而且体量可以仅为600KB。关键是,SQLite还是开源免费的。在资源紧张的各种嵌入式设备里,不用它才怪呢。

做的这么好的产品,我们还有机会吗?幸运的是,我们有。因为随着物联网的兴起,各种大大小小的设备都在采集数据,而这些采集的数据具有鲜明的特点,比如带有时间戳、结构化、没有更新、数据源唯一等。而且这些数据的应用上,特点也很明显,比如数据往往只保留一定的时长、需要做降采样、插值、实时计算、聚合等操作,关心的是一段时间的趋势而不是某一特点时间的值等等。随着云平台的普及,这些设备往往还需要将原始或加工后的数据同步到云端。目前在嵌入式的各种盒子里,大家都是采用SQLite来处理。而SQLite是标准的关系型数据库,基本的存储、查询都没有问题,但采集量偏大之后,性能成为瓶颈,而且还得自己开发很多功能,比如定期删除数据、实现数据的断点续传、实现降采样、聚合计算等等。对于开发者来讲,用SQLite来处理这些采集的数据,只是一个权宜之计,不是最佳方案。这就是机会,而且是巨大的机会,因为越来越多的设备在联网,在采集数据。

三年前,我在研究物联网数据处理这个市场的时候,就仔细琢磨了云端和边缘侧的需求。云端是大数据平台,需要高并发、高吞吐率、高可靠,而单一嵌入式设备里,资源少,数据量小。但从功能来看,两者需求又是几乎一致的,都要有存储、查询、分析、计算、订阅的功能。因此从让开发者简单易用的角度出发,我决定将云端与边缘侧用同一套代码、同样的API接口实现,只是集群与单机版的区别,以解决云端的大数据量与高可靠问题。

三年前我的设计草图

首先,我认为要学习SQLite的无依赖、体量小的优点。因此TDengine的开发决定采用C语言,没有使用任何第三方的库,一切都是自己开发,包括定时器、RPC等模块等。虽然C语言开发有一系列头疼问题,如内存泄露、无效指针、多线程同步等,但我很庆幸当时的决定,因为TDengine  ARM版的安装包不到1.3MB,而且内存的需求不到1MB,远远小于InfluxDB、OpenTSDB等其他时序数据。在资源紧张的嵌入式系统,TDengine一下成了时序数据库的理想选择。

采集的时序数据的处理往往不只是一个简单的存储和查询,还需要做加工,最常用的是降采样,需要将采集的原始数据按照固定的时间间隔在时间轴上做聚合。在资源丰富的服务器,可以采用Spark、Flink等流式计算等工具来实现。在资源紧张的嵌入式系统,安装一个Spark只是一种奢望。SQLite解决了数据存储问题,但没有提供缓存功能,因此如果一个嵌入式系统要对采集数据做实时缓存,就需要采用Redis这类工具,不然就需要自己开发。考虑到这些因素,我从一开始设计,就决定要打造一个全栈的时序数据处理工具,不仅只是一个时序数据库,还提供缓存、流式计算、消息队列、订阅等系列功能,最大程度地减少对系统资源的消耗,最大程度地减少系统设计和维护的复杂度。很庆幸,自己又做了一正确的决策,让TDengine在资源紧张的嵌入式系统里能脱颖而出。

在物联网发展起来之前,每个嵌入式盒子都是孤立的,还没有云端的概念。但现在,由于通讯成本大幅降低,各种采集的数据要汇聚到云端做进一步分析处理,为业务的运营、预警、优化等提供决策依据。因此边云协同(边缘计算-云端)概念应运而生,边缘侧需要源源不断的将采集包括加工后的的数据发往云端。但因为网络的稳定性、数据权限等问题,边云协同的实现不是一简单的事情。2017年底,我认为要通过数据订阅的方式来解决这个问题,让云端可以订阅边缘侧的原始数据、或是符合指定过滤条件的数据。因此TDengine的第一个版本就带有订阅功能。在研究边云协同的研发同学试试我说的订阅功能,看是否能大幅减少你的开发成本。

SQLite是超级成功的软件,但开发团队很小,其官网公布的开发者仅仅三个人。创始人Richard Hipp是1984年从美国乔治理工本科毕业的,2000年时开始启动SQLite的开发,已经20年,难得的是他现在仍然是整个项目的架构师和负责人,贡献了大部分代码。因此从组建涛思数据团队的第一天起,我就牢牢的记住一个原则,底层工具的成功不依赖于团队的规模,而是要有一支能全心身投入的精干队伍,并且创始人自己要参与设计与编码工作。因此,时至今日,即使在获得GGV纪源资本、红杉中国的投资后,TDengine研发团队的成员还不到10人。我想,随着业务的开展,也许我们会组建不小的外围应用开发和技术支持队伍,但是TDengine这个核心工具本身,研发人员一定会控制在10人以内。而且希望20年之后,我虽然已过70,还能参与TDengine的研发,还能debug代码。

TDengine不是要代替SQLite,只是要在时序数据处理的这个细分市场里提供一更强大的工具。TDengine是否能像SQLite这样成功,在数亿台设备上使用,取决于TDengine能否一直保持性能高、体量小、功能全、资源占用少的特色,取决于我自己还有整个团队能否十年如一日的坚持和专注。更重要的是,我们必须开源,100%的开源,而且将开源进行到底。如果不开源,我想象不出任何途径能让TDengine获得SQLite这样的成功,让全球数千万开发者受益。如果你能去GitHub下载我们的源码,测试体验,就是对我们开源最大的支持,就能让我们离目标更近一步。如果你使用过程中遇到任何问题,欢迎通过GitHub递交给我们,哪怕在疫情期间,也都能得到我和团队的及时回复和反馈。隔离病毒,不隔离开源的热情!

一个程序员,如果一辈子能够开发出一款媲美SQLite的软件,让全球开发者受益,那一件最自豪、最幸福的事情。受上帝的垂青,50岁的我,在一个早被IT行业淘汰的年龄,找到了一个这样的机会,而且很幸运,组建了一个精干的团队,还获得了不小的风险投资。现在版本已经发布,剩下的是要细细地磨,持续地磨,不断优化,解决各种实际应用中遇到的问题,而且除X86、ARM之外,适配更多的系统。愿TDengine能像SQLite一样流行,在数百亿的设备里安装上。

希望TDengine ARM版的发布能够减轻一下技术人和创业者在疫情和寒冬中的焦虑,能够温暖你、振奋你。人类抵挡了一次又一次的疫情,新冠病毒也将很快被人类征服。疫情会过去,寒冬会过去,春天会来,蝴蝶也会来,让我们一起静待春暖花开!

陶建辉

2020年2月23日于北京望京家中

原文地址:https://www.cnblogs.com/shlb/p/12355493.html

时间: 2024-11-11 02:37:42

Lbdp网关的数据管理的相关文章

自学华为IoT物联网_08 IoT连接管理平台介绍

点击返回自学华为IoT物流网 自学华为IoT物联网_08 IoT连接管理平台介绍 一.IoT连接管理平台的由来 1.1  物联网产业发展面临的挑战 新业务上线周期长,应用碎片化,开发周期长,场频上市慢: 终端/传感器厂家众多,集成困难,标准不一: 网络连接复杂,网络类型众多,2G/3G/NB-IOT/ZigBee...., 安全性要求.实时性要求.Qos要求 1.2 IoT连接管理平台 聚焦核心竞争力,发展物联网业务,需要一个终端接入解耦.能力开放.安全可靠的平台作为支撑. 二.OceanCon

08 IoT连接管理平台介绍

一.IoT连接管理平台的由来 1.1  物联网产业发展面临的挑战 新业务上线周期长,应用碎片化,开发周期长,场频上市慢: 终端/传感器厂家众多,集成困难,标准不一: 网络连接复杂,网络类型众多,2G/3G/NB-IOT/ZigBee...., 安全性要求.实时性要求.Qos要求 1.2 IoT连接管理平台 聚焦核心竞争力,发展物联网业务,需要一个终端接入解耦.能力开放.安全可靠的平台作为支撑. 二.OceanConnect产品介绍 2.1 产品的定位与架构 2.1.1 华为“1+2+1” IoT

LBDP电量数据管理(三)

实时数据(灯具板flash):每天保存一次绝对电量值(YY MM DD HH 电量),每1小时.半小时或5分钟存一次电量增量记录,时间间隔和增量精度可配置. 历史记录(以天为一个计量最小周期):每天保存一次绝对电量值(YY MM DD HH 电量). UINT32_POWER_QUANTITY; 计数范围 0x00000000~0xFFFFFFFF, 即最大计数值为:4,294,967,295 假设6500为0.01度,则相当于可记录6607度电. 记录格式: (per hour) UINT16

docker进阶——数据管理与网络

用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者 需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及 到容器的数据管理 (1)Data Volume (数据卷) (2)Data Volume Dontainers --- 数据卷容器 Data Volume ---数据卷 Data Volume 本质上是 Docker Host 文件系统中的目录或文件,使用类似 与 Linux 下对目录或者文件进行 mount 操作.数据卷可以在容器之间共享 和重用,对

IoT网关协议比较:MQTT,CoAp,XMPP,MBUS,OPC UA

物联网(IoT,或者说工业互联网)的基础在于设备之间的通信,通信协议在将海量设备连接到互联网时发挥着重要作用.本文介绍IoT中的通信/通讯协议,并对常用的协议如:MQTT, CoAp, OPC UA, Modbus, Profinet ,介绍其特点,并进行比较,说明协议的适用场景.先上一张大图. IoT中的常用协议 MQTT MQTT全称消息队列遥测传输(Message Queue Transfering Transport),是一种轻量级,可扩展的互联网协议,可用于支持物联网全局通信.MQTT

win10取消vpn使用远程默认网关

打开%AppData%\Microsoft\Network\Connections\Pbk,找到rasphone.pbk文件(当你新建拨号连接或者VPN连接之后会在这个目录创建一个.pbk的文件,这个文件可以说是一个集合,将你电脑的所有拨号或VPN连接都保存在一起),用记事本打开,查找IpPrioritizeRemote,将这一项的值改为0即可,如果需要修改DNS设置,则修改IpNameAssign=2,IpDnsAddress=dns地址,修改完之后可以到CMD下使用tracert命令验证in

网关的理解

假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩. 但是你家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系.假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关).但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器.于是你

配置并启动spark的thriftserver网关

1.保证spark-sql已经使用mysql作为metadata存储介质 2.启动thrift网关 $SPARK_HOME/sbin/start-thriftserver.sh --driver-class-path /usr/local/spark/spark-1.3.0-bin-hadoop2.3/lib/mysql-connector-java-5.1.6-bin.jar --master spark://hd1:7077 --executor-memory 2g --total-exec

vpn中使用远程默认网关的替代方式

我们在不想手动配置此按钮的情况下,可以有如下替代方法: 将国内路由表添加进去,有点画蛇添足的感觉,但国内外少有在脚本里能修改这个参数的 说是少有,但还是有一些的,例如微软的一个shell 这个东西似乎是跨平台的,但是不能直接运行,代码有数千行之多,在他的xml配置文件里面有一个参数: <RouteIPv4TrafficOverRAS>false</RouteIPv4TrafficOverRAS> <RouteIPv6TrafficOverRAS>false</Ro