金域温控系统知识学习


为什么突然想写这么一个东西呢,主要是工作上快一年了,公司的系统还不是特别了解,就觉得自己只是记录了东西,并没有学习,很多东西其实都没有去了解,所有就有这个衍生学识,想着以后学什么东西都要不停思考是什么,为什么,怎么办,最近也学了一个激励自己办法,虽然不是很有用,但是可以试试,就是和游戏一样多给自己奖励,所以学文章其实也算一点,在这个分类中我不写具体逻辑和代码,老实说,写了我也看着累,我想写一点思考,我觉得这样子就可以了,好吧!!开始了

金域温控系统

为什么是叫温控呢,简单的说就是温度温度控制的系统。但是目前是监听数据的系统,系统由vue+springboot完成架构,中间件redis+amq+netty,数据库mysql

 redis用的比较少,存入和出,很多高级玩法没弄,主要是业务目前也不需要,amq的话,稍微玩了点,相对来说玩的不错,觉得还可以深入,netty的话,不忍直视啊,几乎搞不懂哈哈哈

代码逻辑:由一个叫tms的系统(运输管理系统)推送数据,就是作为操作人员是物流公司,他需要将送货,那就要有一个媒介进行绑定,在tms进行绑定后数据会推送到温控系统,其实就是发一条订单消息过来,

由于是监控,那就是实时数据,实时数据由硬件提供,ok,此刻逻辑就是绑定,记录温度,这么一个逻辑,当然了这里有很多事情,比如温度计怎么同步,怎么规划大区分等级还是不需要等等问题,这些我们就在这里慢慢解答吧

首先我觉得应该想到温度计,毕竟是温控系统,温度计会发数据,那我们这里netty进行接收数据,其实像这样子的话,为什么选择netty,首先我没有具体去了解,既然用就说明市面上这些其实够用了,我老板也和我说,你去写一个框架是很难有必要去搞,我们目前是用别人,如果你去思考怎么写框架,可能写3.4天,而且要想怎么解决问题,我们目前要做的事很多,我想也是,工作都没有解决,怎么可能完成框架

 -------------------------------------

java基础,这里也复习一下学习的知识点吧

--------------------------------------

java web,我理解就是用java开发web程序,可能有java XXX之类的东东,总之这么理解就好懂,目前就servlet,jsp,dao和xxx框架,架构分析清楚后,基于网络我们可以做很多事,所以我觉得基础要学好,
说一下Servlet这个东东,Servlet是服务程序,通过接收HttpRequest的数据,这里有个疑问HttpRequest是个什么东东,搞懂HttpRequest就先研究http协议,http是超文本协议,作用于交互,数据格式的传输,

Request就是网络请求的对象,在我们通过网络发送数据,会有请求头,行,体,这些信息,而HttpRequest就是接收的数据保存到这个对象中,接收了数据就进行转发会客户端,这里将一下servlet的生命周期,

由于设计原因,使用servlet会初始化init方法,init是第一个被加载方法,在这个方法我们可以做很多事,然后第二部操作service方法,会调用doget和dopost方法,使用完就进行销毁。创建servlet实例化,第一步web程序有一个web.xml文件是负责管理类,当需要加载servlet方法就需要在web.xml添加类,完成实例化,init方法是创建类后第二部,这里可以做一些配置操作,数据库连接等,这个方法只能被加载一次,对于要加载一次的文件就使用init方法,根据请求不同doget和dopost会根据对应的请求拿到数据,也可以用servlet方法拿到请求,

--------------------------------------

这里突然要做一个功能,这个功能按照老板意思就是 需要写一个job每天1点左右把过去6个月之前的数据移到另一个表。数据库太大入库会慢,表可能要重建,why?一开始看这个需求,懵逼把,没搞过这种,其实不难我觉得,分析题目,每天1点,6个月数据迁移到一个表,另一种表的话,就按照之前名字加上迁移时间就可以了,然后表数据大会入库慢,这个我不是很懂,行,先学习下原理一点点就可以了,在这里我也有疑问,比如影响数据库的查询条件,字段算不算,索引我也不是很会,还要学习,好吧,加油

这里有意思是,我才知道sql语句是单线程操作,也是,支持底线的sql应该会比较乱,所以也有道理,通过增加cpu提高运算是不可能的,当然未来可能可以

我的设计思路:创建项目,连接数据库,查询出要的数据,进行插入另一种表,每天1点执行操作(瞬间的想法)

