groupId:定义当前Maven项目隶属的实际项目,例如org.sonatype.nexus,此id前半部分org.sonatype代表此项目隶属的组织或公司,后部分代表项目的名称,如果此项目多模块话开发的话就子模块可以分为org.sonatype.nexus.plugins和org.sonatype.nexus.utils等。
特别注意的是groupId不应该对应项目隶属的组织或公司,也就是说groupId不能只有org.sonatype而没有nexus。
artifactId是构件ID,该元素定义实际项目中的一个Maven项目或者是子模块,如上面官方约定中所说,构建名称必须小写字母,没有其他的特殊字符,推荐使用“实际项目名称-模块名称”的方式定义,例如:spirng-mvn、spring-core等。
降低系统对clickhouse的查询并发度,是本系统性能改进的核心关键之处;
在javaee系统开发中,为了降低对底层MySQL等数据库的查询压力,通用的做法是增加缓存层;我们在本系统中,依然可以沿用这个方法;
增加缓存层有意义的原因:
大量不同的运营规则,可能都有相同的"原子查询条件",一旦一个规则查询了一次结果,这个结果可以被多个规则计算共用和反复利用
- 比如:大量运营规则,查询时间窗口可能完全落在"远期"区间,只要从clickhouse查询了一次结果,这个结果后面可以反复利用;
- 比如:就算是查询时间窗口是横跨"远近分界点"的,"远期"查询结果也可以反复重用;
使用Redis作为backend:
- 在subtask、job之间,非常容易共享
- 在系统故障或者人为重启后,缓存数据自然存续
规则时间条件,支持依次序发生,不能满足更加细化的需求(如下):
A事件后间隔2个事件发生B,A B 之间不能发生C, A连续3次后发生B,等等。且不支持A事件发生后的5分钟内发生B这种定时条件