历史重复实体
作者: stwiname创建于 2025年2月10日更新于 2025年2月10日
□ 背景情况
随着历史索引的制定,我们记录了一个实体在时间/街区的变化。 目前,当您设置一个实体时,它将总是在数据库中用一个独特的“%d”创建新的记录,并关闭先前记录的块范围。
如果想要提升已经存在但实体没有改变的实体,就会产生问题。 尽管实体的字段没有改变,但这仍将遵循同样的程序,如实体已经改变并创造了新的记录。
□ 目标
理想的情况是,当一个实体上升了,但字段没有变化,那么它应该是一个新点,因为实体实际上没有改变。 解决这个问题的办法应比查询现有实体更有效,在处理器中加以比较,并决定是否更新。 它还不应产生超过重复实体的好处的重大业绩和资源影响。
□ 实例
目前的行为
- N区:上层实体A。 这将创建一个新的 db 条目,其中包含实体 A 、 独有的 QQid " 字段和 QQblock range : [n,]
- Block N+M: Upsert实体A'(与A的字段相同). 这将创建一个带有实体 A 字段的新 db 条目,一个独特的 QQid “ 字段和一个 QQblock range ” : [n+m,] 并将从 N 开始的记录的 QQblock range 更新为 [n,n+m] 。
新行为
- N区:上层实体A。 这将创建一个新的 db 条目,其中包含实体 A 、 独有的 QQid " 字段和 QQblock range : [n,]
- Block N+M: Upsert 实体 A'. 检查 A' 的字段是否与 A 相同.
- 如果它们相等:不更改 DB
- 如果两者不同: 这将创建一个带有实体 A 字段的新 db 条目,一个独特的 QQid “ 字段和一个 QQblock range ” : [n+m,] 并将从 N 开始的记录的 QQblock range 更新为 [n,n+m] .
内容来源: subquery/subql