datai/datai-scenes/datai-scene-salesforce/docs/sessions/20260119-file-hash-comparison.md
Kris 2e6f087732 docs: 完成REQ-010-17和REQ-010-2的文档创建
- 完成REQ-010-17(性能优化和限流处理)的所有6个阶段
  - 创建ADR文档:0026-performance-optimization.md
  - 创建Prompt文档:027-performance-optimization.md
  - 创建会话记录:20260119-performance-optimization.md
  - 创建变更记录:20260119-performance-optimization.md
  - 创建复盘报告:20260119-performance-optimization-retro.md
  - 更新index.md和CHANGELOG.md

- 完成REQ-010-2(基础实体类和Mapper创建)的前3个阶段
  - 更新ADR文档:0011-entity-mapper-create.md
  - 创建Prompt文档:002-entity-mapper-create.md
  - 更新index.md

所有文档均按照SSOT方法论创建,包括需求定义、架构决策、提示词资产化、执行会话、变更记录和闭环复盘。
2026-01-19 10:06:09 +08:00

12 KiB
Raw Blame History

会话记录 - 文件哈希对比和增量检测

现状

当前项目已经完成了文件存储和解压处理REQ-010-7和元数据组件索引和查询REQ-010-11功能需要在此基础上实现文件哈希对比和增量检测功能以提高元数据拉取和部署的性能。

目标

实现文件哈希对比和增量检测功能,支持检测文件变化,只拉取或部署变化的文件。包括:

  1. 文件哈希计算 - 使用 SHA-256 算法计算文件哈希值
  2. 哈希对比 - 对比文件的哈希值,检测文件变化
  3. 增量检测 - 检测文件的新增、修改、删除
  4. 增量拉取 - 只拉取变化的文件
  5. 增量部署 - 只部署变化的文件

输入链接

Prompt 文件

Context Snapshot

记录本次会话参考了哪些 Canvas 节点:

执行过程

1. 创建文件哈希计算服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IFileHashService 服务接口
  • 创建 FileHashServiceImpl 服务实现
  • 使用 MessageDigest.getInstance("SHA-256") 获取 SHA-256 哈希算法实例
  • 使用 BufferedInputStream 流式读取文件,避免一次性加载大文件到内存
  • 使用 8KB 缓冲区,平衡内存使用和读取性能

遇到的问题:

关键决策:

  • 使用流式处理大文件,避免一次性加载大文件到内存
  • 使用 8KB 缓冲区,平衡内存使用和读取性能

2. 创建哈希对比服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IHashComparisonService 服务接口
  • 创建 HashComparisonServiceImpl 服务实现
  • 使用 String.equals() 方法对比哈希值
  • 使用 parallelStream() 并行处理多个文件
  • 使用 ConcurrentHashMap 缓存哈希值,避免重复计算

遇到的问题:

关键决策:

  • 使用并行处理提高对比性能
  • 使用 ConcurrentHashMap 缓存哈希值,避免重复计算

3. 创建增量检测服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IIncrementalDetectionService 服务接口
  • 创建 IncrementalDetectionServiceImpl 服务实现
  • 使用哈希对比检测文件的新增和修改
  • 使用 Java NIO 的 WatchService 监听文件系统事件
  • 创建 ChangeType 枚举定义文件变化类型ADDED、MODIFIED、DELETED
  • 创建 FileChange 实体类记录文件变化信息

遇到的问题:

关键决策:

  • 使用哈希对比检测文件的新增和修改
  • 使用 Java NIO 的 WatchService 监听文件系统事件

4. 创建增量拉取服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IIncrementalRetrieveService 服务接口
  • 创建 IncrementalRetrieveServiceImpl 服务实现
  • 使用增量检测结果构建 package.xml
  • 调用 IMetadataRetrieveService 的 retrieve() 方法,传入 package.xml
  • 使用异步执行,避免阻塞主线程
  • 复用现有的 AsyncConfig 配置类和线程池

遇到的问题:

关键决策:

  • 复用现有的 IMetadataRetrieveService 服务接口
  • 使用异步执行,避免阻塞主线程

