还在用MySQL存日志?

1. 引言

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

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

2. 记录日志的方式

2.1 使用MySQL记录

其架构流程图:

还在用MySQL存日志?
MySQL记录日志架构

在后端的技术栈中,MySQL数据库应该是大家最为熟悉,应用最为广泛。在记录设备的操作日志也可以采用,如何搭建一个MySQL的后端Demo,可以参考之前的文档。搭建SpringBoot和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 日志记录架构
还在用MySQL存日志?
ES记录日志架构

如上就是使用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存储数据的项目越来越多,并且形成中心化存储之后非常的方便,只需在要存储的方法上添加响应的注解就能实现。


原文始发于微信公众号(CodeJames):还在用MySQL存日志?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148244.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!