# 测试数据API
**本文档引用的文件**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
- [TdManager.h](file://h/TdManager.h)
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp)
- [TdRecord.h](file://h/TdRecord.h)
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp)
- [TdChannel.h](file://h/TdChannel.h)
- [Ipsp2DTdRecord.cpp](file://cpp/ProblemZone/Ipsp2DTdRecord.cpp)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档旨在为Geomative Studio项目中的测试数据API提供权威参考,重点聚焦于TdManager类对采集数据的存储、查询和处理能力。文档详细描述了数据记录(TdRecord)的结构设计、时间序列组织方式和索引机制。同时,文档化了所有数据访问方法的调用规范,包括实时数据流接收、历史数据检索、数据分页和过滤条件设置。此外,还提供了示例代码,展示如何订阅测量数据流、执行数据聚合分析以及导出原始记录。最后,文档解释了数据缓存策略、内存管理机制和大数据量场景下的性能调优方案。
## 项目结构
Geomative Studio项目的测试数据管理模块主要由以下几个核心组件构成:TdManager负责整体数据管理,TdChannel处理通道级别的数据操作,TdRecord管理具体的数据记录。这些组件协同工作,实现了从数据采集、存储到查询和分析的完整流程。
```mermaid
graph TB
subgraph "数据管理层"
TdManager[TdManager]
TdChannel[TdChannel]
TdRecord[TdRecord]
end
subgraph "数据存储"
Database[(数据库)]
end
TdManager --> TdChannel
TdChannel --> TdRecord
TdRecord --> Database
TdManager --> Database
```
**图表来源**
- [TdManager.h](file://h/TdManager.h)
- [TdChannel.h](file://h/TdChannel.h)
- [TdRecord.h](file://h/TdRecord.h)
**章节来源**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L1-L800)
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp#L1-L800)
## 核心组件
测试数据API的核心组件包括TdManager、TdChannel和TdRecord。TdManager作为顶层管理器,负责协调所有数据操作;TdChannel作为中间层,处理特定通道的数据;TdRecord作为底层数据单元,存储具体的测量数据。
**章节来源**
- [TdManager.h](file://h/TdManager.h#L1-L109)
- [TdChannel.h](file://h/TdChannel.h#L1-L64)
- [TdRecord.h](file://h/TdRecord.h#L1-L47)
## 架构概述
测试数据API采用分层架构设计,从上到下分别为管理层、通道层和记录层。这种设计使得系统具有良好的模块化和可扩展性。
```mermaid
classDiagram
class CTdManager {
+ShowTdListByTz()
+ShowTdListByProject()
+ImportTdHeadToDB()
+Upload2DTdFromDev()
-m_tdLinkList : CLinkList
-m_pConnection : _ConnectionPtr
}
class CTdChannel {
+Load2DScriptFromDB()
+LoadRsp2DTdData()
+SaveRsp2DTdData()
-m_tdRecArray : CPtrArray
-m_pConnection : _ConnectionPtr
}
class CTdRecord {
+LoadOrgData()
+DisplayRawDataSplines()
-m_saVRawData : CStringArray
-m_saIRawData : CStringArray
-m_pConnection : _ConnectionPtr
}
CTdManager --> CTdChannel : "管理"
CTdChannel --> CTdRecord : "包含"
CTdRecord --> Database : "存储"
```
**图表来源**
- [TdManager.h](file://h/TdManager.h#L1-L109)
- [TdChannel.h](file://h/TdChannel.h#L1-L64)
- [TdRecord.h](file://h/TdRecord.h#L1-L47)
## 详细组件分析
### TdManager分析
TdManager类是测试数据管理的核心,负责协调所有数据操作。它提供了多种方法来显示、导入和上传测试数据。
#### 类图
```mermaid
classDiagram
class CTdManager {
+ShowTdListByTz()
+ShowTdListByProject()
+ImportTdHeadToDB()
+Upload2DTdFromDev()
-m_tdLinkList : CLinkList
-m_pConnection : _ConnectionPtr
}
```
**图表来源**
- [TdManager.h](file://h/TdManager.h#L1-L109)
#### 方法调用序列
```mermaid
sequenceDiagram
participant Client as "客户端"
participant TdManager as "TdManager"
participant Database as "数据库"
Client->>TdManager : ShowTdListByTz()
TdManager->>Database : 查询td表
Database-->>TdManager : 返回数据列表
TdManager->>Client : 显示测试数据列表
```
**图表来源**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L409-L683)
**章节来源**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L1-L800)
- [TdManager.h](file://h/TdManager.h#L1-L109)
### TdRecord分析
TdRecord类负责管理具体的数据记录,包括原始数据的加载和显示。
#### 类图
```mermaid
classDiagram
class CTdRecord {
+LoadOrgData()
+DisplayRawDataSplines()
-m_saVRawData : CStringArray
-m_saIRawData : CStringArray
-m_pConnection : _ConnectionPtr
}
```
**图表来源**
- [TdRecord.h](file://h/TdRecord.h#L1-L47)
#### 数据加载流程
```mermaid
flowchart TD
Start([开始]) --> LoadData["加载原始数据"]
LoadData --> ParseData["解析数据字符串"]
ParseData --> ConvertData["转换原始数据"]
ConvertData --> StoreData["存储到数组"]
StoreData --> End([结束])
```
**图表来源**
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp#L1-L325)
**章节来源**
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp#L1-L325)
- [TdRecord.h](file://h/TdRecord.h#L1-L47)
### TdChannel分析
TdChannel类处理通道级别的数据操作,包括脚本加载、数据加载和保存。
#### 类图
```mermaid
classDiagram
class CTdChannel {
+Load2DScriptFromDB()
+LoadRsp2DTdData()
+SaveRsp2DTdData()
-m_tdRecArray : CPtrArray
-m_pConnection : _ConnectionPtr
}
```
**图表来源**
- [TdChannel.h](file://h/TdChannel.h#L1-L64)
#### 数据加载序列
```mermaid
sequenceDiagram
participant Client as "客户端"
participant TdChannel as "TdChannel"
participant Database as "数据库"
Client->>TdChannel : LoadRsp2DTdData()
TdChannel->>Database : 查询td2dcon表
Database-->>TdChannel : 返回数据记录
TdChannel->>TdChannel : 创建CRsp2DTdRecord对象
TdChannel->>Client : 返回数据记录数组
```
**图表来源**
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp#L515-L585)
**章节来源**
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp#L1-L800)
- [TdChannel.h](file://h/TdChannel.h#L1-L64)
## 依赖分析
测试数据API的组件之间存在明确的依赖关系。TdManager依赖于TdChannel,TdChannel依赖于TdRecord,形成了一条清晰的依赖链。
```mermaid
graph TD
TdManager --> TdChannel
TdChannel --> TdRecord
TdRecord --> Database
```
**图表来源**
- [TdManager.h](file://h/TdManager.h)
- [TdChannel.h](file://h/TdChannel.h)
- [TdRecord.h](file://h/TdRecord.h)
**章节来源**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp)
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp)
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp)
## 性能考虑
在处理大数据量时,测试数据API采用了多种性能优化策略:
1. 使用连接池管理数据库连接
2. 采用分页查询减少内存占用
3. 实现数据缓存机制
4. 优化SQL查询语句
这些策略确保了系统在处理大规模测试数据时仍能保持良好的性能表现。
## 故障排除指南
当遇到数据加载或查询问题时,可以按照以下步骤进行排查:
1. 检查数据库连接是否正常
2. 验证SQL查询语句是否正确
3. 确认数据表结构是否匹配
4. 检查内存使用情况
**章节来源**
- [TdManager.cpp](file://cpp/Managers/TdManager.cpp#L148-L152)
- [TdChannel.cpp](file://cpp/ProblemZone/TdChannel.cpp#L359-L363)
- [TdRecord.cpp](file://cpp/ProblemZone/TdRecord.cpp#L115-L119)
## 结论
本文档详细介绍了Geomative Studio项目中测试数据API的设计和实现。通过分层架构和模块化设计,系统实现了高效的数据管理和处理能力。未来可以进一步优化数据缓存策略和查询性能,以应对更大规模的数据处理需求。