5. 创建增量部署服务

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 IIncrementalDeployService 服务接口
  • 创建 IncrementalDeployServiceImpl 服务实现
  • 使用增量检测结果构建 package.xml
  • 调用 IMetadataDeployService 的 deploy() 方法,传入 package.xml
  • 使用异步执行,避免阻塞主线程
  • 复用现有的 AsyncConfig 配置类和线程池

遇到的问题:

关键决策:

  • 复用现有的 IMetadataDeployService 服务接口
  • 使用异步执行,避免阻塞主线程

6. 创建控制器

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 FileHashController 控制器
  • 创建 HashComparisonController 控制器
  • 创建 IncrementalDetectionController 控制器
  • 创建 IncrementalRetrieveController 控制器
  • 创建 IncrementalDeployController 控制器
  • 使用 RESTful API 接口,支持文件哈希计算、哈希对比、增量检测、增量拉取、增量部署

遇到的问题:

关键决策:

  • 使用 RESTful API 接口,保持接口一致性

7. 创建实体类和 Mapper

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 FileChange 实体类
  • 创建 FileChangeMapper 接口
  • 使用 MyBatis Plus 的 BaseMapper 接口

遇到的问题:

关键决策:

  • 使用 MyBatis Plus 的 BaseMapper 接口,简化数据库操作

8. 创建 DTO 类

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 FileHashCalculateRequest、FileHashCalculateResponse
  • 创建 FileHashBatchCalculateRequest、FileHashBatchCalculateResponse
  • 创建 HashComparisonRequest、HashComparisonResponse
  • 创建 ChangedFilesFindRequest、ChangedFilesFindResponse
  • 创建 IncrementalDetectionRequest、IncrementalDetectionResponse
  • 创建 IncrementalRetrieveRequest、IncrementalRetrieveResponse
  • 创建 IncrementalDeployRequest、IncrementalDeployResponse

遇到的问题:

关键决策:

  • 使用 Lombok 的 @Data 注解,简化代码

9. 创建异常类

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 FileHashException 异常类
  • 创建 HashComparisonException 异常类
  • 创建 IncrementalDetectionException 异常类
  • 创建 IncrementalRetrieveException 异常类
  • 创建 IncrementalDeployException 异常类

遇到的问题:

关键决策:

  • 为每个服务创建对应的异常类,提高代码的可维护性

10. 创建单元测试

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 FileHashServiceImplTest 单元测试
  • 创建 HashComparisonServiceImplTest 单元测试
  • 创建 IncrementalDetectionServiceImplTest 单元测试

遇到的问题:

关键决策:

  • 使用 Spring Boot Test 框架,简化测试代码

11. 创建数据库表

执行时间: 2026-01-19 00:00:00

操作:

  • 创建 datai_file_change 表
  • 为 task_id、org_config_id、file_path 字段创建索引

遇到的问题:

关键决策:

  • 为常用查询字段创建索引,提高查询性能

12. 更新配置文件

执行时间: 2026-01-19 00:00:00

操作:

  • 更新 application.yml添加线程池配置
  • 添加 file-hash 配置项

遇到的问题:

关键决策:

  • 复用现有的线程池配置,保持代码一致性

关键产出

