SQL数据库中随时间演化对象的建模与查询方案问询
PostgreSQL中随时间演化对象的建模问题
需求说明
- 对象拥有
name、colour、size等属性,示例结构:
{ "name": "Foo", "colour": "red", "size": 17 }
- 仅通过API接收描述对象演化的差分补丁(可将更新转换为补丁形式),补丁示例:
{ "start": "2025-01-01", "patch": { "path": "/name", "op": "replace", "value": "Bar" } }
- 补丁接收顺序无固定性,可能先收到未来生效的补丁(如2025年),后收到历史生效的补丁(如2023年,当前为2024年),需支持回溯修正对象的历史状态。
- 需支持两类核心查询:
- 查询指定ID对象在某一
keydate的状态; - 查询某一
keydate下满足特定WHERE条件的对象(例如:2024年size>10的所有对象)。
- 查询指定ID对象在某一
候选存储方案对比
方案A:存储对象在每个时间点的完整状态
- ✅ 任意时间点的状态查询效率高,实现直接
- ❌ 收到历史补丁后,需重新计算并更新该时间点之后所有相关的完整状态记录,维护成本高
方案B:存储对象初始/终态+带生效时间的差分补丁
- ❌ 仅能直接查询初始或终态,指定时间点的状态需在应用层通过补丁回溯计算,查询性能差
- ✅ 存储无冗余,新增补丁仅需插入单条记录,维护成本低
疑问
我倾向于方案A,但实现复杂度较高,希望了解:
- 这类问题的通用名称是什么?
- 是否有现成工具/库可以解决该问题?优先支持.NET EF Core,不限技术栈。
内容的提问来源于stack exchange,提问作者koks der drache
相关产品推荐
相关产品推荐

