还在用MySQL存日志?

1. 引言

随着智能硬件成本降低和互联网网络的发展,在生活中场景的设备都已接入了网络中,其中传感器成为了设备获取外界信息的眼睛,网络成为设备交流的桥梁。在设备的交互中,往往存在着触发源,即标识控制指令的来源,在后端开发中,除了进行功能逻辑处理外,其中日志记录也非常重要,但是怎样去记录也非常的关键。

比如用户在APP端点击了某个功能开关,场景的执行记录等等,这些云端都需要进行记录。这些记录在排查客诉的时候就能起到至关重要的作用,而不用大海捞针无脑去排查。接下来列举2中记录日志的方式,推荐第二种方式,介绍一个中心化的日志记录。

2. 记录日志的方式

2.1 使用MySQL记录

其架构流程图:

在这里插入图片描述

在后端的技术栈中,MySQL数据库应该是大家最为熟悉,应用最为广泛。在记录设备的操作日志也可以采用,如何搭建一个MySQL的后端Demo,可以参考之前的文档。

对于记录日志,需要开发两个接口:插入日志查询日志

2.1.1 定义业务日志实体
public class logDO{   
    StringapplianceId;   
    Mapcommand;   
    LocalDateTimecreateTime;
}

在实体类中,定义了三个元素:

  • applianceId: 设备id
  • command: 操作的指令
  • createTime:操作的时间该实体也对应于数据库中的字段。

用户APP上点击一次,就会在数据库中存储一次;因此就需要暴露出来两个接口实现日志插入和日志查询。

2.1.2 接口
@RestController
@RequestMapping("/device")
public class LogController{   
    
    privatefinalLogServicelogService;   
    
    publicLogController(LogServicelogService) {       
        this.logService=logService;   
    }   
    
    @PostMapping   
    publicList<LogDO>getLog(@RequestBody LogDO logDO) {       
        // todo 获取日志   
    }      
    @PostMapping   
    public void addLog(@RequestBody LogDO logDO) {       
        // todo 添加记录到mysql中   
    }
}

如上就是一个简单日志记录Demo,所有的数据都是存在MySQL。因此该日志的实现非常简单,但是也带来其他不好的影响;

  • 随着MySQL数据库中数量的增加,其查询的速度就会受限,毕竟磁盘IO操作非常耗时。
  • 代码冗余,所有的日志插入都需要入库,代码难于维护。
  • 并且根据功能日志过于分散,不利于之后的数据汇总和分析。

对此提出了另一种方式来实现日志存储:ElasticSearch

2.2 ElasticSearch实现日志记录
2.2.1 日志记录架构

在这里插入图片描述

如上就是使用ES记录日志的架构图,其中主要部分的就是ES(ElasticSearch缩写)。

  • Elasticsearch是支持分布式搜索和分析的引擎。

  • Elasticsearch能为所有类型的数据提供近乎实时的搜索和分析。

  • 无论是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。

并且在架构图中,使用AOP来实现代码入侵,在Service使用AOP技术,实现日志记录。同理,使用ES也可以在Controller保留出RESTful接口,提供给APP端访问。

2.2.2 使用ES的优势
  • 使用上ES,后端可以统一对日志进行管理,方便后续的日志查询和数据分析。
  • ES强大的模糊查询,当进行模糊查询的时候,对于MySQL索引是失效的,会对整个表进行检索,耗时剧增。对ES而言,分词后,每个字都可以利用FST高速找到倒排索引的位置,并迅速获取文档id列表,大大的提升了性能,减少了磁盘IO

3. 结尾

目前使用ES存储数据的项目越来越多,并且形成中心化存储之后非常的方便,只需在要存储的方法上添加响应的注解就能实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值