标题上方的数据提示

BiliData的WARN系统是在3.25左右开始写的,在V2.1更新时连同“BiliData策略”正式上线。每天早上会自动检测一遍全部条目,其中触发策略的数据条目会被加上这些WARN。

本文主要是介绍了实现这些的数据表设计过程,不包括策略的检测(AutoChecker/AutoDo)过程,可以到我下一篇文章看策略的设计过程。

bd_warn 表

显而易见,就是存储显示在数据页面上方警告信息的表。同一条数据可以有多个WARN。

结构

这是目前的结构。

id是自增ID、SID是对应数据条目Source ID(sources表的自增id)、type对应了前端的展示样式(或者说颜色)、info是展示文本、btn是按钮标题(留空是没按钮)、url是点击按钮后打开的地址(前端会直接赋onclick属性window.open('这个url'))、addtime是添加时间、uid是操作用户(0预留给了autodo)。

这么设计是为了能存储自定义的WARN,比如自己想给某条数据展示特定的信息就可以随意的添加,不过比较浪费空间,因为数据被冻结/降频的提示都是相同的。

bd_auto_tag 表

结构

这个表是为了建立WARN和TAG的关系,例如WARN中的info写了“因为xxx,此数据被降频”、“由于xxx,此数据被xxx”,warn表只是为了提示信息,AutoTag表是为了说明warn对应的操作。在AutoDo类的很多方法中需要查这个表来判断是否被执行某操作(冻结、降频等)

又或者,对一个数据降频后 ,如果触发逻辑需要冻结,先查表获得降频的warnid,删除这个warn、增加冻结warn。

id是自增id、sid是对应source id、type是操作(由包含.的字符串组成 例如data.underclock就是数据.降频)、warnid是对应“warn”表的id、addtime uid同上。

bd_logs 表

日志表,这表不只是为了WARN准备的,而是网站、用户对某数据进行了任何操作都会显示在这里的表,可供前端查阅 目前未设置权限 游客也可以查询日志。

结构

opt是操作,同autotag表的type、opt_text是操作解释(中文)、opt_to是操作对象,不一定是数据(例如对数据id1234操作就是data.id.1234)、ts和uid同上。

在设计表结构时,要充分考虑到以后能够方便的扩展或更新,否则一旦数据多了再迁移会很难受……比如上次我迁移530w数据...