hyj1991 / easy-monitor

企业级 Node.js 应用性能监控与线上故障定位解决方案
http://www.devtoolx.com
BSD 2-Clause "Simplified" License
3.08k stars 240 forks source link

咨询下manager建表的思想 #133

Closed kekobin closed 4 years ago

kekobin commented 4 years ago

大佬,想问下manager那里建表是基于什么考虑,设计了那么多张同结构的表呢?
1.process_x,x:01-31
2.osinfo_x,x:01-31
2.alarm_x,x:01-31

在process、osinfo、alarm表中各添加一个type去区分不行么?

hyj1991 commented 4 years ago

大佬,想问下manager那里建表是基于什么考虑,设计了那么多张同结构的表呢? 1.process_x,x:01-31 2.osinfo_x,x:01-31 2.alarm_x,x:01-31

在process、osinfo、alarm表中各添加一个type去区分不行么?

XX 代表天数,因为数据库单表存储进程信息的话性能比较差(这部分数据量比较大),所以数据按天切割,而且这样可以定时清理整个表,默认保留 7 天数据

hyj1991 commented 4 years ago

换言之,现在这套模型下,你可以通过修改配置最长保留 30 天内的数据,绝大部分情况下足够了

kekobin commented 4 years ago

换言之,现在这套模型下,你可以通过修改配置最长保留 30 天内的数据,绝大部分情况下足够了

哦,看到做了定时去清理:

await this.logsQuery(`DELETE FROM ${table}`);
await this.logsQuery(`OPTIMIZE TABLE ${table}`);

按天建表感觉优点时比较清晰,操作简单。不过个人感觉如果dba有资源限制,也可以增加时间字段,根据时间的维度在单表中处理。

hyj1991 commented 4 years ago

换言之,现在这套模型下,你可以通过修改配置最长保留 30 天内的数据,绝大部分情况下足够了

哦,看到做了定时去清理:

await this.logsQuery(`DELETE FROM ${table}`);
await this.logsQuery(`OPTIMIZE TABLE ${table}`);

按天建表感觉优点时比较清晰,操作简单。不过个人感觉如果dba有资源限制,也可以增加时间字段,根据时间的维度在单表中处理。

单表清理数据量很大时候会影响写入。按天分割就没这个问题了

hyj1991 commented 4 years ago

这里最佳的方案是 log 类用类似阿里云 table store 的方式存储,但是这里为了开发者部署简单,选用了只依赖 mysql 的方式。

kekobin commented 4 years ago

换言之,现在这套模型下,你可以通过修改配置最长保留 30 天内的数据,绝大部分情况下足够了

哦,看到做了定时去清理:

await this.logsQuery(`DELETE FROM ${table}`);
await this.logsQuery(`OPTIMIZE TABLE ${table}`);

按天建表感觉优点时比较清晰,操作简单。不过个人感觉如果dba有资源限制,也可以增加时间字段,根据时间的维度在单表中处理。

单表清理数据量很大时候会影响写入。按天分割就没这个问题了

也是,忘记考虑这种因素了。线上这类log的量还是挺大的,读写都很频繁。