DeleteHistoryRange
按时间区间删除历史数据.
法规约束
数据删除是高敏感操作, 多数行业法规 (GMP / FDA / ISO) 要求"永不删除"或"删除必须留审计". 服务端实现可能加额外保护.
签名
Status DeleteHistoryRange(
std::string const& node_id,
int64_t start_ft,
int64_t end_ft,
bool delete_modified_too = false);
| 参数 | 说明 |
|---|---|
node_id | 目标 NodeId |
start_ft | 区间起 (FileTime) |
end_ft | 区间止 (FileTime) |
delete_modified_too | true = 同时删修改记录; false = 只删原始, 保留修改记录 |
用法
constexpr int64_t WIN_EPOCH_OFFSET = 116444736000000000LL;
auto now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();
int64_t now_ft = WIN_EPOCH_OFFSET + now_ns / 100;
// 删除 [30 天前, 7 天前] 的数据
int64_t end_ft = now_ft - 7LL * 24 * 3600 * 10000000;
int64_t start_ft = now_ft - 30LL * 24 * 3600 * 10000000;
auto st = s.DeleteHistoryRange("ns=2;s=Temperature", start_ft, end_ft);
if (st != Status::Good) {
std::cerr << "Delete failed: 0x" << std::hex << static_cast<uint32_t>(st) << "\n";
}
DeleteAtTime / DeleteEvents (后续版本)
按指定时间点列表删 / 按 EventId 列表删事件, 当前 SDK 通过 UpdateHistory(..., HistoryUpdateType::Remove, ...) 实现; 高层 wrapper API 在后续版本提供.
法规约束
- 永不删除 (只允许标记 obsolete)
- 删除必须留审计 (谁删的, 何时, 原因)
服务端实现可能加额外保护. 客户端可能拿到 Status::BadUserAccessDenied.
性能
- 大区间 Delete 服务端可能阻塞数秒到数分钟 (重建索引)
- 长时间操作建议放后台
std::thread, 避免 UI 卡死