项目开发的一些注意点
设计表原则
设计表-----三大范式
第一范式:每一个列只能有一个意思
第二范式:在第一范式基础上,表中某一个列的值,区分一整条数据,要求列可以唯一确定一条数据
第三范式:一张表中只允许描述一个对象 (也有打破第三范式)
简单来说就是表的设计: 1.二维表 2.主键 3.外键
关于分时统计表
某个时间点将满足条件查询数据保存在一张分时统计表,要使用时,直接查询分时统计表即可,隔一段时间,再更新一次分时统计表,适用于排行统计,计数等
涉及大量数据排行,可以采用分时统计表. 为什么?
假设不是分时统计表.如果查询表的数据非常庞大,排行排序order by操作非常耗时
解决办法: 1.使用redis,不建议使用,涉及大量数据也不方法操作
2.分时统计表,隔一段时间进行统计,从实现上更为容易
分时统计表维护要求:
1.一定周期要执行一次
2.进行程序控制执行,人工操作存在一定不确定性,最好让系统自己来
这个时候,可以采用定时器
关于定时器的使用
- 定时器组件:
- jdk Task
- spring Task
- 第三方框架 :Quartz ,第三方框架:elastic-job xxl-job
- 在前后端分离中,定时器实现分时统计表应该写到哪个项目中?
思考:后台项目 还是 api接口项目
答案:一般就是新开一个任务调度项目,专门管理计时
当然后台也行,分时统计表数据也算是数据管理的范畴
api项目后续若是设计集群操作,会出现定时器集群,所以排除
- 操作
1.创建一个包,新建定时任务类
2.类中贴上@Component 被容器管理
3.方法上贴上 @Scheduled定时任务标签 标签参数cron:定时任务计划(指定怎么执行doWork)
4.在主类上 贴注解@ EnableScheduleling 开启定时任务
涉及多条件数据封装
一般有三种
1.map 2.vo对象 3.domain对象
map封装在前端显示一般会很麻烦
vo对象: value Object 数据封装对象
domain对象: 实体对象,一般有一张与一张表对应,涉及分时统计可以采用domain对象映射