对ThingsBoard的初步了解

thingsboard是一款在物联网领域非常流行的高性能物联网设备平台开源框架

框架中的技术选型

同时支持微服务部署、单体部署
内部使用gRPC、protocol buffers
protocol buffers 序列化后数据量是json的1/10、xml的1/20,速度提升5~100倍
netty实现mqtt服务端
自研规则引擎

细节

单体内存缓存 Caffine 与 redis 可选择配置
遥测接口大量使用异步非阻塞方式 spring DeferredResult、 guava ListenableFuture 将异步做到了jdbc前,jdbc的bio模式成为不完美点

反应式编程扩展
spring data r2dbc正式版已经来到1.3了,它就是一个异步非阻塞响应式数据库连接池,还是一个orm框架,它还可以响应式的事务,响应式的服务降级熔断隔离

在我目前看来是缺陷的一些点

  • 为什么使用uuid作为主键?虽然项目大量基于created_time排序分页,但uuid占用存储空间
  • 大量的使用一行完成所有逻辑,不便于他人维护与二次开发,可能框架本就这方面考虑比较少
  • 使用gRPC
  • dao层大量对 textSearch 字段使用 lower() 函数,且全模糊like,不建索引就可以肆无忌惮么,有点看不懂这个操作
  • Controller层所有service的引用都集中在BaseController父类

二次开发小结

增加自己自定义的实体

步骤 文件or文件夹
增加新的实体类型 EntityType.java
创建实体ID类 org/thingsboard/server/common/data/id/
增加实体最大数量配置 DefaultTenantProfileConfiguration.java
Resource 增加enum

然后可从controller开始写,会更具有目的性,更快
controller service dao repostory
增加orm实体类model org/thingsboard/server/dao/model/sql
增加orm实体字段映射常量 ModelConstants.java

tenant_profile 租户配置信息表
tenant 租户表
customer 用户组(客户)
tb_user 用户表、user_credentials 用户凭据

device_profile 设备模型表
device 设备表、device_credentials 设备凭证
asset 资产表(关联其它设备和资产的抽象实体,如区域、建筑物、单位等)

alarm 警报表 (由 originator_id 和 originator_type 关联实体)
audit_log 审计日志(操作日志)
event 事件(设备、资产等)

ts_kv_dictionary 遥测数据属性字典
ts_kv 遥测数据历史值 时序数据
ts_kv_latest 遥测数据 最新值

component_descriptor 规则链节点部件
rule_chain 规则链
rule_node 规则链节点
rule_node_state 规则链节点状态

attribute_kv 实体属性的key value (如设备属性、资产属性,由 entity_type 和 entity_id 字段关联)

relation 实体间的有向连接关系 (由 from_id, from_type 字段指定 from 端的实体,to_id, to_type 字段指定 to 端的实体)

widget_type、widgets_bundle 可视化部件包
dashboard 物可视(可视化面板)
entity_view 物视图

参考文档:

入门 | ThingsBoard中文网

thingsboard 实体及数据存储研究

ThingsBoard 小结相关推荐

  1. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  2. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  3. php中$_REQUEST、$_POST、$_GET的区别和联系小结

    php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...

  4. c cin.get()的用法小结_c语言中static 用法

    static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...

  5. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结

    Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...

  6. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  7. flash 入门课知识小结

    一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧) 1. 特点   帧--是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以 ...

  8. Eigen/Matlab 使用小结

    文章目录 [Eigen Matlab使用小结](https://www.cnblogs.com/rainbow70626/p/8819119.html) Eigen初始化 0.[官网资料](http: ...

  9. MATLAB【十三】————仿真函数记录以及matlab变成小结

    part one:matlab 编程小结. 1.char 与string的区别,char使用的单引号 '' ,string使用的是双引号"". 2.一般标题中的输出一定要通过 nu ...

最新文章

  1. CRF和HMM区别不仅仅前者是判别模型后者是生成模型
  2. html5 响应式布局
  3. python自学用什么书好-适合python基础学习的好书籍
  4. aws生态系统集成商_通过通用数据访问扩展AWS生态系统
  5. postgres 判断null_PostgreSQL NULLIF()用法及代码示例
  6. .Net 开源项目资源大全
  7. POJ NOI0105-33 计算分数加减表达式的值
  8. linux mysql5.7.12安装图解_centos 安装 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 详细步骤
  9. jQuery-1.9.1源码分析系列(十一) DOM操作续——克隆节点
  10. 基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究
  11. 生先森依旧怀抱初心,满载爱意
  12. 1046 Shortest Distance (20分)测试点分析
  13. redis使用及Spring Session+Redis实现Session共享
  14. 产品经理的六大工作职责
  15. DNS篇之DNS协议详解
  16. OpenCL编程之二
  17. 如何使用阿里巴巴矢量图标库,创建自己的svg图标库(iview ts)
  18. access 报 操作必须使用一个可更新的查询 错误
  19. 运动想象 BCI IV-2a 数据集介绍
  20. SSM毕设项目唯物志公司班服商店管理系统beng4(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. hg 全局密码配置。
  2. docker命令的组合使用
  3. nodejs+express4.0+mongodb安装方法 for Linux, Mac
  4. 通过OWA修改密码,提示您输入的密码不符合最低安全要求
  5. GPU虚拟化时代的到来(vGPU)!CitrixNVIDIA联合研发虚拟化共享GPU技术预览
  6. find a group of people who want to do similar things with you
  7. 本学期的选修课:动感单车
  8. Google上面有自己给你标注好的数据集
  9. UNITY优化资料收集
  10. swift hidesBottomBarWhenPushed 设置界面