羽羊 2018-01-14 15:25 采纳率: 50%
浏览 1371
已采纳

SAAS系统过十亿的操作日志要如何做列表展示?

刚接手系统的时候,发现过亿的操作日志写在 MySql的一张表中,主要是记录用户登录,做了那些动作(增删改查),随之便做了如下处理(索引、sql均已优化过了):

1、刚开始接手以为查询并不频繁,做了分区,后来发现查询很频繁;

2、对数据做了分表,一个月一个表,发现夸月查询又很频繁,并且每个用户都强烈要求看至今所有的数据;

3、这些查询会集中在某个点并发查询,会产生大量的慢查询导致影响到其他业务,所以对这些查询频繁的用户做了redis数据缓存;

以上做完之后,系统算是稳定下来了,但随着用户的增加单表数据也会随之增加,并且在某个点同样会爆发高并发访问数据库的情况,近期在考虑是否可以用搜索引擎来做这个事情,因为历史数据是不可变的,思路如下,请大神指点:

1、将此模块单独出一个微服务

2、创建总索引

3、每天定时增量索引,并将增量索引数据搬入和业务隔离的日志数据库中对应历史表(同样每个月创建一个表)

4、在查询的时候有多种情况的考虑,对当天的数据进行数据库查询,对历史数据进行搜索引擎索引查询,若夸有当天和历史数据的查询,进行分别查询后结果合并

不知此方法是否可行,因为我在网上找了很久,都并没搜索到使用搜索引擎这种方法,全都是分库分表,或者用hbase等解决方案,所以担心是否会有弊端。

  • 写回答

5条回答 默认 最新

  • ml_dark 2018-01-15 03:21
    关注

    分表分库分区是不可能支撑得主,况且Mysql的分区技术也不好,分表分库查询更狗血
    更改你们的架构,增加日志系统
    使用以下架构:
    消息中间件(kafka集群),所有的日志通过kafka客户端写入kafka集群,mysql不再存储日志。
    新增日志处理模块,如storm,利用storm对kafka消息分区的数据进行消费,并将处理后的结果放到elasticsearch

    新增搜索处理引擎,elasticsearch,利用其本上的api进行搜索

    3台kafka,3台storm,3台elasticsearch,每天处理1个t不是问题(我们实际情况),搜索速度可以达到秒级

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况