记录本次会话的关键产出,例如:

  • 生成的代码文件:
    • IFileHashService 服务接口
    • FileHashServiceImpl 服务实现
    • IHashComparisonService 服务接口
    • HashComparisonServiceImpl 服务实现
    • IIncrementalDetectionService 服务接口
    • IncrementalDetectionServiceImpl 服务实现
    • IIncrementalRetrieveService 服务接口
    • IncrementalRetrieveServiceImpl 服务实现
    • IIncrementalDeployService 服务接口
    • IncrementalDeployServiceImpl 服务实现
    • FileHashController 控制器
    • HashComparisonController 控制器
    • IncrementalDetectionController 控制器
    • IncrementalRetrieveController 控制器
    • IncrementalDeployController 控制器
    • ChangeType 枚举
    • FileChange 实体类
    • FileChangeMapper 接口
    • DTO 类FileHashCalculateRequest、FileHashCalculateResponse 等)
    • 异常类FileHashException、HashComparisonException 等)
    • 单元测试FileHashServiceImplTest、HashComparisonServiceImplTest 等)
  • 更新的文档:
    • index.md
  • 创建的文档:
    • 0021-file-hash-comparison.md
    • 022-file-hash-comparison.md
    • 20260119-file-hash-comparison.md
  • 解决的问题:
    • 文件哈希计算性能问题 - 使用流式处理和并行处理提高性能
    • 哈希对比性能问题 - 使用并行处理提高对比性能
    • 增量检测准确性问题 - 使用哈希对比和文件系统监听器两种方式,全面检测文件变化
  • 达成的共识:
    • 使用 SHA-256 算法计算哈希
    • 使用流式处理大文件,避免一次性加载大文件到内存
    • 使用并行处理提高对比性能
    • 复用现有的服务接口,保持代码一致性

质疑与替代方案

记录在执行过程中提出的质疑和考虑的替代方案:

  • 质疑:是否需要使用文件系统监听器?

    • 替代方案:只使用哈希对比检测文件变化
    • 评估:文件系统监听器可以实时检测文件删除,提高增量检测的准确性,因此采用哈希对比和文件系统监听器两种方式
  • 质疑:是否需要使用异步执行?

    • 替代方案:使用同步执行
    • 评估:增量拉取和部署是耗时操作,使用异步执行可以避免阻塞主线程,提高用户体验,因此采用异步执行
  • 质疑:是否需要创建独立的线程池?

    • 替代方案:复用现有的线程池
    • 评估:复用现有的线程池可以避免资源浪费,保持代码一致性,因此复用现有的线程池

结论

总结本次会话的结果,包括:

  • 完成的工作:
    • 实现了文件哈希计算功能
    • 实现了哈希对比功能
    • 实现了增量检测功能
    • 实现了增量拉取功能
    • 实现了增量部署功能
    • 创建了完整的单元测试
    • 创建了数据库表
    • 更新了配置文件
  • 达成的目标:
    • 所有文件哈希对比和增量检测功能均已实现
    • 代码符合项目编码规范,有清晰的注释
    • 代码结构清晰,易于扩展和维护
    • 代码易于单元测试和集成测试
  • 后续的行动计划:
    • 进行集成测试,确保功能正常
    • 进行性能测试,确保性能满足要求
    • 编写用户文档,说明如何使用文件哈希对比和增量检测功能
  • 需要跟进的事项:
    • 监控文件哈希计算和对比的性能
    • 监控增量拉取和部署的性能
    • 定期清理过期的哈希值,避免占用过多存储空间

Design Update

  • 是否需要更新 Canvas?
  • Authentication.canvas - 需要添加文件哈希对比和增量检测相关的节点
  • 其他 Canvas 文件: 无

复现步骤

提供复现本次会话结果的具体步骤:

  1. 创建 IFileHashService 服务接口和 FileHashServiceImpl 服务实现
  2. 创建 IHashComparisonService 服务接口和 HashComparisonServiceImpl 服务实现
  3. 创建 IIncrementalDetectionService 服务接口和 IncrementalDetectionServiceImpl 服务实现
  4. 创建 IIncrementalRetrieveService 服务接口和 IncrementalRetrieveServiceImpl 服务实现
  5. 创建 IIncrementalDeployService 服务接口和 IncrementalDeployServiceImpl 服务实现
  6. 创建 FileHashController、HashComparisonController、IncrementalDetectionController、IncrementalRetrieveController、IncrementalDeployController 控制器
  7. 创建 ChangeType 枚举和 FileChange 实体类
  8. 创建 FileChangeMapper 接口
  9. 创建 DTO 类和异常类
  10. 创建单元测试
  11. 创建数据库表 datai_file_change
  12. 更新配置文件 application.yml
  13. 运行单元测试,确保所有测试通过
  14. 进行集成测试,确保功能正常
  15. 进行性能测试,确保性能满足要求