然后其实半小时内就写好了,不考虑很多性能问题,就查询,插入,这里以后想我保存了数据,但是呢,怎么让项目指定到表是个问题,想着,以后可能把前两年数据删掉可能性比较大吧,就是备份而已

 这里可以玩很多操作,比如多线程(不大会),学习下吧,!!!!!

我的想法比较简单,这里涉及到很多细节属于我比较薄弱的地方,这里的话就复习一下吧

连接数原来就是连接数据库的通道,默认一个数据可以连接100个用户,100个也挺多的

处理大数据都会想到优化,分库分表,大表拆小表,耗费人力和物力,还有业务上的压力

影响mysql的因素

磁盘IO

磁盘IO,涉及到IO就是读写,这里为什么叫磁盘io,因为input和output的意思就是读写,首先简单连接磁盘,这里由机械硬盘为例吧,主要长得像,读数据就是要发指令,发指令到磁盘,磁盘有一个扇区,扇区是什么鬼呢,就是就是磁盘某一个块,只不过长得像扇而已,读取就是开始和结束,像操作数组,之前写iot就是这样子,截取数组内得字节,像这种模式就是读写的io的基本逻辑吧,

那读取就涉及到读多少,就有读取大小,说128读取就算大了,但是我也不清楚这样子算不算大,个人觉得还是和CPU有关系, 资料说没有明确的界限,但我觉得很多原因吧,根据电脑情况也可以算出多少,这里就不衍生了

读取io有连续和随机,如果你随机效率就差,也正常,房间不打扫也是这样子,在io中,连续的话或者间隔比较短,指头几乎指向就到换道找到文件了

io可以异步,这里异步不是说一个磁盘上进行异步,而且N个磁盘进行异步,原理就是发数据不用等回应,在向另一个磁盘发数据,

  磁盘的并发读写涉及到RAID 0,这个RAID 0是个什么鬼,我想着唉怎么老是喜欢搞这种名词,一点规律也没有,RAID 0的话有个0,RAID 0是最高等级,RAID就是读取队列的缩写,像这种多个磁盘当一个磁盘的并发磁盘,在算法上我觉得确实是个好办法,能把存储数据分成多线程传输,性能提升肯定很厉害,或者说,如果程序每次执行也可以这样子那确实厉害,想着,数据库如果也可以做成这样子就更好了

  IOPS和执行时间有关系,如果想提高速度寻找磁盘的数据很重要,越好命中数据的头就几乎是加快速度的读写(个IO所用的时间=寻道时间+数据传输时间。 IOPS=IO并发系数/(寻道时间+数据传输时间))

  好了,过于磁盘IO的知识就目前这一点,虽然涉及很多知识,我也是简单理解,目前对磁盘IO有一定连接,以后写程序就注意对读写有一个比较好的理解,很不错,学习到一个不错的知识点

sql执行速度

  优化语句,添加执行速度的办法很多,一个一个研究吧!

网卡流量

  网卡流量数据,就是网络传输的数据,这个部分其实少点就可以增加性能,这里涉及主从服务器,主就是说明第一个优先,从服务器是第二个的优先级,在涉及数据库从服务器越多网络流量就越大,这里很奇怪,为什么会有从服务器,原来在读写分离一台服务器不满足情况,所以就有从服务器的概念,从服务器必须依赖主服务器,作用扩张和提高主服务器的性能,数据访问有2-8原则,百分之20最重要,最后是百分之80,第二就是分级缓存,缓存的生效对数据库影响较大,这里就有个问题,数据库的缓存怎么来的,在我开发项目中,之前遇见一个问题,就是登录缓存没有干掉,然后一直用登录的缓存,就出现修改密码和权限出现问题,在数据库缓存也是一样,数据库缓存没有维护好,更新的最新数据和缓存的数据不一致,数据完整性就出问题,在性能上缓存的事务是一个问题,加事务务必会让处理慢一点,这里数据库缓存我总结有几点,基于项目通过中间件进行缓存,查数据库保存在另一个容器,还有一种就是比较正常的,在缓存拿数据,没有就去数据拿然后保存到缓存中,这种就可能缓存出现和数据库不一致就很麻烦,还有一种就是不停抓数据更新缓存,数据变化和表的变化是实时,这里就涉及到事务,有两个方面,强一致就需要不停更新一定要成功,弱一致性就出现问题,数据会通过事务回滚到之前,还有一种就是只负责更新,和事务没关系,这种性能比前两者都好

在编写程序中IO的开启是个问题,太频繁性能就低,可以理解,在工作中数据库插入就是一个例子吧,批量插入的性能比较好,这和菜市场运输菜一样,一次菜运输可以大量运输,一个一个菜运输就不行,但是这是个例子,现实业务还是根据需求来

相关