118 lines
3.1 KiB
Markdown
118 lines
3.1 KiB
Markdown
# 数据采集和检测频率配置说明
|
|
|
|
## 配置参数
|
|
|
|
### 1. 数据采集频率
|
|
```properties
|
|
data.collector.interval=250
|
|
```
|
|
- **用途**: 控制数据采集频率 (collectAircraftData, collectVehicleData, collectUnmannedVehicleData)
|
|
- **频率**: 250ms (每秒4次)
|
|
- **作用**: 从外部API获取最新的位置数据并更新内存缓存
|
|
|
|
### 2. 检测和WebSocket推送频率
|
|
```properties
|
|
data.collector.detection.interval=1000
|
|
```
|
|
- **用途**: 控制检测和WebSocket消息推送频率 (performPeriodicViolationDetection)
|
|
- **频率**: 1000ms (每秒1次)
|
|
- **作用**:
|
|
- 执行电子围栏检测
|
|
- 执行路径冲突检测
|
|
- 执行实时违规检测(超速等)
|
|
- 发送WebSocket位置更新消息
|
|
|
|
## 设计理念
|
|
|
|
### 高频数据采集 + 低频检测处理
|
|
|
|
1. **数据采集层** (250ms)
|
|
- 快速获取最新位置数据
|
|
- 更新内存缓存
|
|
- 持久化到数据库
|
|
- 不执行复杂计算
|
|
|
|
2. **检测处理层** (1000ms)
|
|
- 基于缓存数据执行检测
|
|
- 减少数据库查询压力
|
|
- 避免过度的WebSocket消息推送
|
|
- 提供平衡的响应性和性能
|
|
|
|
## 性能优势
|
|
|
|
### 减少计算负载
|
|
- 围栏检测从每秒4次减少到每秒1次
|
|
- 空间查询(PostGIS)频率降低75%
|
|
- CPU使用率显著降低
|
|
|
|
### 减少网络流量
|
|
- WebSocket消息发送频率合理化
|
|
- 避免前端被大量消息淹没
|
|
- 提升用户体验
|
|
|
|
### 保持数据新鲜度
|
|
- 位置数据仍然是高频更新
|
|
- 检测延迟控制在可接受范围内
|
|
- 关键告警仍能及时响应
|
|
|
|
## 配置建议
|
|
|
|
### 生产环境
|
|
```properties
|
|
# 数据采集 - 较高频率保证数据新鲜度
|
|
data.collector.interval=500
|
|
|
|
# 检测处理 - 适中频率平衡性能和响应性
|
|
data.collector.detection.interval=2000
|
|
```
|
|
|
|
### 开发/测试环境
|
|
```properties
|
|
# 数据采集 - 高频率便于测试
|
|
data.collector.interval=250
|
|
|
|
# 检测处理 - 较高频率便于调试
|
|
data.collector.detection.interval=1000
|
|
```
|
|
|
|
### 高负载环境
|
|
```properties
|
|
# 数据采集 - 适当降低频率
|
|
data.collector.interval=1000
|
|
|
|
# 检测处理 - 降低频率减少负载
|
|
data.collector.detection.interval=3000
|
|
```
|
|
|
|
## 监控指标
|
|
|
|
建议监控以下指标来优化配置:
|
|
|
|
1. **CPU使用率**: 围栏检测和空间查询的CPU消耗
|
|
2. **数据库连接**: PostGIS查询的数据库压力
|
|
3. **WebSocket连接**: 前端消息处理能力
|
|
4. **响应延迟**: 告警响应的及时性
|
|
5. **内存使用**: 活跃对象缓存的内存占用
|
|
|
|
## 代码实现
|
|
|
|
### DataCollectorService.java
|
|
```java
|
|
// 高频数据采集 - 只更新缓存
|
|
@Scheduled(fixedRateString = "${data.collector.interval}")
|
|
public void collectUnmannedVehicleData() {
|
|
// 获取最新数据并更新activeMovingObjectsCache
|
|
// 不执行围栏检测
|
|
}
|
|
|
|
// 低频检测处理 - 执行所有检测逻辑
|
|
@Scheduled(fixedRateString = "${data.collector.detection.interval}")
|
|
public void performPeriodicViolationDetection() {
|
|
// 基于缓存执行围栏检测
|
|
// 执行路径冲突检测
|
|
// 执行实时违规检测
|
|
// 发送WebSocket消息
|
|
}
|
|
```
|
|
|
|
这种设计确保了数据的及时性,同时避免了过度的计算和网络开销。 |